aptechka 0.1.0 → 0.1.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 (299) hide show
  1. package/README.md +1 -0
  2. package/lib/Damped-1hlKSFaB.cjs +1 -0
  3. package/lib/Damped-523xgzT3.js +152 -0
  4. package/lib/SourceManager-3c3kr7oj.cjs +1 -0
  5. package/lib/SourceManager-F94MRde6.js +108 -0
  6. package/lib/Store-2hWEUGTj.js +135 -0
  7. package/lib/Store-WXFmsaEI.cjs +1 -0
  8. package/lib/WheelControls-F-xg5-oq.js +102 -0
  9. package/lib/WheelControls-Hp5NWRZY.cjs +1 -0
  10. package/lib/animation/Animated.d.ts +41 -0
  11. package/lib/animation/Damped.d.ts +11 -0
  12. package/lib/animation/Tweened.d.ts +16 -0
  13. package/lib/animation/index.cjs +1 -0
  14. package/lib/animation/index.d.ts +3 -0
  15. package/lib/animation/index.js +56 -0
  16. package/lib/attribute/index.cjs +1 -0
  17. package/lib/attribute/index.d.ts +8 -0
  18. package/lib/attribute/index.js +47 -0
  19. package/lib/attributes-_2U65GDl.cjs +1 -0
  20. package/lib/attributes-w0u-KiIb.js +10 -0
  21. package/lib/browser-QbF6EW-w.cjs +1 -0
  22. package/lib/browser-S4eq8AeN.js +4 -0
  23. package/lib/canvas-2d/index.cjs +5 -0
  24. package/lib/canvas-2d/index.d.ts +30 -0
  25. package/lib/canvas-2d/index.js +90 -0
  26. package/lib/controls/Controls.d.ts +9 -0
  27. package/lib/controls/KeyboardControls.d.ts +10 -0
  28. package/lib/controls/LinearControls.d.ts +11 -0
  29. package/lib/controls/User.d.ts +7 -0
  30. package/lib/controls/WheelControls.d.ts +17 -0
  31. package/lib/controls/index.cjs +1 -0
  32. package/lib/controls/index.d.ts +5 -0
  33. package/lib/controls/index.js +43 -0
  34. package/lib/css-unit-parser/index.cjs +8 -0
  35. package/lib/css-unit-parser/index.d.ts +6 -0
  36. package/lib/css-unit-parser/index.js +36 -0
  37. package/lib/custom-element/index.cjs +1 -0
  38. package/lib/custom-element/index.d.ts +8 -0
  39. package/lib/custom-element/index.js +16 -0
  40. package/lib/device/Device.d.ts +17 -0
  41. package/lib/device/Viewport.d.ts +27 -0
  42. package/lib/device/index.cjs +1 -0
  43. package/lib/device/index.d.ts +2 -0
  44. package/lib/device/index.js +123 -0
  45. package/lib/dom-QhWsdQS2.cjs +1 -0
  46. package/lib/dom-bHEwc_xV.js +24 -0
  47. package/lib/easings-_wFs9ZWc.cjs +1 -0
  48. package/lib/easings-uF-tgahf.js +19 -0
  49. package/lib/element-constructor/ElementConstructor.d.ts +76 -0
  50. package/lib/element-constructor/htmlTags.d.ts +113 -0
  51. package/lib/element-constructor/index.cjs +1 -0
  52. package/lib/element-constructor/index.d.ts +4 -0
  53. package/lib/element-constructor/index.js +1389 -0
  54. package/lib/element-constructor/specialObjects.d.ts +2 -0
  55. package/lib/element-constructor/svgTags.d.ts +64 -0
  56. package/lib/en3/attachments/En3SourceManager.d.ts +30 -0
  57. package/lib/en3/core/en3.d.ts +55 -0
  58. package/lib/en3/index.cjs +28 -0
  59. package/lib/en3/index.d.ts +18 -0
  60. package/lib/en3/index.js +3249 -0
  61. package/lib/en3/instances/en3LazyLoader.d.ts +7 -0
  62. package/lib/en3/libs/MeshoptDecoder.d.ts +1 -0
  63. package/lib/en3/loaders/en3GLTFLoader.d.ts +16 -0
  64. package/lib/en3/loaders/en3TextureLoader.d.ts +2 -0
  65. package/lib/en3/objects/En3Clip.d.ts +10 -0
  66. package/lib/en3/objects/En3ClipHelpers.d.ts +5 -0
  67. package/lib/en3/objects/En3GLTF.d.ts +9 -0
  68. package/lib/en3/objects/En3Image.d.ts +7 -0
  69. package/lib/en3/objects/En3ImageLike.d.ts +22 -0
  70. package/{src/packages/en3/objects/En3SourceConsumer.ts → lib/en3/objects/En3SourceConsumer.d.ts} +2 -3
  71. package/lib/en3/objects/En3Video.d.ts +12 -0
  72. package/lib/en3/test/En3HTML.d.ts +9 -0
  73. package/lib/en3/test/En3ModifiedMaterial.d.ts +32 -0
  74. package/lib/en3/test/En3Raycaster.d.ts +19 -0
  75. package/lib/en3/utils/coverTexture.d.ts +6 -0
  76. package/lib/en3/utils/dispose.d.ts +2 -0
  77. package/lib/en3/utils/traverseMaterials.d.ts +2 -0
  78. package/lib/en3/utils/traverseMeshes.d.ts +2 -0
  79. package/lib/function-QP7IreXR.cjs +1 -0
  80. package/lib/function-zwSFehNd.js +17 -0
  81. package/lib/image/index.cjs +1 -0
  82. package/lib/image/index.d.ts +10 -0
  83. package/lib/image/index.js +30 -0
  84. package/lib/intersector/index.cjs +1 -0
  85. package/lib/intersector/index.d.ts +8 -0
  86. package/lib/intersector/index.js +55 -0
  87. package/lib/ladder/index.cjs +1 -0
  88. package/lib/ladder/index.d.ts +21 -0
  89. package/lib/ladder/index.js +97 -0
  90. package/lib/layout-5SJlcXTY.js +12 -0
  91. package/lib/layout-box/index.cjs +1 -0
  92. package/lib/layout-box/index.d.ts +78 -0
  93. package/lib/layout-box/index.js +235 -0
  94. package/lib/layout-rZzbsLPd.cjs +1 -0
  95. package/lib/loading/index.cjs +1 -0
  96. package/lib/loading/index.d.ts +38 -0
  97. package/lib/loading/index.js +99 -0
  98. package/lib/math-FNUBmQPK.cjs +1 -0
  99. package/lib/math-_a3IpKOc.js +45 -0
  100. package/lib/measurer/CumulativeOffsetLeft.d.ts +4 -0
  101. package/lib/measurer/CumulativeOffsetTop.d.ts +4 -0
  102. package/lib/measurer/Meaurer.d.ts +8 -0
  103. package/lib/measurer/index.cjs +1 -0
  104. package/lib/measurer/index.d.ts +3 -0
  105. package/lib/measurer/index.js +48 -0
  106. package/lib/media/index.cjs +1 -0
  107. package/lib/media/index.d.ts +11 -0
  108. package/lib/media/index.js +33 -0
  109. package/lib/morph/Link.d.ts +6 -0
  110. package/lib/morph/Morph.d.ts +26 -0
  111. package/lib/morph/index.cjs +1 -0
  112. package/lib/morph/index.d.ts +1 -0
  113. package/lib/morph/index.js +182 -0
  114. package/lib/notifier/index.cjs +1 -0
  115. package/lib/notifier/index.d.ts +8 -0
  116. package/lib/notifier/index.js +38 -0
  117. package/lib/number-2bR0KBcX.cjs +1 -0
  118. package/lib/number-bCHB2GAD.js +31 -0
  119. package/lib/order/index.cjs +1 -0
  120. package/lib/order/index.d.ts +13 -0
  121. package/lib/order/index.js +5 -0
  122. package/lib/resizer/index.cjs +1 -0
  123. package/lib/resizer/index.d.ts +10 -0
  124. package/lib/resizer/index.js +45 -0
  125. package/lib/router/Link.d.ts +6 -0
  126. package/lib/router/Route.d.ts +15 -0
  127. package/lib/router/RouteElement.d.ts +14 -0
  128. package/lib/router/Router.d.ts +33 -0
  129. package/lib/router/index.cjs +1 -0
  130. package/lib/router/index.d.ts +3 -0
  131. package/lib/router/index.js +266 -0
  132. package/lib/scroll/ScrollElement.d.ts +40 -0
  133. package/lib/scroll/ScrollUserElement.d.ts +7 -0
  134. package/lib/scroll/ScrollbarElement.d.ts +13 -0
  135. package/lib/scroll/index.cjs +71 -0
  136. package/lib/scroll/index.d.ts +2 -0
  137. package/lib/scroll/index.js +444 -0
  138. package/lib/scroll-entries/index.cjs +1 -0
  139. package/lib/scroll-entries/index.d.ts +17 -0
  140. package/lib/scroll-entries/index.js +56 -0
  141. package/lib/source/SourceClass.d.ts +11 -0
  142. package/lib/source/SourceElement.d.ts +16 -0
  143. package/lib/source/SourceManager.d.ts +13 -0
  144. package/lib/source/SourceSet.d.ts +8 -0
  145. package/lib/source/index.cjs +5 -0
  146. package/lib/source/index.d.ts +4 -0
  147. package/lib/source/index.js +95 -0
  148. package/lib/store/Composed.d.ts +7 -0
  149. package/lib/store/Derived.d.ts +7 -0
  150. package/lib/store/DerivedArray.d.ts +7 -0
  151. package/lib/store/Resource.d.ts +11 -0
  152. package/lib/store/Store.d.ts +32 -0
  153. package/lib/store/StoreRegistry.d.ts +22 -0
  154. package/lib/store/index.cjs +1 -0
  155. package/lib/store/index.d.ts +6 -0
  156. package/lib/store/index.js +96 -0
  157. package/lib/string-GmxZA5Nq.js +31 -0
  158. package/lib/string-WmNOGq16.cjs +1 -0
  159. package/lib/ticker/index.cjs +1 -0
  160. package/lib/ticker/index.d.ts +19 -0
  161. package/lib/ticker/index.js +107 -0
  162. package/lib/utils/array.d.ts +1 -0
  163. package/lib/utils/attributes.d.ts +2 -0
  164. package/lib/utils/browser.d.ts +1 -0
  165. package/lib/utils/canvas.d.ts +6 -0
  166. package/lib/utils/collisions.d.ts +3 -0
  167. package/lib/utils/coordinates.d.ts +13 -0
  168. package/lib/utils/decoding.d.ts +2 -0
  169. package/lib/utils/dev.d.ts +3 -0
  170. package/lib/utils/dom.d.ts +4 -0
  171. package/lib/utils/easings.d.ts +17 -0
  172. package/lib/utils/file.d.ts +1 -0
  173. package/lib/utils/function.d.ts +2 -0
  174. package/lib/utils/index.cjs +1 -0
  175. package/lib/utils/index.d.ts +19 -0
  176. package/lib/utils/index.js +203 -0
  177. package/lib/utils/layout.d.ts +3 -0
  178. package/lib/utils/math.d.ts +11 -0
  179. package/lib/utils/number.d.ts +3 -0
  180. package/lib/utils/object.d.ts +7 -0
  181. package/lib/utils/string.d.ts +5 -0
  182. package/lib/utils/ts-shape.d.ts +19 -0
  183. package/lib/utils/ts-utility.d.ts +19 -0
  184. package/lib/video/index.cjs +1 -0
  185. package/lib/video/index.d.ts +11 -0
  186. package/lib/video/index.js +37 -0
  187. package/package.json +120 -118
  188. package/.prettierignore +0 -16
  189. package/.prettierrc +0 -9
  190. package/.vscode/extensions.json +0 -4
  191. package/.vscode/launch.json +0 -11
  192. package/.vscode/settings.json +0 -18
  193. package/index.html +0 -32
  194. package/public/vite.svg +0 -1
  195. package/src/packages/animation/Animated.ts +0 -189
  196. package/src/packages/animation/Damped.ts +0 -39
  197. package/src/packages/animation/Tweened.ts +0 -51
  198. package/src/packages/animation/index.ts +0 -10
  199. package/src/packages/attribute/index.ts +0 -59
  200. package/src/packages/canvas-2d/index.ts +0 -137
  201. package/src/packages/controls/Controls.ts +0 -15
  202. package/src/packages/controls/KeyboardControls.ts +0 -63
  203. package/src/packages/controls/LinearControls.ts +0 -27
  204. package/src/packages/controls/User.ts +0 -20
  205. package/src/packages/controls/WheelControls.ts +0 -92
  206. package/src/packages/controls/index.ts +0 -5
  207. package/src/packages/css-unit-parser/index.ts +0 -32
  208. package/src/packages/custom-element/index.ts +0 -19
  209. package/src/packages/device/Device.ts +0 -113
  210. package/src/packages/device/Viewport.ts +0 -67
  211. package/src/packages/device/index.ts +0 -2
  212. package/src/packages/element-constructor/ElementConstructor.ts +0 -577
  213. package/src/packages/element-constructor/htmlTags.ts +0 -679
  214. package/src/packages/element-constructor/index.ts +0 -4
  215. package/src/packages/element-constructor/specialObjects.ts +0 -8
  216. package/src/packages/element-constructor/svgTags.ts +0 -588
  217. package/src/packages/en3/attachments/En3SourceManager.ts +0 -116
  218. package/src/packages/en3/core/en3.ts +0 -306
  219. package/src/packages/en3/index.ts +0 -52
  220. package/src/packages/en3/instances/en3LazyLoader.ts +0 -22
  221. package/src/packages/en3/libs/MeshoptDecoder.js +0 -138
  222. package/src/packages/en3/loaders/en3GLTFLoader.ts +0 -54
  223. package/src/packages/en3/loaders/en3TextureLoader.ts +0 -3
  224. package/src/packages/en3/objects/En3Clip.ts +0 -53
  225. package/src/packages/en3/objects/En3ClipHelpers.ts +0 -12
  226. package/src/packages/en3/objects/En3GLTF.ts +0 -35
  227. package/src/packages/en3/objects/En3Image.ts +0 -18
  228. package/src/packages/en3/objects/En3ImageLike.ts +0 -101
  229. package/src/packages/en3/objects/En3Video.ts +0 -88
  230. package/src/packages/en3/test/En3HTML.ts +0 -55
  231. package/src/packages/en3/test/En3ModifiedMaterial.ts +0 -221
  232. package/src/packages/en3/test/En3Raycaster.ts +0 -187
  233. package/src/packages/en3/utils/coverTexture.ts +0 -29
  234. package/src/packages/en3/utils/dispose.ts +0 -27
  235. package/src/packages/en3/utils/traverseMaterials.ts +0 -10
  236. package/src/packages/en3/utils/traverseMeshes.ts +0 -9
  237. package/src/packages/image/index.ts +0 -19
  238. package/src/packages/intersector/index.ts +0 -83
  239. package/src/packages/ladder/index.ts +0 -112
  240. package/src/packages/layout-box/index.ts +0 -417
  241. package/src/packages/loading/index.ts +0 -131
  242. package/src/packages/measurer/CumulativeOffsetLeft.ts +0 -8
  243. package/src/packages/measurer/CumulativeOffsetTop.ts +0 -8
  244. package/src/packages/measurer/Meaurer.ts +0 -38
  245. package/src/packages/measurer/index.ts +0 -3
  246. package/src/packages/media/index.ts +0 -38
  247. package/src/packages/morph/Link.ts +0 -32
  248. package/src/packages/morph/Morph.ts +0 -246
  249. package/src/packages/morph/index.ts +0 -10
  250. package/src/packages/notifier/index.ts +0 -41
  251. package/src/packages/order/index.ts +0 -14
  252. package/src/packages/resizer/index.ts +0 -55
  253. package/src/packages/router/Link.ts +0 -33
  254. package/src/packages/router/Route.ts +0 -152
  255. package/src/packages/router/RouteElement.ts +0 -34
  256. package/src/packages/router/Router.ts +0 -190
  257. package/src/packages/router/index.ts +0 -13
  258. package/src/packages/scroll/ScrollElement.ts +0 -618
  259. package/src/packages/scroll/ScrollUserElement.ts +0 -21
  260. package/src/packages/scroll/ScrollbarElement.ts +0 -170
  261. package/src/packages/scroll/index.ts +0 -2
  262. package/src/packages/scroll-entries/index.ts +0 -74
  263. package/src/packages/source/SourceClass.ts +0 -77
  264. package/src/packages/source/SourceElement.ts +0 -177
  265. package/src/packages/source/SourceManager.ts +0 -61
  266. package/src/packages/source/SourceSet.ts +0 -52
  267. package/src/packages/source/index.ts +0 -8
  268. package/src/packages/store/Composed.ts +0 -33
  269. package/src/packages/store/Derived.ts +0 -24
  270. package/src/packages/store/DerivedArray.ts +0 -36
  271. package/src/packages/store/Resource.ts +0 -38
  272. package/src/packages/store/Store.ts +0 -144
  273. package/src/packages/store/StoreRegistry.ts +0 -105
  274. package/src/packages/store/index.ts +0 -23
  275. package/src/packages/ticker/index.ts +0 -173
  276. package/src/packages/utils/array.ts +0 -3
  277. package/src/packages/utils/attributes.ts +0 -19
  278. package/src/packages/utils/browser.ts +0 -2
  279. package/src/packages/utils/canvas.ts +0 -46
  280. package/src/packages/utils/collisions.ts +0 -12
  281. package/src/packages/utils/coordinates.ts +0 -40
  282. package/src/packages/utils/decoding.ts +0 -11
  283. package/src/packages/utils/dev.ts +0 -5
  284. package/src/packages/utils/dom.ts +0 -48
  285. package/src/packages/utils/easings.ts +0 -69
  286. package/src/packages/utils/file.ts +0 -17
  287. package/src/packages/utils/function.ts +0 -29
  288. package/src/packages/utils/index.ts +0 -61
  289. package/src/packages/utils/layout.ts +0 -22
  290. package/src/packages/utils/math.ts +0 -74
  291. package/src/packages/utils/number.ts +0 -26
  292. package/src/packages/utils/object.ts +0 -108
  293. package/src/packages/utils/string.ts +0 -49
  294. package/src/packages/utils/ts-shape.ts +0 -25
  295. package/src/packages/utils/ts-utility.ts +0 -47
  296. package/src/packages/video/index.ts +0 -39
  297. package/src/playground/index.ts +0 -0
  298. package/tsconfig.json +0 -31
  299. package/vite.config.ts +0 -65
@@ -1,131 +0,0 @@
1
- import { Notifier } from '$packages/notifier'
2
- import { debounce } from '$packages/utils'
3
-
4
- export interface LoadingProgressDetail {
5
- loaded: number
6
- total: number
7
- progress: number
8
- namespace: string
9
- }
10
-
11
- export interface LoadingErrorDetail {
12
- namespace: string
13
- url: string
14
- }
15
-
16
- export interface LoadingCompleteDetail {
17
- total: number
18
- }
19
-
20
- export type LoadingProgressSubscriber = (detail: LoadingProgressDetail) => void
21
- export type LoadingErrorSubscriber = (detail: LoadingErrorDetail) => void
22
- export type LoadingCompleteSubscriber = (detail: LoadingCompleteDetail) => void
23
-
24
- class Loading {
25
- #counter: Map<string, { total: number; loaded: number }> = new Map()
26
- #progressEvent = new Notifier<LoadingProgressSubscriber>()
27
- #completeEvent = new Notifier<LoadingCompleteSubscriber>()
28
- #errorEvent = new Notifier<LoadingErrorSubscriber>()
29
- #isComplete = false
30
-
31
- public get progressEvent() {
32
- return this.#progressEvent
33
- }
34
-
35
- public get completeEvent() {
36
- return this.#completeEvent
37
- }
38
-
39
- public get errorEvent() {
40
- return this.#errorEvent
41
- }
42
-
43
- public get _counter() {
44
- return this.#counter
45
- }
46
-
47
- public get isComplete() {
48
- return this.#isComplete
49
- }
50
-
51
- public reset() {
52
- this.#isComplete = false
53
- this.#counter.clear()
54
- }
55
-
56
- public setTotal(namespace: string, total: number = 1) {
57
- if (this.#isComplete) {
58
- return
59
- }
60
-
61
- this.#counter.set(namespace, { loaded: 0, total: total })
62
- }
63
-
64
- public setLoaded(namespace: string, loaded: number = 1) {
65
- if (this.#isComplete) {
66
- return
67
- }
68
-
69
- if (this.#counter.has(namespace)) {
70
- const ns = this.#counter.get(namespace)!
71
-
72
- if (ns.loaded !== loaded) {
73
- this.#counter.set(namespace, { ...ns, loaded: loaded })
74
- this.#progressListener(namespace)
75
- }
76
- }
77
- }
78
-
79
- public setError(namespace: string, url: string) {
80
- if (this.#isComplete) {
81
- return
82
- }
83
-
84
- if (this.#counter.has(namespace)) {
85
- const ns = this.#counter.get(namespace)!
86
- this.#counter.set(namespace, { ...ns, total: ns.total - 1 })
87
- this.#errorEvent.notify({
88
- namespace,
89
- url,
90
- })
91
- }
92
- }
93
-
94
- public getStats() {
95
- return Array.from(this.#counter).reduce(
96
- (p, c) => {
97
- return { loaded: p.loaded + c[1].loaded, total: p.total + c[1].total }
98
- },
99
- { loaded: 0, total: 0 }
100
- )
101
- }
102
-
103
- #progressListener = (namespace: string) => {
104
- const { loaded, total } = this.getStats()
105
-
106
- this.#progressEvent.notify({
107
- progress: loaded / total,
108
- loaded,
109
- total,
110
- namespace,
111
- })
112
-
113
- this.#tryComplete()
114
- }
115
-
116
- #tryComplete = debounce(() => {
117
- const { loaded, total } = this.getStats()
118
-
119
- if (loaded === total) {
120
- this.#isComplete = true
121
-
122
- const { total } = this.getStats()
123
-
124
- this.#completeEvent.notify({
125
- total,
126
- })
127
- }
128
- }, 150)
129
- }
130
-
131
- export const loading = new Loading()
@@ -1,8 +0,0 @@
1
- import { getCumulativeOffsetLeft } from '$packages/utils'
2
- import { Measurer } from './Meaurer'
3
-
4
- export class CumulativeOffsetLeft extends Measurer {
5
- protected handleResize() {
6
- return getCumulativeOffsetLeft(this.element)
7
- }
8
- }
@@ -1,8 +0,0 @@
1
- import { getCumulativeOffsetTop } from '$packages/utils'
2
- import { Measurer } from './Meaurer'
3
-
4
- export class CumulativeOffsetTop extends Measurer {
5
- protected handleResize() {
6
- return getCumulativeOffsetTop(this.element)
7
- }
8
- }
@@ -1,38 +0,0 @@
1
- import { isBrowser } from '$packages/utils'
2
-
3
- export abstract class Measurer {
4
- #element: HTMLElement
5
- #resizeObserver: ResizeObserver = null!
6
- #value = 0
7
-
8
- constructor(element: HTMLElement) {
9
- this.#element = element
10
-
11
- if (isBrowser) {
12
- this.#resizeObserver = new ResizeObserver(this.#resizeObserverCallback)
13
- this.#resizeObserver.observe(element)
14
- }
15
- }
16
-
17
- public get element() {
18
- return this.#element
19
- }
20
-
21
- public value = (modifier?: (current: number) => number) => {
22
- return modifier ? modifier(this.#value) : this.#value
23
- }
24
-
25
- public destroy() {
26
- this.#resizeObserver.disconnect()
27
- }
28
-
29
- protected abstract handleResize(): number
30
-
31
- #resizeObserverCallback: ResizeObserverCallback = () => {
32
- this.#value = this.handleResize()
33
-
34
- if (!this.#element.isConnected) {
35
- this.destroy()
36
- }
37
- }
38
- }
@@ -1,3 +0,0 @@
1
- export { Measurer } from './Meaurer'
2
- export { CumulativeOffsetLeft } from './CumulativeOffsetLeft'
3
- export { CumulativeOffsetTop } from './CumulativeOffsetTop'
@@ -1,38 +0,0 @@
1
- import { RESIZE_ORDER } from '$packages/order'
2
- import { resizer } from '$packages/resizer'
3
- import { Store } from '$packages/store'
4
-
5
- export type MediaCallback = () => void
6
-
7
- export type MediaQueries<T extends string = string> = Map<
8
- T,
9
- {
10
- match: MediaCallback
11
- unmatch?: MediaCallback
12
- }
13
- >
14
-
15
- export class Media extends Store<boolean> {
16
- #query: string
17
-
18
- #unsubscribeFromResizer: Function
19
-
20
- constructor(query: string) {
21
- super(false)
22
-
23
- this.#query = query
24
-
25
- this.#unsubscribeFromResizer = resizer.subscribe(() => {
26
- if (matchMedia(this.#query).matches) {
27
- this.current = true
28
- } else {
29
- this.current = false
30
- }
31
- }, RESIZE_ORDER.MEDIA)
32
- }
33
-
34
- public override close() {
35
- super.close()
36
- this.#unsubscribeFromResizer()
37
- }
38
- }
@@ -1,32 +0,0 @@
1
- import { Morph, MorphHistoryAction } from './Morph'
2
-
3
- export class Link {
4
- #morph: Morph
5
- #element: HTMLAnchorElement
6
- #pathname: string
7
- #historyAction: MorphHistoryAction
8
-
9
- constructor(element: HTMLAnchorElement, morph: Morph) {
10
- this.#morph = morph
11
- this.#element = element
12
- this.#pathname = this.#element.getAttribute('href') || '/'
13
- this.#historyAction =
14
- (this.#element.getAttribute('data-history-action') as MorphHistoryAction) || 'push'
15
-
16
- this.#element.addEventListener('click', this.#clickListener)
17
-
18
- if (this.#pathname === location.pathname) {
19
- this.#element.classList.add('current')
20
- }
21
- }
22
-
23
- public destroy() {
24
- this.#element.removeEventListener('click', this.#clickListener)
25
- this.#element.classList.remove('current')
26
- }
27
-
28
- #clickListener = (e: MouseEvent) => {
29
- e.preventDefault()
30
- this.#morph.navigate(this.#pathname, this.#historyAction)
31
- }
32
- }
@@ -1,246 +0,0 @@
1
- import { Notifier } from '$packages/notifier'
2
- import { isBrowser } from '$packages/utils'
3
- import { Link } from './Link'
4
-
5
- export type MorphHistoryAction = 'replace' | 'push' | 'none'
6
-
7
- export interface MorphParameters {
8
- base?: string
9
- waitForHeadToLoad?: boolean
10
- cachePages?: boolean
11
- }
12
-
13
- export interface MorphNavigationEntry {
14
- pathname: string
15
- isCached: boolean
16
- }
17
-
18
- export interface MorphPreprocessorEntry extends MorphNavigationEntry {
19
- resolve: () => void
20
- reject: () => void
21
- }
22
-
23
- export type MorphPreprocessor = (entry: MorphPreprocessorEntry) => void
24
-
25
- export type MorphNavigationCallback = (entry: MorphNavigationEntry) => void
26
-
27
- export type MorphPostprocessor = MorphNavigationCallback
28
-
29
- export class Morph {
30
- #base: string = null!
31
- #waitForHeadToLoad: boolean = null!
32
- #cachePages: boolean = null!
33
- #morphElements: Array<HTMLElement> = null!
34
- #links: Array<Link> = []
35
- #domParser: DOMParser = new DOMParser()
36
- #cache: Map<string, Document> = new Map()
37
- #candidatePathname: string | undefined
38
- #currentPathname: string = null!
39
-
40
- public preprocessor?: MorphPreprocessor
41
- public postprocessor?: MorphPostprocessor
42
-
43
- #beforeNavigationEvent = new Notifier<MorphNavigationCallback>()
44
- #afterNavigationEvent = new Notifier<MorphNavigationCallback>()
45
-
46
- constructor(parameters?: MorphParameters) {
47
- if (isBrowser) {
48
- this.#base = parameters?.base || '/'
49
-
50
- if (parameters?.base) {
51
- this.#base = parameters.base
52
-
53
- if (!parameters.base.endsWith('/')) {
54
- this.#base += '/'
55
- }
56
- } else {
57
- this.#base = '/'
58
- }
59
-
60
- this.#waitForHeadToLoad = parameters?.waitForHeadToLoad === false ? false : true
61
- this.#cachePages = parameters?.cachePages === false ? false : true
62
-
63
- this.#morphElements = this.#getMorphElements(document)
64
-
65
- this.#currentPathname = location.pathname
66
-
67
- this.#findLinks()
68
-
69
- addEventListener('popstate', this.#popStateListener)
70
- }
71
- }
72
-
73
- public beforeNavigationEvent(callback: MorphNavigationCallback) {
74
- return this.#beforeNavigationEvent.subscribe(callback)
75
- }
76
-
77
- public afterNavigationEvent(callback: MorphNavigationCallback) {
78
- return this.#afterNavigationEvent.subscribe(callback)
79
- }
80
-
81
- public async navigate(pathname: string, historyAction: MorphHistoryAction = 'push') {
82
- pathname = this.#preparePathname(pathname)
83
-
84
- if (this.#candidatePathname === pathname || this.#currentPathname === pathname) {
85
- return
86
- }
87
-
88
- this.#candidatePathname = pathname
89
-
90
- const isCached = this.#cache.has(pathname)
91
-
92
- try {
93
- let isOkToSwitch = true
94
-
95
- if (this.preprocessor) {
96
- try {
97
- await new Promise<void>((resolve, reject) => {
98
- this.preprocessor?.({ pathname, resolve, reject, isCached })
99
- })
100
- } catch (e: any) {
101
- if (e) {
102
- console.error(e)
103
- } else {
104
- console.log('Route change canceled')
105
- }
106
- isOkToSwitch = false
107
- }
108
- }
109
-
110
- this.#beforeNavigationEvent.notify({
111
- pathname,
112
- isCached,
113
- })
114
-
115
- if (!isOkToSwitch || this.#candidatePathname !== pathname) {
116
- return
117
- }
118
-
119
- const newDocument = await this.#fetchDocument(pathname)
120
-
121
- if (this.#cachePages) {
122
- this.#cache.set(pathname, newDocument)
123
- }
124
-
125
- if (this.#candidatePathname !== pathname) {
126
- return
127
- }
128
-
129
- const currentHeadChildren = Array.from(document.head.children)
130
- const newHeadChildren = Array.from((newDocument.head.cloneNode(true) as HTMLElement).children)
131
-
132
- const identicalHeadChildren = this.#intersectElements(currentHeadChildren, newHeadChildren)
133
- const removeHeadChildren = this.#excludeElements(currentHeadChildren, identicalHeadChildren)
134
- const addHeadChildren = this.#excludeElements(newHeadChildren, identicalHeadChildren)
135
-
136
- removeHeadChildren.forEach((child) => child.remove())
137
- addHeadChildren.forEach((child) => document.head.appendChild(child))
138
-
139
- const elementsWithLoad = addHeadChildren.filter(
140
- (child) =>
141
- child.tagName === 'STYLE' || child.tagName === 'SCRIPT' || child.tagName === 'LINK'
142
- ) as Array<HTMLLinkElement>
143
-
144
- if (this.#waitForHeadToLoad && elementsWithLoad.length) {
145
- await new Promise<void>(async (res) => {
146
- let counter = 0
147
-
148
- for await (const element of elementsWithLoad) {
149
- element.onload = () => {
150
- counter++
151
-
152
- if (counter === elementsWithLoad.length) {
153
- res()
154
- }
155
- }
156
- }
157
- })
158
- }
159
-
160
- const newMorphElements = this.#getMorphElements(newDocument)
161
-
162
- this.#morphElements.forEach((morphElement, i) => {
163
- const newMorphElement = newMorphElements[i]
164
- morphElement.innerHTML = newMorphElement.innerHTML
165
- })
166
-
167
- this.#currentPathname = pathname
168
-
169
- if (historyAction === 'push') {
170
- history.pushState(pathname, '', pathname + location.search)
171
- } else if (historyAction === 'replace') {
172
- history.replaceState(pathname, '', pathname + location.search)
173
- }
174
-
175
- this.#findLinks()
176
-
177
- this.postprocessor?.({ pathname, isCached })
178
- this.#afterNavigationEvent.notify({ pathname, isCached })
179
- } catch (e) {
180
- console.error(e)
181
- }
182
-
183
- this.#candidatePathname = undefined
184
- }
185
-
186
- async #fetchDocument(pathname: string) {
187
- const cahcnedDocument = this.#cache.get(pathname)
188
-
189
- if (cahcnedDocument) {
190
- return cahcnedDocument
191
- }
192
-
193
- const fetchResult = await fetch(pathname)
194
- const text = await fetchResult.text()
195
- const document = this.#domParser.parseFromString(text, 'text/html')
196
- return document
197
- }
198
-
199
- #preparePathname(pathname: string) {
200
- pathname = pathname.replace(this.#base, '')
201
-
202
- if (pathname.startsWith('/')) {
203
- pathname = pathname.slice(1)
204
- }
205
-
206
- return this.#base + pathname
207
- }
208
-
209
- #findLinks() {
210
- const linkElements = [...document.documentElement.querySelectorAll('a')].filter((a) =>
211
- a.getAttribute('href')?.startsWith('/')
212
- )
213
-
214
- this.#links.forEach((link) => link.destroy())
215
-
216
- this.#links = linkElements.map((element) => new Link(element, this))
217
- }
218
-
219
- #getMorphElements(document: Document) {
220
- const elements = document.querySelectorAll<HTMLElement>('[data-morph]')
221
- return elements.length ? [...elements] : [document.body]
222
- }
223
-
224
- #intersectElements(elements: Array<Element>, elementsToIntersect: Array<Element>) {
225
- return elements.filter((element) =>
226
- elementsToIntersect.find(
227
- (elementToIntersect) => elementToIntersect.outerHTML === element.outerHTML
228
- )
229
- )
230
- }
231
-
232
- #excludeElements(elements: Array<Element>, elementsToExclude: Array<Element>) {
233
- return elements.filter(
234
- (element) =>
235
- !elementsToExclude.find(
236
- (elementToExclude) => elementToExclude.outerHTML === element.outerHTML
237
- )
238
- )
239
- }
240
-
241
- #popStateListener = (event: PopStateEvent) => {
242
- if (event.state) {
243
- this.navigate(event.state, 'none')
244
- }
245
- }
246
- }
@@ -1,10 +0,0 @@
1
- export {
2
- Morph,
3
- type MorphPostprocessor,
4
- type MorphNavigationCallback,
5
- type MorphPreprocessor,
6
- type MorphPreprocessorEntry,
7
- type MorphNavigationEntry,
8
- type MorphParameters,
9
- type MorphHistoryAction,
10
- } from './Morph'
@@ -1,41 +0,0 @@
1
- export type ProviderCallback = (...args: any[]) => void
2
-
3
- interface NotifierSubscriber {
4
- callback: ProviderCallback
5
- order: number
6
- }
7
-
8
- export class Notifier<Callback extends ProviderCallback = ProviderCallback> {
9
- #subscribers: Array<NotifierSubscriber> = []
10
-
11
- public close() {
12
- this.#subscribers = []
13
- }
14
-
15
- public subscribe(callback: Callback, order: number = 0) {
16
- if (this.#subscribers.find((subscriber) => subscriber.callback === callback)) {
17
- return () => {}
18
- }
19
-
20
- this.#subscribers.push({
21
- callback,
22
- order,
23
- })
24
-
25
- this.#subscribers = this.#subscribers.sort((a, b) => a.order - b.order)
26
-
27
- return () => {
28
- this.unsubscribe(callback)
29
- }
30
- }
31
-
32
- public unsubscribe(callback: Callback) {
33
- this.#subscribers = this.#subscribers.filter((subscriber) => subscriber.callback !== callback)
34
- }
35
-
36
- public notify(...parameters: Parameters<Callback>) {
37
- for (const subscriber of this.#subscribers) {
38
- subscriber.callback(...parameters)
39
- }
40
- }
41
- }
@@ -1,14 +0,0 @@
1
- export enum RESIZE_ORDER {
2
- DEVICE = -100000,
3
- MEDIA,
4
- SOURCE_MANAGER,
5
- SCROLL,
6
- LAYOUT_BOX,
7
- EN3 = 100000,
8
- }
9
-
10
- export enum TICK_ORDER {
11
- SCROLL = -100000,
12
- LAYOUT_BOX,
13
- EN3 = 100000,
14
- }
@@ -1,55 +0,0 @@
1
- import { Notifier } from '$packages/notifier'
2
- import { debounce, isBrowser } from '$packages/utils'
3
-
4
- export type ResizerCallback = () => void
5
-
6
- export const dispatchResizeEvent = debounce((cause?: string) => {
7
- if (cause) {
8
- window.dispatchEvent(
9
- new CustomEvent('resize', {
10
- detail: {
11
- cause: cause,
12
- },
13
- })
14
- )
15
- } else {
16
- window.dispatchEvent(new Event('resize'))
17
- }
18
- }, 0)
19
-
20
- class Resizer extends Notifier<ResizerCallback> {
21
- #isResizeScheduled = false
22
-
23
- constructor() {
24
- super()
25
-
26
- if (isBrowser) {
27
- addEventListener('resize', this.#resizeListener)
28
- this.#resizeListener()
29
- }
30
- }
31
-
32
- public subscribe(callback: ResizerCallback, order?: number) {
33
- const unsub = super.subscribe(callback, order)
34
-
35
- if (!this.#isResizeScheduled) {
36
- callback()
37
- }
38
-
39
- return unsub
40
- }
41
-
42
- #resizeListener = () => {
43
- if (!this.#isResizeScheduled) {
44
- this.#isResizeScheduled = true
45
- this.#resize()
46
- }
47
- }
48
-
49
- #resize = debounce(() => {
50
- this.notify()
51
- this.#isResizeScheduled = false
52
- }, 0)
53
- }
54
-
55
- export const resizer = new Resizer()
@@ -1,33 +0,0 @@
1
- import { Router, RouterHistoryAction } from './Router'
2
-
3
- export class Link {
4
- #router: Router
5
- #element: HTMLElement
6
- #pathname: string
7
- #historyAction: RouterHistoryAction
8
-
9
- constructor(router: Router, element: HTMLElement) {
10
- this.#router = router
11
- this.#element = element
12
- this.#pathname = this.#element.getAttribute('href') || '/'
13
- this.#historyAction =
14
- (this.#element.getAttribute('data-history-action') as RouterHistoryAction) || 'push'
15
-
16
- this.#element.addEventListener('click', this.#clickListener)
17
-
18
- if (location.pathname === this.#pathname) {
19
- this.#element.classList.add('current')
20
- }
21
- }
22
-
23
- public destroy() {
24
- this.#element.removeEventListener('click', this.#clickListener)
25
- this.#element.classList.remove('current')
26
- }
27
-
28
- #clickListener = (e: Event) => {
29
- e.preventDefault()
30
-
31
- this.#router.navigate(this.#pathname, this.#historyAction)
32
- }
33
- }