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
@@ -0,0 +1,10 @@
1
+ export type UseCopyOptions = {
2
+ value: string | (() => string) | (() => Promise<string>);
3
+ successMessage?: string;
4
+ onSuccess?: () => void;
5
+ };
6
+ export declare function useCopy({ value, onSuccess, successMessage }: UseCopyOptions): {
7
+ [x: symbol]: (node: HTMLElement) => () => void;
8
+ readonly isLoading: boolean;
9
+ readonly disabled: boolean;
10
+ };
@@ -0,0 +1,36 @@
1
+ import { createAttachmentKey } from 'svelte/attachments';
2
+ import { on } from 'svelte/events';
3
+ import { toast } from 'svelte-sonner';
4
+ export function useCopy({ value, onSuccess, successMessage = 'Copied' }) {
5
+ let isLoading = $state(false);
6
+ async function loadValue() {
7
+ if (typeof value === 'string')
8
+ return value;
9
+ return value();
10
+ }
11
+ async function onclick(event) {
12
+ event.preventDefault();
13
+ if (isLoading)
14
+ return;
15
+ isLoading = true;
16
+ const value = await loadValue().finally(() => (isLoading = false));
17
+ navigator.clipboard
18
+ .writeText(value)
19
+ .then(() => {
20
+ toast.success(successMessage);
21
+ onSuccess?.();
22
+ })
23
+ .catch((error) => {
24
+ toast.error(error);
25
+ });
26
+ }
27
+ return {
28
+ get isLoading() {
29
+ return isLoading;
30
+ },
31
+ get disabled() {
32
+ return isLoading;
33
+ },
34
+ [createAttachmentKey()]: (node) => on(node, 'click', onclick)
35
+ };
36
+ }
@@ -1,67 +1,97 @@
1
1
  <script lang="ts">
2
- import { createEventDispatcher, onMount } from 'svelte'
3
- import { mdiClose } from '@mdi/js'
4
- import { Icon } from '../icon/index.js'
5
- import { contextContainer } from '../context.js'
2
+ import { XIcon } from '@lucide/svelte'
3
+ import { onMount, type Snippet } from 'svelte'
6
4
 
7
- export let dialog: HTMLDialogElement
8
- export let hideCloseButton = false
9
- let klass = ''
10
- export { klass as class }
11
-
12
- const dispatch = createEventDispatcher<{ open: void; close: void }>()
13
- contextContainer.set('dialog')
5
+ let {
6
+ dialog = $bindable(),
7
+ hideCloseButton = false,
8
+ class: klass = '',
9
+ onOpen,
10
+ onClose,
11
+ activator,
12
+ header,
13
+ footer,
14
+ children
15
+ }: {
16
+ dialog?: HTMLDialogElement
17
+ hideCloseButton?: boolean
18
+ class?: string
19
+ onOpen?: () => void
20
+ onClose?: () => void
21
+ activator?: Snippet<[{ showModal: () => void }]>
22
+ header?: Snippet
23
+ footer?: Snippet
24
+ children: Snippet
25
+ } = $props()
14
26
 
15
27
  onMount(() => {
28
+ if (!dialog) return
16
29
  const inputsSelector = 'input:not([type=hidden], [tabindex="-1"])'
17
30
  const inputs = dialog.querySelectorAll<HTMLInputElement>(inputsSelector)
18
31
  const buttons = dialog.querySelectorAll<HTMLButtonElement>('button')
19
32
 
20
- inputs.forEach((input) => (input.tabIndex = -1))
21
- buttons.forEach((button) => (button.tabIndex = -1))
33
+ inputs.forEach((input) => {
34
+ input.tabIndex = -1
35
+ })
36
+ buttons.forEach((button) => {
37
+ button.tabIndex = -1
38
+ })
22
39
 
23
40
  function onDialogOpen() {
24
- dispatch('open')
25
- inputs.forEach((input) => (input.tabIndex = 0))
26
- buttons.forEach((button) => (button.tabIndex = 0))
41
+ onOpen?.()
42
+ inputs.forEach((input) => {
43
+ input.tabIndex = 0
44
+ })
45
+ buttons.forEach((button) => {
46
+ button.tabIndex = 0
47
+ })
27
48
  if (!inputs[0]) return
28
49
  inputs[0].focus()
29
50
  inputs[0].select()
30
51
  }
31
52
 
32
53
  function onDialogClose() {
33
- dispatch('close')
34
- inputs.forEach((input) => (input.tabIndex = -1))
35
- buttons.forEach((button) => (button.tabIndex = -1))
54
+ onClose?.()
55
+ inputs.forEach((input) => {
56
+ input.tabIndex = -1
57
+ })
58
+ buttons.forEach((button) => {
59
+ button.tabIndex = -1
60
+ })
36
61
  }
37
62
 
38
- const observer = new MutationObserver(() => (dialog.open ? onDialogOpen() : onDialogClose()))
63
+ const observer = new MutationObserver(() => (dialog?.open ? onDialogOpen() : onDialogClose()))
39
64
  observer.observe(dialog, { attributeFilter: ['open'] })
40
65
  return () => observer.disconnect()
41
66
  })
42
67
  </script>
43
68
 
69
+ {@render activator?.({ showModal: () => dialog?.showModal() })}
70
+
44
71
  <dialog bind:this={dialog} class="modal" tabindex="-1">
45
- <div class="modal-box bordered flex flex-col rounded-lg border p-0">
72
+ <div class="bordered modal-box flex flex-col rounded-lg border p-0">
46
73
  <div class="relative flex items-center border-b p-4">
47
74
  <div class="grow">
48
- <slot name="header" />
75
+ {@render header?.()}
49
76
  </div>
50
77
 
51
78
  {#if !hideCloseButton}
52
79
  <button
53
80
  type="button"
54
81
  class="ml btn btn-square btn-ghost btn-sm"
55
- on:click={() => dialog.close()}
82
+ onclick={() => dialog?.close()}
56
83
  >
57
- <Icon path={mdiClose} />
84
+ <XIcon />
58
85
  </button>
59
86
  {/if}
60
87
  </div>
61
88
  <div class="grow overflow-auto p-4 {klass}">
62
- <slot />
89
+ {@render children()}
63
90
  </div>
64
91
 
65
- <slot name="footer" />
92
+ {@render footer?.()}
66
93
  </div>
94
+ <form method="dialog" class="modal-backdrop">
95
+ <button>close</button>
96
+ </form>
67
97
  </dialog>
@@ -1,38 +1,17 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
15
- default: any;
16
- } ? Props extends Record<string, never> ? any : {
17
- children?: any;
18
- } : {});
19
- declare const Dialog: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
- dialog: HTMLDialogElement;
1
+ import { type Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ dialog?: HTMLDialogElement;
21
4
  hideCloseButton?: boolean;
22
5
  class?: string;
23
- }, {
24
- header: {};
25
- default: {};
26
- footer: {};
27
- }>, {
28
- open: CustomEvent<void>;
29
- close: CustomEvent<void>;
30
- } & {
31
- [evt: string]: CustomEvent<any>;
32
- }, {
33
- header: {};
34
- default: {};
35
- footer: {};
36
- }, {}, string>;
37
- type Dialog = InstanceType<typeof Dialog>;
6
+ onOpen?: () => void;
7
+ onClose?: () => void;
8
+ activator?: Snippet<[{
9
+ showModal: () => void;
10
+ }]>;
11
+ header?: Snippet;
12
+ footer?: Snippet;
13
+ children: Snippet;
14
+ };
15
+ declare const Dialog: import("svelte").Component<$$ComponentProps, {}, "dialog">;
16
+ type Dialog = ReturnType<typeof Dialog>;
38
17
  export default Dialog;
@@ -1,2 +1 @@
1
1
  export { default as Dialog } from './Dialog.svelte';
2
- export { default as DialogConfirm } from './DialogConfirm.svelte';
@@ -1,2 +1 @@
1
1
  export { default as Dialog } from './Dialog.svelte';
2
- export { default as DialogConfirm } from './DialogConfirm.svelte';
@@ -1,63 +1,71 @@
1
+ <script lang="ts" module>
2
+ export const transitionX = writable(0)
3
+ </script>
4
+
1
5
  <script lang="ts">
2
- import { onDestroy, onMount } from 'svelte'
6
+ import { type Snippet } from 'svelte'
3
7
  import { fade } from 'svelte/transition'
4
- import { mdiClose } from '@mdi/js'
8
+ import { XIcon } from '@lucide/svelte'
5
9
 
6
10
  import { goto } from '$app/navigation'
7
- import { urlParam } from '../../store/param.js'
8
- import { Icon } from '../icon/index.js'
9
- import { subscibeDrawerLayers } from './layers.js'
10
- import { contextContainer } from '../context.js'
11
+ import { urlParam } from '../../state/param.svelte.ts'
11
12
  import { drawerFly } from './drawerFly.js'
13
+ import { writable } from 'svelte/store'
14
+ import { useLayer } from './useLayer.svelte.js'
12
15
 
13
- export let title = ''
14
- /** Key used in url query params */
15
- export let key: string
16
-
17
- let klass = ''
18
- export { klass as class }
19
- export let maxWidth = '32rem'
20
- export let classHeader = ''
21
- export let classBody = ''
22
- export let duration = 180
23
- export let noOverlay = false
24
- export let transitionX = 0
25
- export let zIndex = 50
16
+ let {
17
+ key,
18
+ title,
19
+ class: klass = '',
20
+ maxWidth = '32rem',
21
+ classHeader = '',
22
+ classBody = '',
23
+ duration = 180,
24
+ noOverlay = false,
25
+ zIndex = 50,
26
+ children
27
+ }: {
28
+ key: string
29
+ title?: string
30
+ class?: string
31
+ maxWidth?: string
32
+ classHeader?: string
33
+ classBody?: string
34
+ duration?: number
35
+ noOverlay?: boolean
36
+ zIndex?: number
37
+ children: Snippet<[{ open: typeof open; close: typeof close }]>
38
+ } = $props()
26
39
 
27
40
  type GotoOptions = Parameters<typeof goto>[1]
28
41
  export function open(value = 1, options: GotoOptions = {}) {
29
- return goto($urlParam.with({ [key]: value }), {
42
+ return goto(urlParam.with({ [key]: value }), {
30
43
  ...options,
31
44
  replaceState: true,
32
45
  noScroll: true
33
46
  })
34
47
  }
48
+
35
49
  export function close(options: GotoOptions = {}) {
36
- return goto($urlParam.without(key), { ...options, replaceState: true, noScroll: true })
50
+ return goto(urlParam.without(key), { ...options, replaceState: true, noScroll: true })
37
51
  }
38
-
39
- const { offset, index, destroy, isActive } = subscibeDrawerLayers(key)
40
- onDestroy(destroy)
41
- contextContainer.set('drawer')
42
- let clientWidth = 0
43
-
44
- onMount(() => {
45
- transitionX = $isActive ? clientWidth : 0
46
- })
52
+ let { offset, index, isActive } = $derived(useLayer(key))
53
+ let clientWidth = $state(0)
47
54
  </script>
48
55
 
49
- {#if !noOverlay && $isActive}
50
- <!-- svelte-ignore a11y-no-static-element-interactions -->
56
+ {#if !noOverlay && isActive}
51
57
  <div
52
- on:click={() => close()}
53
- on:keyup={() => close()}
58
+ role="button"
59
+ onclick={() => close()}
60
+ onkeyup={() => close()}
61
+ tabindex={-1}
54
62
  transition:fade={{ duration }}
55
- style="z-index: {zIndex + $index};"
63
+ style="z-index: {zIndex + index};"
56
64
  class="fixed inset-0 bg-black/15 backdrop-blur-[1.5px] dark:bg-white/15"
57
65
  ></div>
58
66
  {/if}
59
67
 
60
- {#if $isActive}
68
+ {#if isActive}
61
69
  <aside
62
70
  bind:clientWidth
63
71
  transition:drawerFly|local={{
@@ -65,21 +73,21 @@
65
73
  duration,
66
74
  opacity: 1,
67
75
  onTransition(pos) {
68
- transitionX = pos.x
76
+ $transitionX = pos.x
69
77
  }
70
78
  }}
71
79
  style="
72
- z-index: {zIndex + $index};
80
+ z-index: {zIndex + index};
73
81
  max-width: min(100%, {maxWidth});
74
- transform: translateX({-$offset * 4}rem);
82
+ transform: translateX({-offset * 4}rem);
75
83
  transition-duration: {duration}ms;
76
84
  "
77
85
  class:border-l={noOverlay}
78
86
  class="{klass} fixed
79
- bottom-0 right-0 top-0 z-10 flex
87
+ top-0 right-0 bottom-0 z-10 flex
80
88
  w-full flex-col overflow-y-scroll bg-base-100
81
89
  transition-transform
82
- "
90
+ "
83
91
  >
84
92
  <div
85
93
  class="{classHeader}
@@ -88,13 +96,13 @@
88
96
  "
89
97
  >
90
98
  <h2 class="title min-w-0 overflow-hidden">{title}</h2>
91
- <button on:click={() => close()} class="btn btn-square btn-sm">
92
- <Icon path={mdiClose} title="Fermer" />
99
+ <button onclick={() => close()} class="btn btn-square btn-sm">
100
+ <XIcon title="Fermer" />
93
101
  </button>
94
102
  </div>
95
103
 
96
- <div class="{classBody} grow pl-8 pr-4">
97
- <slot {open} {close} />
104
+ <div class="{classBody} grow pr-4 pl-8">
105
+ {@render children({ open, close })}
98
106
  </div>
99
107
  </aside>
100
108
  {/if}
@@ -1,71 +1,16 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
15
- default: any;
16
- } ? Props extends Record<string, never> ? any : {
17
- children?: any;
18
- } : {});
19
- declare const Drawer: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
1
+ export declare const transitionX: import("svelte/store").Writable<number>;
2
+ import { type Snippet } from 'svelte';
3
+ declare const Drawer: import("svelte").Component<{
4
+ key: string;
20
5
  title?: string;
21
- /** Key used in url query params */ key: string;
22
6
  class?: string;
23
7
  maxWidth?: string;
24
8
  classHeader?: string;
25
9
  classBody?: string;
26
10
  duration?: number;
27
11
  noOverlay?: boolean;
28
- transitionX?: number;
29
12
  zIndex?: number;
30
- open?: (value?: number, options?: {
31
- replaceState?: boolean | undefined;
32
- noScroll?: boolean | undefined;
33
- keepFocus?: boolean | undefined;
34
- invalidateAll?: boolean | undefined;
35
- invalidate?: (string | URL | ((url: URL) => boolean))[] | undefined;
36
- state?: App.PageState | undefined;
37
- } | undefined) => Promise<void>;
38
- close?: (options?: {
39
- replaceState?: boolean | undefined;
40
- noScroll?: boolean | undefined;
41
- keepFocus?: boolean | undefined;
42
- invalidateAll?: boolean | undefined;
43
- invalidate?: (string | URL | ((url: URL) => boolean))[] | undefined;
44
- state?: App.PageState | undefined;
45
- } | undefined) => Promise<void>;
46
- }, {
47
- default: {
48
- open: (value?: number, options?: {
49
- replaceState?: boolean | undefined;
50
- noScroll?: boolean | undefined;
51
- keepFocus?: boolean | undefined;
52
- invalidateAll?: boolean | undefined;
53
- invalidate?: (string | URL | ((url: URL) => boolean))[] | undefined;
54
- state?: App.PageState | undefined;
55
- } | undefined) => Promise<void>;
56
- close: (options?: {
57
- replaceState?: boolean | undefined;
58
- noScroll?: boolean | undefined;
59
- keepFocus?: boolean | undefined;
60
- invalidateAll?: boolean | undefined;
61
- invalidate?: (string | URL | ((url: URL) => boolean))[] | undefined;
62
- state?: App.PageState | undefined;
63
- } | undefined) => Promise<void>;
64
- };
65
- }>, {
66
- [evt: string]: CustomEvent<any>;
67
- }, {
68
- default: {
13
+ children: Snippet<[{
69
14
  open: (value?: number, options?: {
70
15
  replaceState?: boolean | undefined;
71
16
  noScroll?: boolean | undefined;
@@ -82,7 +27,7 @@ declare const Drawer: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWit
82
27
  invalidate?: (string | URL | ((url: URL) => boolean))[] | undefined;
83
28
  state?: App.PageState | undefined;
84
29
  } | undefined) => Promise<void>;
85
- };
30
+ }]>;
86
31
  }, {
87
32
  open: (value?: number, options?: {
88
33
  replaceState?: boolean | undefined;
@@ -100,6 +45,6 @@ declare const Drawer: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWit
100
45
  invalidate?: (string | URL | ((url: URL) => boolean))[] | undefined;
101
46
  state?: App.PageState | undefined;
102
47
  } | undefined) => Promise<void>;
103
- }, string>;
104
- type Drawer = InstanceType<typeof Drawer>;
48
+ }, "">;
49
+ type Drawer = ReturnType<typeof Drawer>;
105
50
  export default Drawer;
@@ -13,7 +13,7 @@ export function drawerFly(node, { delay = 0, duration = 400, easing = cubicOut,
13
13
  css: (t, u) => `
14
14
  transform: ${transform} translate(${(1 - t) * xValue}${xUnit}, ${(1 - t) * yValue}${yUnit});
15
15
  opacity: ${target_opacity - od * u}`,
16
- tick: (t, u) => {
16
+ tick: (t, _u) => {
17
17
  onTransition({ x: t * xValue, y: t * yValue });
18
18
  }
19
19
  };
@@ -0,0 +1,5 @@
1
+ export declare function useLayer(key: string): {
2
+ readonly index: number;
3
+ readonly offset: number | false;
4
+ readonly isActive: boolean;
5
+ };
@@ -0,0 +1,33 @@
1
+ import { untrack } from 'svelte';
2
+ import { page } from '$app/state';
3
+ let nbActives = $state(0);
4
+ export function useLayer(key) {
5
+ const index = $derived.by(() => {
6
+ let i = 0;
7
+ for (const k of page.url.searchParams.keys()) {
8
+ if (k === key)
9
+ return i;
10
+ i++;
11
+ }
12
+ return -1;
13
+ });
14
+ const isActive = $derived(index !== -1);
15
+ const offset = $derived(isActive && nbActives - index - 1);
16
+ $effect(() => {
17
+ if (isActive)
18
+ untrack(() => nbActives++);
19
+ else
20
+ untrack(() => (nbActives = Math.max(nbActives - 1, 0)));
21
+ });
22
+ return {
23
+ get index() {
24
+ return index;
25
+ },
26
+ get offset() {
27
+ return offset;
28
+ },
29
+ get isActive() {
30
+ return isActive;
31
+ }
32
+ };
33
+ }
@@ -1,16 +1,8 @@
1
- export * from './card/index.js';
1
+ export * from './button/index.js';
2
+ export * from './dialog/index.js';
2
3
  export * from './drawer/index.js';
3
- export * from './input/index.js';
4
- export * from './form/index.js';
5
4
  export * from './menu/index.js';
5
+ export * from './mode/index.js';
6
+ export * from './pagination/index.js';
6
7
  export * from './range/index.js';
7
8
  export * from './table/index.js';
8
- export * from './tabs/index.js';
9
- export * from './button/index.js';
10
- export * from './dialog/index.js';
11
- export * from './placeholder/index.js';
12
- export * from './icon/index.js';
13
- export * from './login/index.js';
14
- export * from './pagination/index.js';
15
- export * from './mode/index.js';
16
- export * from './badge/index.js';
package/dist/ui/index.js CHANGED
@@ -1,16 +1,8 @@
1
- export * from './card/index.js';
1
+ export * from './button/index.js';
2
+ export * from './dialog/index.js';
2
3
  export * from './drawer/index.js';
3
- export * from './input/index.js';
4
- export * from './form/index.js';
5
4
  export * from './menu/index.js';
5
+ export * from './mode/index.js';
6
+ export * from './pagination/index.js';
6
7
  export * from './range/index.js';
7
8
  export * from './table/index.js';
8
- export * from './tabs/index.js';
9
- export * from './button/index.js';
10
- export * from './dialog/index.js';
11
- export * from './placeholder/index.js';
12
- export * from './icon/index.js';
13
- export * from './login/index.js';
14
- export * from './pagination/index.js';
15
- export * from './mode/index.js';
16
- export * from './badge/index.js';
@@ -1,22 +1,30 @@
1
1
  <script lang="ts">
2
- import { createEventDispatcher } from 'svelte'
3
- import type { TippyProps } from '../../utils/tippy.js'
4
-
2
+ import type { Snippet } from 'svelte'
3
+ import { MediaQuery } from 'svelte/reactivity'
5
4
  import { Dialog } from '../dialog/index.js'
6
5
  import { DropDown } from './index.js'
7
- import { isSmallScreen } from '../../store/index.js'
8
-
9
- export let tippyProps: Partial<TippyProps> = {}
10
- let klass = ''
11
- export { klass as class }
12
-
13
- const dispatch = createEventDispatcher<{ show: void; hide: void }>()
6
+ import type { TippyProps } from '../../utils/tippy.js'
14
7
 
15
- let dropdown: DropDown
16
- let dialog: HTMLDialogElement
8
+ let {
9
+ tippyProps = {},
10
+ class: klass = '',
11
+ onShow,
12
+ onHide,
13
+ children
14
+ }: {
15
+ tippyProps?: Partial<TippyProps>
16
+ class?: string
17
+ onShow?: () => void
18
+ onHide?: () => void
19
+ children: Snippet
20
+ } = $props()
21
+
22
+ const isSmallScreen = new MediaQuery('max-width: 600px;')
23
+ let dropdown: DropDown | undefined = $state()
24
+ let dialog: HTMLDialogElement | undefined = $state()
17
25
 
18
26
  export function show(event: MouseEvent) {
19
- if ($isSmallScreen) {
27
+ if (isSmallScreen.current) {
20
28
  dialog?.showModal()
21
29
  } else {
22
30
  const target = event.target as HTMLElement
@@ -26,29 +34,22 @@
26
34
  })
27
35
  dropdown?.show()
28
36
  }
29
-
30
- dispatch('show')
37
+ onShow?.()
31
38
  }
32
39
 
33
40
  export function hide() {
34
- if ($isSmallScreen) dialog?.close()
41
+ if (isSmallScreen.current) dialog?.close()
35
42
  else dropdown?.hide()
36
- dispatch('hide')
43
+ onHide?.()
37
44
  }
38
45
  </script>
39
46
 
40
- {#if $isSmallScreen}
47
+ {#if isSmallScreen.current}
41
48
  <Dialog bind:dialog class={klass}>
42
- <div slot="header" class="contents">
43
- <slot name="header" />
44
- </div>
45
- <slot />
49
+ {@render children()}
46
50
  </Dialog>
47
51
  {:else}
48
52
  <DropDown class={klass} bind:this={dropdown} tippyProps={{ offset: [0, -5], ...tippyProps }}>
49
- <div class="flex flex-col gap-2 p-1">
50
- <slot name="header" />
51
- <slot />
52
- </div>
53
+ {@render children()}
53
54
  </DropDown>
54
55
  {/if}