@yewdiel21/motion-kit 0.9.0 → 0.10.0

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 (399) hide show
  1. package/NOTICE +3 -35
  2. package/README.md +93 -81
  3. package/dist/auto/index.d.ts +22 -3
  4. package/dist/auto/index.js +43 -5
  5. package/dist/auto/index.js.map +1 -1
  6. package/dist/{chunk-KLY5BRRI.js → chunk-34EZ7DF4.js} +1 -1
  7. package/dist/chunk-34EZ7DF4.js.map +1 -0
  8. package/dist/{chunk-RFDIZYFX.js → chunk-DOOMULVV.js} +20 -20
  9. package/dist/chunk-DOOMULVV.js.map +1 -0
  10. package/dist/{chunk-ABNRDDO7.js → chunk-I3DXF2KQ.js} +2 -2
  11. package/dist/{chunk-Q4LVFNLN.js → chunk-IKQ5FODN.js} +4 -4
  12. package/dist/chunk-IKQ5FODN.js.map +1 -0
  13. package/dist/{chunk-2BQGFOA7.js → chunk-J6OCFNGU.js} +2 -2
  14. package/dist/chunk-J6OCFNGU.js.map +1 -0
  15. package/dist/{chunk-6OJAP6ZL.js → chunk-QFBOHPWZ.js} +3 -3
  16. package/dist/chunk-QFBOHPWZ.js.map +1 -0
  17. package/dist/{chunk-J27KH2A2.js → chunk-RVSKEBIC.js} +1 -1
  18. package/dist/chunk-RVSKEBIC.js.map +1 -0
  19. package/dist/{chunk-34XYOXHG.js → chunk-TFNRIZHU.js} +1615 -12
  20. package/dist/chunk-TFNRIZHU.js.map +1 -0
  21. package/dist/{chunk-FS2HJVVY.js → chunk-XAKC2QY7.js} +1204 -5
  22. package/dist/chunk-XAKC2QY7.js.map +1 -0
  23. package/dist/css/components/calendar.css +159 -0
  24. package/dist/css/components/chat-background.css +2 -2
  25. package/dist/css/components/chat.css +1 -1
  26. package/dist/css/components/cursor.css +3 -3
  27. package/dist/css/components/dialog.css +3 -3
  28. package/dist/css/components/hover-card.css +14 -0
  29. package/dist/css/components/input-otp.css +10 -0
  30. package/dist/css/components/island.css +1 -1
  31. package/dist/css/components/menu.css +1 -1
  32. package/dist/css/components/nav.css +1 -5
  33. package/dist/css/components/pagination.css +11 -0
  34. package/dist/css/components/quantity.css +16 -0
  35. package/dist/css/components/slot-picker.css +126 -0
  36. package/dist/css/components/steps.css +2 -2
  37. package/dist/css/components/studio-dock.css +35 -0
  38. package/dist/css/components/theme-picker.css +1 -1
  39. package/dist/css/components/toast.css +1 -1
  40. package/dist/css/components/trailer.css +37 -0
  41. package/dist/css/controls.css +78 -13
  42. package/dist/css/effects.css +8 -8
  43. package/dist/css/fonts.css +1 -1
  44. package/dist/css/themes/black-green.css +1 -1
  45. package/dist/css/themes/black.css +1 -1
  46. package/dist/css/themes/blue.css +1 -1
  47. package/dist/css/themes/brown.css +1 -1
  48. package/dist/css/themes/cold-blue.css +1 -1
  49. package/dist/css/themes/funny.css +1 -1
  50. package/dist/css/themes/gray.css +1 -1
  51. package/dist/css/themes/green.css +1 -1
  52. package/dist/css/themes/modern-1.css +1 -1
  53. package/dist/css/themes/neogreen.css +1 -1
  54. package/dist/css/themes/new.css +1 -1
  55. package/dist/css/themes/new2.css +1 -1
  56. package/dist/css/themes/oled.css +1 -1
  57. package/dist/css/themes/orange.css +1 -1
  58. package/dist/css/themes/pastel-pink.css +1 -1
  59. package/dist/css/themes/pink.css +1 -1
  60. package/dist/css/themes/purple.css +1 -1
  61. package/dist/css/themes/red.css +1 -1
  62. package/dist/css/themes/super-blue.css +1 -1
  63. package/dist/css/themes.css +19 -19
  64. package/dist/css/tokens.css +9 -9
  65. package/dist/elements/index.d.ts +75 -7
  66. package/dist/elements/index.js +172 -6
  67. package/dist/elements/index.js.map +1 -1
  68. package/dist/{engine-CUr9QijM.d.ts → engine-GDGwQnJE.d.ts} +2 -2
  69. package/dist/gl/index.js +3 -3
  70. package/dist/index.css +1076 -63
  71. package/dist/index.d.ts +17 -17
  72. package/dist/index.js +49 -7
  73. package/dist/index.js.map +1 -1
  74. package/dist/react/index.d.ts +139 -40
  75. package/dist/react/index.js +355 -8
  76. package/dist/react/index.js.map +1 -1
  77. package/dist/{reduced-BM4Ls0g5.d.ts → reduced-BmBzKH94.d.ts} +215 -18
  78. package/dist/{reveal-WFUWDrei.d.ts → reveal-jsX-uwUz.d.ts} +233 -24
  79. package/dist/{store-Bqy_obnD.d.ts → store-DYb3tTsZ.d.ts} +5 -5
  80. package/dist/theme/generate.d.ts +1 -1
  81. package/dist/theme/generate.js +2 -2
  82. package/dist/theme/generate.js.map +1 -1
  83. package/dist/theme/index.d.ts +2 -2
  84. package/dist/theme/index.js +2 -2
  85. package/dist/{theme-BFMoCzi6.d.ts → theme-Bjf9qIIy.d.ts} +1 -1
  86. package/package.json +2 -2
  87. package/registry.json +230 -156
  88. package/skills/motion-kit/SKILL.md +209 -189
  89. package/skills/motion-kit/reference/components.md +5 -5
  90. package/skills/motion-kit/reference/design.md +14 -14
  91. package/skills/motion-kit/reference/recipes.md +48 -49
  92. package/src/auto/auto-init.ts +38 -0
  93. package/src/components/calendar/README.md +82 -0
  94. package/src/components/calendar/calendar.css +158 -0
  95. package/src/components/calendar/element.ts +27 -0
  96. package/src/components/calendar/engine.ts +412 -0
  97. package/src/components/calendar/react.tsx +69 -0
  98. package/src/components/chat/README.md +1 -3
  99. package/src/components/chat/chat.css +1 -1
  100. package/src/components/chat/engine.ts +1 -1
  101. package/src/components/chat/react.tsx +1 -1
  102. package/src/components/chat-background/README.md +1 -3
  103. package/src/components/chat-background/audio.ts +1 -1
  104. package/src/components/chat-background/chat-background.css +2 -2
  105. package/src/components/chat-background/engine.ts +1 -1
  106. package/src/components/chat-background/react.tsx +1 -1
  107. package/src/components/cursor/README.md +3 -5
  108. package/src/components/cursor/cursor.css +3 -3
  109. package/src/components/cursor/element.ts +2 -2
  110. package/src/components/cursor/engine.ts +5 -5
  111. package/src/components/cursor/react.tsx +1 -1
  112. package/src/components/dialog/README.md +4 -8
  113. package/src/components/dialog/dialog.css +3 -3
  114. package/src/components/dialog/engine.ts +2 -2
  115. package/src/components/dialog/react.tsx +1 -1
  116. package/src/components/hover-card/README.md +16 -0
  117. package/src/components/hover-card/element.ts +8 -0
  118. package/src/components/hover-card/engine.ts +69 -0
  119. package/src/components/hover-card/hover-card.css +13 -0
  120. package/src/components/hover-card/react.tsx +19 -0
  121. package/src/components/input-otp/README.md +18 -0
  122. package/src/components/input-otp/element.ts +14 -0
  123. package/src/components/input-otp/engine.ts +106 -0
  124. package/src/components/input-otp/input-otp.css +9 -0
  125. package/src/components/input-otp/react.tsx +21 -0
  126. package/src/components/island/README.md +7 -7
  127. package/src/components/island/engine.ts +3 -3
  128. package/src/components/island/island.css +1 -1
  129. package/src/components/island/react.tsx +3 -3
  130. package/src/components/menu/README.md +2 -4
  131. package/src/components/menu/engine.ts +1 -1
  132. package/src/components/menu/menu.css +1 -1
  133. package/src/components/menu/react.tsx +1 -1
  134. package/src/components/nav/README.md +12 -14
  135. package/src/components/nav/engine.ts +5 -5
  136. package/src/components/nav/nav.css +1 -5
  137. package/src/components/nav/react.tsx +3 -3
  138. package/src/components/pagination/README.md +17 -0
  139. package/src/components/pagination/element.ts +14 -0
  140. package/src/components/pagination/engine.ts +102 -0
  141. package/src/components/pagination/pagination.css +10 -0
  142. package/src/components/pagination/react.tsx +22 -0
  143. package/src/components/quantity/README.md +20 -0
  144. package/src/components/quantity/element.ts +14 -0
  145. package/src/components/quantity/engine.ts +85 -0
  146. package/src/components/quantity/quantity.css +15 -0
  147. package/src/components/quantity/react.tsx +21 -0
  148. package/src/components/slot-picker/README.md +68 -0
  149. package/src/components/slot-picker/element.ts +27 -0
  150. package/src/components/slot-picker/engine.ts +412 -0
  151. package/src/components/slot-picker/react.tsx +76 -0
  152. package/src/components/slot-picker/slot-picker.css +125 -0
  153. package/src/components/steps/README.md +1 -3
  154. package/src/components/steps/engine.ts +3 -3
  155. package/src/components/steps/react.tsx +2 -2
  156. package/src/components/steps/steps.css +2 -2
  157. package/src/components/studio-dock/README.md +44 -0
  158. package/src/components/studio-dock/element.ts +11 -0
  159. package/src/components/studio-dock/engine.ts +212 -0
  160. package/src/components/studio-dock/react.tsx +23 -0
  161. package/src/components/studio-dock/studio-dock.css +34 -0
  162. package/src/components/theme-picker/README.md +3 -5
  163. package/src/components/theme-picker/engine.ts +2 -2
  164. package/src/components/theme-picker/react.tsx +1 -1
  165. package/src/components/theme-picker/theme-picker.css +1 -1
  166. package/src/components/toast/README.md +1 -3
  167. package/src/components/toast/engine.ts +2 -2
  168. package/src/components/toast/react.tsx +1 -1
  169. package/src/components/toast/store.ts +1 -2
  170. package/src/components/toast/toast.css +1 -1
  171. package/src/components/trailer/README.md +28 -0
  172. package/src/components/trailer/element.ts +13 -0
  173. package/src/components/trailer/engine.ts +189 -0
  174. package/src/components/trailer/react.tsx +16 -0
  175. package/src/components/trailer/trailer.css +36 -0
  176. package/src/core/channels.ts +3 -3
  177. package/src/core/curves.ts +3 -3
  178. package/src/core/dates.ts +98 -0
  179. package/src/core/gsap.ts +2 -2
  180. package/src/core/loop.ts +1 -1
  181. package/src/core/math.ts +1 -1
  182. package/src/core/physics-spring.ts +2 -2
  183. package/src/core/scroll-track.ts +2 -4
  184. package/src/core/spring.ts +1 -1
  185. package/src/core/timing.ts +21 -22
  186. package/src/css/controls/README.md +24 -20
  187. package/src/css/controls/burger.css +1 -1
  188. package/src/css/controls/button.css +4 -4
  189. package/src/css/controls/checkbox.css +1 -1
  190. package/src/css/controls/chip.css +1 -1
  191. package/src/css/controls/field.css +2 -2
  192. package/src/css/controls/glass.css +4 -4
  193. package/src/css/controls/status.css +63 -0
  194. package/src/css/default-theme.css +1 -1
  195. package/src/css/effects/README.md +19 -21
  196. package/src/css/effects/anim.css +1 -1
  197. package/src/css/effects/fade.css +1 -1
  198. package/src/css/effects/float.css +1 -1
  199. package/src/css/effects/frost.css +1 -1
  200. package/src/css/effects/grain.css +1 -1
  201. package/src/css/effects/loading.css +1 -1
  202. package/src/css/effects/success.css +1 -1
  203. package/src/css/effects/text.css +1 -1
  204. package/src/css/fonts.css +1 -1
  205. package/src/css/states.css +1 -1
  206. package/src/css/themes/black-green.css +1 -1
  207. package/src/css/themes/black.css +1 -1
  208. package/src/css/themes/blue.css +1 -1
  209. package/src/css/themes/brown.css +1 -1
  210. package/src/css/themes/cold-blue.css +1 -1
  211. package/src/css/themes/funny.css +1 -1
  212. package/src/css/themes/gray.css +1 -1
  213. package/src/css/themes/green.css +1 -1
  214. package/src/css/themes/modern-1.css +1 -1
  215. package/src/css/themes/neogreen.css +1 -1
  216. package/src/css/themes/new.css +1 -1
  217. package/src/css/themes/new2.css +1 -1
  218. package/src/css/themes/oled.css +1 -1
  219. package/src/css/themes/orange.css +1 -1
  220. package/src/css/themes/pastel-pink.css +1 -1
  221. package/src/css/themes/pink.css +1 -1
  222. package/src/css/themes/purple.css +1 -1
  223. package/src/css/themes/red.css +1 -1
  224. package/src/css/themes/super-blue.css +1 -1
  225. package/src/css/tokens.css +8 -8
  226. package/src/elements/index.ts +24 -0
  227. package/src/gl/liquid-blend/README.md +3 -3
  228. package/src/gl/matcap/README.md +3 -3
  229. package/src/gl/particle-hero/README.md +1 -1
  230. package/src/gl/particle-hero/create-particle-hero.ts +3 -5
  231. package/src/gl/particle-hero/shaders.ts +1 -1
  232. package/src/gl/shader-blur/README.md +3 -3
  233. package/src/gl/shader-grain/README.md +3 -3
  234. package/src/index.ts +25 -0
  235. package/src/motion/chat.ts +2 -2
  236. package/src/motion/confetti.ts +1 -1
  237. package/src/motion/count.ts +1 -1
  238. package/src/motion/details.ts +1 -1
  239. package/src/motion/drag-dismiss.ts +1 -1
  240. package/src/motion/effects.ts +1 -1
  241. package/src/motion/entrances.ts +1 -1
  242. package/src/motion/floating.ts +1 -1
  243. package/src/motion/flow.ts +2 -2
  244. package/src/motion/indicator.ts +1 -1
  245. package/src/motion/layout.ts +1 -1
  246. package/src/motion/liquid.ts +1 -1
  247. package/src/motion/morph.ts +2 -2
  248. package/src/motion/reveal.ts +1 -1
  249. package/src/motion/sheet.ts +1 -1
  250. package/src/motion/surface.ts +1 -1
  251. package/src/react/animated-number.tsx +2 -2
  252. package/src/react/flip-group.tsx +1 -1
  253. package/src/react/frost.tsx +1 -1
  254. package/src/react/index.ts +21 -0
  255. package/src/react/slot-text.tsx +1 -1
  256. package/src/react/use-action-button.ts +6 -0
  257. package/src/react/use-card-dock.ts +1 -1
  258. package/src/react/use-cascade.ts +1 -1
  259. package/src/react/use-contrast.ts +1 -1
  260. package/src/react/use-depth-grid.ts +1 -1
  261. package/src/react/use-editorial-reveal.ts +7 -0
  262. package/src/react/use-fill-text.ts +1 -1
  263. package/src/react/use-film-hero.ts +6 -0
  264. package/src/react/use-font-cycle.ts +7 -0
  265. package/src/react/use-frame-zoom.ts +1 -1
  266. package/src/react/use-image-zoom.ts +5 -0
  267. package/src/react/use-joined-cta.ts +5 -0
  268. package/src/react/use-letters.ts +1 -1
  269. package/src/react/use-local-clock.ts +5 -0
  270. package/src/react/use-marquee.ts +1 -1
  271. package/src/react/use-mask-text.ts +1 -1
  272. package/src/react/use-parallax.ts +1 -1
  273. package/src/react/use-particle-hero.ts +1 -1
  274. package/src/react/use-scroll-dock.ts +5 -0
  275. package/src/react/use-snap-strip.ts +1 -1
  276. package/src/react/use-sticker.ts +5 -0
  277. package/src/react/use-studio-dock.ts +8 -0
  278. package/src/react/use-text-roll.ts +1 -1
  279. package/src/react/use-thumbnail-nav.ts +7 -0
  280. package/src/react/use-trailer.ts +6 -0
  281. package/src/react/use-weight-hover.ts +5 -0
  282. package/src/recipes/action-button/README.md +31 -0
  283. package/src/recipes/action-button/action-button.css +113 -0
  284. package/src/recipes/action-button/create-action-button.ts +56 -0
  285. package/src/recipes/card-dock/README.md +1 -1
  286. package/src/recipes/card-dock/card-dock.css +1 -1
  287. package/src/recipes/card-dock/create-card-dock.ts +2 -2
  288. package/src/recipes/cascade/README.md +1 -3
  289. package/src/recipes/cascade/create-cascade.ts +3 -3
  290. package/src/recipes/contrast/README.md +0 -2
  291. package/src/recipes/contrast/create-contrast.ts +1 -1
  292. package/src/recipes/counter/README.md +0 -2
  293. package/src/recipes/counter/create-counter.ts +1 -1
  294. package/src/recipes/curved-carousel/README.md +0 -2
  295. package/src/recipes/curved-carousel/create-curved-carousel.ts +2 -2
  296. package/src/recipes/curved-carousel/curved-carousel.css +1 -1
  297. package/src/recipes/depth-grid/README.md +0 -2
  298. package/src/recipes/depth-grid/create-depth-grid.ts +3 -4
  299. package/src/recipes/details/README.md +0 -2
  300. package/src/recipes/details/create-details.ts +1 -1
  301. package/src/recipes/dock-pill/README.md +3 -3
  302. package/src/recipes/drag-ruler/README.md +3 -3
  303. package/src/recipes/editorial-reveal/README.md +35 -0
  304. package/src/recipes/editorial-reveal/create-editorial-reveal.ts +91 -0
  305. package/src/recipes/editorial-reveal/editorial-reveal.css +17 -0
  306. package/src/recipes/fill-text/README.md +1 -1
  307. package/src/recipes/fill-text/create-fill-text.ts +1 -1
  308. package/src/recipes/film-hero/README.md +23 -0
  309. package/src/recipes/film-hero/create-film-hero.ts +65 -0
  310. package/src/recipes/film-hero/film-hero.css +29 -0
  311. package/src/recipes/fit-text/README.md +0 -2
  312. package/src/recipes/flow/README.md +0 -2
  313. package/src/recipes/flow/create-flow.ts +1 -1
  314. package/src/recipes/font-cycle/README.md +11 -0
  315. package/src/recipes/font-cycle/create-font-cycle.ts +126 -0
  316. package/src/recipes/font-cycle/font-cycle.css +36 -0
  317. package/src/recipes/frame-zoom/README.md +1 -3
  318. package/src/recipes/frame-zoom/create-frame-zoom.ts +2 -2
  319. package/src/recipes/image-zoom/README.md +16 -0
  320. package/src/recipes/image-zoom/create-image-zoom.ts +27 -0
  321. package/src/recipes/image-zoom/image-zoom.css +7 -0
  322. package/src/recipes/infinite-reel/README.md +3 -3
  323. package/src/recipes/joined-cta/README.md +13 -0
  324. package/src/recipes/joined-cta/create-joined-cta.ts +22 -0
  325. package/src/recipes/joined-cta/joined-cta.css +17 -0
  326. package/src/recipes/letters/README.md +2 -4
  327. package/src/recipes/letters/create-letters.ts +3 -3
  328. package/src/recipes/local-clock/README.md +31 -0
  329. package/src/recipes/local-clock/create-local-clock.ts +61 -0
  330. package/src/recipes/marquee/README.md +0 -2
  331. package/src/recipes/marquee/create-marquee.ts +3 -3
  332. package/src/recipes/marquee/marquee.css +1 -1
  333. package/src/recipes/mask-text/README.md +3 -5
  334. package/src/recipes/mask-text/create-mask-text.ts +4 -4
  335. package/src/recipes/parallax/README.md +1 -3
  336. package/src/recipes/parallax/create-parallax.ts +1 -1
  337. package/src/recipes/pile/README.md +0 -2
  338. package/src/recipes/pile/create-pile.ts +1 -1
  339. package/src/recipes/pile/pile-math.ts +1 -1
  340. package/src/recipes/pile/pile.css +1 -1
  341. package/src/recipes/pill/README.md +0 -2
  342. package/src/recipes/pill/pill.css +2 -2
  343. package/src/recipes/pop/README.md +0 -2
  344. package/src/recipes/pop/create-pop.ts +1 -1
  345. package/src/recipes/radial-menu/README.md +0 -2
  346. package/src/recipes/radial-menu/create-radial-menu.ts +1 -1
  347. package/src/recipes/radial-menu/radial-menu.css +1 -1
  348. package/src/recipes/reflow/README.md +3 -5
  349. package/src/recipes/reflow/create-reflow.ts +1 -1
  350. package/src/recipes/repel-bento/README.md +3 -3
  351. package/src/recipes/reveal/README.md +0 -2
  352. package/src/recipes/reveal/create-reveal.ts +1 -1
  353. package/src/recipes/rotator/README.md +3 -3
  354. package/src/recipes/scroll-dock/README.md +46 -0
  355. package/src/recipes/scroll-dock/create-scroll-dock.ts +72 -0
  356. package/src/recipes/scroll-dock/scroll-dock.css +70 -0
  357. package/src/recipes/slot-text/README.md +0 -2
  358. package/src/recipes/slot-text/create-slot-text.ts +1 -1
  359. package/src/recipes/snap-strip/README.md +1 -1
  360. package/src/recipes/snap-strip/create-snap-strip.ts +5 -6
  361. package/src/recipes/snap-strip/snap-strip.css +1 -1
  362. package/src/recipes/sortable/README.md +3 -5
  363. package/src/recipes/sortable/create-sortable.ts +4 -4
  364. package/src/recipes/sortable/sortable.css +1 -1
  365. package/src/recipes/spring-cards/README.md +0 -2
  366. package/src/recipes/spring-cards/create-spring-cards.ts +1 -1
  367. package/src/recipes/spring-cards/spring-cards.css +1 -1
  368. package/src/recipes/sticker/README.md +59 -0
  369. package/src/recipes/sticker/create-sticker.ts +490 -0
  370. package/src/recipes/sticker/sticker.css +112 -0
  371. package/src/recipes/stretch-footer/README.md +0 -2
  372. package/src/recipes/stretch-footer/create-stretch-footer.ts +1 -1
  373. package/src/recipes/stretch-footer/stretch-footer.css +1 -1
  374. package/src/recipes/tabs/README.md +0 -2
  375. package/src/recipes/tabs/create-tabs.ts +1 -1
  376. package/src/recipes/text-roll/README.md +1 -3
  377. package/src/recipes/text-roll/create-text-roll.ts +3 -3
  378. package/src/recipes/text-roll/text-roll.css +1 -1
  379. package/src/recipes/thumbnail-nav/README.md +16 -0
  380. package/src/recipes/thumbnail-nav/create-thumbnail-nav.ts +165 -0
  381. package/src/recipes/thumbnail-nav/thumbnail-nav.css +108 -0
  382. package/src/recipes/ticket-menu/README.md +3 -3
  383. package/src/recipes/weight-hover/README.md +37 -0
  384. package/src/recipes/weight-hover/create-weight-hover.ts +136 -0
  385. package/src/recipes/weight-hover/weight-hover.css +7 -0
  386. package/src/recipes/words/README.md +0 -2
  387. package/src/recipes/words/create-words.ts +1 -1
  388. package/src/theme/generate.ts +1 -1
  389. package/src/theme/presets.ts +2 -2
  390. package/src/theme/theme.ts +1 -2
  391. package/dist/chunk-2BQGFOA7.js.map +0 -1
  392. package/dist/chunk-34XYOXHG.js.map +0 -1
  393. package/dist/chunk-6OJAP6ZL.js.map +0 -1
  394. package/dist/chunk-FS2HJVVY.js.map +0 -1
  395. package/dist/chunk-J27KH2A2.js.map +0 -1
  396. package/dist/chunk-KLY5BRRI.js.map +0 -1
  397. package/dist/chunk-Q4LVFNLN.js.map +0 -1
  398. package/dist/chunk-RFDIZYFX.js.map +0 -1
  399. /package/dist/{chunk-ABNRDDO7.js.map → chunk-I3DXF2KQ.js.map} +0 -0
@@ -0,0 +1,70 @@
1
+ /* scroll-dock — inverted capsule at the bottom centre; rises with a soft overshoot. */
2
+ .mk-scroll-dock {
3
+ position: fixed;
4
+ left: 50%;
5
+ bottom: var(--mk-scroll-dock-bottom, 24px);
6
+ z-index: 20;
7
+ display: flex;
8
+ gap: 4px;
9
+ max-width: calc(100vw - 32px);
10
+ padding: 6px;
11
+ /* Too many items for the width: scroll inside the capsule, never overflow the page. */
12
+ overflow-x: auto;
13
+ scrollbar-width: none;
14
+ border-radius: 100px;
15
+ background: var(--mk-text);
16
+ color: var(--mk-bg);
17
+ box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--mk-bg) 20%, transparent), 0 12px 30px -10px rgb(0 0 0 / 0.5);
18
+ opacity: 0;
19
+ pointer-events: none;
20
+ transform: translate(-50%, 140%);
21
+ transition: transform 0.6s cubic-bezier(0.32, 1.25, 0.5, 1), opacity 0.3s;
22
+ }
23
+ .mk-scroll-dock[data-mk-visible],
24
+ .mk-scroll-dock:focus-within {
25
+ opacity: 1;
26
+ pointer-events: auto;
27
+ transform: translate(-50%, 0);
28
+ }
29
+ /* Inside a scrolling container: sticks to its bottom edge instead of the viewport's.
30
+ Scrollable overflow counts the un-stuck box plus its transform, so the negative
31
+ margin lifts that box by its height + bottom gap and the hide offset equals the
32
+ gap: nothing reaches past the last section, no empty band at the end. */
33
+ .mk-scroll-dock--sticky {
34
+ position: sticky;
35
+ left: auto;
36
+ width: max-content;
37
+ max-width: calc(100% - 16px);
38
+ margin: calc(-1 * (var(--mk-scroll-dock-height, 58px) + var(--mk-scroll-dock-bottom, 24px))) auto 0;
39
+ transform: translateY(var(--mk-scroll-dock-bottom, 24px)) scale(0.96);
40
+ }
41
+ .mk-scroll-dock--sticky:is([data-mk-visible], :focus-within) { transform: none; }
42
+ .mk-scroll-dock > :is(a, button) {
43
+ display: flex;
44
+ align-items: center;
45
+ gap: 8px;
46
+ height: 46px;
47
+ padding: 0 18px;
48
+ border: 0;
49
+ border-radius: 100px;
50
+ background: transparent;
51
+ color: inherit;
52
+ font: inherit;
53
+ font-size: 15px;
54
+ font-weight: 500;
55
+ white-space: nowrap;
56
+ text-decoration: none;
57
+ cursor: pointer;
58
+ transition: background 0.25s;
59
+ }
60
+ .mk-scroll-dock > :is(a, button):hover { background: color-mix(in srgb, var(--mk-bg) 15%, transparent); }
61
+ .mk-scroll-dock > :is(a, button):focus-visible { outline: 2px solid var(--mk-bg); outline-offset: -2px; }
62
+ .mk-scroll-dock::-webkit-scrollbar { display: none; }
63
+ /* Phones: a tab bar, icon over label, so four or five items fit in 360 px. */
64
+ @media (max-width: 680px) {
65
+ .mk-scroll-dock > :is(a, button) { flex-direction: column; justify-content: center; gap: 2px; height: 52px; padding: 0 12px; border-radius: 26px; font-size: 11px; }
66
+ .mk-scroll-dock--sticky { margin-top: calc(-1 * (var(--mk-scroll-dock-height, 64px) + var(--mk-scroll-dock-bottom, 24px))); }
67
+ }
68
+ @media (prefers-reduced-motion: reduce) {
69
+ .mk-scroll-dock { transition: opacity 0.2s; }
70
+ }
@@ -2,8 +2,6 @@
2
2
 
3
3
  Cuando el texto cambia, cada letra distinta sale rodando y entra la nueva (300 ms, curva con rebote `cubic-bezier(.34,1.56,.64,1)`), con una inclinación determinista de hasta 5° y 45 ms entre letras; el ancho de cada letra se ajusta. Las letras se agrupan por palabra para que el texto parta línea entre palabras.
4
4
 
5
- Origen: Stepbro — SlotText (`slot-text` en el kit), portado desde Kayro.
6
-
7
5
  ## Vanilla / Astro
8
6
 
9
7
  ```html
@@ -4,7 +4,7 @@ import { TIMING } from '../../core/timing';
4
4
  import { splitGraphemes } from '../../core/split';
5
5
 
6
6
  /*
7
- * Stepbro's SlotText (ported from Kayro): when the text changes, each letter
7
+ * Slot text: when the text changes, each letter
8
8
  * that differs rolls out and the new one rolls in (300 ms, a springy curve),
9
9
  * with a slight deterministic tilt (≤ 5°) and a 45 ms cascade; letter boxes ease
10
10
  * to their new width. Letters are grouped by word so lines only break between
@@ -2,7 +2,7 @@
2
2
 
3
3
  Una tira horizontal de tarjetas con scroll-snap nativo que pasa a la siguiente cada 5 s mientras se ve (empieza medio segundo después de aparecer), espera 2 s después de un toque, arrastre o rueda antes de seguir y vuelve de la última a la primera.
4
4
 
5
- Origen: iyo.ai, tarjetas de producto en móvil (`product-card-mobile`, `CM`): cadencia 5000 ms, espera 2000 ms, `data-delay="500"`, tarjetas de 68vw. iyo usa el slider físico Smooothy con bucle clonado; aquí desliza el navegador con su propio snap.
5
+ Avanza cada 5000 ms, espera 2000 ms tras una interacción y empieza 500 ms después de hacerse visible. Utiliza el scroll-snap nativo del navegador.
6
6
 
7
7
  ## HTML / Astro
8
8
 
@@ -4,20 +4,19 @@ import { TIMING } from '../../core/timing';
4
4
  import { inert, warnOnce, type Instance } from '../../core/types';
5
5
 
6
6
  /*
7
- * iyo.ai's phone cards: a native scroll-snap strip that moves on by one card
7
+ * phone cards: a native scroll-snap strip that moves on by one card
8
8
  * every 5 s while it is on screen (starting `delay` ms after it shows), waits
9
9
  * 2 s after a touch, drag or wheel before carrying on, and wraps from the last
10
- * card to the first. iyo drives it with Smooothy; this keeps the browser's own
11
- * scrolling and snapping instead of a physics slider.
10
+ * card to the first. Uses the browser's native scrolling and snapping.
12
11
  */
13
12
 
14
13
  export interface SnapStripOptions {
15
14
  autoplay?: boolean;
16
- /** Milliseconds between cards (iyo: 5000). */
15
+ /** Milliseconds between cards (default: 5000). */
17
16
  interval?: number;
18
- /** Milliseconds to wait after the reader touches it (iyo: 2000). */
17
+ /** Milliseconds to wait after the reader touches it (default: 2000). */
19
18
  resume?: number;
20
- /** Milliseconds after it shows before autoplay starts (iyo's data-delay: 500). */
19
+ /** Milliseconds after it shows before autoplay starts. */
21
20
  delay?: number;
22
21
  }
23
22
 
@@ -1,4 +1,4 @@
1
- /* iyo.ai's phone cards: a strip of cards that snaps to each one. */
1
+ /* phone cards: a strip of cards that snaps to each one. */
2
2
  .mk-snap-strip {
3
3
  --mk-snap-strip-item: 68vw;
4
4
  --mk-snap-strip-gap: 0.75rem;
@@ -1,6 +1,6 @@
1
1
  # sortable
2
2
 
3
- El arrastre para reordenar de Stepbro Tasks (`useDragReorder`, modo "transform"):
3
+ Arrastre para reordenar listas y mover elementos entre grupos:
4
4
 
5
5
  - **Levantar:** pasados 6 px el elemento se convierte en una copia flotante (0.18 s, `power2.out`) que crece un 3 % y gana sombra. El hueco que deja queda invisible.
6
6
  - **Seguir:** la copia sigue al puntero con un resorte (rigidez 1100, amortiguación 38; más pesada cuanto más grande) y se inclina según la velocidad y la aceleración, como si colgara del punto por donde la agarraste (resorte 170/13, hasta 14°).
@@ -9,9 +9,7 @@ El arrastre para reordenar de Stepbro Tasks (`useDragReorder`, modo "transform")
9
9
  - **Bordes:** cerca del borde (56 px) el contenedor que hace scroll se desplaza solo, hasta 16 px por frame.
10
10
  - **Cancelar:** Escape (o soltar donde estaba) la devuelve a su sitio.
11
11
 
12
- En pantallas táctiles solo se arrastra desde `[data-mk-sort-handle]`, para que la lista siga haciendo scroll. Teclado (añadido): Espacio o Enter levanta, flechas arriba/abajo mueven, izquierda/derecha cambian de lista, Espacio o Enter suelta, Escape lo devuelve; cada paso se anuncia.
13
-
14
- Origen: Stepbro Tasks `useDragReorder` (`stepbro-tasks.js`, líneas 39021–39330).
12
+ En pantallas táctiles solo se arrastra desde `[data-mk-sort-handle]`, para que la lista siga haciendo scroll. Teclado: Espacio o Enter levanta, flechas arriba/abajo mueven, izquierda/derecha cambian de lista, Espacio o Enter suelta, Escape lo devuelve; cada paso se anuncia.
15
13
 
16
14
  ## HTML / Astro
17
15
 
@@ -75,7 +73,7 @@ En React el motor no toca el orden del DOM (`mutate: false`): llama `onReorder`,
75
73
  | `labels` | español | `lifted`, `moved`, `dropped` (funciones de posición y total), `cancelled` |
76
74
  | `onReorder` | — | `(detalle) => void` |
77
75
 
78
- `detalle` (también en el evento `mk:reorder`, cancelable): `id`, `item`, `fromGroup`, `toGroup`, `fromIndex`, `toIndex`, `groupChanged`, `afterId`, `beforeId` (el vecino en el destino, para guardar el orden en un servidor como hace Stepbro). `moveItem(lista, desde, hasta)` mueve una entrada de un array.
76
+ `detalle` (también en el evento `mk:reorder`, cancelable): `id`, `item`, `fromGroup`, `toGroup`, `fromIndex`, `toIndex`, `groupChanged`, `afterId`, `beforeId` (el vecino en el destino, para guardar el orden en un servidor). `moveItem(lista, desde, hasta)` mueve una entrada de un array.
79
77
 
80
78
  Partes: `[data-mk-item]` con `data-mk-id`, `[data-mk-sort-handle]`, `[data-mk-sortable-group]` (opcional; `data-mk-sortable-locked` no acepta elementos). Durante el arrastre: `[data-mk-sorting]` en la raíz, `[data-mk-dragging]` en el hueco, `[data-mk-sortable-clone]` en la copia; levantado con teclado: `[data-mk-sort-grabbed]`.
81
79
 
@@ -7,7 +7,7 @@ import { inert, warnOnce, type Instance } from '../../core/types';
7
7
  import { captureLayout, reflowLayout } from '../../motion/layout';
8
8
 
9
9
  /*
10
- * Stepbro's drag reorder (Tasks useDragReorder, "transform" mode). Past 6 px
10
+ * Drag reorder for lists and groups. Past 6 px
11
11
  * the item lifts (0.18 s) into a floating copy that follows the pointer on a
12
12
  * spring (1100/38, heavier when bigger) and tilts with its speed (spring
13
13
  * 170/13, up to 14°); the item it left is a hidden slot. The others never
@@ -36,7 +36,7 @@ export interface SortableOptions {
36
36
  /** Drag only from [data-mk-sort-handle] (always so on touch screens). */
37
37
  handle?: boolean;
38
38
  autoScroll?: boolean;
39
- /** The floating copy's spring (Stepbro: 1100 / 38). */
39
+ /** The floating copy's spring (default: 1100 / 38). */
40
40
  follow?: { stiffness?: number; damping?: number };
41
41
  labels?: SortableLabels;
42
42
  onReorder?: (detail: ReorderDetail) => void;
@@ -50,7 +50,7 @@ export interface ReorderDetail {
50
50
  fromIndex: number;
51
51
  toIndex: number;
52
52
  groupChanged: boolean;
53
- /** Neighbours at the destination (Stepbro sends one to its API as the anchor). */
53
+ /** Neighbours at the destination. */
54
54
  afterId: string | null;
55
55
  beforeId: string | null;
56
56
  }
@@ -537,7 +537,7 @@ export function createSortable(root: HTMLElement | null, options: SortableOption
537
537
  draggedEls.add(item);
538
538
  }
539
539
  const box = item.getBoundingClientRect();
540
- // Arriving somewhere else: cross-fade to a copy styled by the new place (Stepbro's "floatingTo").
540
+ // Arriving somewhere else: cross-fade to a copy styled by the new place.
541
541
  if (layers.length === 1 && ownerOf(item) !== layers[0]!.el.parentElement) {
542
542
  const origin = layers[0]!.el.style.transformOrigin.split(' ').map(parseFloat);
543
543
  layers.push(makeLayer(item, ownerOf(item), origin[0] ?? 0, origin[1] ?? 0));
@@ -1,4 +1,4 @@
1
- /* sortable — Stepbro's drag reorder (Tasks): the item lifts into a floating copy that tilts; the others make room. */
1
+ /* sortable — drag reorder: the item lifts into a floating copy that tilts; the others make room. */
2
2
  [data-mk-sorting] {
3
3
  -webkit-user-select: none;
4
4
  user-select: none;
@@ -2,8 +2,6 @@
2
2
 
3
3
  Tarjetas en abanico: entran escalando con rebote, cada una tiene un resorte que arranca desplazado al azar y vuelve a su sitio, y el cursor las empuja al pasar cerca.
4
4
 
5
- Origen: spencergabor.com — portada (Hero.vue, `useSpring`).
6
-
7
5
  ## Vanilla / Astro
8
6
 
9
7
  ```html
@@ -8,7 +8,7 @@ import { createScope } from '../../core/scope';
8
8
  import { inert, warnOnce, type Instance } from '../../core/types';
9
9
 
10
10
  /*
11
- * spencergabor.com hero: each card owns a spring that starts at a random offset
11
+ * spring-cards: each card owns a spring that starts at a random offset
12
12
  * and is pulled home shortly after; pointer movement near a card adds velocity
13
13
  * with a (1 − distance)^falloff · push weight. CSS turns the variables into
14
14
  * translate/rotate (see spring-cards.css).
@@ -1,4 +1,4 @@
1
- /* spring-cards — card geometry and tilt from spencergabor.com (Hero) */
1
+ /* spring-cards — card geometry and tilt */
2
2
 
3
3
  [data-mk-card] {
4
4
  display: grid;
@@ -0,0 +1,59 @@
1
+ # sticker
2
+
3
+ Un sticker troquelado y holográfico, como los del hero y el contacto de DOVV Studio:
4
+
5
+ - **Entrada:** pasa de escala .4 y opacidad 0 a su tamaño en 0.7 s con la curva `slot` (`.34,1.56,.64,1`). Para escalonarlos, usa `--mk-sticker-delay` (0.15 s entre uno y otro en la referencia).
6
+ - **Hover:** la rotación pasa a `--mk-sticker-rot × −0.6` y la escala a 1.08, en 0.4 s con la misma curva.
7
+ - **Holograma:** el foil y el brillo siguen al ratón sobre el sticker (lerp .08). Sin ratón, o en táctil, derivan solos. Sólo se anima mientras el sticker es visible.
8
+ - **Despegar:** al presionar, el borde más cercano se levanta un poco y el sticker conserva la pose que tenía, sin saltos aunque estuviera en hover. Al arrastrar en cualquier dirección (también hacia fuera, como al jalarlo), el pliegue avanza con la distancia y deja ver un dorso de papel con sombra. Si lo sueltas pronto, se vuelve a pegar en 380 ms. Pasado el 30 % del área, o tras arrastrar la mitad de su lado largo (80 px como mínimo), se suelta: sigue al puntero (lerp .22), crece un 8 % y se inclina con la velocidad (±16°). Al soltarlo cae con gravedad (1600 px/s²) y giro, y a los 2.5 s vuelve a su sitio con la entrada.
9
+
10
+ El pliegue es propio: el frente se recorta con `clip-path` a un lado de la línea de pliegue y el dorso es una copia reflejada sobre ella. No usa Peel.js ni dependencias. Respecto a la referencia, el kit añade cuatro cosas: congela la pose al presionar, despega también al jalar hacia fuera, limita el estiramiento (la esquina no se aleja de la arista opuesta más que su distancia original) y sombrea el dorso. Así no levanta de golpe toda una píldora larga.
11
+
12
+ ## Vanilla / Astro
13
+
14
+ ```html
15
+ <div class="hero" style="position: relative">
16
+ <div class="mk-sticker" data-mk="sticker" aria-hidden="true"
17
+ style="position: absolute; left: -4%; top: -12%; --mk-sticker-rot: -9deg; --mk-sticker-delay: .9s">
18
+ <span class="mk-sticker__pill">Framer expert</span>
19
+ </div>
20
+ <div class="mk-sticker mk-sticker--lime" data-mk="sticker" aria-hidden="true" style="position: absolute; right: 0; bottom: 0; --mk-sticker-rot: 7deg">
21
+ <span class="mk-sticker__badge">4.9 ★</span>
22
+ </div>
23
+ </div>
24
+ ```
25
+
26
+ El arte puede ser `.mk-sticker__pill` (cápsula), `.mk-sticker__badge` (círculo, `--mk-sticker-size`) o cualquier elemento con `.mk-sticker__art` (`--mk-sticker-radius`). Paletas: por defecto naranja, `--pink`, `--blue`, `--lime` y `--gold`. Para una propia, define `--mk-sticker-foil` (un gradiente) y `--mk-sticker-ink`.
27
+
28
+ Sin `autoInit`: `createSticker(el, opciones)`. Devuelve `state` (`idle | peeling | carried | falling | away`) y `destroy()`.
29
+
30
+ ## React
31
+
32
+ ```tsx
33
+ const ref = useRef<HTMLDivElement>(null);
34
+ useSticker(ref, { returnDelay: 2500 });
35
+ return <div ref={ref} className="mk-sticker mk-sticker--blue" aria-hidden="true"><span className="mk-sticker__pill">hey!</span></div>;
36
+ ```
37
+
38
+ Mientras está despegado, el elemento se mueve a `document.body` con `position: fixed` (así no lo recortan los contenedores) y después vuelve a su padre. No desmontes el sticker en ese intervalo; si lo haces, `destroy()` lo devuelve a su sitio.
39
+
40
+ ## Opciones
41
+
42
+ | Opción | Por defecto | Qué hace |
43
+ |---|---|---|
44
+ | `peel` | `true` | Permite despegarlo arrastrando |
45
+ | `holo` | `true` | Foil y brillo que siguen al puntero |
46
+ | `detachAt` | `0.3` | Fracción del área levantada a partir de la cual se suelta |
47
+ | `detachDistance` | mitad del lado largo, mín. 80 | px de arrastre (sin escala) a partir de los cuales se suelta |
48
+ | `returnDelay` | `2500` | ms oculto después de caer |
49
+ | `onPeel`, `onReturn` | — | Al soltarse y al volver |
50
+
51
+ ## Variables CSS
52
+
53
+ `--mk-sticker-rot`, `--mk-sticker-delay`, `--mk-sticker-scale` (la referencia usa .8 bajo 1200 px y .6 bajo 810 px), `--mk-sticker-foil`, `--mk-sticker-ink`, `--mk-sticker-size` y `--mk-sticker-radius`.
54
+
55
+ El dorso de papel cubre `.mk-sticker__pill`, `__badge` y `__art`. Si el arte es una forma libre (un `<img>` o `<svg>` con transparencia), añade `data-mk-sticker-back="silhouette"` al sticker y el dorso será su silueta blanca.
56
+
57
+ ## Accesibilidad
58
+
59
+ Es decoración: márcalo con `aria-hidden="true"` y deja el texto importante en el contenido. Si el sticker transmite información, usa `peel: false`. Con movimiento reducido no hay entrada, hover ni holograma animado; despegar sigue funcionando porque lo hace el usuario, pero sin caída: se oculta y vuelve.