sveltekit-ui 1.1.17 → 1.1.19

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 (200) hide show
  1. package/dist/Components/Alert/index.svelte +88 -0
  2. package/dist/Components/Alert/index.svelte.js +101 -0
  3. package/dist/Components/ArrowToggle/index.svelte +62 -0
  4. package/dist/Components/Attachment/index.svelte +77 -0
  5. package/dist/Components/Attachment/index.svelte.js +119 -0
  6. package/dist/Components/Audio/index.svelte +193 -0
  7. package/dist/Components/Audio/index.svelte.js +463 -0
  8. package/dist/Components/AudioEditor/index.svelte +252 -0
  9. package/dist/Components/AudioEditor/index.svelte.js +977 -0
  10. package/dist/Components/AudioEditor/samples/alloy-voice-sample.mp3 +0 -0
  11. package/dist/Components/AudioEditor/samples/echo-voice-sample.mp3 +0 -0
  12. package/dist/Components/AudioEditor/samples/fable-voice-sample.mp3 +0 -0
  13. package/dist/Components/AudioEditor/samples/nova-voice-sample.mp3 +0 -0
  14. package/dist/Components/AudioEditor/samples/onyx-voice-sample.mp3 +0 -0
  15. package/dist/Components/AudioEditor/samples/shimmer-voice-sample.mp3 +0 -0
  16. package/dist/Components/AuthCodeInput/index.svelte +85 -0
  17. package/dist/Components/AuthCodeInput/index.svelte.js +95 -0
  18. package/dist/Components/Breadcrumbs/index.svelte +27 -0
  19. package/dist/Components/Breadcrumbs/index.svelte.js +88 -0
  20. package/dist/Components/Button/index.svelte +721 -0
  21. package/dist/Components/Button/index.svelte.js +375 -0
  22. package/dist/Components/Chart/Klines/index.svelte +87 -0
  23. package/dist/Components/Chart/index.svelte +226 -0
  24. package/dist/Components/Chart/index.svelte.js +1099 -0
  25. package/dist/Components/ChartInput/DisplayNav/Klines/index.svelte +150 -0
  26. package/dist/Components/ChartInput/DisplayNav/Lines/index.svelte +45 -0
  27. package/dist/Components/ChartInput/DisplayNav/index.svelte +297 -0
  28. package/dist/Components/ChartInput/EditPanel/index.svelte +155 -0
  29. package/dist/Components/ChartInput/index.svelte +21 -0
  30. package/dist/Components/ChartInput/index.svelte.js +671 -0
  31. package/dist/Components/Checkbox/index.svelte +411 -0
  32. package/dist/Components/Checkbox/index.svelte.js +178 -0
  33. package/dist/Components/Code/index.svelte +23 -0
  34. package/dist/Components/Code/index.svelte.js +33 -0
  35. package/dist/Components/Color/index.svelte +51 -0
  36. package/dist/Components/Color/index.svelte.js +31 -0
  37. package/dist/Components/ColorInput/ChromaPicker/index.svelte +50 -0
  38. package/dist/Components/ColorInput/ColorPalette/index.svelte +62 -0
  39. package/dist/Components/ColorInput/OpacityPicker/index.svelte +68 -0
  40. package/dist/Components/ColorInput/ShowcasePicker/index.svelte +136 -0
  41. package/dist/Components/ColorInput/index.svelte +70 -0
  42. package/dist/Components/ColorInput/index.svelte.js +386 -0
  43. package/dist/Components/ConditionsInput/index.svelte +46 -0
  44. package/dist/Components/ConditionsInput/index.svelte.js +201 -0
  45. package/dist/Components/Confetti/index.svelte +98 -0
  46. package/dist/Components/Confetti/index.svelte.js +94 -0
  47. package/dist/Components/Content/index.svelte +500 -0
  48. package/dist/Components/Content/index.svelte.js +910 -0
  49. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Audio/index.svelte +31 -0
  50. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Audio/index.svelte.js +258 -0
  51. package/dist/Components/ContentInput/AttributesInput/CustomConfig/AudioAdvanced/index.svelte +31 -0
  52. package/dist/Components/ContentInput/AttributesInput/CustomConfig/AudioAdvanced/index.svelte.js +258 -0
  53. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Dropdown/index.svelte +58 -0
  54. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Dropdown/index.svelte.js +206 -0
  55. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Image/index.svelte +28 -0
  56. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Image/index.svelte.js +224 -0
  57. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Number/index.svelte +44 -0
  58. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Number/index.svelte.js +272 -0
  59. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Qr/index.svelte +41 -0
  60. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Qr/index.svelte.js +202 -0
  61. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Slider/index.svelte +19 -0
  62. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Slider/index.svelte.js +117 -0
  63. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TableAdvanced/index.svelte +60 -0
  64. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TableAdvanced/index.svelte.js +542 -0
  65. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Tag/index.svelte +47 -0
  66. package/dist/Components/ContentInput/AttributesInput/CustomConfig/Tag/index.svelte.js +185 -0
  67. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TextInput/index.svelte +35 -0
  68. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TextInput/index.svelte.js +222 -0
  69. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TimeInput/index.svelte +20 -0
  70. package/dist/Components/ContentInput/AttributesInput/CustomConfig/TimeInput/index.svelte.js +84 -0
  71. package/dist/Components/ContentInput/AttributesInput/DefinedTypeInput/index.svelte +25 -0
  72. package/dist/Components/ContentInput/AttributesInput/DefinedTypeInput/index.svelte.js +91 -0
  73. package/dist/Components/ContentInput/AttributesInput/index.svelte +352 -0
  74. package/dist/Components/ContentInput/AttributesInput/index.svelte.js +1436 -0
  75. package/dist/Components/ContentInput/ContentPanelBuilder/AddElement/index.svelte +64 -0
  76. package/dist/Components/ContentInput/ContentPanelBuilder/AddElement/index.svelte.js +97 -0
  77. package/dist/Components/ContentInput/ContentPanelBuilder/ElementList/index.svelte +184 -0
  78. package/dist/Components/ContentInput/ContentPanelBuilder/index.svelte +41 -0
  79. package/dist/Components/ContentInput/index.svelte +78 -0
  80. package/dist/Components/ContentInput/index.svelte.js +1197 -0
  81. package/dist/Components/CronInput/index.svelte +78 -0
  82. package/dist/Components/CronInput/index.svelte.js +198 -0
  83. package/dist/Components/DataTypeInput/index.svelte +174 -0
  84. package/dist/Components/DataTypeInput/index.svelte.js +565 -0
  85. package/dist/Components/Dropdown/index.svelte +116 -0
  86. package/dist/Components/Dropdown/index.svelte.js +403 -0
  87. package/dist/Components/EmailAddress/index.svelte +22 -0
  88. package/dist/Components/EmailAddress/index.svelte.js +45 -0
  89. package/dist/Components/ErrorX/index.svelte +58 -0
  90. package/dist/Components/Eye/index.svelte +57 -0
  91. package/dist/Components/FileInput/index.svelte +146 -0
  92. package/dist/Components/FileInput/index.svelte.js +225 -0
  93. package/dist/Components/Hamburger/index.svelte +99 -0
  94. package/dist/Components/HorizScrollBox/index.svelte +145 -0
  95. package/dist/Components/Icon/index.svelte +412 -0
  96. package/dist/Components/Icon/index.svelte.js +116 -0
  97. package/dist/Components/IconInput/index.svelte +77 -0
  98. package/dist/Components/IconInput/index.svelte.js +259 -0
  99. package/dist/Components/Image/index.svelte +126 -0
  100. package/dist/Components/Image/index.svelte.js +116 -0
  101. package/dist/Components/ImageEditor/Image/CropBox/index.svelte +165 -0
  102. package/dist/Components/ImageEditor/Image/index.svelte +104 -0
  103. package/dist/Components/ImageEditor/Panels/AI/index.svelte +44 -0
  104. package/dist/Components/ImageEditor/Panels/Crop/index.svelte +96 -0
  105. package/dist/Components/ImageEditor/Panels/File/QualityPicker/index.svelte +124 -0
  106. package/dist/Components/ImageEditor/Panels/File/index.svelte +74 -0
  107. package/dist/Components/ImageEditor/Panels/Filters/index.svelte +46 -0
  108. package/dist/Components/ImageEditor/Panels/Resize/index.svelte +58 -0
  109. package/dist/Components/ImageEditor/index.svelte +93 -0
  110. package/dist/Components/ImageEditor/index.svelte.js +1961 -0
  111. package/dist/Components/ImageSlider/index.svelte +124 -0
  112. package/dist/Components/ImageSlider/index.svelte.js +99 -0
  113. package/dist/Components/InfoBox/index.svelte +89 -0
  114. package/dist/Components/Json/Nested/index.svelte +157 -0
  115. package/dist/Components/Json/index.svelte +60 -0
  116. package/dist/Components/Json/index.svelte.js +594 -0
  117. package/dist/Components/LabeledItem/index.svelte +102 -0
  118. package/dist/Components/Layout/NavBar/FullNav/index.svelte +52 -0
  119. package/dist/Components/Layout/NavBar/NavGuts/index.svelte +87 -0
  120. package/dist/Components/Layout/NavBar/index.svelte +72 -0
  121. package/dist/Components/Layout/index.svelte +149 -0
  122. package/dist/Components/Layout/index.svelte.js +360 -0
  123. package/dist/Components/Link/index.svelte +47 -0
  124. package/dist/Components/Link/index.svelte.js +136 -0
  125. package/dist/Components/LoadingSuccessDiv/index.svelte +51 -0
  126. package/dist/Components/LoadingWheel/index.svelte +38 -0
  127. package/dist/Components/Location/index.svelte +79 -0
  128. package/dist/Components/Location/index.svelte.js +288 -0
  129. package/dist/Components/LocationInput/index.svelte +197 -0
  130. package/dist/Components/LocationInput/index.svelte.js +965 -0
  131. package/dist/Components/Number/index.svelte +47 -0
  132. package/dist/Components/Number/index.svelte.js +151 -0
  133. package/dist/Components/PhoneCountryCode/index.svelte +7 -0
  134. package/dist/Components/PhoneCountryCode/index.svelte.js +260 -0
  135. package/dist/Components/PhoneNumber/index.svelte +22 -0
  136. package/dist/Components/PhoneNumber/index.svelte.js +41 -0
  137. package/dist/Components/Popover/index.svelte +396 -0
  138. package/dist/Components/Popover/index.svelte.js +319 -0
  139. package/dist/Components/Qr/index.svelte +85 -0
  140. package/dist/Components/Qr/index.svelte.js +301 -0
  141. package/dist/Components/QrInput/index.svelte +47 -0
  142. package/dist/Components/QrInput/index.svelte.js +218 -0
  143. package/dist/Components/Slider/index.svelte +239 -0
  144. package/dist/Components/Slider/index.svelte.js +469 -0
  145. package/dist/Components/Spacer/index.svelte +41 -0
  146. package/dist/Components/StoragePicker/DisplayFile/index.svelte +15 -0
  147. package/dist/Components/StoragePicker/index.svelte +187 -0
  148. package/dist/Components/StoragePicker/index.svelte.js +592 -0
  149. package/dist/Components/SuccessCheck/index.svelte +56 -0
  150. package/dist/Components/TableAdvanced/ColumnInput/index.svelte +117 -0
  151. package/dist/Components/TableAdvanced/ColumnInput/index.svelte.js +456 -0
  152. package/dist/Components/TableAdvanced/FilterInput/index.svelte +54 -0
  153. package/dist/Components/TableAdvanced/FilterInput/index.svelte.js +247 -0
  154. package/dist/Components/TableAdvanced/Pagination/index.svelte +43 -0
  155. package/dist/Components/TableAdvanced/Pagination/index.svelte.js +97 -0
  156. package/dist/Components/TableAdvanced/SortByInput/index.svelte +72 -0
  157. package/dist/Components/TableAdvanced/SortByInput/index.svelte.js +176 -0
  158. package/dist/Components/TableAdvanced/index.svelte +275 -0
  159. package/dist/Components/TableAdvanced/index.svelte.js +1565 -0
  160. package/dist/Components/Tag/index.svelte +45 -0
  161. package/dist/Components/Tag/index.svelte.js +76 -0
  162. package/dist/Components/TextArrayInput/index.svelte +108 -0
  163. package/dist/Components/TextArrayInput/index.svelte.js +239 -0
  164. package/dist/Components/TextInput/PasswordTooltip/index.svelte +89 -0
  165. package/dist/Components/TextInput/index.svelte +223 -0
  166. package/dist/Components/TextInput/index.svelte.js +447 -0
  167. package/dist/Components/Time/index.svelte +7 -0
  168. package/dist/Components/Time/index.svelte.js +38 -0
  169. package/dist/Components/TimeInput/NumberToggler/index.svelte +34 -0
  170. package/dist/Components/TimeInput/NumberToggler/index.svelte.js +79 -0
  171. package/dist/Components/TimeInput/index.js +702 -0
  172. package/dist/Components/TimeInput/index.svelte +211 -0
  173. package/dist/Components/TimeInput/index.svelte.js +638 -0
  174. package/dist/Components/Tooltip/index.svelte +143 -0
  175. package/dist/Components/TransparentBackground/index.svelte +153 -0
  176. package/dist/Components/TypingDots/index.svelte +84 -0
  177. package/dist/Components/VariablePathInput/index.svelte +63 -0
  178. package/dist/Components/VariablePathInput/index.svelte.js +273 -0
  179. package/dist/Components/VideoTBD/index.svelte +100 -0
  180. package/dist/Components/XFollow/index.svelte +42 -0
  181. package/dist/Components/XPost/index.svelte +52 -0
  182. package/dist/Components/XPost/index.svelte.js +64 -0
  183. package/dist/Components/YoutubeChannelButton/index.svelte +82 -0
  184. package/dist/Components/YoutubeVideo/index.svelte +73 -0
  185. package/dist/Components/YoutubeVideo/index.svelte.js +54 -0
  186. package/dist/actions/draggable.js +49 -0
  187. package/dist/actions/index.js +24 -0
  188. package/dist/actions/no_spaces.js +33 -0
  189. package/dist/actions/numbers_only.js +26 -0
  190. package/dist/actions/scroll_y.js +28 -0
  191. package/dist/actions/stop_scroll_propagation_y.js +42 -0
  192. package/dist/actions/swipe_handler.js +295 -0
  193. package/dist/client/astc_formatting/index.js +1128 -0
  194. package/dist/client/docs/index.js +7622 -0
  195. package/dist/client/index.js +735 -0
  196. package/dist/client/types/index.js +2812 -0
  197. package/dist/index.js +180 -0
  198. package/dist/style.css +682 -0
  199. package/package.json +2 -2
  200. package/src/lib/Components/Chart/index.svelte.js +11 -2
@@ -0,0 +1,54 @@
1
+ import { create_unique_id } from "../../client/index.js"
2
+
3
+ export function create_youtube_video_manager(config) {
4
+ let id = create_unique_id(null, 20)
5
+ let theme = $derived(config?.is_dark_theme ? "dark" : "light")
6
+
7
+ let is_loading = $state(false)
8
+ let error_message = $state("")
9
+
10
+ async function render_video() {
11
+ error_message = ""
12
+ is_loading = true
13
+ if (config?.video_id) {
14
+ var img = new Image()
15
+ img.src = "http://img.youtube.com/vi/" + config?.video_id + "/mqdefault.jpg"
16
+ img.onload = function () {
17
+ if (this.width === 120) {
18
+ error_message = "YouTube video not found or failed to load."
19
+ } else {
20
+ error_message = ""
21
+ resize_video()
22
+ }
23
+ }
24
+ } else {
25
+ error_message = "YouTube video not found or failed to load."
26
+ }
27
+ is_loading = false
28
+ }
29
+
30
+ function resize_video() {
31
+ const video_container = document?.querySelector(".video_container")
32
+ const max_width = video_container.clientWidth
33
+ const max_height = 15 * 16 // 20rem * 16px
34
+ const aspect_ratio = 16 / 9
35
+ const height = Math.min(max_width / aspect_ratio, max_height)
36
+ const width = height * aspect_ratio
37
+ if (video_container.style.height > height) {
38
+ video_container.style.height = `${height}px`
39
+ video_container.style.width = `${width}px`
40
+ }
41
+ }
42
+
43
+ return {
44
+ id,
45
+ get video_id() {
46
+ return config?.video_id
47
+ },
48
+ get theme() {
49
+ return theme
50
+ },
51
+ render_video,
52
+ resize_video,
53
+ }
54
+ }
@@ -0,0 +1,49 @@
1
+ export default function draggable(node) {
2
+ let is_dragging = false
3
+ let left
4
+ let top
5
+
6
+ function handle_pointerdown(e) {
7
+ is_dragging = true
8
+ top = JSON.parse(node.style.top.replace(/[^\d.-]/g, ""))
9
+ left = JSON.parse(node.style.left.replace(/[^\d.-]/g, ""))
10
+ }
11
+
12
+ function handle_pointerup(e) {
13
+ is_dragging = false
14
+ }
15
+
16
+ function handle_pointermove(e) {
17
+ if (is_dragging) {
18
+ left += e.movementX
19
+ top += e.movementY
20
+ node.style.top = `${top}px`
21
+ node.style.left = `${left}px`
22
+ node.dispatchEvent(
23
+ new CustomEvent("drag", { detail: { top: top, left: left } })
24
+ )
25
+ }
26
+ }
27
+
28
+ node.style.position = "absolute"
29
+ node.style.cursor = "move"
30
+ node.style.userSelect = "none"
31
+ node.style["touch-action"] = "none"
32
+ node.style["-webkit-touch-callout"] = "none"
33
+ node.style["-ms-touch-action"] = "none"
34
+ node.style["-moz-user-select"] = "none"
35
+ node.style["-webkit-user-select"] = "none"
36
+ node.style["-ms-user-select"] = "none"
37
+
38
+ node.addEventListener("pointerdown", handle_pointerdown)
39
+ window.addEventListener("pointerup", handle_pointerup)
40
+ window.addEventListener("pointermove", handle_pointermove)
41
+
42
+ return {
43
+ destroy() {
44
+ node.removeEventListener("pointerdown", handle_pointerdown)
45
+ window.removeEventListener("pointerup", handle_pointerup)
46
+ window.removeEventListener("pointermove", handle_pointermove)
47
+ },
48
+ }
49
+ }
@@ -0,0 +1,24 @@
1
+ export function intersection_observer(node) {
2
+ let observer = null
3
+ observer = new IntersectionObserver(
4
+ (entries) => {
5
+ entries.forEach((entry) => {
6
+ if (entry.isIntersecting) {
7
+ node.dispatchEvent(new CustomEvent("appeared"))
8
+ } else {
9
+ node.dispatchEvent(new CustomEvent("disappeared"))
10
+ }
11
+ })
12
+ },
13
+ { threshold: 1 }
14
+ )
15
+ observer.observe(node)
16
+
17
+ return {
18
+ destroy() {
19
+ if (observer) {
20
+ observer.disconnect()
21
+ }
22
+ },
23
+ }
24
+ }
@@ -0,0 +1,33 @@
1
+ export default function no_spaces(node, is_no_spaces) {
2
+ function handle_input(e) {
3
+ if (is_no_spaces) {
4
+ const cleaned_val = e.target.value.replace(/\s+/g, "")
5
+ if (cleaned_val !== e.target.value) {
6
+ e.target.value = ""
7
+ e.target.value = cleaned_val
8
+ node.dispatchEvent(
9
+ new CustomEvent("clean_val", { detail: cleaned_val })
10
+ )
11
+ }
12
+ }
13
+ }
14
+
15
+ function handle_keydown(e) {
16
+ if (is_no_spaces && e.which === 32) {
17
+ e.preventDefault()
18
+ }
19
+ }
20
+
21
+ node.addEventListener("input", handle_input)
22
+ node.addEventListener("keydown", handle_keydown)
23
+
24
+ return {
25
+ update(new_is_no_spaces) {
26
+ is_no_spaces = new_is_no_spaces
27
+ },
28
+ destroy() {
29
+ node.removeEventListener("input", handle_input)
30
+ node.removeEventListener("keydown", handle_keydown)
31
+ },
32
+ }
33
+ }
@@ -0,0 +1,26 @@
1
+ export default function numbers_only(node) {
2
+ function handle_input(e) {
3
+ const cleaned_val = e.target.value.replace(/\D+/g, "")
4
+ if (cleaned_val !== e.target.value) {
5
+ e.target.value = ""
6
+ e.target.value = cleaned_val
7
+ node.dispatchEvent(new CustomEvent("clean_val", { detail: cleaned_val }))
8
+ }
9
+ }
10
+
11
+ function handle_keydown(e) {
12
+ if (e.which === 32) {
13
+ e.preventDefault()
14
+ }
15
+ }
16
+
17
+ node.addEventListener("input", handle_input)
18
+ node.addEventListener("keydown", handle_keydown)
19
+
20
+ return {
21
+ destroy() {
22
+ node.removeEventListener("input", handle_input)
23
+ node.removeEventListener("keydown", handle_keydown)
24
+ },
25
+ }
26
+ }
@@ -0,0 +1,28 @@
1
+ export default function scroll_y(node) {
2
+ const handle_wheel = (e) => {
3
+ node.scrollTop = node.scrollTop + e.deltaY
4
+ }
5
+
6
+ let touch_start_y
7
+ let node_el_scroll_top_start_y
8
+ const handle_touchstart = (e) => {
9
+ touch_start_y = Math.round(e.targetTouches[0].clientY)
10
+ node_el_scroll_top_start_y = node.scrollTop
11
+ }
12
+
13
+ const handle_touchmove = (e) => {
14
+ node.scrollTop = node_el_scroll_top_start_y + touch_start_y - Math.round(e.targetTouches[0].clientY)
15
+ }
16
+
17
+ node.addEventListener("wheel", handle_wheel, { passive: true })
18
+ node.addEventListener("touchmove", handle_touchmove)
19
+ node.addEventListener("touchstart", handle_touchstart)
20
+
21
+ return {
22
+ destroy() {
23
+ node.removeEventListener("wheel", handle_wheel)
24
+ node.removeEventListener("touchmove", handle_touchmove)
25
+ node.removeEventListener("touchstart", handle_touchstart)
26
+ },
27
+ }
28
+ }
@@ -0,0 +1,42 @@
1
+ export default function stop_scroll_propagation_y(node) {
2
+ const handle_wheel = (e) => {
3
+ let dy
4
+ if (e.deltaY) {
5
+ dy = e.deltaY
6
+ } else if (e.wheelDelta) {
7
+ dy = e.wheelDelta
8
+ }
9
+ check_to_prevent(e, dy)
10
+ }
11
+
12
+ let prev_touch_y
13
+ const handle_touchstart = (e) => {
14
+ prev_touch_y = e.changedTouches[0].clientY
15
+ }
16
+ const handle_touchmove = (e) => {
17
+ let dy = prev_touch_y - e.changedTouches[0].clientY
18
+ check_to_prevent(e, dy)
19
+ prev_touch_y = e.changedTouches[0].clientY
20
+ }
21
+
22
+ function check_to_prevent(e, dy) {
23
+ if (node.scrollTop === 0 && dy < 0) {
24
+ e.stopPropagation()
25
+ if (e.cancelable) e.preventDefault()
26
+ } else if (node.scrollTop === node.scrollHeight - node.clientHeight && dy > 0) {
27
+ e.stopPropagation()
28
+ if (e.cancelable) e.preventDefault()
29
+ }
30
+ }
31
+ node.addEventListener("wheel", handle_wheel, { passive: true })
32
+ node.addEventListener("touchmove", handle_touchmove)
33
+ node.addEventListener("touchstart", handle_touchstart)
34
+
35
+ return {
36
+ destroy() {
37
+ node.removeEventListener("wheel", handle_wheel)
38
+ node.removeEventListener("touchmove", handle_touchmove)
39
+ node.removeEventListener("touchstart", handle_touchstart)
40
+ },
41
+ }
42
+ }
@@ -0,0 +1,295 @@
1
+ export default function swipe_handler(node) {
2
+ let dy_inner = 0
3
+ let dy_outer = 0
4
+ let left_swipe = false
5
+ let right_swipe = false
6
+ let up_swipe = false
7
+ let down_swipe = false
8
+ let left_overflow_swipe = false
9
+ let right_overflow_swipe = false
10
+ let up_overflow_swipe = false
11
+ let down_overflow_swipe = false
12
+ const threshhold = 120
13
+ function set_dy(inner_val, outer_val) {
14
+ if (typeof inner_val === "number") {
15
+ dy_inner = inner_val
16
+ }
17
+ if (typeof outer_val === "number") {
18
+ dy_outer = outer_val
19
+ }
20
+ node.dispatchEvent(
21
+ new CustomEvent("dyChange", {
22
+ detail: {
23
+ dy_inner: dy_inner,
24
+ dy_outer: dy_outer,
25
+ dy: dy_inner + dy_outer,
26
+ is_at_top: is_at_top,
27
+ is_at_bottom: is_at_bottom,
28
+ },
29
+ })
30
+ )
31
+ if (!up_swipe && dy_inner + dy_outer > threshhold) {
32
+ up_swipe = true
33
+ node.dispatchEvent(new CustomEvent("up_swipe"))
34
+ }
35
+ if (!down_swipe && dy_inner + dy_outer < -threshhold) {
36
+ down_swipe = true
37
+ node.dispatchEvent(new CustomEvent("down_swipe"))
38
+ }
39
+ if (!up_overflow_swipe && dy_outer > threshhold) {
40
+ up_overflow_swipe = true
41
+ node.dispatchEvent(new CustomEvent("up_overflow_swipe"))
42
+ }
43
+ if (!down_overflow_swipe && dy_outer < -threshhold) {
44
+ down_overflow_swipe = true
45
+ node.dispatchEvent(new CustomEvent("down_overflow_swipe"))
46
+ }
47
+ if (dy_outer !== 0 || dy_inner !== 0) {
48
+ reset_timer()
49
+ }
50
+ }
51
+
52
+ let dx_inner = 0
53
+ let dx_outer = 0
54
+ function set_dx(inner_val, outer_val) {
55
+ if (typeof inner_val === "number") {
56
+ dx_inner = inner_val
57
+ }
58
+ if (typeof outer_val === "number") {
59
+ dx_outer = outer_val
60
+ }
61
+ node.dispatchEvent(
62
+ new CustomEvent("dx_change", {
63
+ detail: {
64
+ dx_inner: dx_inner,
65
+ dx_outer: dx_outer,
66
+ dx: dx_inner + dx_outer,
67
+ is_at_left: is_at_left,
68
+ is_at_right: is_at_right,
69
+ },
70
+ })
71
+ )
72
+ if (!left_swipe && dx_inner + dx_outer > threshhold) {
73
+ left_swipe = true
74
+ node.dispatchEvent(new CustomEvent("left_swipe"))
75
+ }
76
+ if (!right_swipe && dx_inner + dx_outer < -threshhold) {
77
+ right_swipe = true
78
+ node.dispatchEvent(new CustomEvent("right_swipe"))
79
+ }
80
+ if (!left_overflow_swipe && dx_outer > threshhold) {
81
+ left_overflow_swipe = true
82
+ node.dispatchEvent(new CustomEvent("left_overflow_swipe"))
83
+ }
84
+ if (!right_overflow_swipe && dx_outer < -threshhold) {
85
+ right_overflow_swipe = true
86
+ node.dispatchEvent(new CustomEvent("right_overflow_swipe"))
87
+ }
88
+ if (dx_outer !== 0 || dx_inner !== 0) {
89
+ reset_timer()
90
+ }
91
+ }
92
+
93
+ let timer_y
94
+ function reset_timer() {
95
+ timer_y && clearTimeout(timer_y)
96
+ timer_y = setTimeout(() => {
97
+ // set_dy(0, 0)
98
+ smooth_dy_to_zero()
99
+ smooth_dx_to_zero()
100
+ is_reference_scroll_top_set = false
101
+ touch_reference_y = null
102
+ is_reference_scroll_left_set = false
103
+ touch_reference_x = null
104
+ }, 200)
105
+ }
106
+
107
+ function smooth_dy_to_zero() {
108
+ // set_dy(0)
109
+ // smoothdy_outerToZero()
110
+ set_dy(0, 0)
111
+ up_swipe = false
112
+ down_swipe = false
113
+ up_overflow_swipe = false
114
+ down_overflow_swipe = false
115
+ }
116
+
117
+ function smooth_dx_to_zero() {
118
+ // set_dx(0)
119
+ // smoothdx_outerToZero()
120
+ set_dx(0, 0)
121
+ left_swipe = false
122
+ right_swipe = false
123
+ left_overflow_swipe = false
124
+ right_overflow_swipe = false
125
+ }
126
+
127
+ // function smoothdy_outerToZero(){
128
+ // const dy_outerInc = Math.floor(Math.abs(dy_outer / 10)) + 1
129
+ // const newdy_outer = dy_outer < 0 ? dy_outer + dy_outerInc : dy_outer > 0 ? dy_outer - dy_outerInc : 0
130
+ // const dy_outerDur = Math.abs(newdy_outer) < 50 ? 50 - Math.abs(newdy_outer) : 1
131
+ // if(newdy_outer < threshhold && newdy_outer > -threshhold && (down_swipe || up_swipe)){
132
+ // down_swipe = false
133
+ // up_swipe = false
134
+ // }
135
+ // setTimeout(() => {
136
+ // set_dy(null, newdy_outer)
137
+ // if(Math.abs(newdy_outer) !== 0){ smoothdy_outerToZero() }
138
+ // }, dy_outerDur)
139
+ // }
140
+
141
+ // function smoothdx_outerToZero(){
142
+ // const dx_outerInc = Math.floor(Math.abs(dx_outer / 10)) + 1
143
+ // const newdx_outer = dx_outer < 0 ? dx_outer + dx_outerInc : dx_outer > 0 ? dx_outer - dx_outerInc : 0
144
+ // const dx_outerDur = Math.abs(newdx_outer) < 50 ? 50 - Math.abs(newdx_outer) : 1
145
+ // if(newdx_outer < threshhold && newdx_outer > -threshhold && (right_swipe || left_swipe)){
146
+ // right_swipe = false
147
+ // left_swipe = false
148
+ // }
149
+ // setTimeout(() => {
150
+ // set_dx(null, newdx_outer)
151
+ // if(Math.abs(newdx_outer) !== 0){ smoothdx_outerToZero() }
152
+ // }, dx_outerDur)
153
+ // }
154
+
155
+ let is_at_top = true
156
+ let is_at_bottom = true
157
+ let reference_scroll_top = 0
158
+ let is_reference_scroll_top_set = false
159
+
160
+ let is_at_left = true
161
+ let is_at_right = true
162
+ let reference_scroll_left = 0
163
+ let is_reference_scroll_left_set = false
164
+ const handle_scroll = (e) => {
165
+ const was_at_top = is_at_top
166
+ const was_at_bottom = is_at_bottom
167
+ is_at_top = e.target.scrollTop === 0
168
+ is_at_bottom =
169
+ e.target.scrollHeight - e.target.offsetHeight - e.target.scrollTop === 0
170
+ if (was_at_top !== is_at_top) {
171
+ node.dispatchEvent(
172
+ new CustomEvent("is_at_top", { detail: { is_at_top: is_at_top } })
173
+ )
174
+ }
175
+ if (was_at_bottom !== is_at_bottom) {
176
+ node.dispatchEvent(
177
+ new CustomEvent("is_at_bottom", {
178
+ detail: { is_at_bottom: is_at_bottom },
179
+ })
180
+ )
181
+ }
182
+ if (!is_at_bottom && !is_at_top) {
183
+ if (!is_reference_scroll_top_set) {
184
+ is_reference_scroll_top_set = true
185
+ reference_scroll_top = e.target.scrollTop
186
+ }
187
+ set_dy(e.target.scrollTop - reference_scroll_top)
188
+ touch_reference_y = null
189
+ }
190
+ is_at_left = e.target.scrollLeft === 0
191
+ is_at_right =
192
+ e.target.scrollWidth - e.target.offsetWidth - e.target.scrollLeft === 0
193
+ if (!is_at_left && !is_at_right) {
194
+ if (!is_reference_scroll_left_set) {
195
+ is_reference_scroll_left_set = true
196
+ reference_scroll_left = e.target.scrollLeft
197
+ }
198
+ set_dx(e.target.scrollLeft - reference_scroll_left)
199
+ touch_reference_x = null
200
+ }
201
+ }
202
+
203
+ const handle_wheel = (e) => {
204
+ if (is_at_bottom || is_at_top) {
205
+ const stretched_dx = Math.round(e.deltaY / 2)
206
+ const adjusted_dy =
207
+ stretched_dx > 14 ? 14 : stretched_dx < -14 ? -14 : stretched_dx
208
+ set_dy(null, dy_outer + adjusted_dy)
209
+ }
210
+ if (is_at_left || is_at_right) {
211
+ const stretched_dx = Math.round(e.deltaX / 2)
212
+ const adjusted_dx =
213
+ stretched_dx > 14 ? 14 : stretched_dx < -14 ? -14 : stretched_dx
214
+ set_dx(null, dx_outer + adjusted_dx)
215
+ }
216
+ const is_moving_outer =
217
+ (is_at_left && dx_outer < -90) ||
218
+ (is_at_right && dx_outer > 90) ||
219
+ (is_at_top && dy_outer < -90) ||
220
+ (is_at_bottom && dy_outer > 90)
221
+ if (!is_moving_outer) {
222
+ // e.stopPropagation()
223
+ }
224
+ }
225
+
226
+ let touch_reference_y
227
+ let touch_reference_x
228
+ let dy_outer_at_start
229
+ let dx_outer_at_start
230
+ const handle_touchstart = (e) => {
231
+ touch_reference_y = e.changedTouches[0].clientY
232
+ dy_outer_at_start = dy_outer
233
+ touch_reference_x = e.changedTouches[0].clientX
234
+ dx_outer_at_start = dx_outer
235
+ // e.stopPropagation()
236
+ }
237
+
238
+ const handle_touchmove = (e) => {
239
+ if (is_at_bottom || is_at_top) {
240
+ if (!touch_reference_y) {
241
+ touch_reference_y = e.changedTouches[0].clientY
242
+ dy_outer_at_start = 0
243
+ }
244
+ set_dy(
245
+ null,
246
+ Math.round(
247
+ dy_outer_at_start + touch_reference_y - e.changedTouches[0].clientY
248
+ )
249
+ )
250
+ }
251
+ if (is_at_left || is_at_right) {
252
+ if (!touch_reference_x) {
253
+ touch_reference_x = e.changedTouches[0].clientX
254
+ dx_outer_at_start = 0
255
+ }
256
+ set_dx(
257
+ null,
258
+ Math.round(
259
+ dx_outer_at_start + touch_reference_x - e.changedTouches[0].clientX
260
+ )
261
+ )
262
+ }
263
+ const is_moving_outer =
264
+ (is_at_left && dx_outer < -90) ||
265
+ (is_at_right && dx_outer > 90) ||
266
+ (is_at_top && dy_outer < -90) ||
267
+ (is_at_bottom && dy_outer > 90)
268
+ if (!is_moving_outer) {
269
+ // e.stopPropagation()
270
+ }
271
+ }
272
+
273
+ const handleTouchend = () => {
274
+ smooth_dy_to_zero()
275
+ smooth_dx_to_zero()
276
+ }
277
+
278
+ node.addEventListener("scroll", handle_scroll)
279
+ node.addEventListener("wheel", handle_wheel, { passive: true })
280
+ node.addEventListener("touchstart", handle_touchstart, { passive: true })
281
+ node.addEventListener("touchmove", handle_touchmove, { passive: true })
282
+ node.addEventListener("touchend", handleTouchend, { passive: true })
283
+
284
+ return {
285
+ destroy() {
286
+ node.removeEventListener("scroll", handle_scroll)
287
+ node.removeEventListener("wheel", handle_wheel, { passive: true })
288
+ node.removeEventListener("touchstart", handle_touchstart, {
289
+ passive: true,
290
+ })
291
+ node.removeEventListener("touchmove", handle_touchmove, { passive: true })
292
+ node.removeEventListener("touchend", handleTouchend, { passive: true })
293
+ },
294
+ }
295
+ }