@marianmeres/stuic 1.126.0 → 2.0.0-next.3

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 (250) 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 +56 -41
  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/drag-drop.d.ts +0 -28
  207. package/dist/actions/drag-drop.js +0 -152
  208. package/dist/actions/on-outside.d.ts +0 -9
  209. package/dist/actions/on-outside.js +0 -27
  210. package/dist/actions/pre-submit-validity-check.d.ts +0 -3
  211. package/dist/actions/pre-submit-validity-check.js +0 -21
  212. package/dist/actions/tooltip/_make-visible.d.ts +0 -3
  213. package/dist/actions/tooltip/_make-visible.js +0 -25
  214. package/dist/actions/tooltip/_maybe-pick-safe-placement.d.ts +0 -3
  215. package/dist/actions/tooltip/_maybe-pick-safe-placement.js +0 -86
  216. package/dist/actions/tooltip/_set-position.d.ts +0 -2
  217. package/dist/actions/tooltip/_set-position.js +0 -125
  218. package/dist/actions/tooltip/tooltip.d.ts +0 -42
  219. package/dist/actions/tooltip/tooltip.js +0 -299
  220. package/dist/actions/trim.d.ts +0 -4
  221. package/dist/actions/trim.js +0 -18
  222. package/dist/actions/validate.js +0 -80
  223. package/dist/components/AlertConfirmPrompt/alert-confirm-prompt.d.ts +0 -58
  224. package/dist/components/AlertConfirmPrompt/alert-confirm-prompt.js +0 -141
  225. package/dist/components/ColorScheme/LocalColorScheme.svelte.d.ts +0 -25
  226. package/dist/components/ColorScheme/SystemAwareColorScheme.svelte.d.ts +0 -25
  227. package/dist/components/Input/Field.svelte +0 -315
  228. package/dist/components/Input/Field.svelte.d.ts +0 -102
  229. package/dist/components/Input/PinInput.svelte +0 -151
  230. package/dist/components/Input/PinInput.svelte.d.ts +0 -51
  231. package/dist/components/Input/XFieldRadioInternal.svelte +0 -143
  232. package/dist/components/Input/XFieldRadioInternal.svelte.d.ts +0 -45
  233. package/dist/components/Notifications/notifications.d.ts +0 -78
  234. package/dist/components/Notifications/notifications.js +0 -215
  235. package/dist/components/Popover/Popover.svelte +0 -24
  236. package/dist/components/Popover/Popover.svelte.d.ts +0 -22
  237. package/dist/components/Spinner/Spinner.v5.svelte +0 -114
  238. package/dist/components/Spinner/Spinner.v5.svelte.d.ts +0 -16
  239. package/dist/utils/calculate-alignment.d.ts +0 -68
  240. package/dist/utils/calculate-alignment.js +0 -183
  241. package/dist/utils/device-pointer.d.ts +0 -5
  242. package/dist/utils/device-pointer.js +0 -10
  243. package/dist/utils/prefers-reduced-motion.d.ts +0 -6
  244. package/dist/utils/prefers-reduced-motion.js +0 -26
  245. package/dist/utils/tw-merge2.d.ts +0 -3
  246. package/dist/utils/tw-merge2.js +0 -9
  247. package/dist/utils/tw-types.d.ts +0 -1
  248. package/dist/utils/window-size.d.ts +0 -22
  249. package/dist/utils/window-size.js +0 -35
  250. /package/dist/{utils/tw-types.js → components/Input/types.js} +0 -0
@@ -1,28 +0,0 @@
1
- import type { Writable } from 'svelte/store';
2
- export type EffectAllowed = 'copy' | 'none' | 'copyLink' | 'copyMove' | 'link' | 'linkMove' | 'move' | 'all' | 'uninitialized';
3
- export type DropEffect = 'copy' | 'none' | 'link' | 'move';
4
- export interface DraggableOptions {
5
- id?: string;
6
- enabled?: boolean;
7
- payload?: any;
8
- effectAllowed?: EffectAllowed;
9
- isDragged?: Writable<string | null>;
10
- logger?: (...args: any[]) => void;
11
- }
12
- export declare const draggable: (node: HTMLElement, options: DraggableOptions) => {
13
- update(newOptions?: DraggableOptions): void;
14
- destroy(): void;
15
- };
16
- export interface DroppableOptions {
17
- id?: string;
18
- enabled?: boolean;
19
- onDrop: (data: any, e: DragEvent) => void;
20
- onDragover?: (e: DragEvent) => void;
21
- dropEffect?: DropEffect;
22
- isDraggedOver?: Writable<string | null>;
23
- logger?: (...args: any[]) => void;
24
- }
25
- export declare const droppable: (node: HTMLElement, options: DroppableOptions) => {
26
- update(newOptions?: DroppableOptions): void;
27
- destroy(): void;
28
- };
@@ -1,152 +0,0 @@
1
- import { createClog } from '@marianmeres/clog';
2
- const clog = createClog('drag-drop');
3
- const _isFn = (v) => typeof v === 'function';
4
- export const draggable = (node, options) => {
5
- const DEFAULT_OPTIONS = {
6
- id: 'draggable-' + Math.random().toString(36).slice(2),
7
- enabled: true,
8
- effectAllowed: 'all',
9
- };
10
- options = { ...DEFAULT_OPTIONS, ...options };
11
- const _log = (...args) => options.logger?.apply(null, args);
12
- const _payload = () => (_isFn(options?.payload) ? options.payload() : options.payload);
13
- //
14
- const onDragstart = (e) => {
15
- _log('onDragstart', e.dataTransfer);
16
- const pld = _payload();
17
- if (pld !== undefined) {
18
- // add "stuic" as a custom data format
19
- e.dataTransfer?.setData('stuic', JSON.stringify({ id: options.id, payload: pld }));
20
- e.dataTransfer.effectAllowed = options.effectAllowed;
21
- }
22
- // options?.isDragged?.update((old) => ({ ...old, [options.id!]: true }));
23
- options?.isDragged?.set(options.id);
24
- node.setAttribute('aria-grabbed', 'true');
25
- };
26
- const onDrag = (e) => {
27
- // _log('onDrag', e.dataTransfer); // too much spam
28
- // const el: HTMLElement = e.currentTarget as HTMLElement;
29
- // clog(el);
30
- // ?
31
- };
32
- const onDragend = (e) => {
33
- _log('onDragend', e.dataTransfer);
34
- // e.preventDefault();
35
- // options?.isDragged?.update((old) => ({ ...old, [options.id!]: false }));
36
- options?.isDragged?.set(null);
37
- node.setAttribute('aria-grabbed', 'false');
38
- };
39
- const _removeListeners = () => {
40
- node.removeEventListener('dragstart', onDragstart);
41
- node.removeEventListener('drag', onDrag);
42
- node.removeEventListener('dragend', onDragend);
43
- };
44
- // initalizer
45
- const _init = (_opts) => {
46
- _log('_init', _opts);
47
- _removeListeners();
48
- options?.isDragged?.set(null);
49
- if (_opts.enabled) {
50
- node.setAttribute('draggable', 'true');
51
- node.setAttribute('aria-grabbed', 'false');
52
- node.addEventListener('dragstart', onDragstart);
53
- node.addEventListener('drag', onDrag);
54
- node.addEventListener('dragend', onDragend);
55
- }
56
- else {
57
- node.removeAttribute('draggable');
58
- }
59
- };
60
- // init now
61
- _init(options);
62
- return {
63
- update(newOptions) {
64
- options = { ...options, ...(newOptions || {}) };
65
- // reinit maybe
66
- _init(options);
67
- },
68
- destroy() {
69
- _removeListeners();
70
- },
71
- };
72
- };
73
- export const droppable = (node, options) => {
74
- const DEFAULT_OPTIONS = {
75
- id: 'droppable-' + Math.random().toString(36).slice(2),
76
- enabled: true,
77
- dropEffect: 'move',
78
- };
79
- options = { ...DEFAULT_OPTIONS, ...options };
80
- const _log = (...args) => options.logger?.apply(null, args);
81
- //
82
- const onDragenter = (e) => {
83
- // e.preventDefault();
84
- _log('onDragenter', e.dataTransfer);
85
- e.dataTransfer.dropEffect = options.dropEffect;
86
- // options?.isDraggedOver?.update((old) => ({ ...old, [options.id!]: true }));
87
- options?.isDraggedOver?.set(options.id);
88
- };
89
- const onDragover = (e) => {
90
- // _log('onDragover', e.dataTransfer); // too much spam
91
- // this is important, otherwise onDrop will no be fired
92
- // (so we're preventing default not to prevent future onDrop)
93
- e.preventDefault();
94
- options?.isDraggedOver?.set(options.id);
95
- if (_isFn(options.onDragover)) {
96
- return options.onDragover(e);
97
- }
98
- };
99
- const onDragleave = (e) => {
100
- _log('onDragleave', e.dataTransfer);
101
- // e.preventDefault();
102
- // options?.isDraggedOver?.update((old) => ({ ...old, [options.id!]: false }));
103
- options?.isDraggedOver?.set(null);
104
- };
105
- const onDrop = (e) => {
106
- _log('onDrop', e.dataTransfer);
107
- e.preventDefault();
108
- const target = e.target;
109
- e.dataTransfer.dropEffect = options.dropEffect;
110
- // options?.isDraggedOver?.update((old) => ({ ...old, [options.id!]: false }));
111
- options?.isDraggedOver?.set(null);
112
- if (_isFn(options.onDrop)) {
113
- let stuicData = e.dataTransfer?.getData('stuic');
114
- // prettier-ignore
115
- try {
116
- stuicData = JSON.parse(stuicData);
117
- }
118
- catch (e) { }
119
- return options.onDrop(stuicData, e);
120
- }
121
- };
122
- const _removeListeners = () => {
123
- node.removeEventListener('dragenter', onDragenter);
124
- node.removeEventListener('dragover', onDragover);
125
- node.removeEventListener('dragleave', onDragleave);
126
- node.removeEventListener('drop', onDrop);
127
- };
128
- //
129
- const _init = (_opts) => {
130
- _log('_init', _opts);
131
- _removeListeners();
132
- options?.isDraggedOver?.set(null);
133
- if (_opts.enabled) {
134
- node.addEventListener('dragenter', onDragenter);
135
- node.addEventListener('dragover', onDragover);
136
- node.addEventListener('dragleave', onDragleave);
137
- node.addEventListener('drop', onDrop);
138
- }
139
- };
140
- // init now
141
- _init(options);
142
- return {
143
- update(newOptions) {
144
- options = { ...options, ...(newOptions || {}) };
145
- // reinit maybe
146
- _init(options);
147
- },
148
- destroy() {
149
- _removeListeners();
150
- },
151
- };
152
- };
@@ -1,9 +0,0 @@
1
- type Handler = (el: Node) => void;
2
- export interface OnOutsideOptions {
3
- handler?: Handler | null;
4
- events?: string[];
5
- }
6
- export declare const onOutside: (node: HTMLElement, options?: OnOutsideOptions) => {
7
- destroy(): void;
8
- };
9
- export {};
@@ -1,27 +0,0 @@
1
- // will notify and (optionally) execute on outside click/focusin/...
2
- export const onOutside = (node, options) => {
3
- const DEFAULT_OPTIONS = {
4
- handler: null,
5
- events: ['click', 'focusin'],
6
- };
7
- const { handler, events } = { ...DEFAULT_OPTIONS, ...(options || {}) };
8
- const listener = (event) => {
9
- if (!event?.target)
10
- return;
11
- if (node && !node.contains(event.target) && !event.defaultPrevented) {
12
- node.dispatchEvent(new CustomEvent('outside', { detail: event.target }));
13
- if (typeof handler === 'function')
14
- handler(event.target);
15
- }
16
- };
17
- events?.forEach((eventName) => {
18
- document.addEventListener(eventName, listener, true);
19
- });
20
- return {
21
- destroy() {
22
- events?.forEach((eventName) => {
23
- document.removeEventListener(eventName, listener, true);
24
- });
25
- },
26
- };
27
- };
@@ -1,3 +0,0 @@
1
- export declare const preSubmitValidityCheck: (node: HTMLFormElement) => {
2
- destroy(): void;
3
- };
@@ -1,21 +0,0 @@
1
- // this smells like a hack...
2
- // The problem: custom validity checks via `validate` action are registered on "input" or "change" events.
3
- // When a form is submitted without touching those custom validated elements, those will not be
4
- // validity-checked which is not desired... I'm not able to come up with better solution
5
- // than to manually trigger events which will then trigger the custom validation...
6
- export const preSubmitValidityCheck = (node) => {
7
- const onSubmit = () => {
8
- for (let i = 0; i < node.elements?.length; i++) {
9
- let el = node.elements[i];
10
- el.dispatchEvent(new Event('input', { bubbles: true }));
11
- el.dispatchEvent(new Event('change', { bubbles: true }));
12
- typeof el.checkValidity === 'function' && !el.checkValidity();
13
- }
14
- };
15
- node.addEventListener('submit', onSubmit, true);
16
- return {
17
- destroy() {
18
- node.removeEventListener('submit', onSubmit, true);
19
- },
20
- };
21
- };
@@ -1,3 +0,0 @@
1
- import { type TooltipLogger } from './tooltip.js';
2
- export declare const _makeInVisible: (div: HTMLElement | null, arrow: HTMLElement | null, log: TooltipLogger) => void;
3
- export declare const _makeVisible: (div: HTMLElement | null, arrow: HTMLElement | null, log: TooltipLogger) => void;
@@ -1,25 +0,0 @@
1
- import { _TRANSITION_OPACITY_DUR } from './tooltip.js';
2
- export const _makeInVisible = (div, arrow, log) => {
3
- (div || arrow) && log('_makeInVisible');
4
- div && (div.style.opacity = '0');
5
- arrow && (arrow.style.opacity = '0');
6
- setTimeout(() => {
7
- arrow?.classList.add('hidden');
8
- div?.classList.add('hidden');
9
- if (div) {
10
- div.style.left = `auto`;
11
- div.style.top = `auto`;
12
- }
13
- }, _TRANSITION_OPACITY_DUR);
14
- };
15
- export const _makeVisible = (div, arrow, log) => {
16
- (div || arrow) && log('_makeVisible');
17
- if (div) {
18
- div.classList.remove('hidden');
19
- div.style.opacity = '1';
20
- }
21
- if (arrow) {
22
- arrow.classList.remove('hidden');
23
- arrow.style.opacity = '1';
24
- }
25
- };
@@ -1,3 +0,0 @@
1
- import type { Alignment, calculateAlignment } from '../../utils/calculate-alignment.js';
2
- import type { TooltipLogger, TooltipOptions } from './tooltip.js';
3
- export declare const _maybePickSafePlacement: (calc: ReturnType<typeof calculateAlignment>, opts: TooltipOptions, log: TooltipLogger) => Alignment | false;
@@ -1,86 +0,0 @@
1
- export const _maybePickSafePlacement = (calc, opts, log) => {
2
- let preferred = opts.alignment;
3
- let picked = preferred;
4
- const sides = {
5
- top: ['top', 'topLeft', 'topRight'],
6
- bottom: ['bottom', 'bottomLeft', 'bottomRight'],
7
- left: ['left', 'leftTop', 'leftBottom'],
8
- right: ['right', 'rightTop', 'rightBottom'],
9
- };
10
- // try alternatives within same side
11
- const _trySideVariant = (val) => {
12
- for (let side of Object.keys(sides)) {
13
- if (val.startsWith(side)) {
14
- for (let pos of sides[side]) {
15
- if (calc.position[pos].safe) {
16
- log(`_trySideVariant for '${val}', found '${pos}'`);
17
- return pos;
18
- }
19
- }
20
- }
21
- }
22
- log(`_trySideVariant for '${val}', found none (returning orig '${val}')`);
23
- return val;
24
- };
25
- // DRY
26
- const _trySideOpposite = (val) => {
27
- const opposites = { top: 'bottom', bottom: 'top', left: 'right', right: 'left' };
28
- for (let [k, v] of Object.entries(opposites)) {
29
- if (val.startsWith(k)) {
30
- const r = val.replace(k, v);
31
- log(`_trySideOpposite for '${val}', found '${r}'`);
32
- return r;
33
- }
34
- }
35
- log(`_trySideOpposite for '${val}', found none (returning orig '${val}')`);
36
- return val;
37
- };
38
- const _switchAxis = (val) => {
39
- const opposites = { top: 'right', bottom: 'right', left: 'top', right: 'top' };
40
- for (let [k, v] of Object.entries(opposites)) {
41
- if (val.startsWith(k)) {
42
- log(`_switchAxis for '${val}', found '${v}'`);
43
- return v;
44
- }
45
- }
46
- log(`_switchAxis for '${val}', found none (returning orig '${val}')`);
47
- return val;
48
- };
49
- // kind of stupid, brute force approach...
50
- // same side variant
51
- if (!calc.position[picked].safe) {
52
- picked = _trySideVariant(picked);
53
- }
54
- // oposite side
55
- if (!calc.position[picked].safe) {
56
- picked = _trySideOpposite(picked);
57
- // oposite side variant
58
- if (!calc.position[picked].safe) {
59
- picked = _trySideVariant(picked);
60
- }
61
- }
62
- // switch axis
63
- if (!calc.position[picked].safe) {
64
- picked = _switchAxis(picked);
65
- // now second round
66
- // same side variant
67
- if (!calc.position[picked].safe) {
68
- picked = _trySideVariant(picked);
69
- }
70
- // oposite side
71
- if (!calc.position[picked].safe) {
72
- picked = _trySideOpposite(picked);
73
- // oposite side variant
74
- if (!calc.position[picked].safe) {
75
- picked = _trySideVariant(picked);
76
- }
77
- }
78
- }
79
- // finally, if still no luck, revert to
80
- // a) either unsafe original (to avoid noise) and do not dance anymore, or
81
- // b) hide (if configured so)
82
- if (!calc.position[picked].safe) {
83
- picked = opts.hideOnInsufficientSpace ? false : preferred;
84
- }
85
- return picked;
86
- };
@@ -1,2 +0,0 @@
1
- import type { TooltipLogger, TooltipOptions } from './tooltip.js';
2
- export declare const _setPosition: (boundaryRoot: HTMLElement | undefined, parent: HTMLElement, div: HTMLElement | null, arrow: HTMLElement | null, opts: TooltipOptions, log: TooltipLogger) => Promise<unknown>;
@@ -1,125 +0,0 @@
1
- import { get as storeGet } from 'svelte/store';
2
- import { calculateAlignment } from '../../utils/calculate-alignment.js';
3
- import { windowSize } from '../../utils/window-size.js';
4
- import { _maybePickSafePlacement } from './_maybe-pick-safe-placement.js';
5
- export const _setPosition = async (boundaryRoot, // will default to window dimensions
6
- parent, div, arrow, opts, log) => {
7
- // if (!div || !arrow) return log('_setPosition noop');
8
- if (!div || !arrow)
9
- return;
10
- log('_setPosition');
11
- const rootRect = boundaryRoot?.getBoundingClientRect() || {
12
- ...storeGet(windowSize),
13
- x: 0,
14
- y: 0,
15
- };
16
- const boundaryRootRect = {
17
- x: rootRect.x,
18
- y: rootRect.y,
19
- width: rootRect.width,
20
- height: rootRect.height,
21
- };
22
- const parentRect = parent.getBoundingClientRect();
23
- // IMPORTANT!
24
- // make sure the div is not hidden, so the rect dimensions will work fine
25
- div.classList.remove('hidden');
26
- return new Promise((resolve) => {
27
- // must wait for the next repaint to have correct dimensions...
28
- requestAnimationFrame(() => {
29
- const divRect = div.getBoundingClientRect();
30
- const r = calculateAlignment(boundaryRootRect, parentRect, divRect, opts.offset);
31
- log('tooltip rect', divRect);
32
- log('placements', r);
33
- // try to pick safe
34
- const safe = _maybePickSafePlacement(r, opts, log);
35
- // maybe quit...
36
- if (safe === false) {
37
- log('No safe position found...');
38
- return resolve(false);
39
- }
40
- log(`Preferred: '${opts.alignment}', safe: '${safe}'.`);
41
- // position the actual tooltip/popover
42
- div.style.left = `${r.position[safe].x}px`;
43
- div.style.top = `${r.position[safe].y}px`;
44
- // now dance with the arrow...
45
- let arrowStyles = {
46
- borderStyle: 'solid',
47
- left: 'auto',
48
- top: 'auto',
49
- };
50
- // need to reset all on reposition
51
- ['borderTop', 'borderBottom', 'borderLeft', 'borderRight'].forEach((k) => {
52
- arrowStyles[`${k}Width`] = '0';
53
- arrowStyles[`${k}Color`] = null;
54
- });
55
- //
56
- const arrowSize = opts.arrowSize;
57
- let xOffset = 0;
58
- let yOffset = 0;
59
- //
60
- if (safe.startsWith('top')) {
61
- arrowStyles = {
62
- ...arrowStyles,
63
- borderLeftColor: `transparent`,
64
- borderRightColor: `transparent`,
65
- borderLeftWidth: `${arrowSize * 0.75}px`,
66
- borderRightWidth: `${arrowSize * 0.75}px`,
67
- borderTopWidth: `${arrowSize}px`,
68
- };
69
- xOffset -= arrowSize / 2;
70
- yOffset -= arrowSize * 0.1;
71
- }
72
- //
73
- else if (safe.startsWith('bottom')) {
74
- arrowStyles = {
75
- ...arrowStyles,
76
- borderLeftColor: `transparent`,
77
- borderRightColor: `transparent`,
78
- borderLeftWidth: `${arrowSize * 0.75}px`,
79
- borderRightWidth: `${arrowSize * 0.75}px`,
80
- borderBottomWidth: `${arrowSize}px`,
81
- };
82
- xOffset -= arrowSize / 2;
83
- yOffset -= arrowSize * 0.9;
84
- }
85
- //
86
- else if (safe.startsWith('right')) {
87
- arrowStyles = {
88
- ...arrowStyles,
89
- borderTopColor: `transparent`,
90
- borderBottomColor: `transparent`,
91
- borderTopWidth: `${arrowSize * 0.75}px`,
92
- borderBottomWidth: `${arrowSize * 0.75}px`,
93
- borderRightWidth: `${arrowSize}px`,
94
- };
95
- xOffset -= arrowSize * 0.9;
96
- yOffset -= arrowSize / 2;
97
- }
98
- //
99
- else if (safe.startsWith('left')) {
100
- arrowStyles = {
101
- ...arrowStyles,
102
- borderTopColor: `transparent`,
103
- borderBottomColor: `transparent`,
104
- borderTopWidth: `${arrowSize * 0.75}px`,
105
- borderBottomWidth: `${arrowSize * 0.75}px`,
106
- borderLeftWidth: `${arrowSize}px`,
107
- };
108
- xOffset -= arrowSize * 0.1;
109
- yOffset -= arrowSize / 2;
110
- }
111
- arrowStyles = {
112
- ...arrowStyles,
113
- left: `${r.origin[safe].x + xOffset}px`,
114
- top: `${r.origin[safe].y + yOffset}px`,
115
- };
116
- // log('applying arrowStyles', arrowStyles);
117
- Object.entries(arrowStyles).forEach(([k, v]) => {
118
- // @ts-ignore
119
- arrow.style[k] = v;
120
- });
121
- //
122
- resolve(true);
123
- });
124
- });
125
- };
@@ -1,42 +0,0 @@
1
- import { type Readable, type Writable } from 'svelte/store';
2
- import type { Alignment } from '../../utils/calculate-alignment.js';
3
- export declare class TooltipConfig {
4
- static presetBase: string;
5
- static class: string;
6
- static arrowPresetBase: string;
7
- static arrowClass: string;
8
- static defaultOptions: Partial<TooltipOptions>;
9
- }
10
- export declare class PopoverConfig {
11
- static presetBase: string;
12
- static class: string;
13
- static arrowPresetBase: string;
14
- static arrowClass: string;
15
- static defaultOptions: Partial<TooltipOptions>;
16
- }
17
- export type TooltipLogger = (...args: any[]) => void;
18
- export type TooltipTrigger = 'hover' | 'focus' | 'click';
19
- export interface TooltipOptions {
20
- content: string;
21
- popover: HTMLElement | null;
22
- alignment: Alignment;
23
- allowHtml: boolean;
24
- delay: number;
25
- class: string;
26
- arrowClass: string;
27
- triggers: TooltipTrigger[];
28
- logger?: TooltipLogger;
29
- boundaryRoot?: HTMLElement;
30
- arrowSize: number;
31
- offset: number;
32
- hideOnInsufficientSpace: boolean;
33
- touch?: Readable<number>;
34
- trigger?: Readable<boolean>;
35
- notifier?: Writable<boolean>;
36
- getAppendChildTarget?: () => HTMLElement;
37
- }
38
- export declare const _TRANSITION_OPACITY_DUR = 150;
39
- export declare function tooltip(node: HTMLElement, initialOptions?: string | Partial<TooltipOptions>): {
40
- update(newOptions: string | Partial<TooltipOptions>): void;
41
- destroy(): void;
42
- };