@yewdiel21/motion-kit 0.0.0-stage → 0.9.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 (391) hide show
  1. package/NOTICE +38 -0
  2. package/README.md +80 -2
  3. package/bin/motion-kit.mjs +242 -0
  4. package/css.d.ts +2 -0
  5. package/dist/auto/index.d.ts +63 -0
  6. package/dist/auto/index.js +207 -0
  7. package/dist/auto/index.js.map +1 -0
  8. package/dist/chunk-2BQGFOA7.js +177 -0
  9. package/dist/chunk-2BQGFOA7.js.map +1 -0
  10. package/dist/chunk-34XYOXHG.js +2374 -0
  11. package/dist/chunk-34XYOXHG.js.map +1 -0
  12. package/dist/chunk-6OJAP6ZL.js +832 -0
  13. package/dist/chunk-6OJAP6ZL.js.map +1 -0
  14. package/dist/chunk-ABNRDDO7.js +28 -0
  15. package/dist/chunk-ABNRDDO7.js.map +1 -0
  16. package/dist/chunk-FS2HJVVY.js +3320 -0
  17. package/dist/chunk-FS2HJVVY.js.map +1 -0
  18. package/dist/chunk-J27KH2A2.js +157 -0
  19. package/dist/chunk-J27KH2A2.js.map +1 -0
  20. package/dist/chunk-KLY5BRRI.js +18 -0
  21. package/dist/chunk-KLY5BRRI.js.map +1 -0
  22. package/dist/chunk-Q4LVFNLN.js +1617 -0
  23. package/dist/chunk-Q4LVFNLN.js.map +1 -0
  24. package/dist/chunk-RFDIZYFX.js +304 -0
  25. package/dist/chunk-RFDIZYFX.js.map +1 -0
  26. package/dist/chunk-TGV27ZWM.js +17 -0
  27. package/dist/chunk-TGV27ZWM.js.map +1 -0
  28. package/dist/confetti-BSX1CLLV.d.ts +41 -0
  29. package/dist/css/components/chat-background.css +87 -0
  30. package/dist/css/components/chat.css +237 -0
  31. package/dist/css/components/cursor.css +178 -0
  32. package/dist/css/components/dialog.css +259 -0
  33. package/dist/css/components/island.css +301 -0
  34. package/dist/css/components/menu.css +105 -0
  35. package/dist/css/components/nav.css +1054 -0
  36. package/dist/css/components/steps.css +50 -0
  37. package/dist/css/components/theme-picker.css +115 -0
  38. package/dist/css/components/toast.css +115 -0
  39. package/dist/css/controls.css +950 -0
  40. package/dist/css/effects.css +587 -0
  41. package/dist/css/fonts.css +3 -0
  42. package/dist/css/themes/black-green.css +126 -0
  43. package/dist/css/themes/black.css +126 -0
  44. package/dist/css/themes/blue.css +126 -0
  45. package/dist/css/themes/brown.css +126 -0
  46. package/dist/css/themes/cold-blue.css +126 -0
  47. package/dist/css/themes/funny.css +126 -0
  48. package/dist/css/themes/gray.css +126 -0
  49. package/dist/css/themes/green.css +126 -0
  50. package/dist/css/themes/modern-1.css +126 -0
  51. package/dist/css/themes/neogreen.css +126 -0
  52. package/dist/css/themes/new.css +126 -0
  53. package/dist/css/themes/new2.css +126 -0
  54. package/dist/css/themes/oled.css +126 -0
  55. package/dist/css/themes/orange.css +126 -0
  56. package/dist/css/themes/pastel-pink.css +126 -0
  57. package/dist/css/themes/pink.css +126 -0
  58. package/dist/css/themes/purple.css +126 -0
  59. package/dist/css/themes/red.css +126 -0
  60. package/dist/css/themes/super-blue.css +126 -0
  61. package/dist/css/themes.css +2431 -0
  62. package/dist/css/tokens.css +452 -0
  63. package/dist/elements/index.d.ts +183 -0
  64. package/dist/elements/index.js +472 -0
  65. package/dist/elements/index.js.map +1 -0
  66. package/dist/engine-CUr9QijM.d.ts +46 -0
  67. package/dist/gl/index.d.ts +61 -0
  68. package/dist/gl/index.js +18 -0
  69. package/dist/gl/index.js.map +1 -0
  70. package/dist/index.css +5296 -0
  71. package/dist/index.d.ts +440 -0
  72. package/dist/index.js +390 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/react/index.d.ts +476 -0
  75. package/dist/react/index.js +969 -0
  76. package/dist/react/index.js.map +1 -0
  77. package/dist/reduced-BM4Ls0g5.d.ts +566 -0
  78. package/dist/reveal-WFUWDrei.d.ts +416 -0
  79. package/dist/store-Bqy_obnD.d.ts +195 -0
  80. package/dist/theme/generate.d.ts +18 -0
  81. package/dist/theme/generate.js +64 -0
  82. package/dist/theme/generate.js.map +1 -0
  83. package/dist/theme/index.d.ts +17 -0
  84. package/dist/theme/index.js +32 -0
  85. package/dist/theme/index.js.map +1 -0
  86. package/dist/theme-BFMoCzi6.d.ts +158 -0
  87. package/dist/types-BkS_raL8.d.ts +7 -0
  88. package/package.json +114 -3
  89. package/registry.json +469 -0
  90. package/skills/motion-kit/SKILL.md +189 -0
  91. package/skills/motion-kit/reference/components.md +86 -0
  92. package/skills/motion-kit/reference/design.md +92 -0
  93. package/skills/motion-kit/reference/recipes.md +172 -0
  94. package/src/auto/auto-init.ts +151 -0
  95. package/src/auto/index.ts +3 -0
  96. package/src/auto/parse-options.ts +68 -0
  97. package/src/components/chat/README.md +90 -0
  98. package/src/components/chat/chat.css +236 -0
  99. package/src/components/chat/element.ts +98 -0
  100. package/src/components/chat/engine.ts +295 -0
  101. package/src/components/chat/react.tsx +196 -0
  102. package/src/components/chat-background/README.md +50 -0
  103. package/src/components/chat-background/audio.ts +56 -0
  104. package/src/components/chat-background/chat-background.css +86 -0
  105. package/src/components/chat-background/element.ts +31 -0
  106. package/src/components/chat-background/engine.ts +108 -0
  107. package/src/components/chat-background/react.tsx +36 -0
  108. package/src/components/cursor/README.md +53 -0
  109. package/src/components/cursor/cursor.css +177 -0
  110. package/src/components/cursor/element.ts +23 -0
  111. package/src/components/cursor/engine.ts +254 -0
  112. package/src/components/cursor/react.tsx +26 -0
  113. package/src/components/dialog/README.md +106 -0
  114. package/src/components/dialog/dialog.css +258 -0
  115. package/src/components/dialog/element.ts +118 -0
  116. package/src/components/dialog/engine.ts +432 -0
  117. package/src/components/dialog/react.tsx +200 -0
  118. package/src/components/icon.tsx +10 -0
  119. package/src/components/icons.ts +24 -0
  120. package/src/components/island/README.md +91 -0
  121. package/src/components/island/element.ts +45 -0
  122. package/src/components/island/engine.ts +200 -0
  123. package/src/components/island/island.css +300 -0
  124. package/src/components/island/react.tsx +115 -0
  125. package/src/components/menu/README.md +67 -0
  126. package/src/components/menu/element.ts +55 -0
  127. package/src/components/menu/engine.ts +142 -0
  128. package/src/components/menu/menu.css +104 -0
  129. package/src/components/menu/react.tsx +82 -0
  130. package/src/components/nav/README.md +85 -0
  131. package/src/components/nav/element.ts +39 -0
  132. package/src/components/nav/engine.ts +164 -0
  133. package/src/components/nav/nav.css +1053 -0
  134. package/src/components/nav/react.tsx +90 -0
  135. package/src/components/steps/README.md +70 -0
  136. package/src/components/steps/element.ts +43 -0
  137. package/src/components/steps/engine.ts +185 -0
  138. package/src/components/steps/react.tsx +91 -0
  139. package/src/components/steps/steps.css +49 -0
  140. package/src/components/theme-picker/README.md +57 -0
  141. package/src/components/theme-picker/element.ts +20 -0
  142. package/src/components/theme-picker/engine.ts +91 -0
  143. package/src/components/theme-picker/react.tsx +31 -0
  144. package/src/components/theme-picker/theme-picker.css +114 -0
  145. package/src/components/toast/README.md +60 -0
  146. package/src/components/toast/element.ts +25 -0
  147. package/src/components/toast/engine.ts +483 -0
  148. package/src/components/toast/react.tsx +22 -0
  149. package/src/components/toast/store.ts +122 -0
  150. package/src/components/toast/toast.css +114 -0
  151. package/src/core/channels.ts +165 -0
  152. package/src/core/curves.ts +35 -0
  153. package/src/core/frame.ts +12 -0
  154. package/src/core/gsap.ts +65 -0
  155. package/src/core/loop.ts +44 -0
  156. package/src/core/math.ts +9 -0
  157. package/src/core/physics-spring.ts +59 -0
  158. package/src/core/pointer.ts +63 -0
  159. package/src/core/reduced.ts +21 -0
  160. package/src/core/scope.ts +70 -0
  161. package/src/core/scroll-track.ts +106 -0
  162. package/src/core/split.ts +68 -0
  163. package/src/core/spring.ts +22 -0
  164. package/src/core/styles.ts +31 -0
  165. package/src/core/timing.ts +204 -0
  166. package/src/core/types.ts +20 -0
  167. package/src/core/visible.ts +19 -0
  168. package/src/css/base.css +142 -0
  169. package/src/css/controls/README.md +122 -0
  170. package/src/css/controls/burger.css +67 -0
  171. package/src/css/controls/button.css +226 -0
  172. package/src/css/controls/checkbox.css +53 -0
  173. package/src/css/controls/chip.css +85 -0
  174. package/src/css/controls/field.css +124 -0
  175. package/src/css/controls/glass.css +220 -0
  176. package/src/css/controls/icon.css +26 -0
  177. package/src/css/controls/segmented.css +60 -0
  178. package/src/css/controls/switch.css +72 -0
  179. package/src/css/default-theme.css +123 -0
  180. package/src/css/effects/README.md +134 -0
  181. package/src/css/effects/anim.css +224 -0
  182. package/src/css/effects/fade.css +15 -0
  183. package/src/css/effects/float.css +64 -0
  184. package/src/css/effects/frost.css +62 -0
  185. package/src/css/effects/grain.css +58 -0
  186. package/src/css/effects/loading.css +60 -0
  187. package/src/css/effects/success.css +22 -0
  188. package/src/css/effects/text.css +67 -0
  189. package/src/css/fonts.css +3 -0
  190. package/src/css/states.css +51 -0
  191. package/src/css/themes/black-green.css +126 -0
  192. package/src/css/themes/black.css +126 -0
  193. package/src/css/themes/blue.css +126 -0
  194. package/src/css/themes/brown.css +126 -0
  195. package/src/css/themes/cold-blue.css +126 -0
  196. package/src/css/themes/funny.css +126 -0
  197. package/src/css/themes/gray.css +126 -0
  198. package/src/css/themes/green.css +126 -0
  199. package/src/css/themes/modern-1.css +126 -0
  200. package/src/css/themes/neogreen.css +126 -0
  201. package/src/css/themes/new.css +126 -0
  202. package/src/css/themes/new2.css +126 -0
  203. package/src/css/themes/oled.css +126 -0
  204. package/src/css/themes/orange.css +126 -0
  205. package/src/css/themes/pastel-pink.css +126 -0
  206. package/src/css/themes/pink.css +126 -0
  207. package/src/css/themes/purple.css +126 -0
  208. package/src/css/themes/red.css +126 -0
  209. package/src/css/themes/super-blue.css +126 -0
  210. package/src/css/tokens.css +182 -0
  211. package/src/elements/base.ts +76 -0
  212. package/src/elements/index.ts +48 -0
  213. package/src/gl/index.ts +15 -0
  214. package/src/gl/liquid-blend/README.md +23 -0
  215. package/src/gl/liquid-blend/create-liquid-blend.ts +7 -0
  216. package/src/gl/liquid-blend/shader.ts +9 -0
  217. package/src/gl/matcap/README.md +23 -0
  218. package/src/gl/matcap/create-matcap.ts +7 -0
  219. package/src/gl/matcap/shader.ts +16 -0
  220. package/src/gl/particle-hero/README.md +41 -0
  221. package/src/gl/particle-hero/create-particle-hero.ts +544 -0
  222. package/src/gl/particle-hero/particle-hero.css +19 -0
  223. package/src/gl/particle-hero/shaders.ts +84 -0
  224. package/src/gl/shader-blur/README.md +23 -0
  225. package/src/gl/shader-blur/create-shader-blur.ts +7 -0
  226. package/src/gl/shader-blur/shader.ts +11 -0
  227. package/src/gl/shader-grain/README.md +23 -0
  228. package/src/gl/shader-grain/create-shader-grain.ts +7 -0
  229. package/src/gl/shader-grain/shader.ts +6 -0
  230. package/src/gl/shared/create-shader-effect.ts +186 -0
  231. package/src/gl/shared/shader.css +3 -0
  232. package/src/gl/shared/shaders.ts +30 -0
  233. package/src/index.ts +177 -0
  234. package/src/motion/anchor.ts +45 -0
  235. package/src/motion/chat.ts +97 -0
  236. package/src/motion/confetti.ts +130 -0
  237. package/src/motion/count.ts +95 -0
  238. package/src/motion/details.ts +70 -0
  239. package/src/motion/drag-dismiss.ts +231 -0
  240. package/src/motion/effects.ts +81 -0
  241. package/src/motion/entrances.ts +27 -0
  242. package/src/motion/floating.ts +389 -0
  243. package/src/motion/flow.ts +115 -0
  244. package/src/motion/indicator.ts +44 -0
  245. package/src/motion/layout.ts +39 -0
  246. package/src/motion/liquid.ts +227 -0
  247. package/src/motion/morph.ts +540 -0
  248. package/src/motion/reveal.ts +112 -0
  249. package/src/motion/sheet.ts +65 -0
  250. package/src/motion/surface.ts +108 -0
  251. package/src/react/animated-number.tsx +30 -0
  252. package/src/react/flip-group.tsx +44 -0
  253. package/src/react/frost.tsx +33 -0
  254. package/src/react/index.ts +80 -0
  255. package/src/react/slot-text.tsx +44 -0
  256. package/src/react/theme-provider.tsx +42 -0
  257. package/src/react/use-card-dock.ts +9 -0
  258. package/src/react/use-cascade.ts +9 -0
  259. package/src/react/use-contrast.ts +9 -0
  260. package/src/react/use-counter.ts +8 -0
  261. package/src/react/use-curved-carousel.ts +10 -0
  262. package/src/react/use-depth-grid.ts +9 -0
  263. package/src/react/use-details.ts +7 -0
  264. package/src/react/use-dock-pill.ts +10 -0
  265. package/src/react/use-drag-ruler.ts +10 -0
  266. package/src/react/use-fill-text.ts +9 -0
  267. package/src/react/use-fit-text.ts +8 -0
  268. package/src/react/use-flow.ts +8 -0
  269. package/src/react/use-frame-zoom.ts +9 -0
  270. package/src/react/use-infinite-reel.ts +8 -0
  271. package/src/react/use-letters.ts +9 -0
  272. package/src/react/use-liquid-blend.ts +8 -0
  273. package/src/react/use-marquee.ts +9 -0
  274. package/src/react/use-mask-text.ts +9 -0
  275. package/src/react/use-matcap.ts +8 -0
  276. package/src/react/use-parallax.ts +9 -0
  277. package/src/react/use-particle-hero.ts +9 -0
  278. package/src/react/use-pile.ts +8 -0
  279. package/src/react/use-pop.ts +8 -0
  280. package/src/react/use-radial-menu.ts +10 -0
  281. package/src/react/use-recipe.ts +38 -0
  282. package/src/react/use-reflow.ts +9 -0
  283. package/src/react/use-repel-bento.ts +8 -0
  284. package/src/react/use-reveal.ts +8 -0
  285. package/src/react/use-rotator.ts +10 -0
  286. package/src/react/use-shader-blur.ts +8 -0
  287. package/src/react/use-shader-grain.ts +8 -0
  288. package/src/react/use-slot-text.ts +17 -0
  289. package/src/react/use-snap-strip.ts +9 -0
  290. package/src/react/use-sortable.ts +14 -0
  291. package/src/react/use-spring-cards.ts +8 -0
  292. package/src/react/use-stretch-footer.ts +20 -0
  293. package/src/react/use-tabs.ts +10 -0
  294. package/src/react/use-text-roll.ts +9 -0
  295. package/src/react/use-ticket-menu.ts +15 -0
  296. package/src/react/use-words.ts +8 -0
  297. package/src/recipes/card-dock/README.md +36 -0
  298. package/src/recipes/card-dock/card-dock.css +178 -0
  299. package/src/recipes/card-dock/create-card-dock.ts +97 -0
  300. package/src/recipes/cascade/README.md +33 -0
  301. package/src/recipes/cascade/create-cascade.ts +111 -0
  302. package/src/recipes/contrast/README.md +29 -0
  303. package/src/recipes/contrast/create-contrast.ts +68 -0
  304. package/src/recipes/counter/README.md +42 -0
  305. package/src/recipes/counter/create-counter.ts +84 -0
  306. package/src/recipes/curved-carousel/README.md +50 -0
  307. package/src/recipes/curved-carousel/carousel-math.ts +20 -0
  308. package/src/recipes/curved-carousel/create-curved-carousel.ts +257 -0
  309. package/src/recipes/curved-carousel/curved-carousel.css +50 -0
  310. package/src/recipes/depth-grid/README.md +30 -0
  311. package/src/recipes/depth-grid/create-depth-grid.ts +120 -0
  312. package/src/recipes/details/README.md +31 -0
  313. package/src/recipes/details/create-details.ts +27 -0
  314. package/src/recipes/dock-pill/README.md +23 -0
  315. package/src/recipes/dock-pill/create-dock-pill.ts +68 -0
  316. package/src/recipes/dock-pill/dock-pill.css +5 -0
  317. package/src/recipes/drag-ruler/README.md +21 -0
  318. package/src/recipes/drag-ruler/create-drag-ruler.ts +95 -0
  319. package/src/recipes/drag-ruler/drag-ruler.css +16 -0
  320. package/src/recipes/fill-text/README.md +27 -0
  321. package/src/recipes/fill-text/create-fill-text.ts +93 -0
  322. package/src/recipes/fit-text/README.md +37 -0
  323. package/src/recipes/fit-text/create-fit-text.ts +55 -0
  324. package/src/recipes/fit-text/fit-text.css +6 -0
  325. package/src/recipes/flow/README.md +46 -0
  326. package/src/recipes/flow/create-flow.ts +55 -0
  327. package/src/recipes/frame-zoom/README.md +29 -0
  328. package/src/recipes/frame-zoom/create-frame-zoom.ts +91 -0
  329. package/src/recipes/infinite-reel/README.md +23 -0
  330. package/src/recipes/infinite-reel/create-infinite-reel.ts +140 -0
  331. package/src/recipes/infinite-reel/infinite-reel.css +8 -0
  332. package/src/recipes/letters/README.md +30 -0
  333. package/src/recipes/letters/create-letters.ts +113 -0
  334. package/src/recipes/marquee/README.md +32 -0
  335. package/src/recipes/marquee/create-marquee.ts +74 -0
  336. package/src/recipes/marquee/marquee.css +41 -0
  337. package/src/recipes/mask-text/README.md +39 -0
  338. package/src/recipes/mask-text/create-mask-text.ts +134 -0
  339. package/src/recipes/parallax/README.md +31 -0
  340. package/src/recipes/parallax/create-parallax.ts +74 -0
  341. package/src/recipes/pile/README.md +48 -0
  342. package/src/recipes/pile/create-pile.ts +50 -0
  343. package/src/recipes/pile/pile-math.ts +27 -0
  344. package/src/recipes/pile/pile.css +63 -0
  345. package/src/recipes/pill/README.md +30 -0
  346. package/src/recipes/pill/pill.css +48 -0
  347. package/src/recipes/pop/README.md +36 -0
  348. package/src/recipes/pop/create-pop.ts +52 -0
  349. package/src/recipes/radial-menu/README.md +44 -0
  350. package/src/recipes/radial-menu/create-radial-menu.ts +96 -0
  351. package/src/recipes/radial-menu/radial-menu.css +45 -0
  352. package/src/recipes/reflow/README.md +47 -0
  353. package/src/recipes/reflow/create-reflow.ts +49 -0
  354. package/src/recipes/repel-bento/README.md +21 -0
  355. package/src/recipes/repel-bento/create-repel-bento.ts +65 -0
  356. package/src/recipes/repel-bento/repel-bento.css +3 -0
  357. package/src/recipes/reveal/README.md +36 -0
  358. package/src/recipes/reveal/create-reveal.ts +48 -0
  359. package/src/recipes/rotator/README.md +21 -0
  360. package/src/recipes/rotator/create-rotator.ts +66 -0
  361. package/src/recipes/rotator/rotator.css +3 -0
  362. package/src/recipes/slot-text/README.md +44 -0
  363. package/src/recipes/slot-text/create-slot-text.ts +244 -0
  364. package/src/recipes/slot-text/slot-text.css +42 -0
  365. package/src/recipes/snap-strip/README.md +31 -0
  366. package/src/recipes/snap-strip/create-snap-strip.ts +133 -0
  367. package/src/recipes/snap-strip/snap-strip.css +23 -0
  368. package/src/recipes/sortable/README.md +88 -0
  369. package/src/recipes/sortable/create-sortable.ts +863 -0
  370. package/src/recipes/sortable/sortable.css +40 -0
  371. package/src/recipes/spring-cards/README.md +48 -0
  372. package/src/recipes/spring-cards/create-spring-cards.ts +140 -0
  373. package/src/recipes/spring-cards/spring-cards.css +23 -0
  374. package/src/recipes/stretch-footer/README.md +44 -0
  375. package/src/recipes/stretch-footer/create-stretch-footer.ts +69 -0
  376. package/src/recipes/stretch-footer/stretch-footer.css +28 -0
  377. package/src/recipes/tabs/README.md +39 -0
  378. package/src/recipes/tabs/create-tabs.ts +91 -0
  379. package/src/recipes/tabs/tabs.css +19 -0
  380. package/src/recipes/text-roll/README.md +35 -0
  381. package/src/recipes/text-roll/create-text-roll.ts +137 -0
  382. package/src/recipes/text-roll/text-roll.css +21 -0
  383. package/src/recipes/ticket-menu/README.md +24 -0
  384. package/src/recipes/ticket-menu/create-ticket-menu.ts +6 -0
  385. package/src/recipes/words/README.md +43 -0
  386. package/src/recipes/words/create-words.ts +114 -0
  387. package/src/theme/css-format.ts +32 -0
  388. package/src/theme/generate.ts +72 -0
  389. package/src/theme/index.ts +15 -0
  390. package/src/theme/presets.ts +79 -0
  391. package/src/theme/theme.ts +119 -0
@@ -0,0 +1,157 @@
1
+ import {
2
+ warnOnce
3
+ } from "./chunk-TGV27ZWM.js";
4
+
5
+ // src/theme/presets.ts
6
+ var ROLES = [
7
+ "background",
8
+ "on-background",
9
+ "surface",
10
+ "surface-dim",
11
+ "surface-bright",
12
+ "surface-container-lowest",
13
+ "surface-container-low",
14
+ "surface-container",
15
+ "surface-container-high",
16
+ "surface-container-highest",
17
+ "on-surface",
18
+ "surface-variant",
19
+ "on-surface-variant",
20
+ "inverse-surface",
21
+ "inverse-on-surface",
22
+ "outline",
23
+ "outline-variant",
24
+ "shadow",
25
+ "scrim",
26
+ "surface-tint",
27
+ "primary",
28
+ "on-primary",
29
+ "primary-container",
30
+ "on-primary-container",
31
+ "inverse-primary",
32
+ "secondary",
33
+ "on-secondary",
34
+ "secondary-container",
35
+ "on-secondary-container",
36
+ "tertiary",
37
+ "on-tertiary",
38
+ "tertiary-container",
39
+ "on-tertiary-container",
40
+ "error",
41
+ "on-error",
42
+ "error-container",
43
+ "on-error-container"
44
+ ];
45
+ var THEMES = [
46
+ { id: "black", name: "Black", hidden: true, modes: ["light", "dark"], seed: "#b4c7ed" },
47
+ { id: "blue", name: "Blue", hidden: false, modes: ["light", "dark"], seed: "#b3c5ff" },
48
+ { id: "purple", name: "Purple", hidden: false, modes: ["light", "dark"], seed: "#d2bcff" },
49
+ { id: "neogreen", name: "Neogreen", hidden: false, modes: ["light", "dark"], seed: "#00e563" },
50
+ { id: "green", name: "Green", hidden: true, modes: ["light", "dark"], seed: "#53e081" },
51
+ { id: "red", name: "Red", hidden: false, modes: ["light", "dark"], seed: "#ffb4ac" },
52
+ { id: "orange", name: "Orange", hidden: true, modes: ["light", "dark"], seed: "#ffc988" },
53
+ { id: "pink", name: "Pink", hidden: false, modes: ["light", "dark"], seed: "#f7acff" },
54
+ { id: "pastel-pink", name: "Pastel Pink", hidden: false, modes: ["light", "dark"], seed: "#ffcee8" },
55
+ { id: "brown", name: "Brown", hidden: false, modes: ["light", "dark"], seed: "#ffb783" },
56
+ { id: "super-blue", name: "Super Blue", hidden: false, modes: ["light", "dark"], seed: "#bcc2ff" },
57
+ { id: "cold-blue", name: "Cold Blue", hidden: true, modes: ["light", "dark"], seed: "#87ceff" },
58
+ { id: "modern-1", name: "Modern", hidden: true, modes: ["light", "dark"], seed: "#b3c5ff" },
59
+ { id: "gray", name: "Gray", hidden: false, modes: ["light", "dark"], seed: "#c6c6c6" },
60
+ { id: "oled", name: "Oled", hidden: false, modes: ["dark"], seed: "#9fb8e4" },
61
+ { id: "funny", name: "Funny", hidden: true, modes: ["light", "dark"], seed: "#22d3ee" },
62
+ { id: "new", name: "New", hidden: true, modes: ["light", "dark"], seed: "#c4a68d" },
63
+ { id: "new2", name: "New 2", hidden: true, modes: ["light", "dark"], seed: "#a3ffb7" },
64
+ { id: "black-green", name: "Black Green", hidden: true, modes: ["light", "dark"], seed: "#a0d499" }
65
+ ];
66
+ var DEFAULT_THEME = "neogreen";
67
+
68
+ // src/theme/theme.ts
69
+ var THEME_EVENT = "mk:theme";
70
+ var MODES = ["light", "dark", "system"];
71
+ var known = new Set(THEMES.map((theme) => theme.id));
72
+ var settings = { storageKey: "mk-theme", root: null };
73
+ var watching = false;
74
+ function registerTheme(id) {
75
+ known.add(id);
76
+ }
77
+ var rootOf = () => settings.root ?? document.documentElement;
78
+ var systemDark = () => typeof matchMedia === "function" && matchMedia("(prefers-color-scheme: dark)").matches;
79
+ function read() {
80
+ try {
81
+ const raw = localStorage.getItem(settings.storageKey);
82
+ return raw ? JSON.parse(raw) : null;
83
+ } catch {
84
+ return null;
85
+ }
86
+ }
87
+ function write(state) {
88
+ try {
89
+ localStorage.setItem(settings.storageKey, JSON.stringify({ id: state.id, mode: state.mode }));
90
+ } catch {
91
+ }
92
+ }
93
+ function getTheme() {
94
+ const root = rootOf();
95
+ const id = root.getAttribute("data-mk-theme") ?? DEFAULT_THEME;
96
+ const attr = root.getAttribute("data-mk-mode");
97
+ const mode = attr && MODES.includes(attr) ? attr : "system";
98
+ return { id, mode, resolved: mode === "system" ? systemDark() ? "dark" : "light" : mode };
99
+ }
100
+ function apply(id, mode, persist) {
101
+ const root = rootOf();
102
+ root.setAttribute("data-mk-theme", id);
103
+ root.setAttribute("data-mk-mode", mode);
104
+ if (persist) write({ id, mode });
105
+ const state = getTheme();
106
+ document.dispatchEvent(new CustomEvent(THEME_EVENT, { detail: state }));
107
+ return state;
108
+ }
109
+ function initTheme(options = {}) {
110
+ if (options.storageKey) settings.storageKey = options.storageKey;
111
+ if (options.root) settings.root = options.root;
112
+ const root = rootOf();
113
+ const stored = read();
114
+ const id = stored?.id ?? root.getAttribute("data-mk-theme") ?? options.default ?? DEFAULT_THEME;
115
+ const storedMode = stored?.mode && MODES.includes(stored.mode) ? stored.mode : null;
116
+ const mode = storedMode ?? root.getAttribute("data-mk-mode") ?? options.mode ?? "system";
117
+ if (!watching && typeof matchMedia === "function") {
118
+ watching = true;
119
+ matchMedia("(prefers-color-scheme: dark)").addEventListener?.("change", () => {
120
+ if (getTheme().mode === "system") document.dispatchEvent(new CustomEvent(THEME_EVENT, { detail: getTheme() }));
121
+ });
122
+ }
123
+ return apply(id, MODES.includes(mode) ? mode : "system", false);
124
+ }
125
+ function setTheme(id) {
126
+ if (!known.has(id)) {
127
+ warnOnce(`setTheme: unknown theme "${id}" (register it with registerTheme or applyTheme)`);
128
+ return getTheme();
129
+ }
130
+ return apply(id, getTheme().mode, true);
131
+ }
132
+ function setMode(mode) {
133
+ if (!MODES.includes(mode)) {
134
+ warnOnce(`setMode: unknown mode "${mode}"`);
135
+ return getTheme();
136
+ }
137
+ return apply(getTheme().id, mode, true);
138
+ }
139
+ function themeHeadScript({ storageKey = "mk-theme", default: fallback = DEFAULT_THEME, mode = "system" } = {}) {
140
+ return `(function(){var r=document.documentElement,s=null;try{s=JSON.parse(localStorage.getItem(${JSON.stringify(storageKey)})||'null')}catch(e){}r.setAttribute('data-mk-theme',(s&&s.id)||r.getAttribute('data-mk-theme')||${JSON.stringify(fallback)});r.setAttribute('data-mk-mode',(s&&s.mode)||r.getAttribute('data-mk-mode')||${JSON.stringify(mode)})})();`;
141
+ }
142
+ var MK_THEME_HEAD_SCRIPT = themeHeadScript();
143
+
144
+ export {
145
+ ROLES,
146
+ THEMES,
147
+ DEFAULT_THEME,
148
+ THEME_EVENT,
149
+ registerTheme,
150
+ getTheme,
151
+ initTheme,
152
+ setTheme,
153
+ setMode,
154
+ themeHeadScript,
155
+ MK_THEME_HEAD_SCRIPT
156
+ };
157
+ //# sourceMappingURL=chunk-J27KH2A2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/presets.ts","../src/theme/theme.ts"],"sourcesContent":["// Generated by scripts/import-themes.mjs from the Stepbro replication kit; do not edit.\n\n/** The 37 Material 3 colour roles every theme defines (`--md-sys-color-<role>`). */\nexport const ROLES = [\n 'background',\n 'on-background',\n 'surface',\n 'surface-dim',\n 'surface-bright',\n 'surface-container-lowest',\n 'surface-container-low',\n 'surface-container',\n 'surface-container-high',\n 'surface-container-highest',\n 'on-surface',\n 'surface-variant',\n 'on-surface-variant',\n 'inverse-surface',\n 'inverse-on-surface',\n 'outline',\n 'outline-variant',\n 'shadow',\n 'scrim',\n 'surface-tint',\n 'primary',\n 'on-primary',\n 'primary-container',\n 'on-primary-container',\n 'inverse-primary',\n 'secondary',\n 'on-secondary',\n 'secondary-container',\n 'on-secondary-container',\n 'tertiary',\n 'on-tertiary',\n 'tertiary-container',\n 'on-tertiary-container',\n 'error',\n 'on-error',\n 'error-container',\n 'on-error-container',\n] as const;\nexport type Role = (typeof ROLES)[number];\n\nexport interface ThemePreset {\n readonly id: string;\n readonly name: string;\n /** Hidden from Stepbro's own picker (kept in its code). */\n readonly hidden: boolean;\n /** Modes with their own palette. OLED is dark-only and uses Black in light mode. */\n readonly modes: readonly ('light' | 'dark')[];\n /** Representative colour (dark surface-tint): swatch and generator seed. */\n readonly seed: string;\n}\n\nexport const THEMES = [\n { id: 'black', name: 'Black', hidden: true, modes: ['light', 'dark'], seed: '#b4c7ed' },\n { id: 'blue', name: 'Blue', hidden: false, modes: ['light', 'dark'], seed: '#b3c5ff' },\n { id: 'purple', name: 'Purple', hidden: false, modes: ['light', 'dark'], seed: '#d2bcff' },\n { id: 'neogreen', name: 'Neogreen', hidden: false, modes: ['light', 'dark'], seed: '#00e563' },\n { id: 'green', name: 'Green', hidden: true, modes: ['light', 'dark'], seed: '#53e081' },\n { id: 'red', name: 'Red', hidden: false, modes: ['light', 'dark'], seed: '#ffb4ac' },\n { id: 'orange', name: 'Orange', hidden: true, modes: ['light', 'dark'], seed: '#ffc988' },\n { id: 'pink', name: 'Pink', hidden: false, modes: ['light', 'dark'], seed: '#f7acff' },\n { id: 'pastel-pink', name: 'Pastel Pink', hidden: false, modes: ['light', 'dark'], seed: '#ffcee8' },\n { id: 'brown', name: 'Brown', hidden: false, modes: ['light', 'dark'], seed: '#ffb783' },\n { id: 'super-blue', name: 'Super Blue', hidden: false, modes: ['light', 'dark'], seed: '#bcc2ff' },\n { id: 'cold-blue', name: 'Cold Blue', hidden: true, modes: ['light', 'dark'], seed: '#87ceff' },\n { id: 'modern-1', name: 'Modern', hidden: true, modes: ['light', 'dark'], seed: '#b3c5ff' },\n { id: 'gray', name: 'Gray', hidden: false, modes: ['light', 'dark'], seed: '#c6c6c6' },\n { id: 'oled', name: 'Oled', hidden: false, modes: ['dark'], seed: '#9fb8e4' },\n { id: 'funny', name: 'Funny', hidden: true, modes: ['light', 'dark'], seed: '#22d3ee' },\n { id: 'new', name: 'New', hidden: true, modes: ['light', 'dark'], seed: '#c4a68d' },\n { id: 'new2', name: 'New 2', hidden: true, modes: ['light', 'dark'], seed: '#a3ffb7' },\n { id: 'black-green', name: 'Black Green', hidden: true, modes: ['light', 'dark'], seed: '#a0d499' },\n] as const satisfies readonly ThemePreset[];\n\nexport type ThemeId = (typeof THEMES)[number]['id'];\nexport const DEFAULT_THEME: ThemeId = 'neogreen';\n","import { DEFAULT_THEME, THEMES, type ThemeId } from './presets';\nimport { warnOnce } from '../core/types';\n\n/*\n * Theme and mode on <html data-mk-theme=\"neogreen\" data-mk-mode=\"system|light|dark\">,\n * remembered in localStorage (Stepbro stores the palette per app and follows the\n * system for light/dark unless told otherwise). Nothing runs at import time.\n */\n\nexport type ThemeMode = 'light' | 'dark' | 'system';\nexport interface ThemeState {\n id: string;\n mode: ThemeMode;\n /** The mode actually shown (system resolved through prefers-color-scheme). */\n resolved: 'light' | 'dark';\n}\n\nexport interface InitThemeOptions {\n /** Theme when nothing is stored or set on the root. Default: neogreen. */\n default?: ThemeId | (string & {});\n mode?: ThemeMode;\n storageKey?: string;\n root?: HTMLElement;\n}\n\nexport const THEME_EVENT = 'mk:theme';\nconst MODES: ThemeMode[] = ['light', 'dark', 'system'];\nconst known = new Set<string>(THEMES.map((theme) => theme.id));\nconst settings = { storageKey: 'mk-theme', root: null as HTMLElement | null };\nlet watching = false;\n\n/** Accept an extra theme id in setTheme (generated or project themes). */\nexport function registerTheme(id: string) {\n known.add(id);\n}\n\nconst rootOf = () => settings.root ?? document.documentElement;\nconst systemDark = () => typeof matchMedia === 'function' && matchMedia('(prefers-color-scheme: dark)').matches;\n\nfunction read(): Partial<Pick<ThemeState, 'id' | 'mode'>> | null {\n try {\n const raw = localStorage.getItem(settings.storageKey);\n return raw ? (JSON.parse(raw) as Partial<ThemeState>) : null;\n } catch {\n return null;\n }\n}\n\nfunction write(state: Pick<ThemeState, 'id' | 'mode'>) {\n try {\n localStorage.setItem(settings.storageKey, JSON.stringify({ id: state.id, mode: state.mode }));\n } catch {\n // Private mode or blocked storage: the choice simply isn't remembered.\n }\n}\n\nexport function getTheme(): ThemeState {\n const root = rootOf();\n const id = root.getAttribute('data-mk-theme') ?? DEFAULT_THEME;\n const attr = root.getAttribute('data-mk-mode') as ThemeMode | null;\n const mode = attr && MODES.includes(attr) ? attr : 'system';\n return { id, mode, resolved: mode === 'system' ? (systemDark() ? 'dark' : 'light') : mode };\n}\n\nfunction apply(id: string, mode: ThemeMode, persist: boolean) {\n const root = rootOf();\n root.setAttribute('data-mk-theme', id);\n root.setAttribute('data-mk-mode', mode);\n if (persist) write({ id, mode });\n const state = getTheme();\n document.dispatchEvent(new CustomEvent<ThemeState>(THEME_EVENT, { detail: state }));\n return state;\n}\n\n/** Apply the stored (or default) theme and mode. Call once on startup. */\nexport function initTheme(options: InitThemeOptions = {}): ThemeState {\n if (options.storageKey) settings.storageKey = options.storageKey;\n if (options.root) settings.root = options.root;\n const root = rootOf();\n const stored = read();\n const id = stored?.id ?? root.getAttribute('data-mk-theme') ?? options.default ?? DEFAULT_THEME;\n const storedMode = stored?.mode && MODES.includes(stored.mode) ? stored.mode : null;\n const mode = storedMode ?? (root.getAttribute('data-mk-mode') as ThemeMode | null) ?? options.mode ?? 'system';\n if (!watching && typeof matchMedia === 'function') {\n watching = true;\n // In system mode the resolved scheme follows the OS; tell listeners when it flips.\n matchMedia('(prefers-color-scheme: dark)').addEventListener?.('change', () => {\n if (getTheme().mode === 'system') document.dispatchEvent(new CustomEvent<ThemeState>(THEME_EVENT, { detail: getTheme() }));\n });\n }\n return apply(id, MODES.includes(mode) ? mode : 'system', false);\n}\n\nexport function setTheme(id: ThemeId | (string & {})): ThemeState {\n if (!known.has(id)) {\n warnOnce(`setTheme: unknown theme \"${id}\" (register it with registerTheme or applyTheme)`);\n return getTheme();\n }\n return apply(id, getTheme().mode, true);\n}\n\nexport function setMode(mode: ThemeMode): ThemeState {\n if (!MODES.includes(mode)) {\n warnOnce(`setMode: unknown mode \"${mode}\"`);\n return getTheme();\n }\n return apply(getTheme().id, mode, true);\n}\n\n/** Inline script for <head>: applies the stored choice before the first paint (no flash). */\nexport function themeHeadScript({ storageKey = 'mk-theme', default: fallback = DEFAULT_THEME, mode = 'system' }: Omit<InitThemeOptions, 'root'> = {}) {\n return (\n `(function(){var r=document.documentElement,s=null;try{s=JSON.parse(localStorage.getItem(${JSON.stringify(storageKey)})||'null')}catch(e){}` +\n `r.setAttribute('data-mk-theme',(s&&s.id)||r.getAttribute('data-mk-theme')||${JSON.stringify(fallback)});` +\n `r.setAttribute('data-mk-mode',(s&&s.mode)||r.getAttribute('data-mk-mode')||${JSON.stringify(mode)})})();`\n );\n}\n\nexport const MK_THEME_HEAD_SCRIPT = themeHeadScript();\n"],"mappings":";;;;;AAGO,IAAM,QAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAcO,IAAM,SAAS;AAAA,EACpB,EAAE,IAAI,SAAS,MAAM,SAAS,QAAQ,MAAM,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACtF,EAAE,IAAI,QAAQ,MAAM,QAAQ,QAAQ,OAAO,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACrF,EAAE,IAAI,UAAU,MAAM,UAAU,QAAQ,OAAO,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACzF,EAAE,IAAI,YAAY,MAAM,YAAY,QAAQ,OAAO,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EAC7F,EAAE,IAAI,SAAS,MAAM,SAAS,QAAQ,MAAM,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACtF,EAAE,IAAI,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACnF,EAAE,IAAI,UAAU,MAAM,UAAU,QAAQ,MAAM,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACxF,EAAE,IAAI,QAAQ,MAAM,QAAQ,QAAQ,OAAO,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACrF,EAAE,IAAI,eAAe,MAAM,eAAe,QAAQ,OAAO,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACnG,EAAE,IAAI,SAAS,MAAM,SAAS,QAAQ,OAAO,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACvF,EAAE,IAAI,cAAc,MAAM,cAAc,QAAQ,OAAO,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACjG,EAAE,IAAI,aAAa,MAAM,aAAa,QAAQ,MAAM,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EAC9F,EAAE,IAAI,YAAY,MAAM,UAAU,QAAQ,MAAM,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EAC1F,EAAE,IAAI,QAAQ,MAAM,QAAQ,QAAQ,OAAO,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACrF,EAAE,IAAI,QAAQ,MAAM,QAAQ,QAAQ,OAAO,OAAO,CAAC,MAAM,GAAG,MAAM,UAAU;AAAA,EAC5E,EAAE,IAAI,SAAS,MAAM,SAAS,QAAQ,MAAM,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACtF,EAAE,IAAI,OAAO,MAAM,OAAO,QAAQ,MAAM,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EAClF,EAAE,IAAI,QAAQ,MAAM,SAAS,QAAQ,MAAM,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AAAA,EACrF,EAAE,IAAI,eAAe,MAAM,eAAe,QAAQ,MAAM,OAAO,CAAC,SAAS,MAAM,GAAG,MAAM,UAAU;AACpG;AAGO,IAAM,gBAAyB;;;ACrD/B,IAAM,cAAc;AAC3B,IAAM,QAAqB,CAAC,SAAS,QAAQ,QAAQ;AACrD,IAAM,QAAQ,IAAI,IAAY,OAAO,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC;AAC7D,IAAM,WAAW,EAAE,YAAY,YAAY,MAAM,KAA2B;AAC5E,IAAI,WAAW;AAGR,SAAS,cAAc,IAAY;AACxC,QAAM,IAAI,EAAE;AACd;AAEA,IAAM,SAAS,MAAM,SAAS,QAAQ,SAAS;AAC/C,IAAM,aAAa,MAAM,OAAO,eAAe,cAAc,WAAW,8BAA8B,EAAE;AAExG,SAAS,OAAwD;AAC/D,MAAI;AACF,UAAM,MAAM,aAAa,QAAQ,SAAS,UAAU;AACpD,WAAO,MAAO,KAAK,MAAM,GAAG,IAA4B;AAAA,EAC1D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,MAAM,OAAwC;AACrD,MAAI;AACF,iBAAa,QAAQ,SAAS,YAAY,KAAK,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,MAAM,KAAK,CAAC,CAAC;AAAA,EAC9F,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,WAAuB;AACrC,QAAM,OAAO,OAAO;AACpB,QAAM,KAAK,KAAK,aAAa,eAAe,KAAK;AACjD,QAAM,OAAO,KAAK,aAAa,cAAc;AAC7C,QAAM,OAAO,QAAQ,MAAM,SAAS,IAAI,IAAI,OAAO;AACnD,SAAO,EAAE,IAAI,MAAM,UAAU,SAAS,WAAY,WAAW,IAAI,SAAS,UAAW,KAAK;AAC5F;AAEA,SAAS,MAAM,IAAY,MAAiB,SAAkB;AAC5D,QAAM,OAAO,OAAO;AACpB,OAAK,aAAa,iBAAiB,EAAE;AACrC,OAAK,aAAa,gBAAgB,IAAI;AACtC,MAAI,QAAS,OAAM,EAAE,IAAI,KAAK,CAAC;AAC/B,QAAM,QAAQ,SAAS;AACvB,WAAS,cAAc,IAAI,YAAwB,aAAa,EAAE,QAAQ,MAAM,CAAC,CAAC;AAClF,SAAO;AACT;AAGO,SAAS,UAAU,UAA4B,CAAC,GAAe;AACpE,MAAI,QAAQ,WAAY,UAAS,aAAa,QAAQ;AACtD,MAAI,QAAQ,KAAM,UAAS,OAAO,QAAQ;AAC1C,QAAM,OAAO,OAAO;AACpB,QAAM,SAAS,KAAK;AACpB,QAAM,KAAK,QAAQ,MAAM,KAAK,aAAa,eAAe,KAAK,QAAQ,WAAW;AAClF,QAAM,aAAa,QAAQ,QAAQ,MAAM,SAAS,OAAO,IAAI,IAAI,OAAO,OAAO;AAC/E,QAAM,OAAO,cAAe,KAAK,aAAa,cAAc,KAA0B,QAAQ,QAAQ;AACtG,MAAI,CAAC,YAAY,OAAO,eAAe,YAAY;AACjD,eAAW;AAEX,eAAW,8BAA8B,EAAE,mBAAmB,UAAU,MAAM;AAC5E,UAAI,SAAS,EAAE,SAAS,SAAU,UAAS,cAAc,IAAI,YAAwB,aAAa,EAAE,QAAQ,SAAS,EAAE,CAAC,CAAC;AAAA,IAC3H,CAAC;AAAA,EACH;AACA,SAAO,MAAM,IAAI,MAAM,SAAS,IAAI,IAAI,OAAO,UAAU,KAAK;AAChE;AAEO,SAAS,SAAS,IAAyC;AAChE,MAAI,CAAC,MAAM,IAAI,EAAE,GAAG;AAClB,aAAS,4BAA4B,EAAE,kDAAkD;AACzF,WAAO,SAAS;AAAA,EAClB;AACA,SAAO,MAAM,IAAI,SAAS,EAAE,MAAM,IAAI;AACxC;AAEO,SAAS,QAAQ,MAA6B;AACnD,MAAI,CAAC,MAAM,SAAS,IAAI,GAAG;AACzB,aAAS,0BAA0B,IAAI,GAAG;AAC1C,WAAO,SAAS;AAAA,EAClB;AACA,SAAO,MAAM,SAAS,EAAE,IAAI,MAAM,IAAI;AACxC;AAGO,SAAS,gBAAgB,EAAE,aAAa,YAAY,SAAS,WAAW,eAAe,OAAO,SAAS,IAAoC,CAAC,GAAG;AACpJ,SACE,2FAA2F,KAAK,UAAU,UAAU,CAAC,mGACvC,KAAK,UAAU,QAAQ,CAAC,gFACxB,KAAK,UAAU,IAAI,CAAC;AAEtG;AAEO,IAAM,uBAAuB,gBAAgB;","names":[]}
@@ -0,0 +1,18 @@
1
+ // src/core/math.ts
2
+ var clamp = (v, min, max) => Math.min(max, Math.max(min, v));
3
+ var lerp = (a, b, t) => (1 - t) * a + t * b;
4
+ var damp = (a, b, lambda, dt) => lerp(a, b, 1 - Math.exp(-lambda * dt));
5
+ var wrap = (v, length) => (v % length + length) % length;
6
+ function mapRange(v, inMin, inMax, outMin, outMax, clamped = false) {
7
+ const t = (v - inMin) / (inMax - inMin);
8
+ return lerp(outMin, outMax, clamped ? clamp(t, 0, 1) : t);
9
+ }
10
+
11
+ export {
12
+ clamp,
13
+ lerp,
14
+ damp,
15
+ wrap,
16
+ mapRange
17
+ };
18
+ //# sourceMappingURL=chunk-KLY5BRRI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/math.ts"],"sourcesContent":["export const clamp = (v: number, min: number, max: number) => Math.min(max, Math.max(min, v));\r\nexport const lerp = (a: number, b: number, t: number) => (1 - t) * a + t * b;\r\n/** Spencer's frame-rate independent smoothing: lerp by 1 - e^(-lambda·dt). */\r\nexport const damp = (a: number, b: number, lambda: number, dt: number) => lerp(a, b, 1 - Math.exp(-lambda * dt));\r\nexport const wrap = (v: number, length: number) => ((v % length) + length) % length;\r\nexport function mapRange(v: number, inMin: number, inMax: number, outMin: number, outMax: number, clamped = false) {\r\n const t = (v - inMin) / (inMax - inMin);\r\n return lerp(outMin, outMax, clamped ? clamp(t, 0, 1) : t);\r\n}\r\n"],"mappings":";AAAO,IAAM,QAAQ,CAAC,GAAW,KAAa,QAAgB,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC;AACrF,IAAM,OAAO,CAAC,GAAW,GAAW,OAAe,IAAI,KAAK,IAAI,IAAI;AAEpE,IAAM,OAAO,CAAC,GAAW,GAAW,QAAgB,OAAe,KAAK,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;AACxG,IAAM,OAAO,CAAC,GAAW,YAAqB,IAAI,SAAU,UAAU;AACtE,SAAS,SAAS,GAAW,OAAe,OAAe,QAAgB,QAAgB,UAAU,OAAO;AACjH,QAAM,KAAK,IAAI,UAAU,QAAQ;AACjC,SAAO,KAAK,QAAQ,QAAQ,UAAU,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;AAC1D;","names":[]}