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,189 +0,0 @@
1
- import { StoreOptions, StoreEntry, Store, StoreCallback } from '$packages/store'
2
- import { ticker, TickerCallbackEntry, TickerCallback, TickerAddOptions } from '$packages/ticker'
3
- import { ElementOrSelector, clamp, fix } from '$packages/utils'
4
-
5
- export interface AnimatedOptions extends StoreOptions<number>, TickerAddOptions {
6
- min?: number | AnimatedEdgeFunction
7
- max?: number | AnimatedEdgeFunction
8
- }
9
-
10
- export type AnimatedEdgeFunction = () => number
11
-
12
- export interface AnimatedEntry extends StoreEntry<number> {
13
- min: number
14
- max: number
15
- delta: number
16
- progress: number
17
- direction: number
18
- speed: number
19
- }
20
-
21
- export abstract class Animated<Entry extends AnimatedEntry = AnimatedEntry> extends Store<
22
- number,
23
- Entry
24
- > {
25
- #maxFPS: number | undefined
26
- #order: number | undefined
27
- #culling: ElementOrSelector | undefined
28
- #target: number
29
- #min: AnimatedEdgeFunction
30
- #max: AnimatedEdgeFunction
31
- #setter: Animated | undefined
32
- #isRunning = new Store(false)
33
- #direction = 0
34
- #speed = 0
35
-
36
- constructor(options?: AnimatedOptions) {
37
- super(0, options)
38
-
39
- this.#order = options?.order
40
- this.#maxFPS = options?.maxFPS
41
- this.#culling = options?.culling
42
- this.#min = this.#getEdgeFunction(options?.min)
43
- this.#max = this.#getEdgeFunction(options?.max)
44
- this.#target = this.current = 0
45
- }
46
-
47
- public get target() {
48
- return this.#target
49
- }
50
-
51
- public get isRunning() {
52
- return this.#isRunning
53
- }
54
-
55
- public get direction() {
56
- return this.#direction
57
- }
58
-
59
- public get maxFPS() {
60
- return this.#maxFPS
61
- }
62
-
63
- public get speed() {
64
- return this.#speed
65
- }
66
-
67
- public get min(): number {
68
- return this.#min()
69
- }
70
-
71
- public set min(value: number | AnimatedEdgeFunction | undefined) {
72
- this.#min = this.#getEdgeFunction(value)
73
- this.set(this.#target)
74
- this.current = this.#target
75
- }
76
-
77
- public get max(): number {
78
- return this.#max()
79
- }
80
-
81
- public set max(value: number | AnimatedEdgeFunction | undefined) {
82
- this.#max = this.#getEdgeFunction(value)
83
- this.set(this.#target)
84
- this.current = this.#target
85
- }
86
-
87
- public get delta() {
88
- return this.max - this.min
89
- }
90
-
91
- public get progress() {
92
- return this.delta ? fix((this.current - this.min) / this.delta, 6) : 0
93
- }
94
-
95
- public get setter() {
96
- return this.#setter
97
- }
98
-
99
- public override get entry(): Entry {
100
- return {
101
- ...super.entry,
102
- min: this.min,
103
- max: this.max,
104
- delta: this.delta,
105
- direction: this.direction,
106
- progress: this.progress,
107
- speed: this.speed,
108
- }
109
- }
110
-
111
- public set setter(animated: Animated | undefined) {
112
- this.#setter?.unsubscribe(this.#setterListener)
113
- this.#setter = animated
114
- this.#setter?.subscribe(this.#setterListener)
115
- }
116
-
117
- public set(value: number, equalize = false) {
118
- const previous = this.#target
119
-
120
- this.#target = clamp(value, this.min, this.max)
121
-
122
- if (equalize) {
123
- this.current = this.#target
124
- }
125
-
126
- if (this.#target !== previous) {
127
- this.#speed = 0
128
- this.#direction = Math.sign(value - this.#target) || 1
129
- this.update()
130
- }
131
- }
132
-
133
- public shift(value: number, equalize = false) {
134
- this.set(this.#target + value, equalize)
135
- }
136
-
137
- public override close() {
138
- super.close()
139
-
140
- this.unlistenAnimationFrame()
141
-
142
- this.#setter?.unsubscribe(this.#setterListener)
143
- this.#setter = undefined
144
- }
145
-
146
- public override reset() {
147
- this.set(this.initial, true)
148
- super.reset()
149
- this.unlistenAnimationFrame()
150
- }
151
-
152
- public listenAnimationFrame() {
153
- this.#isRunning.current = true
154
- ticker.subscribe(this.#animationFrameListener, {
155
- maxFPS: this.#maxFPS,
156
- order: this.#order,
157
- culling: this.#culling,
158
- })
159
- }
160
-
161
- public unlistenAnimationFrame() {
162
- this.#speed = 0
163
- this.#isRunning.current = false
164
- ticker.unsubscribe(this.#animationFrameListener)
165
- }
166
-
167
- protected abstract update(): void
168
-
169
- protected abstract handleAnimationFrame(e: TickerCallbackEntry): void
170
-
171
- #setterListener: StoreCallback<AnimatedEntry> = (e) => {
172
- this.set(e.current)
173
- }
174
-
175
- #animationFrameListener: TickerCallback = (e) => {
176
- const current = this.current
177
-
178
- this.handleAnimationFrame(e)
179
-
180
- const delta = Math.abs(current - this.target)
181
-
182
- this.#speed = delta / e.elapsed
183
- }
184
-
185
- #getEdgeFunction(value: number | AnimatedEdgeFunction | undefined) {
186
- const v = value || 0
187
- return typeof v === 'function' ? v : () => v
188
- }
189
- }
@@ -1,39 +0,0 @@
1
- import { TickerCallbackEntry } from '$packages/ticker'
2
- import { damp, fix } from '$packages/utils'
3
- import { AnimatedOptions, Animated } from './Animated'
4
-
5
- export interface DampedOptions extends AnimatedOptions {
6
- damping?: number
7
- }
8
-
9
- export class Damped extends Animated {
10
- public damping: number
11
-
12
- constructor(options?: DampedOptions) {
13
- super({
14
- ...options,
15
- min: options?.min ?? -Infinity,
16
- max: options?.max ?? Infinity,
17
- })
18
-
19
- this.damping = options?.damping || 0
20
- }
21
-
22
- protected update() {
23
- if (this.damping) {
24
- this.listenAnimationFrame()
25
- } else {
26
- this.current = this.target
27
- this.unlistenAnimationFrame()
28
- }
29
- }
30
-
31
- protected handleAnimationFrame(e: TickerCallbackEntry) {
32
- if (fix(this.current, 4) === fix(this.target, 4)) {
33
- this.unlistenAnimationFrame()
34
- this.current = this.target
35
- }
36
-
37
- this.current = damp(this.current, this.target, this.damping, e.elapsed)
38
- }
39
- }
@@ -1,51 +0,0 @@
1
- import { TickerCallbackEntry } from '$packages/ticker'
2
- import { EasingFunction, linear } from '$packages/utils'
3
- import { AnimatedOptions, Animated } from './Animated'
4
-
5
- export interface TweenedOptions extends AnimatedOptions {
6
- easing?: EasingFunction
7
- }
8
-
9
- export class Tweened extends Animated {
10
- public easing: EasingFunction
11
-
12
- constructor(options?: TweenedOptions) {
13
- super({
14
- ...options,
15
- min: options?.min || 0,
16
- max: options?.max || 1000,
17
- })
18
-
19
- this.easing = options?.easing || linear
20
- }
21
-
22
- public start() {
23
- this.listenAnimationFrame()
24
- }
25
-
26
- public pause() {
27
- this.unlistenAnimationFrame()
28
- }
29
-
30
- public stop() {
31
- this.reset()
32
- }
33
-
34
- public override get max() {
35
- return super.max
36
- }
37
-
38
- protected update() {
39
- const normalized = (this.target - this.min) / (this.delta || 1)
40
- const eased = this.easing(normalized)
41
- this.current = this.min + eased * this.delta
42
- }
43
-
44
- protected handleAnimationFrame(e: TickerCallbackEntry) {
45
- this.shift(e.elapsed)
46
-
47
- if ((e.elapsed && this.current === 0) || this.current === this.delta) {
48
- this.unlistenAnimationFrame()
49
- }
50
- }
51
- }
@@ -1,10 +0,0 @@
1
- export {
2
- Animated,
3
- type AnimatedOptions,
4
- type AnimatedEdgeFunction,
5
- type AnimatedEntry,
6
- } from './Animated'
7
-
8
- export { Tweened, type TweenedOptions } from './Tweened'
9
-
10
- export { Damped, type DampedOptions } from './Damped'
@@ -1,59 +0,0 @@
1
- import { Store, StoreOptions } from '$packages/store'
2
- import { ElementOrSelector, isBrowser, getElement, parseAttributeValue } from '$packages/utils'
3
-
4
- export class Attribute<T extends string | number | boolean> extends Store<T> {
5
- #element: HTMLElement | null = null
6
- #name: string
7
- #mutationObserver: MutationObserver = null!
8
-
9
- constructor(
10
- elementOrSelector: ElementOrSelector,
11
- name: string,
12
- defaultValue: T,
13
- options?: StoreOptions<T>
14
- ) {
15
- super(defaultValue, options)
16
-
17
- this.#name = name
18
-
19
- this.subscribe((e) => {
20
- this.#element?.setAttribute(this.#name, e.current.toString())
21
- })
22
-
23
- if (isBrowser) {
24
- this.#element = getElement(elementOrSelector)!
25
-
26
- this.#mutationObserver = new MutationObserver((mutations) => {
27
- mutations.forEach((mutation) => {
28
- if (mutation.type === 'attributes' && mutation.attributeName === this.#name) {
29
- this.#tryUpdate()
30
- }
31
- })
32
- })
33
- }
34
- }
35
-
36
- public unobserve() {
37
- if (isBrowser) {
38
- this.#mutationObserver.disconnect()
39
- }
40
- }
41
-
42
- public observe() {
43
- if (isBrowser && this.#element) {
44
- this.#mutationObserver.observe(this.#element, {
45
- attributes: true,
46
- })
47
-
48
- this.#tryUpdate()
49
- }
50
- }
51
-
52
- #tryUpdate() {
53
- const value = this.#element!.getAttribute(this.#name)
54
-
55
- if (value != undefined) {
56
- this.current = parseAttributeValue(value) as T
57
- }
58
- }
59
- }
@@ -1,137 +0,0 @@
1
- import { define, CustomElement } from '$packages/custom-element'
2
- import { Notifier } from '$packages/notifier'
3
- import { resizer } from '$packages/resizer'
4
- import { ticker, TickerCallback } from '$packages/ticker'
5
- import { clamp } from '$packages/utils'
6
-
7
- export interface Canvas2DRenderDetail {
8
- pixelRatio: number
9
- width: number
10
- height: number
11
- element: HTMLElement
12
- canvasElement: HTMLElement
13
- context: CanvasRenderingContext2D
14
- timestamp: number
15
- elapsed: number
16
- }
17
-
18
- export type Canvas2DRenderCallback = (detail: Canvas2DRenderDetail) => void
19
-
20
- @define('canvas-2d')
21
- export class Canvas2DElement extends CustomElement {
22
- #renderEvent = new Notifier<Canvas2DRenderCallback>()
23
-
24
- #canvasElement: HTMLCanvasElement = null!
25
- #context: CanvasRenderingContext2D = null!
26
-
27
- #width = 0
28
- #height = 0
29
- #pixelRatio = 1
30
-
31
- #timestamp = 0
32
- #elapsed = 1
33
-
34
- public get renderEvent() {
35
- return this.#renderEvent
36
- }
37
-
38
- public get canvasElement() {
39
- return this.#canvasElement
40
- }
41
-
42
- public get context() {
43
- return this.#context
44
- }
45
-
46
- public get pixelRatio() {
47
- return this.#pixelRatio
48
- }
49
-
50
- public get width() {
51
- return this.#width
52
- }
53
-
54
- public get height() {
55
- return this.#height
56
- }
57
-
58
- public get detail(): Canvas2DRenderDetail {
59
- return {
60
- width: this.#width,
61
- height: this.#height,
62
- element: this,
63
- canvasElement: this.#canvasElement,
64
- pixelRatio: this.#pixelRatio,
65
- context: this.#context,
66
- timestamp: this.#timestamp,
67
- elapsed: this.#elapsed,
68
- }
69
- }
70
-
71
- protected connectedCallback() {
72
- this.style.display = 'block'
73
- this.style.width = '100%'
74
- this.style.height = '100%'
75
-
76
- this.#canvasElement = document.createElement('canvas')
77
-
78
- this.#canvasElement.style.cssText = `
79
- display: block;
80
- width: 100%;
81
- height: 100%;
82
- `
83
-
84
- this.#context = this.#canvasElement.getContext('2d')!
85
-
86
- this.appendChild(this.#canvasElement)
87
-
88
- resizer.subscribe(this.#resizeListener)
89
-
90
- if (!this.hasAttribute('static')) {
91
- ticker.subscribe(this.#tickListener, {
92
- culling: this,
93
- maxFPS: this.hasAttribute('fps') ? parseInt(this.getAttribute('fps')!) : undefined,
94
- })
95
- }
96
- }
97
-
98
- protected disconnectedCallback() {
99
- resizer.unsubscribe(this.#resizeListener)
100
- ticker.unsubscribe(this.#tickListener)
101
-
102
- this.#renderEvent.close()
103
- this.#canvasElement.remove()
104
- this.style.display = ''
105
- this.style.width = ''
106
- this.style.height = ''
107
- }
108
-
109
- #resizeListener = () => {
110
- this.#pixelRatio = clamp(devicePixelRatio, 1, 2)
111
-
112
- const rect = this.getBoundingClientRect()
113
-
114
- this.#width = rect.width
115
- this.#height = rect.height
116
-
117
- this.#canvasElement.width = this.#width * this.pixelRatio
118
- this.#canvasElement.height = this.#height * this.pixelRatio
119
-
120
- this.context.scale(this.pixelRatio, this.pixelRatio)
121
-
122
- this.renderEvent.notify(this.detail)
123
- }
124
-
125
- #tickListener: TickerCallback = (e) => {
126
- this.#timestamp = e.timestamp
127
- this.#elapsed = e.elapsed
128
-
129
- this.#renderEvent.notify(this.detail)
130
- }
131
- }
132
-
133
- declare global {
134
- interface HTMLElementTagNameMap {
135
- 'canvas-2d': Canvas2DElement
136
- }
137
- }
@@ -1,15 +0,0 @@
1
- import { Notifier } from '$packages/notifier'
2
-
3
- export type ControlsValue = number | 'max' | 'min'
4
- export type ControlsCallback = (value: ControlsValue) => void
5
-
6
- export abstract class Controls {
7
- #changeEvent = new Notifier<ControlsCallback>()
8
-
9
- public get changeEvent() {
10
- return this.#changeEvent
11
- }
12
-
13
- public abstract connect(): void
14
- public abstract disconnect(): void
15
- }
@@ -1,63 +0,0 @@
1
- import { isBrowser, getElement } from '$packages/utils'
2
- import { Controls } from './Controls'
3
- import { user } from './User'
4
-
5
- export interface KeyboardControlsOptions {
6
- element?: HTMLElement
7
- }
8
-
9
- export class KeyboardControls extends Controls {
10
- #element: HTMLElement | Window = null!
11
-
12
- constructor(options?: KeyboardControlsOptions) {
13
- super()
14
-
15
- if (isBrowser) {
16
- this.#element = options?.element ? getElement(options.element) || window : window
17
- }
18
- }
19
-
20
- public connect() {
21
- if (isBrowser) {
22
- this.#element.addEventListener('keydown', this.#keydownListener as EventListener)
23
- }
24
- }
25
-
26
- public disconnect() {
27
- if (isBrowser) {
28
- this.#element.removeEventListener('keydown', this.#keydownListener as EventListener)
29
- }
30
- }
31
-
32
- #keydownListener = (e: KeyboardEvent) => {
33
- const dir = e.shiftKey ? -1 : 1
34
-
35
- let interaction = true
36
-
37
- if (e.code === 'Space') {
38
- this.changeEvent.notify(dir * 500)
39
- } else if (e.code === 'ArrowLeft') {
40
- this.changeEvent.notify(-1 * 100)
41
- } else if (e.code === 'ArrowRight') {
42
- this.changeEvent.notify(1 * 100)
43
- } else if (e.code === 'ArrowUp') {
44
- this.changeEvent.notify(-1 * 100)
45
- } else if (e.code === 'ArrowDown') {
46
- this.changeEvent.notify(1 * 100)
47
- } else if (e.code === 'PageUp') {
48
- this.changeEvent.notify(-1 * 1000)
49
- } else if (e.code === 'PageDown') {
50
- this.changeEvent.notify(1 * 1000)
51
- } else if (e.code === 'Home') {
52
- this.changeEvent.notify('min')
53
- } else if (e.code === 'End') {
54
- this.changeEvent.notify('max')
55
- } else {
56
- interaction = false
57
- }
58
-
59
- if (interaction) {
60
- user.registerInteraction()
61
- }
62
- }
63
- }
@@ -1,27 +0,0 @@
1
- import { ticker, TickerCallback } from '$packages/ticker'
2
- import { Controls } from './Controls'
3
-
4
- export interface LinearControlsOptions {
5
- speed?: number
6
- }
7
-
8
- export class LinearControls extends Controls {
9
- speed: number
10
-
11
- constructor(options?: LinearControlsOptions) {
12
- super()
13
- this.speed = options?.speed || 1
14
- }
15
-
16
- public connect() {
17
- ticker.subscribe(this.#animationFrameCallback)
18
- }
19
-
20
- public disconnect() {
21
- ticker.unsubscribe(this.#animationFrameCallback)
22
- }
23
-
24
- #animationFrameCallback: TickerCallback = (e) => {
25
- this.changeEvent.notify(e.elapsed * this.speed)
26
- }
27
- }
@@ -1,20 +0,0 @@
1
- class User {
2
- #idleTimeoutId: ReturnType<typeof setTimeout> | undefined
3
- #isIdle = true
4
-
5
- public get isIdle() {
6
- return this.#isIdle
7
- }
8
-
9
- public registerInteraction() {
10
- clearTimeout(this.#idleTimeoutId)
11
-
12
- this.#isIdle = false
13
-
14
- this.#idleTimeoutId = setTimeout(() => {
15
- this.#isIdle = true
16
- }, 2000)
17
- }
18
- }
19
-
20
- export const user = new User()
@@ -1,92 +0,0 @@
1
- import { Axes2D, isBrowser, getElement } from '$packages/utils'
2
- import { Controls } from './Controls'
3
- import { user } from './User'
4
-
5
- export interface WheelControlsOptions {
6
- axis?: Axes2D
7
- speed?: number
8
- debounce?: boolean
9
- element?: HTMLElement
10
- }
11
-
12
- export class WheelControls extends Controls {
13
- axis: Axes2D
14
- speed: number
15
- debounce: boolean
16
-
17
- #element: HTMLElement | Window = null!
18
-
19
- #timeout: ReturnType<typeof setTimeout> | undefined
20
- #prevEventDate: number
21
-
22
- constructor(options?: WheelControlsOptions) {
23
- super()
24
-
25
- this.axis = options?.axis || 'y'
26
- this.speed = options?.speed || 1
27
- this.debounce = options?.debounce || false
28
-
29
- this.#prevEventDate = Date.now()
30
-
31
- if (isBrowser) {
32
- this.#element = options?.element ? getElement(options.element) || window : window
33
- }
34
- }
35
-
36
- public connect() {
37
- if (isBrowser) {
38
- this.#element.addEventListener('wheel', this.#wheelListener as EventListener, {
39
- passive: false,
40
- })
41
- }
42
- }
43
-
44
- public disconnect() {
45
- if (isBrowser) {
46
- this.#element.removeEventListener('wheel', this.#wheelListener as EventListener)
47
- }
48
- }
49
-
50
- #wheelListener = (event: WheelEvent) => {
51
- let delta = 0
52
-
53
- if (
54
- (this.axis === 'x' && Math.abs(event.deltaY) > Math.abs(event.deltaX)) ||
55
- (this.axis === 'y' && Math.abs(event.deltaX) > Math.abs(event.deltaY))
56
- ) {
57
- return
58
- }
59
-
60
- delta = (this.axis === 'x' ? event.deltaX : event.deltaY) * this.speed
61
-
62
- user.registerInteraction()
63
- event.stopPropagation()
64
- event.preventDefault()
65
-
66
- if (this.debounce) {
67
- const now = Date.now()
68
-
69
- if (now - this.#prevEventDate > 40) {
70
- delta = 100 * Math.sign(delta)
71
- }
72
-
73
- this.#prevEventDate = now
74
-
75
- if (Math.abs(delta) < 100) {
76
- return
77
- }
78
-
79
- if (this.#timeout) {
80
- return
81
- }
82
-
83
- this.changeEvent.notify(delta)
84
-
85
- this.#timeout = setTimeout(() => {
86
- this.#timeout = undefined
87
- }, 80)
88
- } else {
89
- this.changeEvent.notify(delta)
90
- }
91
- }
92
- }