@marianmeres/stuic 1.125.0 → 2.0.0-next.2

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 (252) hide show
  1. package/README.md +2 -8
  2. package/dist/_shared.css +2 -0
  3. package/dist/actions/autogrow.svelte.d.ts +6 -0
  4. package/dist/actions/autogrow.svelte.js +19 -0
  5. package/dist/actions/highlight-dragover.svelte.d.ts +7 -0
  6. package/dist/actions/highlight-dragover.svelte.js +38 -0
  7. package/dist/actions/index.d.ts +7 -0
  8. package/dist/actions/index.js +7 -0
  9. package/dist/actions/on-submit-validity-check.svelte.d.ts +15 -0
  10. package/dist/actions/on-submit-validity-check.svelte.js +58 -0
  11. package/dist/actions/tooltip/index.css +34 -0
  12. package/dist/actions/tooltip/tooltip.svelte.d.ts +13 -0
  13. package/dist/actions/tooltip/tooltip.svelte.js +203 -0
  14. package/dist/actions/trim.svelte.d.ts +4 -0
  15. package/dist/actions/trim.svelte.js +17 -0
  16. package/dist/actions/{validate.d.ts → validate.svelte.d.ts} +8 -8
  17. package/dist/actions/validate.svelte.js +90 -0
  18. package/dist/components/AlertConfirmPrompt/AlertConfirmPrompt.svelte +59 -385
  19. package/dist/components/AlertConfirmPrompt/AlertConfirmPrompt.svelte.d.ts +9 -101
  20. package/dist/components/AlertConfirmPrompt/Current.svelte +202 -0
  21. package/dist/components/AlertConfirmPrompt/Current.svelte.d.ts +22 -0
  22. package/dist/components/AlertConfirmPrompt/acp-icons.d.ts +7 -2
  23. package/dist/components/AlertConfirmPrompt/acp-icons.js +8 -8
  24. package/dist/components/AlertConfirmPrompt/alert-confirm-prompt-stack.svelte.d.ts +63 -0
  25. package/dist/components/AlertConfirmPrompt/alert-confirm-prompt-stack.svelte.js +144 -0
  26. package/dist/components/AlertConfirmPrompt/index.d.ts +2 -0
  27. package/dist/components/AlertConfirmPrompt/index.js +2 -0
  28. package/dist/components/AnimatedElipsis/AnimatedEllipsis.svelte +47 -0
  29. package/dist/components/AnimatedElipsis/AnimatedEllipsis.svelte.d.ts +7 -0
  30. package/dist/components/AnimatedElipsis/index.d.ts +1 -0
  31. package/dist/components/AnimatedElipsis/index.js +1 -0
  32. package/dist/components/AppShell/AppShell.svelte +188 -127
  33. package/dist/components/AppShell/AppShell.svelte.d.ts +62 -43
  34. package/dist/components/AppShell/index.d.ts +1 -0
  35. package/dist/components/AppShell/index.js +1 -0
  36. package/dist/components/Backdrop/Backdrop.svelte +149 -49
  37. package/dist/components/Backdrop/Backdrop.svelte.d.ts +22 -37
  38. package/dist/components/Backdrop/index.d.ts +1 -0
  39. package/dist/components/Backdrop/index.js +1 -0
  40. package/dist/components/Button/Button.svelte +122 -146
  41. package/dist/components/Button/Button.svelte.d.ts +22 -80
  42. package/dist/components/Button/index.css +16 -0
  43. package/dist/components/Button/index.d.ts +1 -0
  44. package/dist/components/Button/index.js +1 -0
  45. package/dist/components/ColResize/ColResize.svelte +0 -0
  46. package/dist/components/ColResize/ColResize.svelte.d.ts +26 -0
  47. package/dist/components/ColorScheme/{LocalColorScheme.svelte → ColorSchemeLocal.svelte} +2 -2
  48. package/dist/components/ColorScheme/ColorSchemeLocal.svelte.d.ts +26 -0
  49. package/dist/components/ColorScheme/{SystemAwareColorScheme.svelte → ColorSchemeSystemAware.svelte} +4 -4
  50. package/dist/components/ColorScheme/ColorSchemeSystemAware.svelte.d.ts +26 -0
  51. package/dist/components/ColorScheme/color-scheme.d.ts +26 -8
  52. package/dist/components/ColorScheme/color-scheme.js +40 -16
  53. package/dist/components/ColorScheme/index.d.ts +3 -0
  54. package/dist/components/ColorScheme/index.js +3 -0
  55. package/dist/components/DismissibleMessage/DismissibleMessage.svelte +76 -83
  56. package/dist/components/DismissibleMessage/DismissibleMessage.svelte.d.ts +16 -37
  57. package/dist/components/DismissibleMessage/index.css +13 -0
  58. package/dist/components/DismissibleMessage/index.d.ts +1 -0
  59. package/dist/components/DismissibleMessage/index.js +1 -0
  60. package/dist/components/Drawer/Drawer.svelte +155 -84
  61. package/dist/components/Drawer/Drawer.svelte.d.ts +24 -35
  62. package/dist/components/Drawer/index.d.ts +1 -0
  63. package/dist/components/Drawer/index.js +1 -0
  64. package/dist/components/HoverExpandableWidth/HoverExpandableWidth.svelte +150 -111
  65. package/dist/components/HoverExpandableWidth/HoverExpandableWidth.svelte.d.ts +16 -29
  66. package/dist/components/HoverExpandableWidth/index.d.ts +1 -0
  67. package/dist/components/HoverExpandableWidth/index.js +1 -0
  68. package/dist/components/Input/FieldCheckbox.svelte +174 -132
  69. package/dist/components/Input/FieldCheckbox.svelte.d.ts +28 -64
  70. package/dist/components/Input/FieldFile.svelte +166 -0
  71. package/dist/components/Input/FieldFile.svelte.d.ts +41 -0
  72. package/dist/components/Input/FieldInput.svelte +143 -0
  73. package/dist/components/Input/FieldInput.svelte.d.ts +41 -0
  74. package/dist/components/Input/FieldLikeButton.svelte +206 -0
  75. package/dist/components/Input/FieldLikeButton.svelte.d.ts +41 -0
  76. package/dist/components/Input/FieldOptions.svelte +646 -0
  77. package/dist/components/Input/FieldOptions.svelte.d.ts +58 -0
  78. package/dist/components/Input/FieldRadios.svelte +126 -77
  79. package/dist/components/Input/FieldRadios.svelte.d.ts +23 -61
  80. package/dist/components/Input/FieldSelect.svelte +160 -239
  81. package/dist/components/Input/FieldSelect.svelte.d.ts +40 -88
  82. package/dist/components/Input/FieldSwitch.svelte +132 -0
  83. package/dist/components/Input/FieldSwitch.svelte.d.ts +41 -0
  84. package/dist/components/Input/FieldTextarea.svelte +146 -0
  85. package/dist/components/Input/FieldTextarea.svelte.d.ts +44 -0
  86. package/dist/components/Input/Fieldset.svelte +21 -17
  87. package/dist/components/Input/Fieldset.svelte.d.ts +10 -27
  88. package/dist/components/Input/_internal/FieldRadioInternal.svelte +186 -0
  89. package/dist/components/Input/_internal/FieldRadioInternal.svelte.d.ts +30 -0
  90. package/dist/components/Input/_internal/InputWrap.svelte +216 -0
  91. package/dist/components/Input/_internal/InputWrap.svelte.d.ts +36 -0
  92. package/dist/components/Input/index.css +134 -0
  93. package/dist/components/Input/index.d.ts +11 -0
  94. package/dist/components/Input/index.js +11 -0
  95. package/dist/components/Input/types.d.ts +11 -0
  96. package/dist/components/KbdShortcut/KbdShortcut.svelte +89 -0
  97. package/dist/components/KbdShortcut/KbdShortcut.svelte.d.ts +17 -0
  98. package/dist/components/KbdShortcut/index.d.ts +1 -0
  99. package/dist/components/KbdShortcut/index.js +1 -0
  100. package/dist/components/Modal/Modal.svelte +127 -0
  101. package/dist/components/Modal/Modal.svelte.d.ts +32 -0
  102. package/dist/components/Modal/index.d.ts +1 -0
  103. package/dist/components/Modal/index.js +1 -0
  104. package/dist/components/ModalDialog/ModalDialog.svelte +137 -81
  105. package/dist/components/ModalDialog/ModalDialog.svelte.d.ts +17 -38
  106. package/dist/components/ModalDialog/index.d.ts +1 -0
  107. package/dist/components/ModalDialog/index.js +1 -0
  108. package/dist/components/Notifications/Notifications.svelte +259 -173
  109. package/dist/components/Notifications/Notifications.svelte.d.ts +32 -60
  110. package/dist/components/Notifications/index.css +12 -0
  111. package/dist/components/Notifications/index.d.ts +2 -0
  112. package/dist/components/Notifications/index.js +2 -0
  113. package/dist/components/Notifications/notifications-icons.d.ts +1 -1
  114. package/dist/components/Notifications/notifications-icons.js +4 -4
  115. package/dist/components/Notifications/notifications-stack.svelte.d.ts +89 -0
  116. package/dist/components/Notifications/notifications-stack.svelte.js +161 -0
  117. package/dist/components/Progress/Progress.svelte +26 -0
  118. package/dist/components/Progress/Progress.svelte.d.ts +10 -0
  119. package/dist/components/Progress/_internal/Bar.svelte +31 -0
  120. package/dist/components/Progress/_internal/Bar.svelte.d.ts +10 -0
  121. package/dist/components/Progress/_internal/Circle.svelte +10 -0
  122. package/dist/components/Progress/_internal/Circle.svelte.d.ts +7 -0
  123. package/dist/components/Progress/index.css +7 -0
  124. package/dist/components/Progress/index.d.ts +1 -0
  125. package/dist/components/Progress/index.js +1 -0
  126. package/dist/components/Spinner/Spinner.svelte +52 -37
  127. package/dist/components/Spinner/Spinner.svelte.d.ts +10 -22
  128. package/dist/components/Spinner/index.d.ts +1 -0
  129. package/dist/components/Spinner/index.js +1 -0
  130. package/dist/components/Switch/Switch.svelte +158 -118
  131. package/dist/components/Switch/Switch.svelte.d.ts +25 -66
  132. package/dist/components/Switch/SwitchButton.svelte +131 -0
  133. package/dist/components/Switch/SwitchButton.svelte.d.ts +21 -0
  134. package/dist/components/Switch/index.css +7 -0
  135. package/dist/components/Switch/index.d.ts +2 -0
  136. package/dist/components/Switch/index.js +2 -0
  137. package/dist/components/Thc/Thc.svelte +67 -10
  138. package/dist/components/Thc/Thc.svelte.d.ts +18 -22
  139. package/dist/components/Thc/index.d.ts +1 -0
  140. package/dist/components/Thc/index.js +1 -0
  141. package/dist/components/TwCheck/TwCheck.svelte +34 -0
  142. package/dist/components/TwCheck/TwCheck.svelte.d.ts +10 -0
  143. package/dist/components/TwCheck/index.css +5 -0
  144. package/dist/components/TwCheck/index.d.ts +1 -0
  145. package/dist/components/TwCheck/index.js +1 -0
  146. package/dist/components/X/X.svelte +12 -5
  147. package/dist/components/X/X.svelte.d.ts +6 -18
  148. package/dist/components/X/index.d.ts +1 -0
  149. package/dist/components/X/index.js +1 -0
  150. package/dist/index.css +26 -0
  151. package/dist/index.d.ts +21 -39
  152. package/dist/index.js +23 -54
  153. package/dist/types.d.ts +251 -2
  154. package/dist/types.js +248 -0
  155. package/dist/utils/breakpoint.svelte.d.ts +19 -0
  156. package/dist/utils/breakpoint.svelte.js +42 -0
  157. package/dist/utils/debounce.d.ts +13 -0
  158. package/dist/utils/debounce.js +22 -0
  159. package/dist/utils/device-pointer.svelte.d.ts +11 -0
  160. package/dist/utils/device-pointer.svelte.js +26 -0
  161. package/dist/utils/event-modifiers.d.ts +4 -0
  162. package/dist/utils/event-modifiers.js +29 -0
  163. package/dist/utils/get-id.d.ts +1 -1
  164. package/dist/utils/get-id.js +3 -1
  165. package/dist/utils/index.d.ts +21 -0
  166. package/dist/utils/index.js +21 -0
  167. package/dist/utils/is-browser.d.ts +1 -0
  168. package/dist/utils/is-browser.js +5 -0
  169. package/dist/utils/is-mac.d.ts +1 -0
  170. package/dist/utils/is-mac.js +11 -0
  171. package/dist/utils/maybe-json-parse.d.ts +1 -0
  172. package/dist/utils/maybe-json-parse.js +12 -0
  173. package/dist/utils/maybe-json-stringify.d.ts +1 -0
  174. package/dist/utils/maybe-json-stringify.js +11 -0
  175. package/dist/utils/move-array-item.d.ts +4 -0
  176. package/dist/utils/move-array-item.js +20 -0
  177. package/dist/utils/omit-pick.d.ts +2 -2
  178. package/dist/utils/omit-pick.js +10 -8
  179. package/dist/utils/paint.d.ts +18 -0
  180. package/dist/utils/paint.js +32 -0
  181. package/dist/utils/persistent-state.svelte.d.ts +23 -0
  182. package/dist/utils/persistent-state.svelte.js +48 -0
  183. package/dist/utils/prefers-reduced-motion.svelte.d.ts +2 -0
  184. package/dist/utils/prefers-reduced-motion.svelte.js +4 -0
  185. package/dist/utils/qsa.d.ts +1 -0
  186. package/dist/utils/qsa.js +3 -0
  187. package/dist/utils/sleep.d.ts +28 -0
  188. package/dist/utils/sleep.js +33 -0
  189. package/dist/utils/storage-abstraction.d.ts +35 -0
  190. package/dist/utils/storage-abstraction.js +136 -0
  191. package/dist/utils/str-hash.d.ts +7 -0
  192. package/dist/utils/str-hash.js +35 -0
  193. package/dist/utils/throttle.d.ts +1 -0
  194. package/dist/utils/throttle.js +47 -0
  195. package/dist/utils/to-integer.d.ts +1 -0
  196. package/dist/utils/to-integer.js +11 -0
  197. package/dist/utils/tr.d.ts +5 -0
  198. package/dist/utils/tr.js +13 -0
  199. package/dist/utils/tw-merge.d.ts +10 -0
  200. package/dist/utils/tw-merge.js +16 -0
  201. package/dist/utils/ucfirst.d.ts +1 -0
  202. package/dist/utils/ucfirst.js +6 -0
  203. package/package.json +66 -73
  204. package/dist/actions/autogrow.d.ts +0 -8
  205. package/dist/actions/autogrow.js +0 -22
  206. package/dist/actions/autoscroll.d.ts +0 -21
  207. package/dist/actions/autoscroll.js +0 -60
  208. package/dist/actions/drag-drop.d.ts +0 -28
  209. package/dist/actions/drag-drop.js +0 -152
  210. package/dist/actions/on-outside.d.ts +0 -9
  211. package/dist/actions/on-outside.js +0 -27
  212. package/dist/actions/pre-submit-validity-check.d.ts +0 -3
  213. package/dist/actions/pre-submit-validity-check.js +0 -21
  214. package/dist/actions/tooltip/_make-visible.d.ts +0 -3
  215. package/dist/actions/tooltip/_make-visible.js +0 -25
  216. package/dist/actions/tooltip/_maybe-pick-safe-placement.d.ts +0 -3
  217. package/dist/actions/tooltip/_maybe-pick-safe-placement.js +0 -86
  218. package/dist/actions/tooltip/_set-position.d.ts +0 -2
  219. package/dist/actions/tooltip/_set-position.js +0 -125
  220. package/dist/actions/tooltip/tooltip.d.ts +0 -42
  221. package/dist/actions/tooltip/tooltip.js +0 -299
  222. package/dist/actions/trim.d.ts +0 -4
  223. package/dist/actions/trim.js +0 -18
  224. package/dist/actions/validate.js +0 -80
  225. package/dist/components/AlertConfirmPrompt/alert-confirm-prompt.d.ts +0 -58
  226. package/dist/components/AlertConfirmPrompt/alert-confirm-prompt.js +0 -141
  227. package/dist/components/ColorScheme/LocalColorScheme.svelte.d.ts +0 -25
  228. package/dist/components/ColorScheme/SystemAwareColorScheme.svelte.d.ts +0 -25
  229. package/dist/components/Input/Field.svelte +0 -315
  230. package/dist/components/Input/Field.svelte.d.ts +0 -102
  231. package/dist/components/Input/PinInput.svelte +0 -151
  232. package/dist/components/Input/PinInput.svelte.d.ts +0 -51
  233. package/dist/components/Input/XFieldRadioInternal.svelte +0 -143
  234. package/dist/components/Input/XFieldRadioInternal.svelte.d.ts +0 -45
  235. package/dist/components/Notifications/notifications.d.ts +0 -78
  236. package/dist/components/Notifications/notifications.js +0 -215
  237. package/dist/components/Popover/Popover.svelte +0 -24
  238. package/dist/components/Popover/Popover.svelte.d.ts +0 -22
  239. package/dist/components/Spinner/Spinner.v5.svelte +0 -114
  240. package/dist/components/Spinner/Spinner.v5.svelte.d.ts +0 -16
  241. package/dist/utils/calculate-alignment.d.ts +0 -68
  242. package/dist/utils/calculate-alignment.js +0 -183
  243. package/dist/utils/device-pointer.d.ts +0 -5
  244. package/dist/utils/device-pointer.js +0 -10
  245. package/dist/utils/prefers-reduced-motion.d.ts +0 -6
  246. package/dist/utils/prefers-reduced-motion.js +0 -26
  247. package/dist/utils/tw-merge2.d.ts +0 -3
  248. package/dist/utils/tw-merge2.js +0 -9
  249. package/dist/utils/tw-types.d.ts +0 -1
  250. package/dist/utils/window-size.d.ts +0 -22
  251. package/dist/utils/window-size.js +0 -35
  252. /package/dist/{utils/tw-types.js → components/Input/types.js} +0 -0
@@ -1,94 +1,150 @@
1
- <script context="module">import { createEventDispatcher, onMount } from "svelte";
2
- import { focusTrap } from "../../actions/focus-trap.js";
3
- import { writable } from "svelte/store";
4
- </script>
1
+ <script lang="ts">
2
+ import { onClickOutside } from "runed";
3
+ import { onMount, tick, type Snippet } from "svelte";
4
+ import { focusTrap } from "../../actions/focus-trap.js";
5
+ import { stopPropagation } from "../../utils/event-modifiers.js";
6
+ import { twMerge } from "../../utils/tw-merge.js";
7
+ import { createClog } from "@marianmeres/clog";
8
+ import { waitForNextRepaint } from "../../utils/paint.js";
9
+
10
+ const clog = createClog("ModalDialog").debug;
11
+
12
+ interface Props {
13
+ // idea is, that the `dialog` element, should not be needed to customize
14
+ classDialog?: string;
15
+ class?: string;
16
+ children: Snippet;
17
+ noClickOutsideClose?: boolean;
18
+ noEscapeClose?: boolean;
19
+ // optional ui hint
20
+ type?: string;
21
+ // pre close hooks... escape is considered special close strategy which may be
22
+ // handled separately
23
+ preEscapeClose?: () => any;
24
+ preClose?: () => any;
25
+ }
26
+
27
+ let {
28
+ class: classProp,
29
+ classDialog,
30
+ children,
31
+ noClickOutsideClose,
32
+ type,
33
+ noEscapeClose,
34
+ preEscapeClose,
35
+ preClose,
36
+ }: Props = $props();
5
37
 
6
- <script>const dispatch = createEventDispatcher();
7
- export let openOnMount = false;
8
- export let closeOnOutsideClick = true;
9
- export let closeOnEscape = true;
10
- let _class = "";
11
- export { _class as class };
12
- export let style = "";
13
- export let backdropFadeIn = "normal";
14
- let _el;
15
- let _open = !!openOnMount;
16
- export function toggle() {
17
- _open = !_open;
18
- }
19
- export function open() {
20
- _open = true;
21
- }
22
- export function close() {
23
- _open = false;
24
- }
25
- $:
26
- _open ? _el?.showModal() : _el?.close();
27
- $:
28
- dispatch(_open ? "open" : "close");
29
- export const isOpen = writable(_open);
30
- $:
31
- $isOpen = _open;
32
- onMount(() => {
33
- const _unsubs = [];
34
- const _handleClose = (e) => close();
35
- _el.addEventListener("close", _handleClose);
36
- _unsubs.push(() => _el.removeEventListener("close", _handleClose));
37
- const _handleCancel = (e) => e.preventDefault();
38
- _el.addEventListener("cancel", _handleCancel);
39
- _unsubs.push(() => _el.removeEventListener("cancel", _handleCancel));
40
- const _handleKeyDown = (e) => {
41
- if (_open && closeOnEscape && e.key === "Escape") {
42
- e.stopPropagation();
43
- close();
44
- }
45
- };
46
- document.addEventListener("keydown", _handleKeyDown, true);
47
- _unsubs.push(() => document.removeEventListener("keydown", _handleKeyDown, true));
48
- const _handleClick = (e) => {
49
- if (_open) {
50
- e.stopPropagation();
51
- if (closeOnOutsideClick && e.target === _el)
52
- return close();
53
- }
54
- };
55
- _el.addEventListener("click", _handleClick);
56
- _unsubs.push(() => _el.removeEventListener("click", _handleClick));
57
- return () => _unsubs.forEach((fn) => fn());
58
- });
38
+ let visible = $state(false);
39
+ let dialog = $state<HTMLDialogElement>()!;
40
+ let box = $state<HTMLDivElement>()!;
41
+ let _opener: undefined | null | HTMLElement = $state();
42
+
43
+ export function open(openerOrEvent?: null | HTMLElement | MouseEvent) {
44
+ visible = true;
45
+ setOpener(
46
+ (openerOrEvent as any)?.currentTarget ?? openerOrEvent ?? document.activeElement
47
+ );
48
+ // clog("will showModal");
49
+ // dialog must be rendered in the DOM before it can be opened...
50
+ waitForNextRepaint().then(() => {
51
+ // clog("dialog.showModal()");
52
+ dialog.showModal();
53
+ });
54
+ }
55
+
56
+ export function close() {
57
+ (async () => {
58
+ const allowed = await preClose?.();
59
+ // explicit false prevents close
60
+ if (allowed !== false) {
61
+ // clog("dialog.close()");
62
+ dialog?.close();
63
+ visible = false;
64
+ _opener?.focus();
65
+ _opener = null;
66
+ }
67
+ })();
68
+ }
69
+
70
+ export function setOpener(opener?: null | HTMLElement) {
71
+ _opener = opener;
72
+ }
73
+
74
+ onClickOutside(
75
+ () => box,
76
+ () => !noClickOutsideClose && close()
77
+ );
78
+
79
+ // $inspect("Modal dialog mounted, is visible:", visible).with(clog);
59
80
  </script>
60
81
 
61
- <!--
62
- NOTE: the below padding:0 is important because of otherwise not-trivial onOutsideClick implementation
63
- -->
64
- <dialog
65
- bind:this={_el}
66
- use:focusTrap={{ enabled: _open }}
67
- style="{style ? `${style}; ` : ''}padding: 0 !important;"
68
- class={`${_class} ${backdropFadeIn || ''}`}
69
- >
70
- {#if _open}
82
+ <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
83
+ {#if visible}
84
+ <dialog
85
+ bind:this={dialog}
86
+ use:focusTrap
87
+ data-type={type}
88
+ class={twMerge(
89
+ "stuic-modal-dialog",
90
+ "fixed inset-4 m-auto size-auto",
91
+ "flex justify-center items-center",
92
+ "focus:outline-none focus-visible:outline-none",
93
+ "bg-transparent backdrop:bg-black/40",
94
+ classDialog
95
+ )}
96
+ onkeydown={async (e) => {
97
+ if (e.key === "Escape" && visible) {
98
+ clog("on Escape keydown, preventing default and stopping propagation");
99
+
100
+ // do not allow built-in close on escape
101
+ e.preventDefault();
102
+ // do not bubble
103
+ e.stopPropagation();
104
+ // ???: do not allow additional onkeydown listeners on this dialog (should there be any...)
105
+ e.stopImmediatePropagation();
106
+
107
+ if (!noEscapeClose) {
108
+ // explicit false prevents close
109
+ let allowed = await preEscapeClose?.();
110
+ if (allowed !== false) {
111
+ // `preClose` will be handled next
112
+ close();
113
+ }
114
+ }
115
+ }
116
+ }}
117
+ >
118
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
119
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
71
120
  <!--
72
- wrapping into relative full h/w div so that the inner click will never trigger close
73
- (this could be achieved in many different ways, but this seems to be the most
74
- pragmatic when taking into account the consumer usage)
121
+ The `onpointerdown={stopPropagation()}` is for cases where we have
122
+ multiple dialogs on top of each other (which is questionable by itself) and we
123
+ do not want close the below ones just by interacting (clicking) on the top one
124
+ (the `onClickOutside` uses `onpointerdown` with potential `onclick`)
75
125
  -->
76
- <div class="relative w-full h-full">
77
- <slot />
126
+ <div
127
+ bind:this={box}
128
+ onpointerdown={stopPropagation()}
129
+ onclick={stopPropagation()}
130
+ data-type={type}
131
+ class={twMerge(
132
+ `box relative size-full overflow-auto
133
+ text-black dark:text-white bg-white dark:bg-neutral-800`,
134
+ classProp
135
+ )}
136
+ >
137
+ {@render children?.()}
78
138
  </div>
79
- {/if}
80
- </dialog>
139
+ </dialog>
140
+ {/if}
81
141
 
82
142
  <style>
83
- dialog.normal[open]::backdrop {
84
- animation: fade 0.15s ease-out;
85
- }
86
-
87
- dialog.slow[open]::backdrop {
88
- animation: fade 0.5s ease-out;
143
+ dialog[open]::backdrop {
144
+ animation: fadeIn 0.15s ease-out;
89
145
  }
90
146
 
91
- @keyframes fade {
147
+ @keyframes fadeIn {
92
148
  from {
93
149
  opacity: 0;
94
150
  }
@@ -1,39 +1,18 @@
1
- import { SvelteComponent } from "svelte";
2
- import { type Writable } from 'svelte/store';
3
- export interface ModalDialogAPI {
4
- open: () => void;
5
- close: () => void;
6
- isOpen: Writable<boolean>;
7
- }
8
- declare const __propDef: {
9
- props: {
10
- openOnMount?: boolean;
11
- closeOnOutsideClick?: boolean;
12
- closeOnEscape?: boolean;
13
- class?: string;
14
- style?: string;
15
- backdropFadeIn?: false | "normal" | "slow";
16
- toggle?: () => void;
17
- open?: () => void;
18
- close?: () => void;
19
- isOpen?: Writable<boolean>;
20
- };
21
- events: {
22
- [evt: string]: CustomEvent<any>;
23
- };
24
- slots: {
25
- default: {};
26
- };
27
- exports?: {} | undefined;
28
- bindings?: string | undefined;
29
- };
30
- export type ModalDialogProps = typeof __propDef.props;
31
- export type ModalDialogEvents = typeof __propDef.events;
32
- export type ModalDialogSlots = typeof __propDef.slots;
33
- export default class ModalDialog extends SvelteComponent<ModalDialogProps, ModalDialogEvents, ModalDialogSlots> {
34
- get toggle(): () => void;
35
- get open(): () => void;
36
- get close(): () => void;
37
- get isOpen(): Writable<boolean>;
1
+ import { type Snippet } from "svelte";
2
+ interface Props {
3
+ classDialog?: string;
4
+ class?: string;
5
+ children: Snippet;
6
+ noClickOutsideClose?: boolean;
7
+ noEscapeClose?: boolean;
8
+ type?: string;
9
+ preEscapeClose?: () => any;
10
+ preClose?: () => any;
38
11
  }
39
- export {};
12
+ declare const ModalDialog: import("svelte").Component<Props, {
13
+ open: (openerOrEvent?: null | HTMLElement | MouseEvent) => void;
14
+ close: () => void;
15
+ setOpener: (opener?: null | HTMLElement) => void;
16
+ }, "">;
17
+ type ModalDialog = ReturnType<typeof ModalDialog>;
18
+ export default ModalDialog;
@@ -0,0 +1 @@
1
+ export { default as ModalDialog } from "./ModalDialog.svelte";
@@ -0,0 +1 @@
1
+ export { default as ModalDialog } from "./ModalDialog.svelte";