move.gl 0.0.1 → 0.0.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 (463) hide show
  1. package/README.md +185 -11
  2. package/dist/LICENSE +21 -0
  3. package/dist/README.md +212 -0
  4. package/dist/css/move.gl.css +43859 -0
  5. package/dist/css/move.gl.min.css +19 -0
  6. package/dist/js/index.cjs +1171 -0
  7. package/dist/js/index.cjs.map +1 -0
  8. package/dist/js/index.d.cts +184 -0
  9. package/dist/js/index.d.ts +184 -0
  10. package/dist/js/index.mjs +1135 -0
  11. package/dist/js/index.mjs.map +1 -0
  12. package/dist/package.json +68 -0
  13. package/{scss → dist/scss}/classes/_animations.scss +33 -14
  14. package/dist/scss/classes/_controls.scss +314 -0
  15. package/dist/scss/classes/_effects.scss +283 -0
  16. package/dist/scss/classes/_index.scss +28 -0
  17. package/dist/scss/classes/_loaders.scss +779 -0
  18. package/dist/scss/classes/_transforms.scss +138 -0
  19. package/dist/scss/classes/_transitions.scss +264 -0
  20. package/{scss → dist/scss}/dev/_deprecation.scss +6 -3
  21. package/{scss → dist/scss}/dev/_modules.scss +5 -6
  22. package/dist/scss/docs.scss +2344 -0
  23. package/dist/scss/docs.scss.bak +3133 -0
  24. package/dist/scss/functions/_index.scss +22 -0
  25. package/dist/scss/functions/scenes/_bubble.scss +32 -0
  26. package/dist/scss/functions/scenes/_index.scss +21 -0
  27. package/dist/scss/index.scss +17 -0
  28. package/dist/scss/maps/_controls.scss +85 -0
  29. package/dist/scss/maps/_index.scss +22 -0
  30. package/{scss → dist/scss}/mixins/_accessibility.scss +24 -3
  31. package/{scss → dist/scss}/mixins/_boot.scss +4 -4
  32. package/dist/scss/mixins/_index.scss +41 -0
  33. package/dist/scss/mixins/_screensaver.scss +228 -0
  34. package/dist/scss/mixins/_shape.scss +315 -0
  35. package/dist/scss/mixins/animations/_base.scss +403 -0
  36. package/dist/scss/mixins/animations/_beat.scss +137 -0
  37. package/{scss → dist/scss}/mixins/animations/_blink.scss +60 -52
  38. package/dist/scss/mixins/animations/_bounce.scss +306 -0
  39. package/{scss → dist/scss}/mixins/animations/_elastic.scss +26 -22
  40. package/dist/scss/mixins/animations/_fade.scss +393 -0
  41. package/{scss → dist/scss}/mixins/animations/_flash.scss +53 -61
  42. package/dist/scss/mixins/animations/_flip.scss +251 -0
  43. package/{scss → dist/scss}/mixins/animations/_float.scss +47 -32
  44. package/{scss → dist/scss}/mixins/animations/_glow.scss +69 -58
  45. package/dist/scss/mixins/animations/_heartbeat.scss +195 -0
  46. package/dist/scss/mixins/animations/_hinge.scss +118 -0
  47. package/dist/scss/mixins/animations/_index.scss +97 -0
  48. package/dist/scss/mixins/animations/_jello.scss +123 -0
  49. package/dist/scss/mixins/animations/_jiggle.scss +162 -0
  50. package/dist/scss/mixins/animations/_lightspeed.scss +135 -0
  51. package/{scss → dist/scss}/mixins/animations/_nod.scss +57 -65
  52. package/dist/scss/mixins/animations/_pop.scss +153 -0
  53. package/dist/scss/mixins/animations/_pulse.scss +275 -0
  54. package/{scss → dist/scss}/mixins/animations/_ripple.scss +47 -55
  55. package/dist/scss/mixins/animations/_roll.scss +217 -0
  56. package/dist/scss/mixins/animations/_rotate.scss +728 -0
  57. package/dist/scss/mixins/animations/_rubber.scss +115 -0
  58. package/dist/scss/mixins/animations/_scale.scss +382 -0
  59. package/dist/scss/mixins/animations/_shake.scss +233 -0
  60. package/dist/scss/mixins/animations/_slide.scss +501 -0
  61. package/dist/scss/mixins/animations/_spin.scss +322 -0
  62. package/{scss → dist/scss}/mixins/animations/_sway.scss +32 -49
  63. package/{scss → dist/scss}/mixins/animations/_swing.scss +47 -49
  64. package/{scss → dist/scss}/mixins/animations/_tada.scss +44 -42
  65. package/{scss → dist/scss}/mixins/animations/_twist.scss +40 -55
  66. package/{scss → dist/scss}/mixins/animations/_wave.scss +36 -53
  67. package/dist/scss/mixins/animations/_wobble.scss +283 -0
  68. package/dist/scss/mixins/animations/_zoom.scss +394 -0
  69. package/{scss/mixins/mouse → dist/scss/mixins/controls}/_cursor.scss +60 -39
  70. package/dist/scss/mixins/controls/_hover.scss +625 -0
  71. package/dist/scss/mixins/controls/_index.scss +30 -0
  72. package/dist/scss/mixins/controls/_keyboard.scss +300 -0
  73. package/{scss/mixins/mouse → dist/scss/mixins/controls}/_pointer.scss +81 -72
  74. package/dist/scss/mixins/controls/_scroll.scss +460 -0
  75. package/{scss/mixins/scroll → dist/scss/mixins/controls}/_scrollbar.scss +50 -16
  76. package/dist/scss/mixins/controls/_selection.scss +208 -0
  77. package/dist/scss/mixins/controls/_touch.scss +401 -0
  78. package/dist/scss/mixins/effects/_blend.scss +128 -0
  79. package/dist/scss/mixins/effects/_filter.scss +470 -0
  80. package/dist/scss/mixins/effects/_focus.scss +83 -0
  81. package/dist/scss/mixins/effects/_gradient.scss +130 -0
  82. package/dist/scss/mixins/effects/_index.scss +28 -0
  83. package/dist/scss/mixins/effects/_mask.scss +76 -0
  84. package/dist/scss/mixins/effects/_opacity.scss +376 -0
  85. package/dist/scss/mixins/effects/_shadow.scss +429 -0
  86. package/dist/scss/mixins/keyframes/_base.scss +199 -0
  87. package/dist/scss/mixins/keyframes/_index.scss +24 -0
  88. package/dist/scss/mixins/keyframes/animations/_beat.scss +280 -0
  89. package/dist/scss/mixins/keyframes/animations/_blink.scss +82 -0
  90. package/dist/scss/mixins/keyframes/animations/_bounce.scss +292 -0
  91. package/dist/scss/mixins/keyframes/animations/_fade.scss +311 -0
  92. package/dist/scss/mixins/keyframes/animations/_flash.scss +165 -0
  93. package/dist/scss/mixins/keyframes/animations/_flip.scss +266 -0
  94. package/{scss/mixins → dist/scss/mixins/keyframes}/animations/_index.scss +19 -10
  95. package/dist/scss/mixins/keyframes/animations/_jiggle.scss +85 -0
  96. package/dist/scss/mixins/keyframes/animations/_lightspeed.scss +73 -0
  97. package/dist/scss/mixins/keyframes/animations/_nod.scss +79 -0
  98. package/dist/scss/mixins/keyframes/animations/_pop.scss +78 -0
  99. package/dist/scss/mixins/keyframes/animations/_pulse.scss +225 -0
  100. package/dist/scss/mixins/keyframes/animations/_ripple.scss +94 -0
  101. package/dist/scss/mixins/keyframes/animations/_roll.scss +124 -0
  102. package/dist/scss/mixins/keyframes/animations/_rotate.scss +360 -0
  103. package/dist/scss/mixins/keyframes/animations/_rubber.scss +81 -0
  104. package/dist/scss/mixins/keyframes/animations/_scale.scss +308 -0
  105. package/dist/scss/mixins/keyframes/animations/_shake.scss +270 -0
  106. package/dist/scss/mixins/keyframes/animations/_slide.scss +345 -0
  107. package/dist/scss/mixins/keyframes/animations/_spin.scss +270 -0
  108. package/dist/scss/mixins/keyframes/animations/_sway.scss +83 -0
  109. package/dist/scss/mixins/keyframes/animations/_twist.scss +89 -0
  110. package/dist/scss/mixins/keyframes/animations/_wave.scss +90 -0
  111. package/dist/scss/mixins/keyframes/animations/_wobble.scss +293 -0
  112. package/dist/scss/mixins/keyframes/animations/_zoom.scss +345 -0
  113. package/dist/scss/mixins/loaders/_bars.scss +128 -0
  114. package/dist/scss/mixins/loaders/_base.scss +39 -0
  115. package/dist/scss/mixins/loaders/_bubble.scss +395 -0
  116. package/dist/scss/mixins/loaders/_circle.scss +456 -0
  117. package/dist/scss/mixins/loaders/_dots.scss +248 -0
  118. package/dist/scss/mixins/loaders/_graph.scss +542 -0
  119. package/dist/scss/mixins/loaders/_index.scss +77 -0
  120. package/dist/scss/mixins/loaders/_line.scss +471 -0
  121. package/dist/scss/mixins/loaders/_objects.scss +563 -0
  122. package/dist/scss/mixins/loaders/_progress.scss +477 -0
  123. package/dist/scss/mixins/loaders/_rect.scss +480 -0
  124. package/dist/scss/mixins/loaders/_rings.scss +377 -0
  125. package/dist/scss/mixins/loaders/_skeleton.scss +461 -0
  126. package/dist/scss/mixins/loaders/_special.scss +611 -0
  127. package/dist/scss/mixins/loaders/_spinner.scss +175 -0
  128. package/dist/scss/mixins/loaders/_text.scss +446 -0
  129. package/{scss → dist/scss}/mixins/transforms/_flip.scss +16 -18
  130. package/dist/scss/mixins/transforms/_index.scss +28 -0
  131. package/dist/scss/mixins/transforms/_matrix.scss +18 -0
  132. package/{scss → dist/scss}/mixins/transforms/_perspective.scss +18 -1
  133. package/{scss → dist/scss}/mixins/transforms/_rotate.scss +9 -14
  134. package/{scss → dist/scss}/mixins/transforms/_scale.scss +16 -1
  135. package/{scss → dist/scss}/mixins/transforms/_skew.scss +16 -2
  136. package/{scss → dist/scss}/mixins/transforms/_translate.scss +16 -2
  137. package/dist/scss/mixins/transitions/_index.scss +22 -0
  138. package/dist/scss/mixins/transitions/_transition.scss +43 -0
  139. package/dist/scss/variables/_animations.scss +300 -0
  140. package/dist/scss/variables/_controls.scss +178 -0
  141. package/dist/scss/variables/_effects.scss +87 -0
  142. package/dist/scss/variables/_index.scss +27 -0
  143. package/dist/scss/variables/_keyframes.scss +28 -0
  144. package/dist/scss/variables/_loaders.scss +75 -0
  145. package/dist/scss/variables/_transforms.scss +85 -0
  146. package/dist/scss/variables/_transitions.scss +80 -0
  147. package/dist/ts/Draggable.ts +143 -0
  148. package/dist/ts/Gesture.ts +226 -0
  149. package/dist/ts/Keyboard.ts +195 -0
  150. package/dist/ts/LoaderManager.ts +662 -0
  151. package/dist/ts/Screensaver.ts +192 -0
  152. package/dist/ts/VideoOverlay.ts +205 -0
  153. package/dist/ts/demo.ts +1108 -0
  154. package/dist/ts/index.ts +58 -0
  155. package/package.json +90 -53
  156. package/src/html/_base.html +138 -0
  157. package/src/html/base.html +147 -0
  158. package/src/html/core-concepts.html +282 -0
  159. package/src/html/demo_base.html +171 -0
  160. package/src/html/demo_draggable.html +250 -0
  161. package/src/html/demo_gesture.html +264 -0
  162. package/src/html/demo_keyboard.html +224 -0
  163. package/src/html/demo_screensaver.html +258 -0
  164. package/src/html/demo_video_overlay.html +291 -0
  165. package/src/html/getting-started.html +242 -0
  166. package/src/html/index.html +400 -0
  167. package/src/html/keyboard.html +14 -0
  168. package/src/html/partials/_demo_links.html +21 -0
  169. package/src/html/partials/_footer.html +18 -0
  170. package/src/html/partials/_head.html +21 -0
  171. package/src/html/partials/_nav.html +84 -0
  172. package/src/html/partials/_theme_toggle.html +11 -0
  173. package/src/html/screensaver.html +20 -0
  174. package/src/html/test_animations.html +813 -0
  175. package/src/html/test_attention.html +281 -0
  176. package/src/html/test_bounce.html +201 -0
  177. package/src/html/test_effects.html +1348 -0
  178. package/src/html/test_fade.html +213 -0
  179. package/src/html/test_flip.html +208 -0
  180. package/src/html/test_keyframes.html +415 -0
  181. package/src/html/test_loaders.html +1489 -0
  182. package/src/html/test_mouse.html +516 -0
  183. package/src/html/test_overview.html +1444 -0
  184. package/src/html/test_pulse.html +212 -0
  185. package/src/html/test_scale.html +204 -0
  186. package/src/html/test_shake.html +232 -0
  187. package/src/html/test_slide.html +212 -0
  188. package/src/html/test_special.html +257 -0
  189. package/src/html/test_spin.html +216 -0
  190. package/src/html/test_transforms.html +332 -0
  191. package/src/html/test_transitions.html +245 -0
  192. package/src/html/test_zoom.html +188 -0
  193. package/src/html/video_overlay.html +27 -0
  194. package/src/jinja/_base.html.jinja +50 -0
  195. package/src/jinja/base.html.jinja +48 -0
  196. package/src/jinja/core-concepts.html.jinja +148 -0
  197. package/src/jinja/demo_draggable.html.jinja +114 -0
  198. package/src/jinja/demo_gesture.html.jinja +128 -0
  199. package/src/jinja/demo_keyboard.html.jinja +88 -0
  200. package/src/jinja/demo_screensaver.html.jinja +122 -0
  201. package/src/jinja/demo_video_overlay.html.jinja +155 -0
  202. package/src/jinja/getting-started.html.jinja +108 -0
  203. package/src/jinja/index.html.jinja +268 -0
  204. package/src/jinja/index.json +5 -0
  205. package/src/jinja/move.gl.css +7741 -0
  206. package/src/jinja/partials/_code_block.html.jinja +17 -0
  207. package/src/jinja/partials/_demo_links.html.jinja +41 -0
  208. package/src/jinja/partials/_feature_card.html.jinja +20 -0
  209. package/src/jinja/partials/_footer.html.jinja +22 -0
  210. package/src/jinja/partials/_head.html.jinja +27 -0
  211. package/src/jinja/partials/_nav.html.jinja +79 -0
  212. package/src/jinja/partials/_theme_toggle.html.jinja +15 -0
  213. package/src/jinja/test_animations.html.jinja +679 -0
  214. package/src/jinja/test_attention.html.jinja +147 -0
  215. package/src/jinja/test_bounce.html.jinja +67 -0
  216. package/src/jinja/test_effects.html.jinja +1218 -0
  217. package/src/jinja/test_fade.html.jinja +79 -0
  218. package/src/jinja/test_flip.html.jinja +74 -0
  219. package/src/jinja/test_keyframes.html.jinja +281 -0
  220. package/src/jinja/test_loaders.html.jinja +1358 -0
  221. package/src/jinja/test_mouse.html.jinja +382 -0
  222. package/src/jinja/test_overview.html.jinja +1313 -0
  223. package/src/jinja/test_pulse.html.jinja +78 -0
  224. package/src/jinja/test_scale.html.jinja +70 -0
  225. package/src/jinja/test_shake.html.jinja +98 -0
  226. package/src/jinja/test_slide.html.jinja +78 -0
  227. package/src/jinja/test_special.html.jinja +123 -0
  228. package/src/jinja/test_spin.html.jinja +82 -0
  229. package/src/jinja/test_transforms.html.jinja +198 -0
  230. package/src/jinja/test_transitions.html.jinja +111 -0
  231. package/src/jinja/test_zoom.html.jinja +54 -0
  232. package/src/scss/classes/_animations.scss +595 -0
  233. package/src/scss/classes/_controls.scss +314 -0
  234. package/src/scss/classes/_effects.scss +283 -0
  235. package/src/scss/classes/_index.scss +28 -0
  236. package/src/scss/classes/_loaders.scss +779 -0
  237. package/src/scss/classes/_transforms.scss +138 -0
  238. package/src/scss/classes/_transitions.scss +264 -0
  239. package/src/scss/dev/_banner.scss +36 -0
  240. package/src/scss/dev/_debug.scss +18 -0
  241. package/src/scss/dev/_deprecation.scss +13 -0
  242. package/src/scss/dev/_index.scss +8 -0
  243. package/src/scss/dev/_modules.scss +23 -0
  244. package/src/scss/docs.scss +2344 -0
  245. package/src/scss/docs.scss.bak +3133 -0
  246. package/src/scss/functions/_index.scss +22 -0
  247. package/src/scss/functions/scenes/_bubble.scss +32 -0
  248. package/src/scss/functions/scenes/_index.scss +21 -0
  249. package/src/scss/index.scss +17 -0
  250. package/src/scss/maps/_controls.scss +85 -0
  251. package/src/scss/maps/_index.scss +22 -0
  252. package/src/scss/mixins/_accessibility.scss +91 -0
  253. package/src/scss/mixins/_boot.scss +51 -0
  254. package/src/scss/mixins/_index.scss +41 -0
  255. package/src/scss/mixins/_screensaver.scss +228 -0
  256. package/src/scss/mixins/_shape.scss +315 -0
  257. package/src/scss/mixins/animations/_base.scss +403 -0
  258. package/src/scss/mixins/animations/_beat.scss +137 -0
  259. package/src/scss/mixins/animations/_blink.scss +159 -0
  260. package/src/scss/mixins/animations/_bounce.scss +306 -0
  261. package/src/scss/mixins/animations/_elastic.scss +69 -0
  262. package/src/scss/mixins/animations/_fade.scss +393 -0
  263. package/src/scss/mixins/animations/_flash.scss +169 -0
  264. package/src/scss/mixins/animations/_flip.scss +251 -0
  265. package/src/scss/mixins/animations/_float.scss +141 -0
  266. package/src/scss/mixins/animations/_glow.scss +190 -0
  267. package/src/scss/mixins/animations/_heartbeat.scss +195 -0
  268. package/src/scss/mixins/animations/_hinge.scss +118 -0
  269. package/src/scss/mixins/animations/_index.scss +97 -0
  270. package/src/scss/mixins/animations/_jello.scss +123 -0
  271. package/src/scss/mixins/animations/_jiggle.scss +162 -0
  272. package/src/scss/mixins/animations/_lightspeed.scss +135 -0
  273. package/src/scss/mixins/animations/_nod.scss +153 -0
  274. package/src/scss/mixins/animations/_pop.scss +153 -0
  275. package/src/scss/mixins/animations/_pulse.scss +275 -0
  276. package/src/scss/mixins/animations/_ripple.scss +161 -0
  277. package/src/scss/mixins/animations/_roll.scss +217 -0
  278. package/src/scss/mixins/animations/_rotate.scss +728 -0
  279. package/src/scss/mixins/animations/_rubber.scss +115 -0
  280. package/src/scss/mixins/animations/_scale.scss +382 -0
  281. package/src/scss/mixins/animations/_shake.scss +233 -0
  282. package/src/scss/mixins/animations/_slide.scss +501 -0
  283. package/src/scss/mixins/animations/_spin.scss +322 -0
  284. package/src/scss/mixins/animations/_sway.scss +150 -0
  285. package/src/scss/mixins/animations/_swing.scss +245 -0
  286. package/src/scss/mixins/animations/_tada.scss +235 -0
  287. package/src/scss/mixins/animations/_twist.scss +162 -0
  288. package/src/scss/mixins/animations/_wave.scss +149 -0
  289. package/src/scss/mixins/animations/_wobble.scss +283 -0
  290. package/src/scss/mixins/animations/_zoom.scss +394 -0
  291. package/src/scss/mixins/controls/_cursor.scss +203 -0
  292. package/src/scss/mixins/controls/_hover.scss +625 -0
  293. package/src/scss/mixins/controls/_index.scss +30 -0
  294. package/src/scss/mixins/controls/_keyboard.scss +300 -0
  295. package/src/scss/mixins/controls/_pointer.scss +267 -0
  296. package/src/scss/mixins/controls/_scroll.scss +460 -0
  297. package/src/scss/mixins/controls/_scrollbar.scss +283 -0
  298. package/src/scss/mixins/controls/_selection.scss +208 -0
  299. package/src/scss/mixins/controls/_touch.scss +401 -0
  300. package/src/scss/mixins/effects/_blend.scss +128 -0
  301. package/src/scss/mixins/effects/_filter.scss +470 -0
  302. package/src/scss/mixins/effects/_focus.scss +83 -0
  303. package/src/scss/mixins/effects/_gradient.scss +130 -0
  304. package/src/scss/mixins/effects/_index.scss +28 -0
  305. package/src/scss/mixins/effects/_mask.scss +76 -0
  306. package/src/scss/mixins/effects/_opacity.scss +376 -0
  307. package/src/scss/mixins/effects/_shadow.scss +429 -0
  308. package/src/scss/mixins/keyframes/_base.scss +199 -0
  309. package/src/scss/mixins/keyframes/_index.scss +24 -0
  310. package/src/scss/mixins/keyframes/animations/_beat.scss +280 -0
  311. package/src/scss/mixins/keyframes/animations/_blink.scss +82 -0
  312. package/src/scss/mixins/keyframes/animations/_bounce.scss +292 -0
  313. package/src/scss/mixins/keyframes/animations/_fade.scss +311 -0
  314. package/src/scss/mixins/keyframes/animations/_flash.scss +165 -0
  315. package/src/scss/mixins/keyframes/animations/_flip.scss +266 -0
  316. package/src/scss/mixins/keyframes/animations/_index.scss +46 -0
  317. package/src/scss/mixins/keyframes/animations/_jiggle.scss +85 -0
  318. package/src/scss/mixins/keyframes/animations/_lightspeed.scss +73 -0
  319. package/src/scss/mixins/keyframes/animations/_nod.scss +79 -0
  320. package/src/scss/mixins/keyframes/animations/_pop.scss +78 -0
  321. package/src/scss/mixins/keyframes/animations/_pulse.scss +225 -0
  322. package/src/scss/mixins/keyframes/animations/_ripple.scss +94 -0
  323. package/src/scss/mixins/keyframes/animations/_roll.scss +124 -0
  324. package/src/scss/mixins/keyframes/animations/_rotate.scss +360 -0
  325. package/src/scss/mixins/keyframes/animations/_rubber.scss +81 -0
  326. package/src/scss/mixins/keyframes/animations/_scale.scss +308 -0
  327. package/src/scss/mixins/keyframes/animations/_shake.scss +270 -0
  328. package/src/scss/mixins/keyframes/animations/_slide.scss +345 -0
  329. package/src/scss/mixins/keyframes/animations/_spin.scss +270 -0
  330. package/src/scss/mixins/keyframes/animations/_sway.scss +83 -0
  331. package/src/scss/mixins/keyframes/animations/_twist.scss +89 -0
  332. package/src/scss/mixins/keyframes/animations/_wave.scss +90 -0
  333. package/src/scss/mixins/keyframes/animations/_wobble.scss +293 -0
  334. package/src/scss/mixins/keyframes/animations/_zoom.scss +345 -0
  335. package/src/scss/mixins/loaders/_bars.scss +128 -0
  336. package/src/scss/mixins/loaders/_base.scss +39 -0
  337. package/src/scss/mixins/loaders/_bubble.scss +395 -0
  338. package/src/scss/mixins/loaders/_circle.scss +456 -0
  339. package/src/scss/mixins/loaders/_dots.scss +248 -0
  340. package/src/scss/mixins/loaders/_graph.scss +542 -0
  341. package/src/scss/mixins/loaders/_index.scss +77 -0
  342. package/src/scss/mixins/loaders/_line.scss +471 -0
  343. package/src/scss/mixins/loaders/_objects.scss +563 -0
  344. package/src/scss/mixins/loaders/_progress.scss +477 -0
  345. package/src/scss/mixins/loaders/_rect.scss +480 -0
  346. package/src/scss/mixins/loaders/_rings.scss +377 -0
  347. package/src/scss/mixins/loaders/_skeleton.scss +461 -0
  348. package/src/scss/mixins/loaders/_special.scss +611 -0
  349. package/src/scss/mixins/loaders/_spinner.scss +175 -0
  350. package/src/scss/mixins/loaders/_text.scss +446 -0
  351. package/src/scss/mixins/transforms/_flip.scss +74 -0
  352. package/src/scss/mixins/transforms/_index.scss +28 -0
  353. package/src/scss/mixins/transforms/_matrix.scss +18 -0
  354. package/src/scss/mixins/transforms/_perspective.scss +28 -0
  355. package/src/scss/mixins/transforms/_rotate.scss +96 -0
  356. package/src/scss/mixins/transforms/_scale.scss +26 -0
  357. package/src/scss/mixins/transforms/_skew.scss +27 -0
  358. package/src/scss/mixins/transforms/_translate.scss +27 -0
  359. package/src/scss/mixins/transitions/_index.scss +22 -0
  360. package/src/scss/mixins/transitions/_transition.scss +43 -0
  361. package/src/scss/variables/_animations.scss +300 -0
  362. package/src/scss/variables/_controls.scss +178 -0
  363. package/src/scss/variables/_effects.scss +87 -0
  364. package/src/scss/variables/_index.scss +27 -0
  365. package/src/scss/variables/_keyframes.scss +28 -0
  366. package/src/scss/variables/_loaders.scss +75 -0
  367. package/src/scss/variables/_transforms.scss +85 -0
  368. package/src/scss/variables/_transitions.scss +80 -0
  369. package/src/ts/Draggable.ts +143 -0
  370. package/src/ts/Gesture.ts +226 -0
  371. package/src/ts/Keyboard.ts +195 -0
  372. package/src/ts/LoaderManager.ts +662 -0
  373. package/src/ts/Screensaver.ts +192 -0
  374. package/src/ts/VideoOverlay.ts +205 -0
  375. package/src/ts/demo.ts +1108 -0
  376. package/src/ts/index.ts +58 -0
  377. package/css/move.gl.css +0 -2
  378. package/css/move.gl.min.css +0 -2
  379. package/scss/classes/_transforms.scss +0 -124
  380. package/scss/classes/keyboard.scss +0 -18
  381. package/scss/classes/screensaver.scss +0 -15
  382. package/scss/effects/_filter.scss +0 -176
  383. package/scss/effects/_index.scss +0 -23
  384. package/scss/effects/_opacity.scss +0 -62
  385. package/scss/effects/_shadow.scss +0 -175
  386. package/scss/functions/scenes/_bubble.scss +0 -19
  387. package/scss/functions/scenes/_index.scss +0 -20
  388. package/scss/index.scss +0 -0
  389. package/scss/keyframes/_beat.scss +0 -26
  390. package/scss/keyframes/_index.scss +0 -0
  391. package/scss/maps/_index.scss +0 -0
  392. package/scss/maps/_mouse.scss +0 -96
  393. package/scss/mixins/_hover.scss +0 -51
  394. package/scss/mixins/_index.scss +0 -0
  395. package/scss/mixins/_selection.scss +0 -321
  396. package/scss/mixins/_shape.scss +0 -44
  397. package/scss/mixins/_touch.scss +0 -95
  398. package/scss/mixins/animations/--hover.scss +0 -107
  399. package/scss/mixins/animations/_base.scss +0 -337
  400. package/scss/mixins/animations/_beat.scss +0 -119
  401. package/scss/mixins/animations/_bounce.scss +0 -192
  402. package/scss/mixins/animations/_fade.scss +0 -154
  403. package/scss/mixins/animations/_flip.scss +0 -72
  404. package/scss/mixins/animations/_heartbeat.scss +0 -175
  405. package/scss/mixins/animations/_hinge.scss +0 -119
  406. package/scss/mixins/animations/_jello.scss +0 -129
  407. package/scss/mixins/animations/_jiggle.scss +0 -163
  408. package/scss/mixins/animations/_lightspeed.scss +0 -130
  409. package/scss/mixins/animations/_pop.scss +0 -150
  410. package/scss/mixins/animations/_pulse.scss +0 -213
  411. package/scss/mixins/animations/_roll.scss +0 -261
  412. package/scss/mixins/animations/_rotate.scss +0 -428
  413. package/scss/mixins/animations/_rubber.scss +0 -116
  414. package/scss/mixins/animations/_scale.scss +0 -113
  415. package/scss/mixins/animations/_shake.scss +0 -182
  416. package/scss/mixins/animations/_slide.scss +0 -294
  417. package/scss/mixins/animations/_spin.scss +0 -219
  418. package/scss/mixins/animations/_wobble.scss +0 -254
  419. package/scss/mixins/animations/_zoom.scss +0 -166
  420. package/scss/mixins/effects/_filter.scss +0 -148
  421. package/scss/mixins/effects/_index.scss +0 -0
  422. package/scss/mixins/effects/_shadow.scss +0 -21
  423. package/scss/mixins/loaders/_index.scss +0 -0
  424. package/scss/mixins/loaders/_progress.scss +0 -174
  425. package/scss/mixins/loaders/_spinner.scss +0 -101
  426. package/scss/mixins/loaders/circle_01.scss +0 -22
  427. package/scss/mixins/loaders/circle_02.scss +0 -19
  428. package/scss/mixins/loaders/circle_03.scss +0 -29
  429. package/scss/mixins/loaders/circle_inner_01.scss +0 -33
  430. package/scss/mixins/loaders/circle_inner_02.scss +0 -33
  431. package/scss/mixins/loaders/circle_inner_03.scss +0 -34
  432. package/scss/mixins/mouse/_index.scss +0 -0
  433. package/scss/mixins/scroll/_index.scss +0 -0
  434. package/scss/mixins/scroll/_scroll.scss +0 -104
  435. package/scss/mixins/transforms/_index.scss +0 -23
  436. package/scss/mixins/transforms/_matrix.scss +0 -1
  437. package/scss/mixins/transitions/_index.scss +0 -0
  438. package/scss/mixins/transitions/_transition.scss +0 -13
  439. package/scss/variables/_animation.scss +0 -91
  440. package/scss/variables/_index.scss +0 -0
  441. package/ts/ARContent.ts +0 -27
  442. package/ts/ARInteraction.ts +0 -34
  443. package/ts/AdaptiveUI.ts +0 -25
  444. package/ts/ContentStreaming.ts +0 -20
  445. package/ts/Draggable.ts +0 -71
  446. package/ts/DynamicEnvironment.ts +0 -60
  447. package/ts/Gesture.ts +0 -168
  448. package/ts/ImmersiveAudio.ts +0 -40
  449. package/ts/InteractiveCanvas.ts +0 -177
  450. package/ts/InteractiveVideo.ts +0 -29
  451. package/ts/Keyboard.ts +0 -162
  452. package/ts/RealTimeCollaboration.ts +0 -25
  453. package/ts/Screensaver.ts +0 -140
  454. package/ts/SpatialNavigation.ts +0 -38
  455. package/ts/UserProfile.ts +0 -27
  456. package/ts/VRExperience.ts +0 -58
  457. package/ts/VideoOverlay.ts +0 -116
  458. package/ts/index.ts +0 -0
  459. /package/{scss → dist/scss}/dev/_banner.scss +0 -0
  460. /package/{scss → dist/scss}/dev/_debug.scss +0 -0
  461. /package/{scss → dist/scss}/dev/_index.scss +0 -0
  462. /package/{scss/classes/_index.scss → src/html/partials/_code_block.html} +0 -0
  463. /package/{scss/functions/_index.scss → src/html/partials/_feature_card.html} +0 -0
@@ -0,0 +1,456 @@
1
+ // ============================================================================
2
+ // move.gl | Circle/Spinner Loader Mixins
3
+ // ============================================================================
4
+ // Copyright 2025 Scape Agency BV
5
+ // Licensed under MIT License
6
+ // ============================================================================
7
+
8
+ ////
9
+ /// Circle/Spinner Loader Mixins
10
+ /// ===========================================================================
11
+ ///
12
+ /// This module provides mixins for circle/spinner-based loading animations.
13
+ ///
14
+ /// @group Loaders
15
+ /// @author Scape Agency
16
+ /// @link https://move.gl
17
+ /// @since 0.1.0
18
+ /// @access public
19
+ ////
20
+
21
+ @use "../../variables" as *;
22
+
23
+
24
+ // ============================================================================
25
+ // Keyframes
26
+ // ============================================================================
27
+
28
+ ///
29
+ /// Rotation keyframes.
30
+ ///
31
+ @mixin keyframes_circle_rotation {
32
+ @keyframes circle-rotation {
33
+ 0% { transform: rotate(0deg); }
34
+ 100% { transform: rotate(360deg); }
35
+ }
36
+ }
37
+
38
+ ///
39
+ /// Clip path animation keyframes.
40
+ ///
41
+ @mixin keyframes_circle_clip {
42
+ @keyframes circle-clip {
43
+ 0% { clip-path: polygon(50% 50%, 0 0, 0 0, 0 0, 0 0, 0 0); }
44
+ 25% { clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 0, 100% 0, 100% 0); }
45
+ 50% { clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 100% 100%, 100% 100%); }
46
+ 75% { clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 100%); }
47
+ 100% { clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 0); }
48
+ }
49
+ }
50
+
51
+ ///
52
+ /// Reverse rotation keyframes.
53
+ ///
54
+ @mixin keyframes_circle_rotation_back {
55
+ @keyframes circle-rotation-back {
56
+ 0% { transform: rotate(0deg); }
57
+ 100% { transform: rotate(-360deg); }
58
+ }
59
+ }
60
+
61
+ ///
62
+ /// Pulse ring keyframes.
63
+ ///
64
+ @mixin keyframes_circle_pulse {
65
+ @keyframes circle-pulse {
66
+ 0% {
67
+ box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.5);
68
+ }
69
+ 100% {
70
+ box-shadow: 0 0 0 30px rgba(255, 255, 255, 0);
71
+ }
72
+ }
73
+ }
74
+
75
+ ///
76
+ /// Ripple keyframes.
77
+ ///
78
+ @mixin keyframes_circle_ripple {
79
+ @keyframes circle-ripple {
80
+ 0% {
81
+ transform: scale(0);
82
+ opacity: 1;
83
+ }
84
+ 100% {
85
+ transform: scale(1);
86
+ opacity: 0;
87
+ }
88
+ }
89
+ }
90
+
91
+
92
+ // ============================================================================
93
+ // Circle/Spinner Loader Mixins
94
+ // ============================================================================
95
+
96
+ ///
97
+ /// Basic spinner loader.
98
+ ///
99
+ /// @param {Length} $size [48px] - Loader size.
100
+ /// @param {Length} $border [5px] - Border width.
101
+ /// @param {Color} $color [#FFF] - Border color.
102
+ /// @param {Color} $accent [#FF3D00] - Accent color for bottom border.
103
+ /// @param {Time} $duration [1s] - Animation duration.
104
+ ///
105
+ @mixin loader_circle_spinner(
106
+ $size: $loader-size,
107
+ $border: $loader-border,
108
+ $color: $loader-color,
109
+ $accent: $loader-accent,
110
+ $duration: $loader-speed
111
+ ) {
112
+ width: var(--loader-size, $size);
113
+ height: var(--loader-size, $size);
114
+ border: $border solid var(--loader-color, $color);
115
+ border-bottom-color: var(--loader-accent, $accent);
116
+ border-radius: 50%;
117
+ display: inline-block;
118
+ box-sizing: border-box;
119
+ animation: circle-rotation $duration linear infinite;
120
+ }
121
+
122
+ ///
123
+ /// Dual half-circle spinner.
124
+ ///
125
+ /// @param {Length} $size [48px] - Loader size.
126
+ /// @param {Length} $border [5px] - Border width.
127
+ /// @param {Color} $color [#FFF] - Border color.
128
+ /// @param {Time} $duration [1s] - Animation duration.
129
+ ///
130
+ @mixin loader_circle_dual(
131
+ $size: $loader-size,
132
+ $border: $loader-border,
133
+ $color: $loader-color,
134
+ $duration: $loader-speed
135
+ ) {
136
+ width: var(--loader-size, $size);
137
+ height: var(--loader-size, $size);
138
+ border: $border solid var(--loader-color, $color);
139
+ border-bottom-color: transparent;
140
+ border-radius: 50%;
141
+ display: inline-block;
142
+ box-sizing: border-box;
143
+ animation: circle-rotation $duration linear infinite;
144
+ }
145
+
146
+ ///
147
+ /// Clip-path animated spinner.
148
+ ///
149
+ /// @param {Length} $size [48px] - Loader size.
150
+ /// @param {Length} $border [5px] - Border width.
151
+ /// @param {Color} $color [#FFF] - Border color.
152
+ /// @param {Time} $duration [1s] - Rotation duration.
153
+ /// @param {Time} $clip-duration [2s] - Clip animation duration.
154
+ ///
155
+ @mixin loader_circle_clip(
156
+ $size: $loader-size,
157
+ $border: $loader-border,
158
+ $color: $loader-color,
159
+ $duration: $loader-speed,
160
+ $clip-duration: 2s
161
+ ) {
162
+ width: var(--loader-size, $size);
163
+ height: var(--loader-size, $size);
164
+ border-radius: 50%;
165
+ position: relative;
166
+ animation: circle-rotation $duration linear infinite;
167
+
168
+ &::before {
169
+ content: '';
170
+ box-sizing: border-box;
171
+ position: absolute;
172
+ inset: 0;
173
+ border-radius: 50%;
174
+ border: $border solid var(--loader-color, $color);
175
+ animation: circle-clip $clip-duration linear infinite;
176
+ }
177
+ }
178
+
179
+ ///
180
+ /// Dual clip-path spinner with accent.
181
+ ///
182
+ /// @param {Length} $size [48px] - Loader size.
183
+ /// @param {Length} $border [5px] - Border width.
184
+ /// @param {Color} $color [#FFF] - Primary color.
185
+ /// @param {Color} $accent [#FF3D00] - Accent color.
186
+ /// @param {Time} $duration [1s] - Rotation duration.
187
+ ///
188
+ @mixin loader_circle_clip_dual(
189
+ $size: $loader-size,
190
+ $border: $loader-border,
191
+ $color: $loader-color,
192
+ $accent: $loader-accent,
193
+ $duration: $loader-speed
194
+ ) {
195
+ width: var(--loader-size, $size);
196
+ height: var(--loader-size, $size);
197
+ border-radius: 50%;
198
+ position: relative;
199
+ animation: circle-rotation $duration linear infinite;
200
+
201
+ &::before,
202
+ &::after {
203
+ content: '';
204
+ box-sizing: border-box;
205
+ position: absolute;
206
+ inset: 0;
207
+ border-radius: 50%;
208
+ border: $border solid var(--loader-color, $color);
209
+ animation: circle-clip 2s linear infinite;
210
+ }
211
+
212
+ &::after {
213
+ transform: rotate3d(90, 90, 0, 180deg);
214
+ border-color: var(--loader-accent, $accent);
215
+ }
216
+ }
217
+
218
+ ///
219
+ /// Nested circles spinner.
220
+ ///
221
+ /// @param {Length} $size [48px] - Loader size.
222
+ /// @param {Length} $border [3px] - Border width.
223
+ /// @param {Color} $color [#FFF] - Primary color.
224
+ /// @param {Color} $accent [#FF3D00] - Accent color.
225
+ /// @param {Time} $duration [1s] - Animation duration.
226
+ ///
227
+ @mixin loader_circle_nested(
228
+ $size: $loader-size,
229
+ $border: 3px,
230
+ $color: $loader-color,
231
+ $accent: $loader-accent,
232
+ $duration: $loader-speed
233
+ ) {
234
+ width: var(--loader-size, $size);
235
+ height: var(--loader-size, $size);
236
+ border: $border solid var(--loader-color, $color);
237
+ border-radius: 50%;
238
+ display: inline-block;
239
+ position: relative;
240
+ box-sizing: border-box;
241
+ animation: circle-rotation $duration linear infinite;
242
+
243
+ &::after {
244
+ content: '';
245
+ box-sizing: border-box;
246
+ position: absolute;
247
+ left: 50%;
248
+ top: 50%;
249
+ transform: translate(-50%, -50%);
250
+ width: calc(var(--loader-size, $size) - 16px);
251
+ height: calc(var(--loader-size, $size) - 16px);
252
+ border-radius: 50%;
253
+ border: $border solid transparent;
254
+ border-bottom-color: var(--loader-accent, $accent);
255
+ }
256
+ }
257
+
258
+ ///
259
+ /// Triple nested squares spinner.
260
+ ///
261
+ /// @param {Length} $size [48px] - Outer size.
262
+ /// @param {Length} $border [2px] - Border width.
263
+ /// @param {Color} $color [#FFF] - Primary color.
264
+ /// @param {Color} $accent [#FF3D00] - Accent color.
265
+ /// @param {Time} $duration [2s] - Animation duration.
266
+ ///
267
+ @mixin loader_circle_triple(
268
+ $size: $loader-size,
269
+ $border: 2px,
270
+ $color: $loader-color,
271
+ $accent: $loader-accent,
272
+ $duration: 2s
273
+ ) {
274
+ width: var(--loader-size, $size);
275
+ height: var(--loader-size, $size);
276
+ display: inline-block;
277
+ position: relative;
278
+ border: $border solid var(--loader-color, $color);
279
+ box-sizing: border-box;
280
+ animation: circle-rotation $duration linear infinite;
281
+
282
+ &::after,
283
+ &::before {
284
+ content: '';
285
+ box-sizing: border-box;
286
+ position: absolute;
287
+ left: 0;
288
+ right: 0;
289
+ top: 0;
290
+ bottom: 0;
291
+ margin: auto;
292
+ border: $border solid var(--loader-accent, $accent);
293
+ width: calc(var(--loader-size, $size) - 10px);
294
+ height: calc(var(--loader-size, $size) - 10px);
295
+ animation: circle-rotation-back 1.5s linear infinite;
296
+ transform-origin: center center;
297
+ }
298
+
299
+ &::before {
300
+ width: calc(var(--loader-size, $size) - 20px);
301
+ height: calc(var(--loader-size, $size) - 20px);
302
+ border-color: var(--loader-color, $color);
303
+ animation: circle-rotation $duration linear infinite;
304
+ }
305
+ }
306
+
307
+ ///
308
+ /// Spinner with dot marker.
309
+ ///
310
+ /// @param {Length} $size [48px] - Loader size.
311
+ /// @param {Length} $border [2px] - Border width.
312
+ /// @param {Length} $dot-size [6px] - Dot size.
313
+ /// @param {Color} $color [#FFF] - Border color.
314
+ /// @param {Color} $accent [#FF3D00] - Dot color.
315
+ /// @param {Time} $duration [1s] - Animation duration.
316
+ ///
317
+ @mixin loader_circle_dot(
318
+ $size: $loader-size,
319
+ $border: 2px,
320
+ $dot-size: 6px,
321
+ $color: $loader-color,
322
+ $accent: $loader-accent,
323
+ $duration: $loader-speed
324
+ ) {
325
+ width: var(--loader-size, $size);
326
+ height: var(--loader-size, $size);
327
+ border: $border solid var(--loader-color, $color);
328
+ border-radius: 50%;
329
+ display: inline-block;
330
+ position: relative;
331
+ box-sizing: border-box;
332
+ animation: circle-rotation $duration linear infinite;
333
+
334
+ &::after,
335
+ &::before {
336
+ content: '';
337
+ box-sizing: border-box;
338
+ position: absolute;
339
+ left: 0;
340
+ top: 0;
341
+ background: var(--loader-accent, $accent);
342
+ width: $dot-size;
343
+ height: $dot-size;
344
+ border-radius: 50%;
345
+ }
346
+
347
+ &::before {
348
+ left: auto;
349
+ top: auto;
350
+ right: 0;
351
+ bottom: 0;
352
+ }
353
+ }
354
+
355
+ ///
356
+ /// Pulse ring loader.
357
+ ///
358
+ /// @param {Length} $size [48px] - Loader size.
359
+ /// @param {Color} $color [#FFF] - Ring color.
360
+ /// @param {Time} $duration [1.5s] - Animation duration.
361
+ ///
362
+ @mixin loader_circle_pulse(
363
+ $size: $loader-size,
364
+ $color: $loader-color,
365
+ $duration: 1.5s
366
+ ) {
367
+ width: var(--loader-size, $size);
368
+ height: var(--loader-size, $size);
369
+ border-radius: 50%;
370
+ display: inline-block;
371
+ position: relative;
372
+ background: var(--loader-color, $color);
373
+ box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.5);
374
+ animation: circle-pulse $duration ease-out infinite;
375
+ }
376
+
377
+ ///
378
+ /// Ripple loader.
379
+ ///
380
+ /// @param {Length} $size [48px] - Loader size.
381
+ /// @param {Length} $border [4px] - Border width.
382
+ /// @param {Color} $color [#FFF] - Ring color.
383
+ /// @param {Color} $accent [#FF3D00] - Second ring color.
384
+ /// @param {Time} $duration [2s] - Animation duration.
385
+ ///
386
+ @mixin loader_circle_ripple(
387
+ $size: $loader-size,
388
+ $border: 4px,
389
+ $color: $loader-color,
390
+ $accent: $loader-accent,
391
+ $duration: 2s
392
+ ) {
393
+ width: var(--loader-size, $size);
394
+ height: var(--loader-size, $size);
395
+ display: inline-block;
396
+ position: relative;
397
+
398
+ &::after,
399
+ &::before {
400
+ content: '';
401
+ box-sizing: border-box;
402
+ width: var(--loader-size, $size);
403
+ height: var(--loader-size, $size);
404
+ border: $border solid var(--loader-color, $color);
405
+ position: absolute;
406
+ left: 0;
407
+ top: 0;
408
+ border-radius: 50%;
409
+ animation: circle-ripple $duration ease-in-out infinite;
410
+ }
411
+
412
+ &::after {
413
+ border-color: var(--loader-accent, $accent);
414
+ animation-delay: calc($duration / 2);
415
+ }
416
+ }
417
+
418
+ ///
419
+ /// Orbit loader with ball.
420
+ ///
421
+ /// @param {Length} $size [48px] - Orbit size.
422
+ /// @param {Length} $border [2px] - Orbit border width.
423
+ /// @param {Length} $ball-size [16px] - Ball size.
424
+ /// @param {Color} $color [#FF3D00] - Orbit color.
425
+ /// @param {Color} $accent [#FFF] - Ball color.
426
+ /// @param {Time} $duration [1s] - Animation duration.
427
+ ///
428
+ @mixin loader_circle_orbit(
429
+ $size: $loader-size,
430
+ $border: 2px,
431
+ $ball-size: 16px,
432
+ $color: $loader-accent,
433
+ $accent: $loader-color,
434
+ $duration: $loader-speed
435
+ ) {
436
+ width: var(--loader-size, $size);
437
+ height: var(--loader-size, $size);
438
+ border-radius: 50%;
439
+ display: inline-block;
440
+ position: relative;
441
+ border: $border solid var(--loader-accent, $color);
442
+ box-sizing: border-box;
443
+ animation: circle-rotation $duration linear infinite;
444
+
445
+ &::after {
446
+ content: '';
447
+ box-sizing: border-box;
448
+ position: absolute;
449
+ left: 4px;
450
+ top: 4px;
451
+ border: $border solid var(--loader-color, $accent);
452
+ width: $ball-size - 4px;
453
+ height: $ball-size - 4px;
454
+ border-radius: 50%;
455
+ }
456
+ }
@@ -0,0 +1,248 @@
1
+ ////
2
+ ///
3
+ /// Dots Loader Mixins
4
+ /// ===========================================================================
5
+ ///
6
+ /// This module provides dot-based loading animation mixins including
7
+ /// pulse dots, bounce dots, wave dots, fade dots, and grow dots.
8
+ ///
9
+ /// @group Loaders
10
+ /// @author Scape Agency
11
+ /// @link https://move.gl
12
+ /// @since 0.1.0 initial release
13
+ /// @access public
14
+ ///
15
+ ////
16
+
17
+
18
+ // ============================================================================
19
+ // Use
20
+ // ============================================================================
21
+
22
+ @use "sass:map";
23
+
24
+
25
+ // ============================================================================
26
+ // Keyframes
27
+ // ============================================================================
28
+
29
+ /// Dots pulse animation keyframes
30
+ @keyframes loader-dots-pulse {
31
+ 0%, 80%, 100% { opacity: 0.3; transform: scale(0.8); }
32
+ 40% { opacity: 1; transform: scale(1); }
33
+ }
34
+
35
+ /// Dots bounce animation keyframes
36
+ @keyframes loader-dots-bounce {
37
+ 0%, 80%, 100% { transform: translateY(0); }
38
+ 40% { transform: translateY(-12px); }
39
+ }
40
+
41
+ /// Dots wave animation keyframes
42
+ @keyframes loader-dots-wave {
43
+ 0%, 100% { transform: translateY(0); opacity: 0.5; }
44
+ 50% { transform: translateY(-10px); opacity: 1; }
45
+ }
46
+
47
+ /// Dots fade animation keyframes
48
+ @keyframes loader-dots-fade {
49
+ 0%, 100% { opacity: 0.2; }
50
+ 50% { opacity: 1; }
51
+ }
52
+
53
+ /// Dots grow animation keyframes
54
+ @keyframes loader-dots-grow {
55
+ 0%, 100% { transform: scale(0.6); }
56
+ 50% { transform: scale(1.2); }
57
+ }
58
+
59
+ /// Typing dots animation keyframes
60
+ @keyframes loader-typing {
61
+ 0%, 60%, 100% { transform: translateY(0); }
62
+ 30% { transform: translateY(-6px); }
63
+ }
64
+
65
+ /// Ellipsis animation keyframes
66
+ @keyframes loader-ellipsis {
67
+ 0% { transform: scale(1); }
68
+ 50% { transform: scale(0.5); }
69
+ 100% { transform: scale(1); }
70
+ }
71
+
72
+
73
+ // ============================================================================
74
+ // Mixins
75
+ // ============================================================================
76
+
77
+ ///
78
+ /// Base dots loader container mixin.
79
+ ///
80
+ /// @param {Length} $gap [6px] - Gap between dots.
81
+ ///
82
+ @mixin loader_dots_base($gap: 6px) {
83
+ display: flex;
84
+ gap: $gap;
85
+ align-items: center;
86
+ }
87
+
88
+ ///
89
+ /// Dot element mixin.
90
+ ///
91
+ /// @param {Length} $size [10px] - Dot size.
92
+ /// @param {Color} $color [currentColor] - Dot color.
93
+ ///
94
+ @mixin loader_dot($size: 10px, $color: currentColor) {
95
+ width: $size;
96
+ height: $size;
97
+ background: $color;
98
+ border-radius: 50%;
99
+ }
100
+
101
+ ///
102
+ /// Pulse dots loader mixin.
103
+ /// Creates a pulsing dot animation.
104
+ ///
105
+ /// @param {Length} $size [10px] - Dot size.
106
+ /// @param {Color} $color [currentColor] - Dot color.
107
+ /// @param {Time} $duration [1.4s] - Animation duration.
108
+ ///
109
+ @mixin loader_dots_pulse($size: 10px, $color: currentColor, $duration: 1.4s) {
110
+ @include loader_dots_base();
111
+
112
+ > * {
113
+ @include loader_dot($size, $color);
114
+ animation: loader-dots-pulse $duration ease-in-out infinite;
115
+
116
+ &:nth-child(2) { animation-delay: 0.2s; }
117
+ &:nth-child(3) { animation-delay: 0.4s; }
118
+ }
119
+ }
120
+
121
+ ///
122
+ /// Bounce dots loader mixin.
123
+ /// Creates bouncing dots animation.
124
+ ///
125
+ /// @param {Length} $size [10px] - Dot size.
126
+ /// @param {Color} $color [currentColor] - Dot color.
127
+ /// @param {Time} $duration [1.4s] - Animation duration.
128
+ ///
129
+ @mixin loader_dots_bounce($size: 10px, $color: currentColor, $duration: 1.4s) {
130
+ @include loader_dots_base();
131
+
132
+ > * {
133
+ @include loader_dot($size, $color);
134
+ animation: loader-dots-bounce $duration ease-in-out infinite;
135
+
136
+ &:nth-child(2) { animation-delay: 0.16s; }
137
+ &:nth-child(3) { animation-delay: 0.32s; }
138
+ }
139
+ }
140
+
141
+ ///
142
+ /// Wave dots loader mixin.
143
+ /// Creates a wave animation across multiple dots.
144
+ ///
145
+ /// @param {Length} $size [8px] - Dot size.
146
+ /// @param {Color} $color [currentColor] - Dot color.
147
+ /// @param {Time} $duration [1.2s] - Animation duration.
148
+ /// @param {Number} $count [5] - Number of dots.
149
+ ///
150
+ @mixin loader_dots_wave($size: 8px, $color: currentColor, $duration: 1.2s, $count: 5) {
151
+ @include loader_dots_base(4px);
152
+
153
+ > * {
154
+ @include loader_dot($size, $color);
155
+ animation: loader-dots-wave $duration ease-in-out infinite;
156
+
157
+ @for $i from 2 through $count {
158
+ &:nth-child(#{$i}) { animation-delay: #{($i - 1) * 0.1}s; }
159
+ }
160
+ }
161
+ }
162
+
163
+ ///
164
+ /// Fade dots loader mixin.
165
+ /// Creates fading dots animation.
166
+ ///
167
+ /// @param {Length} $size [10px] - Dot size.
168
+ /// @param {Color} $color [currentColor] - Dot color.
169
+ /// @param {Time} $duration [1.4s] - Animation duration.
170
+ ///
171
+ @mixin loader_dots_fade($size: 10px, $color: currentColor, $duration: 1.4s) {
172
+ @include loader_dots_base();
173
+
174
+ > * {
175
+ @include loader_dot($size, $color);
176
+ animation: loader-dots-fade $duration ease-in-out infinite;
177
+
178
+ &:nth-child(2) { animation-delay: 0.2s; }
179
+ &:nth-child(3) { animation-delay: 0.4s; }
180
+ }
181
+ }
182
+
183
+ ///
184
+ /// Grow dots loader mixin.
185
+ /// Creates growing/shrinking dots animation.
186
+ ///
187
+ /// @param {Length} $size [10px] - Dot size.
188
+ /// @param {Color} $color [currentColor] - Dot color.
189
+ /// @param {Time} $duration [1s] - Animation duration.
190
+ ///
191
+ @mixin loader_dots_grow($size: 10px, $color: currentColor, $duration: 1s) {
192
+ @include loader_dots_base();
193
+
194
+ > * {
195
+ @include loader_dot($size, $color);
196
+ animation: loader-dots-grow $duration ease-in-out infinite;
197
+
198
+ &:nth-child(2) { animation-delay: 0.15s; }
199
+ &:nth-child(3) { animation-delay: 0.3s; }
200
+ }
201
+ }
202
+
203
+ ///
204
+ /// Typing indicator loader mixin.
205
+ /// Creates a typing indicator animation (like chat bubbles).
206
+ ///
207
+ /// @param {Length} $size [8px] - Dot size.
208
+ /// @param {Color} $color [currentColor] - Dot color.
209
+ /// @param {Color} $bg [rgba(0,0,0,0.1)] - Background color.
210
+ ///
211
+ @mixin loader_typing($size: 8px, $color: currentColor, $bg: rgba(0, 0, 0, 0.1)) {
212
+ display: flex;
213
+ gap: 4px;
214
+ align-items: center;
215
+ padding: 8px 12px;
216
+ background: $bg;
217
+ border-radius: 16px;
218
+
219
+ > * {
220
+ @include loader_dot($size, $color);
221
+ animation: loader-typing 1.4s ease-in-out infinite;
222
+
223
+ &:nth-child(2) { animation-delay: 0.2s; }
224
+ &:nth-child(3) { animation-delay: 0.4s; }
225
+ }
226
+ }
227
+
228
+ ///
229
+ /// Ellipsis loader mixin.
230
+ /// Creates an ellipsis loading animation.
231
+ ///
232
+ /// @param {Length} $size [10px] - Dot size.
233
+ /// @param {Color} $color [currentColor] - Dot color.
234
+ /// @param {Time} $duration [1.4s] - Animation duration.
235
+ ///
236
+ @mixin loader_ellipsis($size: 10px, $color: currentColor, $duration: 1.4s) {
237
+ @include loader_dots_base(4px);
238
+
239
+ > * {
240
+ @include loader_dot($size, $color);
241
+ animation: loader-ellipsis $duration ease-in-out infinite;
242
+
243
+ &:nth-child(1) { animation-delay: 0s; }
244
+ &:nth-child(2) { animation-delay: 0.2s; }
245
+ &:nth-child(3) { animation-delay: 0.4s; }
246
+ &:nth-child(4) { animation-delay: 0.6s; }
247
+ }
248
+ }