react-marketing-ui 0.0.1

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 (318) hide show
  1. package/README.md +34 -0
  2. package/dist/accordion.d.cts +21 -0
  3. package/dist/accordion.d.ts +21 -0
  4. package/dist/accordion.d.ts.map +1 -0
  5. package/dist/accordion.js +230 -0
  6. package/dist/accordion.js.map +1 -0
  7. package/dist/accordion.mjs +4 -0
  8. package/dist/accordion.mjs.map +1 -0
  9. package/dist/action-swap.d.cts +23 -0
  10. package/dist/action-swap.d.ts +23 -0
  11. package/dist/action-swap.d.ts.map +1 -0
  12. package/dist/action-swap.js +81 -0
  13. package/dist/action-swap.js.map +1 -0
  14. package/dist/action-swap.mjs +5 -0
  15. package/dist/action-swap.mjs.map +1 -0
  16. package/dist/animated-beam.d.cts +24 -0
  17. package/dist/animated-beam.d.ts +24 -0
  18. package/dist/animated-beam.d.ts.map +1 -0
  19. package/dist/animated-beam.js +130 -0
  20. package/dist/animated-beam.js.map +1 -0
  21. package/dist/animated-beam.mjs +4 -0
  22. package/dist/animated-beam.mjs.map +1 -0
  23. package/dist/button.d.cts +55 -0
  24. package/dist/button.d.ts +55 -0
  25. package/dist/button.d.ts.map +1 -0
  26. package/dist/button.js +119 -0
  27. package/dist/button.js.map +1 -0
  28. package/dist/button.mjs +4 -0
  29. package/dist/button.mjs.map +1 -0
  30. package/dist/card.d.cts +20 -0
  31. package/dist/card.d.ts +20 -0
  32. package/dist/card.d.ts.map +1 -0
  33. package/dist/card.js +146 -0
  34. package/dist/card.js.map +1 -0
  35. package/dist/card.mjs +5 -0
  36. package/dist/card.mjs.map +1 -0
  37. package/dist/chunk-3SB6HUBA.mjs +31 -0
  38. package/dist/chunk-3SB6HUBA.mjs.map +1 -0
  39. package/dist/chunk-4PBVBXGY.mjs +84 -0
  40. package/dist/chunk-4PBVBXGY.mjs.map +1 -0
  41. package/dist/chunk-4VCFWVSJ.mjs +42 -0
  42. package/dist/chunk-4VCFWVSJ.mjs.map +1 -0
  43. package/dist/chunk-5QQAPGR2.mjs +109 -0
  44. package/dist/chunk-5QQAPGR2.mjs.map +1 -0
  45. package/dist/chunk-6MB4UKRX.mjs +19 -0
  46. package/dist/chunk-6MB4UKRX.mjs.map +1 -0
  47. package/dist/chunk-6T5LR34O.mjs +45 -0
  48. package/dist/chunk-6T5LR34O.mjs.map +1 -0
  49. package/dist/chunk-AYLCYDUM.mjs +275 -0
  50. package/dist/chunk-AYLCYDUM.mjs.map +1 -0
  51. package/dist/chunk-AYY7D2RJ.mjs +112 -0
  52. package/dist/chunk-AYY7D2RJ.mjs.map +1 -0
  53. package/dist/chunk-CTZEI2YS.mjs +324 -0
  54. package/dist/chunk-CTZEI2YS.mjs.map +1 -0
  55. package/dist/chunk-DA3I3Y5O.mjs +71 -0
  56. package/dist/chunk-DA3I3Y5O.mjs.map +1 -0
  57. package/dist/chunk-EYHT2EWJ.mjs +18 -0
  58. package/dist/chunk-EYHT2EWJ.mjs.map +1 -0
  59. package/dist/chunk-IHLGCS63.mjs +36 -0
  60. package/dist/chunk-IHLGCS63.mjs.map +1 -0
  61. package/dist/chunk-JVXJ6SFX.mjs +38 -0
  62. package/dist/chunk-JVXJ6SFX.mjs.map +1 -0
  63. package/dist/chunk-KBHYXLRG.mjs +13 -0
  64. package/dist/chunk-KBHYXLRG.mjs.map +1 -0
  65. package/dist/chunk-KMXUQYR3.mjs +74 -0
  66. package/dist/chunk-KMXUQYR3.mjs.map +1 -0
  67. package/dist/chunk-KNPOZ34H.mjs +88 -0
  68. package/dist/chunk-KNPOZ34H.mjs.map +1 -0
  69. package/dist/chunk-KRNWCJ4D.mjs +219 -0
  70. package/dist/chunk-KRNWCJ4D.mjs.map +1 -0
  71. package/dist/chunk-M5MESV26.mjs +124 -0
  72. package/dist/chunk-M5MESV26.mjs.map +1 -0
  73. package/dist/chunk-MJYBPJBA.mjs +115 -0
  74. package/dist/chunk-MJYBPJBA.mjs.map +1 -0
  75. package/dist/chunk-NNHPQ67J.mjs +10 -0
  76. package/dist/chunk-NNHPQ67J.mjs.map +1 -0
  77. package/dist/chunk-OCZFHVVD.mjs +71 -0
  78. package/dist/chunk-OCZFHVVD.mjs.map +1 -0
  79. package/dist/chunk-QAWSH567.mjs +19 -0
  80. package/dist/chunk-QAWSH567.mjs.map +1 -0
  81. package/dist/chunk-R2E2J42H.mjs +38 -0
  82. package/dist/chunk-R2E2J42H.mjs.map +1 -0
  83. package/dist/chunk-TPGLLSYV.mjs +65 -0
  84. package/dist/chunk-TPGLLSYV.mjs.map +1 -0
  85. package/dist/chunk-VJENJHXJ.mjs +72 -0
  86. package/dist/chunk-VJENJHXJ.mjs.map +1 -0
  87. package/dist/chunk-W22G7XHR.mjs +104 -0
  88. package/dist/chunk-W22G7XHR.mjs.map +1 -0
  89. package/dist/chunk-WDR5VPZJ.mjs +79 -0
  90. package/dist/chunk-WDR5VPZJ.mjs.map +1 -0
  91. package/dist/chunk-WLUGKBH7.mjs +37 -0
  92. package/dist/chunk-WLUGKBH7.mjs.map +1 -0
  93. package/dist/chunk-WYJYLDUA.mjs +84 -0
  94. package/dist/chunk-WYJYLDUA.mjs.map +1 -0
  95. package/dist/chunk-XZEDZVXT.mjs +38 -0
  96. package/dist/chunk-XZEDZVXT.mjs.map +1 -0
  97. package/dist/chunk-YKGP5JIL.mjs +328 -0
  98. package/dist/chunk-YKGP5JIL.mjs.map +1 -0
  99. package/dist/chunk-YM3U2OBE.mjs +99 -0
  100. package/dist/chunk-YM3U2OBE.mjs.map +1 -0
  101. package/dist/dia-text-reveal.css +18 -0
  102. package/dist/dia-text-reveal.css.map +1 -0
  103. package/dist/dia-text-reveal.d.cts +37 -0
  104. package/dist/dia-text-reveal.d.ts +37 -0
  105. package/dist/dia-text-reveal.d.ts.map +1 -0
  106. package/dist/dia-text-reveal.js +334 -0
  107. package/dist/dia-text-reveal.js.map +1 -0
  108. package/dist/dia-text-reveal.lines.d.cts +23 -0
  109. package/dist/dia-text-reveal.lines.d.ts +23 -0
  110. package/dist/dia-text-reveal.lines.d.ts.map +1 -0
  111. package/dist/dia-text-reveal.mjs +4 -0
  112. package/dist/dia-text-reveal.mjs.map +1 -0
  113. package/dist/dia-text-reveal.sweep.d.cts +49 -0
  114. package/dist/dia-text-reveal.sweep.d.ts +49 -0
  115. package/dist/dia-text-reveal.sweep.d.ts.map +1 -0
  116. package/dist/dia-text-reveal.utils.d.cts +3 -0
  117. package/dist/dia-text-reveal.utils.d.ts +3 -0
  118. package/dist/dia-text-reveal.utils.d.ts.map +1 -0
  119. package/dist/elevated-input.d.cts +11 -0
  120. package/dist/elevated-input.d.ts +11 -0
  121. package/dist/elevated-input.d.ts.map +1 -0
  122. package/dist/elevated-input.js +52 -0
  123. package/dist/elevated-input.js.map +1 -0
  124. package/dist/elevated-input.mjs +4 -0
  125. package/dist/elevated-input.mjs.map +1 -0
  126. package/dist/fade-in.d.cts +43 -0
  127. package/dist/fade-in.d.ts +43 -0
  128. package/dist/fade-in.d.ts.map +1 -0
  129. package/dist/fade-in.js +89 -0
  130. package/dist/fade-in.js.map +1 -0
  131. package/dist/fade-in.mjs +4 -0
  132. package/dist/fade-in.mjs.map +1 -0
  133. package/dist/feature-card.d.cts +23 -0
  134. package/dist/feature-card.d.ts +23 -0
  135. package/dist/feature-card.d.ts.map +1 -0
  136. package/dist/feature-card.js +38 -0
  137. package/dist/feature-card.js.map +1 -0
  138. package/dist/feature-card.mjs +4 -0
  139. package/dist/feature-card.mjs.map +1 -0
  140. package/dist/flowchart-parts.d.cts +61 -0
  141. package/dist/flowchart-parts.d.ts +61 -0
  142. package/dist/flowchart-parts.d.ts.map +1 -0
  143. package/dist/flowchart-parts.js +102 -0
  144. package/dist/flowchart-parts.js.map +1 -0
  145. package/dist/flowchart-parts.mjs +4 -0
  146. package/dist/flowchart-parts.mjs.map +1 -0
  147. package/dist/glossy-button.d.cts +21 -0
  148. package/dist/glossy-button.d.ts +21 -0
  149. package/dist/glossy-button.d.ts.map +1 -0
  150. package/dist/glossy-button.js +87 -0
  151. package/dist/glossy-button.js.map +1 -0
  152. package/dist/glossy-button.mjs +4 -0
  153. package/dist/glossy-button.mjs.map +1 -0
  154. package/dist/grainient.css +9 -0
  155. package/dist/grainient.css.map +1 -0
  156. package/dist/grainient.d.cts +5 -0
  157. package/dist/grainient.d.ts +5 -0
  158. package/dist/grainient.d.ts.map +1 -0
  159. package/dist/grainient.js +330 -0
  160. package/dist/grainient.js.map +1 -0
  161. package/dist/grainient.mjs +4 -0
  162. package/dist/grainient.mjs.map +1 -0
  163. package/dist/grainient.shader.d.cts +9 -0
  164. package/dist/grainient.shader.d.ts +9 -0
  165. package/dist/grainient.shader.d.ts.map +1 -0
  166. package/dist/grainient.types.d.cts +30 -0
  167. package/dist/grainient.types.d.ts +30 -0
  168. package/dist/grainient.types.d.ts.map +1 -0
  169. package/dist/highlighter.d.cts +47 -0
  170. package/dist/highlighter.d.ts +47 -0
  171. package/dist/highlighter.d.ts.map +1 -0
  172. package/dist/highlighter.js +125 -0
  173. package/dist/highlighter.js.map +1 -0
  174. package/dist/highlighter.mjs +5 -0
  175. package/dist/highlighter.mjs.map +1 -0
  176. package/dist/index.css +27 -0
  177. package/dist/index.css.map +1 -0
  178. package/dist/index.d.cts +56 -0
  179. package/dist/index.d.ts +56 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +2723 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/index.mjs +34 -0
  184. package/dist/index.mjs.map +1 -0
  185. package/dist/input.d.cts +15 -0
  186. package/dist/input.d.ts +15 -0
  187. package/dist/input.d.ts.map +1 -0
  188. package/dist/input.js +110 -0
  189. package/dist/input.js.map +1 -0
  190. package/dist/input.mjs +4 -0
  191. package/dist/input.mjs.map +1 -0
  192. package/dist/lib/breakpoints.d.cts +36 -0
  193. package/dist/lib/breakpoints.d.ts +36 -0
  194. package/dist/lib/breakpoints.d.ts.map +1 -0
  195. package/dist/lib/breakpoints.js +41 -0
  196. package/dist/lib/breakpoints.js.map +1 -0
  197. package/dist/lib/breakpoints.mjs +3 -0
  198. package/dist/lib/breakpoints.mjs.map +1 -0
  199. package/dist/lib/cn.js +24 -0
  200. package/dist/lib/cn.js.map +1 -0
  201. package/dist/lib/cn.mjs +3 -0
  202. package/dist/lib/cn.mjs.map +1 -0
  203. package/dist/lib/ease.d.cts +19 -0
  204. package/dist/lib/ease.d.ts +19 -0
  205. package/dist/lib/ease.d.ts.map +1 -0
  206. package/dist/lib/ease.js +16 -0
  207. package/dist/lib/ease.js.map +1 -0
  208. package/dist/lib/ease.mjs +3 -0
  209. package/dist/lib/ease.mjs.map +1 -0
  210. package/dist/lib/surface.d.cts +14 -0
  211. package/dist/lib/surface.d.ts +14 -0
  212. package/dist/lib/surface.d.ts.map +1 -0
  213. package/dist/lib/surface.js +40 -0
  214. package/dist/lib/surface.js.map +1 -0
  215. package/dist/lib/surface.mjs +3 -0
  216. package/dist/lib/surface.mjs.map +1 -0
  217. package/dist/lib/use-media-query.d.cts +9 -0
  218. package/dist/lib/use-media-query.d.ts +9 -0
  219. package/dist/lib/use-media-query.d.ts.map +1 -0
  220. package/dist/lib/use-media-query.js +19 -0
  221. package/dist/lib/use-media-query.js.map +1 -0
  222. package/dist/lib/use-media-query.mjs +3 -0
  223. package/dist/lib/use-media-query.mjs.map +1 -0
  224. package/dist/lib/utils.d.cts +25 -0
  225. package/dist/lib/utils.d.ts +25 -0
  226. package/dist/lib/utils.d.ts.map +1 -0
  227. package/dist/liquid-metal.d.cts +24 -0
  228. package/dist/liquid-metal.d.ts +24 -0
  229. package/dist/liquid-metal.d.ts.map +1 -0
  230. package/dist/liquid-metal.js +43 -0
  231. package/dist/liquid-metal.js.map +1 -0
  232. package/dist/liquid-metal.mjs +4 -0
  233. package/dist/liquid-metal.mjs.map +1 -0
  234. package/dist/navigation-menu-icons.d.cts +5 -0
  235. package/dist/navigation-menu-icons.d.ts +5 -0
  236. package/dist/navigation-menu-icons.d.ts.map +1 -0
  237. package/dist/navigation-menu-icons.js +42 -0
  238. package/dist/navigation-menu-icons.js.map +1 -0
  239. package/dist/navigation-menu-icons.mjs +3 -0
  240. package/dist/navigation-menu-icons.mjs.map +1 -0
  241. package/dist/navigation-menu-styles.d.cts +45 -0
  242. package/dist/navigation-menu-styles.d.ts +45 -0
  243. package/dist/navigation-menu-styles.d.ts.map +1 -0
  244. package/dist/navigation-menu-styles.js +16 -0
  245. package/dist/navigation-menu-styles.js.map +1 -0
  246. package/dist/navigation-menu-styles.mjs +3 -0
  247. package/dist/navigation-menu-styles.mjs.map +1 -0
  248. package/dist/navigation-menu.d.cts +18 -0
  249. package/dist/navigation-menu.d.ts +18 -0
  250. package/dist/navigation-menu.d.ts.map +1 -0
  251. package/dist/navigation-menu.js +367 -0
  252. package/dist/navigation-menu.js.map +1 -0
  253. package/dist/navigation-menu.mjs +7 -0
  254. package/dist/navigation-menu.mjs.map +1 -0
  255. package/dist/password-input.d.cts +6 -0
  256. package/dist/password-input.d.ts +6 -0
  257. package/dist/password-input.d.ts.map +1 -0
  258. package/dist/password-input.js +174 -0
  259. package/dist/password-input.js.map +1 -0
  260. package/dist/password-input.mjs +5 -0
  261. package/dist/password-input.mjs.map +1 -0
  262. package/dist/rainbow-button.d.cts +16 -0
  263. package/dist/rainbow-button.d.ts +16 -0
  264. package/dist/rainbow-button.d.ts.map +1 -0
  265. package/dist/rainbow-button.js +49 -0
  266. package/dist/rainbow-button.js.map +1 -0
  267. package/dist/rainbow-button.mjs +4 -0
  268. package/dist/rainbow-button.mjs.map +1 -0
  269. package/dist/range-slider.d.cts +20 -0
  270. package/dist/range-slider.d.ts +20 -0
  271. package/dist/range-slider.d.ts.map +1 -0
  272. package/dist/range-slider.js +85 -0
  273. package/dist/range-slider.js.map +1 -0
  274. package/dist/range-slider.mjs +3 -0
  275. package/dist/range-slider.mjs.map +1 -0
  276. package/dist/rolling-badge.d.cts +11 -0
  277. package/dist/rolling-badge.d.ts +11 -0
  278. package/dist/rolling-badge.d.ts.map +1 -0
  279. package/dist/rolling-badge.js +71 -0
  280. package/dist/rolling-badge.js.map +1 -0
  281. package/dist/rolling-badge.mjs +4 -0
  282. package/dist/rolling-badge.mjs.map +1 -0
  283. package/dist/savings-badge.d.cts +10 -0
  284. package/dist/savings-badge.d.ts +10 -0
  285. package/dist/savings-badge.d.ts.map +1 -0
  286. package/dist/savings-badge.js +26 -0
  287. package/dist/savings-badge.js.map +1 -0
  288. package/dist/savings-badge.mjs +4 -0
  289. package/dist/savings-badge.mjs.map +1 -0
  290. package/dist/shine-border.d.cts +15 -0
  291. package/dist/shine-border.d.ts +15 -0
  292. package/dist/shine-border.d.ts.map +1 -0
  293. package/dist/shine-border.js +47 -0
  294. package/dist/shine-border.js.map +1 -0
  295. package/dist/shine-border.mjs +4 -0
  296. package/dist/shine-border.mjs.map +1 -0
  297. package/dist/sparkles-text.d.cts +22 -0
  298. package/dist/sparkles-text.d.ts +22 -0
  299. package/dist/sparkles-text.d.ts.map +1 -0
  300. package/dist/sparkles-text.js +87 -0
  301. package/dist/sparkles-text.js.map +1 -0
  302. package/dist/sparkles-text.mjs +5 -0
  303. package/dist/sparkles-text.mjs.map +1 -0
  304. package/dist/tabs.d.cts +16 -0
  305. package/dist/tabs.d.ts +16 -0
  306. package/dist/tabs.d.ts.map +1 -0
  307. package/dist/tabs.js +121 -0
  308. package/dist/tabs.js.map +1 -0
  309. package/dist/tabs.mjs +4 -0
  310. package/dist/tabs.mjs.map +1 -0
  311. package/dist/theme-toggle.d.cts +10 -0
  312. package/dist/theme-toggle.d.ts +10 -0
  313. package/dist/theme-toggle.d.ts.map +1 -0
  314. package/dist/theme-toggle.js +251 -0
  315. package/dist/theme-toggle.js.map +1 -0
  316. package/dist/theme-toggle.mjs +7 -0
  317. package/dist/theme-toggle.mjs.map +1 -0
  318. package/package.json +428 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/ease.ts","../src/lib/utils.ts","../src/components/action-swap.tsx","../src/components/button.tsx","../src/components/theme-toggle.tsx"],"names":["twMerge","clsx","useReducedMotion","useRef","useState","useLayoutEffect","jsxs","jsx","AnimatePresence","motion","cva"],"mappings":"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","file":"theme-toggle.js","sourcesContent":["/**\n * Easing curves shared across landing-ui components.\n */\n\n/** Smooth deceleration — matches the former CSS `ease-out-expo`. */\nexport const easeOut = [0.22, 1, 0.36, 1] as const;\n\n/** Gentle overshoot — bounce-like settle for spring alternatives. */\nexport const easeOutBack = [0.34, 1.56, 0.64, 1] as const;\n\n// ── Content-swap tokens (action-swap) ─────────────────────────────────────\n// Values mirror beui.dev's `lib/ease.ts` so vendored action-swap primitives\n// keep their upstream timing.\n\n/** Strong ease-out — the default `ease-out` reads weak at these durations. */\nexport const EASE_OUT = [0.16, 1, 0.3, 1] as const;\n\n/** CSS string form of {@link EASE_OUT} for inline style transitions. */\nexport const EASE_OUT_CSS = 'cubic-bezier(0.16, 1, 0.3, 1)';\n\n/** Content swaps — label/icon slots trading places inside a control. */\nexport const SPRING_SWAP = { type: 'spring', stiffness: 460, damping: 30, mass: 0.55 } as const;\n","import { type ClassValue, clsx } from 'clsx';\nimport type { CSSProperties } from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * A style object that may carry CSS custom properties (CSS variables)\n * such as `--duration`. React's `CSSProperties` intentionally drops\n * its index signature, so custom properties are not accepted without help.\n */\nexport type CSSPropertiesWithVars = CSSProperties & Record<`--${string}`, string | number>;\n\n/**\n * Builds a {@link CSSProperties} value that also allows CSS custom properties,\n * so `style` props can be written without an `as React.CSSProperties` cast while\n * still type-checking both the known style keys and the custom-property values.\n *\n * @example\n * <div style={validCssVars({ '--duration': '0.35s', color: 'red' })} />\n */\nexport function validCssVars(style: CSSPropertiesWithVars): CSSProperties {\n return style;\n}\n\n/**\n * Narrows a union to the member(s) that declare `key` — a type-guard\n * replacement for the `in` operator's discriminated-union narrowing.\n */\nexport function hasKey<K extends PropertyKey>(key: K, obj: unknown): obj is Record<K, unknown> {\n return obj !== null && typeof obj === 'object' && Object.hasOwn(obj, key);\n}\n\nexport function noop(): void {\n // intentional no-op\n}\n","'use client';\n// Adapted from beui.dev/components/motion/action-swap (roll variant only).\n// Upstream imports `motion/react`; this project is on framer-motion, and its\n// blur/cascade animations and pre-styled <ActionSwapButton> are omitted — the\n// button's variant classes reference `bg-card`/`bg-primary`, which this site\n// doesn't define as --color-* tokens, so Tailwind would drop them silently.\n\nimport { AnimatePresence, motion, useReducedMotion, type Variants } from 'framer-motion';\nimport { type ReactNode, useLayoutEffect, useRef, useState } from 'react';\nimport { EASE_OUT, EASE_OUT_CSS, SPRING_SWAP } from '../lib/ease.js';\nimport { cn } from '../lib/utils.js';\n\n/** The outgoing half rolls out faster than the incoming half settles. */\nconst ROLL_EXIT_TRANSITION = { duration: 0.14, ease: EASE_OUT } as const;\nconst ROLL_BLUR = 'blur(3px)';\n\n/** Rest state used under reduced motion — no travel, no blur. */\nconst AT_REST = { opacity: 1, y: 0, filter: 'blur(0px)' } as const;\n\n/** Text travels in percentages so the roll scales with the line height. */\nconst TEXT_VARIANTS: Variants = {\n initial: { opacity: 0, y: '90%', filter: ROLL_BLUR },\n animate: { opacity: 1, y: '0%', filter: 'blur(0px)', transition: SPRING_SWAP },\n exit: { opacity: 0, y: '-90%', filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION },\n};\n\n/** Icons travel in pixels — a glyph box has no line height to scale against. */\nconst ICON_VARIANTS: Variants = {\n initial: { opacity: 0, y: 12, filter: ROLL_BLUR },\n animate: { opacity: 1, y: 0, filter: 'blur(0px)', transition: SPRING_SWAP },\n exit: { opacity: 0, y: -12, filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION },\n};\n\nexport type ActionSwapRollProps = {\n /** Identity of the current content — changing it triggers the roll. */\n value: string;\n children: ReactNode;\n className?: string;\n};\n\n/**\n * Rolls `children` up out of the box while the new content rolls in from below,\n * animating the box's width so labels of different lengths don't snap.\n *\n * The visible label is the accessible name, so for the duration of a swap both\n * the outgoing and incoming text are in the accessibility tree. Give the host\n * control an explicit `aria-label` when that ambiguity matters.\n */\nexport function ActionSwapRollText({ value, children, className }: ActionSwapRollProps) {\n const reduce = useReducedMotion() ?? false;\n const measureRef = useRef<HTMLSpanElement>(null);\n const [width, setWidth] = useState<number>();\n\n // Deliberately un-keyed: the invisible copy is re-measured after every render\n // so the box tracks content it can't diff (fonts finishing, text changing).\n useLayoutEffect(() => {\n const nextWidth = measureRef.current?.offsetWidth;\n if (!nextWidth) return;\n setWidth((current) => (current === nextWidth ? current : nextWidth));\n });\n\n return (\n <span\n className={cn('relative inline-block overflow-hidden whitespace-nowrap align-bottom', className)}\n style={{ width, transition: reduce ? undefined : `width 220ms ${EASE_OUT_CSS}` }}\n >\n {/* Width source: laid out in flow but never painted, so the absolutely\n positioned live copies below have something to size the box. */}\n <span ref={measureRef} aria-hidden={true} className=\"invisible inline-block whitespace-nowrap\">\n {children}\n </span>\n <AnimatePresence initial={false}>\n <motion.span\n key={value}\n variants={TEXT_VARIANTS}\n initial={reduce ? false : 'initial'}\n animate={reduce ? AT_REST : 'animate'}\n exit={reduce ? undefined : 'exit'}\n className=\"absolute top-0 left-0 inline-block will-change-[opacity,filter,transform]\"\n >\n {children}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n\n/**\n * Icon counterpart to {@link ActionSwapRollText}. `popLayout` pulls the outgoing\n * icon out of flow so the pair overlaps in one cell instead of sitting side by\n * side mid-swap. Always `aria-hidden` — icons here restate a visible label.\n */\nexport function ActionSwapRollIcon({ value, children, className }: ActionSwapRollProps) {\n const reduce = useReducedMotion() ?? false;\n\n return (\n <span className={cn('relative inline-grid shrink-0 place-items-center overflow-hidden', className)}>\n <AnimatePresence mode=\"popLayout\" initial={false}>\n <motion.span\n key={value}\n aria-hidden={true}\n variants={ICON_VARIANTS}\n initial={reduce ? false : 'initial'}\n animate={reduce ? AT_REST : 'animate'}\n exit={reduce ? undefined : 'exit'}\n className=\"col-start-1 row-start-1 inline-flex items-center justify-center will-change-[opacity,filter,transform]\"\n >\n {children}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Shared marketing-site button styles.\n *\n * The `transition` in the base string matches the former `.button-transition`\n * utility — a pure-CSS morph so the component stays server-renderable.\n */\nconst buttonVariants = cva(\n 'group inline-flex items-center justify-center gap-1.5 font-medium [transition:opacity_.24s_80ms,transform_.15s_cubic-bezier(.4,0,.2,1),box-shadow_.15s_cubic-bezier(.4,0,.2,1),filter_.15s_cubic-bezier(.4,0,.2,1)] disabled:[transition:opacity_.1s]',\n {\n variants: {\n variant: {\n filled: 'bg-(--foreground) text-(--primary-foreground) shadow-elevated-3 hover:opacity-90',\n bordered: 'border border-(--border-hi) bg-surface-3 text-foreground shadow-elevated-3 hover:bg-(--muted)',\n ghost: 'text-(--foreground-secondary) hover:bg-(--surface-hover) hover:text-(--foreground)',\n },\n size: {\n sm: 'h-8 px-3.5 text-[15px]',\n md: 'h-9 px-5 text-[17px]',\n lg: 'h-11 px-6 text-[17px]',\n icon: 'size-11',\n },\n shape: {\n rounded: 'rounded-interactive',\n pill: 'rounded-full',\n },\n },\n // Pill is the house standard — every CTA is fully rounded.\n defaultVariants: { variant: 'filled', size: 'md', shape: 'pill' },\n },\n);\n\nexport type ButtonProps = VariantProps<typeof buttonVariants> & {\n showArrow?: boolean;\n /**\n * Set when `actionOrLink` is an off-site URL — renders the anchor with\n * `target=\"_blank\"` and `rel=\"noopener noreferrer\"`.\n */\n external?: boolean;\n /** Hover tooltip on the rendered anchor/button. */\n title?: string;\n /**\n * String → renders as a plain anchor <a href={...}>.\n * Function → renders as a <button type=\"button\" onClick={...}>.\n */\n actionOrLink: string | (() => void);\n children: ReactNode;\n className?: string;\n 'aria-label'?: string;\n 'aria-expanded'?: boolean;\n};\n\n/**\n * Shared marketing-site button.\n *\n * variant=\"filled\" → primary CTA (inverse theming: bg-(--foreground) + text-(--primary-foreground)\n * + shadow-elevated-3 — flips with the theme so it pops against any surface)\n * variant=\"bordered\" → elevated surface + border (bg-surface-3 + shadow-elevated-3 + border)\n * variant=\"ghost\" → transparent, muted text that gains a surface on hover\n * size=\"sm\" → h-8, px-3.5, text-[15px] (navbar / compact)\n * size=\"md\" → h-9, px-5, text-[17px] (default)\n * size=\"lg\" → h-11, px-6, text-[17px] (hero CTAs)\n * size=\"icon\" → size-11 square (icon-only buttons)\n * shape=\"pill\" → fully rounded (rounded-full); pill is the default\n * showArrow → chevron right at rest, morphs to arrow-right on hover\n *\n * Server-renderable: the arrow morph is pure CSS (group-hover), so no client\n * state or animation library is needed. When `actionOrLink` is a function the\n * component renders a <button>; passing a function requires a client-component\n * parent (functions can't cross the server→client boundary), which is inherent\n * to any onClick prop and unchanged by this component being server-capable.\n */\nexport function Button({\n variant,\n size,\n shape,\n showArrow = false,\n external = false,\n title,\n actionOrLink,\n children,\n className,\n 'aria-label': ariaLabel,\n 'aria-expanded': ariaExpanded,\n}: ButtonProps) {\n const buttonClassName = cn(buttonVariants({ variant, size, shape }), className);\n\n /*\n * Single SVG that morphs from › to → on hover — pure CSS, no JS.\n * The shaft draws in from the left (stroke-dashoffset 9 → 0) and the arrowhead\n * nudges right. Draw-in is slower (.22s) than the reverse (.08s), matching the\n * asymmetric timing of the former framer-motion version. ease = cubic-bezier(.22,1,.36,1).\n */\n const arrowSlot = showArrow && (\n <svg\n viewBox=\"0 0 14 14\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n className=\"shrink-0\"\n >\n {/* Shaft — draws in from the left */}\n <line\n x1=\"0\"\n y1=\"7\"\n x2=\"9\"\n y2=\"7\"\n strokeDasharray=\"9\"\n className=\"[stroke-dashoffset:9] [transition:stroke-dashoffset_.08s_cubic-bezier(.22,1,.36,1)] group-hover:[stroke-dashoffset:0] group-hover:[transition-duration:.22s]\"\n />\n {/* Arrowhead — nudges right so the shaft \"connects\" underneath */}\n <path\n d=\"M5 3l4 4-4 4\"\n className=\"[transform:translateX(0)] [transition:transform_.22s_cubic-bezier(.22,1,.36,1)] group-hover:[transform:translateX(2px)]\"\n />\n </svg>\n );\n\n if (typeof actionOrLink === 'string')\n return (\n <a\n href={actionOrLink}\n className={cn(buttonClassName, 'no-underline')}\n aria-label={ariaLabel}\n title={title}\n {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {children}\n {arrowSlot}\n </a>\n );\n\n return (\n <button\n type=\"button\"\n className={buttonClassName}\n onClick={actionOrLink}\n aria-label={ariaLabel}\n aria-expanded={ariaExpanded}\n title={title}\n >\n {children}\n {arrowSlot}\n </button>\n );\n}\n","'use client';\n\nimport { ActionSwapRollIcon, ActionSwapRollText } from './action-swap.js';\nimport { Button } from './button.js';\n\n/*\n * Controlled theme toggle: the parent owns the current theme and the flip\n * handler, so there's no next-themes, no hydration detection, and no\n * pre-hydration CSS fallback — the theme is always known and the roll renders\n * directly on first paint.\n */\n\n// Icon-only (navbar / footer) sits on the `sm` height; the labeled row (mobile\n// drawer) on `md`. The `w-8 p-0` / `gap-2 px-3 text-[13px]` overrides turn the\n// shared <Button> sizes into the toggle's square and labeled geometries.\nconst ICON_LAYOUT = 'w-8 p-0';\nconst LABELED_LAYOUT = 'gap-2 px-3 text-[13px]';\n\n/** Sun glyph — the icon shown while dark, i.e. the theme you switch *to*. */\nfunction SunIcon() {\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n >\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"1\" />\n <line x1=\"12\" y1=\"23\" x2=\"12\" y2=\"21\" />\n <line x1=\"3\" y1=\"12\" x2=\"1\" y2=\"12\" />\n <line x1=\"23\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"5\" y1=\"5\" x2=\"3.5\" y2=\"3.5\" />\n <line x1=\"20.5\" y1=\"20.5\" x2=\"19\" y2=\"19\" />\n <line x1=\"19\" y1=\"5\" x2=\"20.5\" y2=\"3.5\" />\n <line x1=\"4.5\" y1=\"20.5\" x2=\"3\" y2=\"19\" />\n </svg>\n );\n}\n\n/** Moon glyph — the icon shown while light, i.e. the theme you switch *to*. */\nfunction MoonIcon() {\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n >\n <path d=\"M21 12.8A9 9 0 1 1 11.2 3 7 7 0 0 0 21 12.8z\" />\n </svg>\n );\n}\n\nexport type ThemeToggleProps = {\n /** Current theme — drives which icon/label the roll shows. */\n theme: 'light' | 'dark';\n /** Flip handler; the parent persists the new theme. */\n onToggle: () => void;\n /** Render the labeled row (mobile drawer) instead of the icon-only square. */\n showLabel?: boolean;\n};\n\nexport function ThemeToggle({ theme, onToggle, showLabel = false }: ThemeToggleProps) {\n const size = showLabel ? 'md' : 'sm';\n const layoutClassName = showLabel ? LABELED_LAYOUT : ICON_LAYOUT;\n\n // The icon shows the theme you are switching *to*, matching the label.\n const isDark = theme === 'dark';\n const label = isDark ? 'Switch to light mode' : 'Switch to dark mode';\n\n return (\n <Button\n variant=\"filled\"\n size={size}\n actionOrLink={onToggle}\n className={layoutClassName}\n // The visible label rolls, so mid-swap both strings are briefly in the\n // tree. Naming the button explicitly keeps it unambiguous either way.\n aria-label={label}\n >\n <ActionSwapRollIcon value={theme} className=\"h-4 w-4\">\n {isDark ? <SunIcon /> : <MoonIcon />}\n </ActionSwapRollIcon>\n {showLabel ? <ActionSwapRollText value={theme}>{label}</ActionSwapRollText> : null}\n </Button>\n );\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export { ThemeToggle } from './chunk-KMXUQYR3.mjs';
2
+ import './chunk-AYY7D2RJ.mjs';
3
+ import './chunk-DA3I3Y5O.mjs';
4
+ import './chunk-QAWSH567.mjs';
5
+ import './chunk-NNHPQ67J.mjs';
6
+ //# sourceMappingURL=theme-toggle.mjs.map
7
+ //# sourceMappingURL=theme-toggle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"theme-toggle.mjs"}
package/package.json ADDED
@@ -0,0 +1,428 @@
1
+ {
2
+ "name": "react-marketing-ui",
3
+ "version": "0.0.1",
4
+ "description": "Reusable landing & marketing page UI components for React — animated text reveals, shader effects, magnetic tabs, and scroll-triggered entrances.",
5
+ "keywords": [
6
+ "react",
7
+ "ui",
8
+ "components",
9
+ "marketing",
10
+ "landing",
11
+ "animation",
12
+ "framer-motion",
13
+ "tailwind",
14
+ "storybook"
15
+ ],
16
+ "license": "MIT",
17
+ "author": "Ivan Stepanian <iv.stpn@gmail.com>",
18
+ "homepage": "https://github.com/iv-stpn/react-marketing-ui#readme",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/iv-stpn/react-marketing-ui.git"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/iv-stpn/react-marketing-ui/issues"
25
+ },
26
+ "sideEffects": [
27
+ "**/*.css"
28
+ ],
29
+ "exports": {
30
+ "./package.json": "./package.json",
31
+ ".": {
32
+ "import": {
33
+ "types": "./dist/index.d.ts",
34
+ "default": "./dist/index.js"
35
+ },
36
+ "require": {
37
+ "types": "./dist/index.d.cts",
38
+ "default": "./dist/index.cjs"
39
+ }
40
+ },
41
+ "./sparkles-text": {
42
+ "import": {
43
+ "types": "./dist/sparkles-text.d.ts",
44
+ "default": "./dist/sparkles-text.js"
45
+ },
46
+ "require": {
47
+ "types": "./dist/sparkles-text.d.cts",
48
+ "default": "./dist/sparkles-text.cjs"
49
+ }
50
+ },
51
+ "./rainbow-button": {
52
+ "import": {
53
+ "types": "./dist/rainbow-button.d.ts",
54
+ "default": "./dist/rainbow-button.js"
55
+ },
56
+ "require": {
57
+ "types": "./dist/rainbow-button.d.cts",
58
+ "default": "./dist/rainbow-button.cjs"
59
+ }
60
+ },
61
+ "./shine-border": {
62
+ "import": {
63
+ "types": "./dist/shine-border.d.ts",
64
+ "default": "./dist/shine-border.js"
65
+ },
66
+ "require": {
67
+ "types": "./dist/shine-border.d.cts",
68
+ "default": "./dist/shine-border.cjs"
69
+ }
70
+ },
71
+ "./liquid-metal": {
72
+ "import": {
73
+ "types": "./dist/liquid-metal.d.ts",
74
+ "default": "./dist/liquid-metal.js"
75
+ },
76
+ "require": {
77
+ "types": "./dist/liquid-metal.d.cts",
78
+ "default": "./dist/liquid-metal.cjs"
79
+ }
80
+ },
81
+ "./tabs": {
82
+ "import": {
83
+ "types": "./dist/tabs.d.ts",
84
+ "default": "./dist/tabs.js"
85
+ },
86
+ "require": {
87
+ "types": "./dist/tabs.d.cts",
88
+ "default": "./dist/tabs.cjs"
89
+ }
90
+ },
91
+ "./highlighter": {
92
+ "import": {
93
+ "types": "./dist/highlighter.d.ts",
94
+ "default": "./dist/highlighter.js"
95
+ },
96
+ "require": {
97
+ "types": "./dist/highlighter.d.cts",
98
+ "default": "./dist/highlighter.cjs"
99
+ }
100
+ },
101
+ "./fade-in": {
102
+ "import": {
103
+ "types": "./dist/fade-in.d.ts",
104
+ "default": "./dist/fade-in.js"
105
+ },
106
+ "require": {
107
+ "types": "./dist/fade-in.d.cts",
108
+ "default": "./dist/fade-in.cjs"
109
+ }
110
+ },
111
+ "./dia-text-reveal": {
112
+ "import": {
113
+ "types": "./dist/dia-text-reveal.d.ts",
114
+ "default": "./dist/dia-text-reveal.js"
115
+ },
116
+ "require": {
117
+ "types": "./dist/dia-text-reveal.d.cts",
118
+ "default": "./dist/dia-text-reveal.cjs"
119
+ }
120
+ },
121
+ "./accordion": {
122
+ "import": {
123
+ "types": "./dist/accordion.d.ts",
124
+ "default": "./dist/accordion.js"
125
+ },
126
+ "require": {
127
+ "types": "./dist/accordion.d.cts",
128
+ "default": "./dist/accordion.cjs"
129
+ }
130
+ },
131
+ "./card": {
132
+ "import": {
133
+ "types": "./dist/card.d.ts",
134
+ "default": "./dist/card.js"
135
+ },
136
+ "require": {
137
+ "types": "./dist/card.d.cts",
138
+ "default": "./dist/card.cjs"
139
+ }
140
+ },
141
+ "./animated-beam": {
142
+ "import": {
143
+ "types": "./dist/animated-beam.d.ts",
144
+ "default": "./dist/animated-beam.js"
145
+ },
146
+ "require": {
147
+ "types": "./dist/animated-beam.d.cts",
148
+ "default": "./dist/animated-beam.cjs"
149
+ }
150
+ },
151
+ "./glossy-button": {
152
+ "import": {
153
+ "types": "./dist/glossy-button.d.ts",
154
+ "default": "./dist/glossy-button.js"
155
+ },
156
+ "require": {
157
+ "types": "./dist/glossy-button.d.cts",
158
+ "default": "./dist/glossy-button.cjs"
159
+ }
160
+ },
161
+ "./feature-card": {
162
+ "import": {
163
+ "types": "./dist/feature-card.d.ts",
164
+ "default": "./dist/feature-card.js"
165
+ },
166
+ "require": {
167
+ "types": "./dist/feature-card.d.cts",
168
+ "default": "./dist/feature-card.cjs"
169
+ }
170
+ },
171
+ "./rolling-badge": {
172
+ "import": {
173
+ "types": "./dist/rolling-badge.d.ts",
174
+ "default": "./dist/rolling-badge.js"
175
+ },
176
+ "require": {
177
+ "types": "./dist/rolling-badge.d.cts",
178
+ "default": "./dist/rolling-badge.cjs"
179
+ }
180
+ },
181
+ "./elevated-input": {
182
+ "import": {
183
+ "types": "./dist/elevated-input.d.ts",
184
+ "default": "./dist/elevated-input.js"
185
+ },
186
+ "require": {
187
+ "types": "./dist/elevated-input.d.cts",
188
+ "default": "./dist/elevated-input.cjs"
189
+ }
190
+ },
191
+ "./input": {
192
+ "import": {
193
+ "types": "./dist/input.d.ts",
194
+ "default": "./dist/input.js"
195
+ },
196
+ "require": {
197
+ "types": "./dist/input.d.cts",
198
+ "default": "./dist/input.cjs"
199
+ }
200
+ },
201
+ "./password-input": {
202
+ "import": {
203
+ "types": "./dist/password-input.d.ts",
204
+ "default": "./dist/password-input.js"
205
+ },
206
+ "require": {
207
+ "types": "./dist/password-input.d.cts",
208
+ "default": "./dist/password-input.cjs"
209
+ }
210
+ },
211
+ "./range-slider": {
212
+ "import": {
213
+ "types": "./dist/range-slider.d.ts",
214
+ "default": "./dist/range-slider.js"
215
+ },
216
+ "require": {
217
+ "types": "./dist/range-slider.d.cts",
218
+ "default": "./dist/range-slider.cjs"
219
+ }
220
+ },
221
+ "./lib/cn": {
222
+ "import": {
223
+ "types": "./dist/lib/utils.d.ts",
224
+ "default": "./dist/lib/cn.js"
225
+ },
226
+ "require": {
227
+ "types": "./dist/lib/utils.d.cts",
228
+ "default": "./dist/lib/cn.cjs"
229
+ }
230
+ },
231
+ "./lib/use-media-query": {
232
+ "import": {
233
+ "types": "./dist/lib/use-media-query.d.ts",
234
+ "default": "./dist/lib/use-media-query.js"
235
+ },
236
+ "require": {
237
+ "types": "./dist/lib/use-media-query.d.cts",
238
+ "default": "./dist/lib/use-media-query.cjs"
239
+ }
240
+ },
241
+ "./button": {
242
+ "import": {
243
+ "types": "./dist/button.d.ts",
244
+ "default": "./dist/button.js"
245
+ },
246
+ "require": {
247
+ "types": "./dist/button.d.cts",
248
+ "default": "./dist/button.cjs"
249
+ }
250
+ },
251
+ "./action-swap": {
252
+ "import": {
253
+ "types": "./dist/action-swap.d.ts",
254
+ "default": "./dist/action-swap.js"
255
+ },
256
+ "require": {
257
+ "types": "./dist/action-swap.d.cts",
258
+ "default": "./dist/action-swap.cjs"
259
+ }
260
+ },
261
+ "./savings-badge": {
262
+ "import": {
263
+ "types": "./dist/savings-badge.d.ts",
264
+ "default": "./dist/savings-badge.js"
265
+ },
266
+ "require": {
267
+ "types": "./dist/savings-badge.d.cts",
268
+ "default": "./dist/savings-badge.cjs"
269
+ }
270
+ },
271
+ "./theme-toggle": {
272
+ "import": {
273
+ "types": "./dist/theme-toggle.d.ts",
274
+ "default": "./dist/theme-toggle.js"
275
+ },
276
+ "require": {
277
+ "types": "./dist/theme-toggle.d.cts",
278
+ "default": "./dist/theme-toggle.cjs"
279
+ }
280
+ },
281
+ "./grainient": {
282
+ "import": {
283
+ "types": "./dist/grainient.d.ts",
284
+ "default": "./dist/grainient.js"
285
+ },
286
+ "require": {
287
+ "types": "./dist/grainient.d.cts",
288
+ "default": "./dist/grainient.cjs"
289
+ }
290
+ },
291
+ "./flowchart-parts": {
292
+ "import": {
293
+ "types": "./dist/flowchart-parts.d.ts",
294
+ "default": "./dist/flowchart-parts.js"
295
+ },
296
+ "require": {
297
+ "types": "./dist/flowchart-parts.d.cts",
298
+ "default": "./dist/flowchart-parts.cjs"
299
+ }
300
+ },
301
+ "./navigation-menu": {
302
+ "import": {
303
+ "types": "./dist/navigation-menu.d.ts",
304
+ "default": "./dist/navigation-menu.js"
305
+ },
306
+ "require": {
307
+ "types": "./dist/navigation-menu.d.cts",
308
+ "default": "./dist/navigation-menu.cjs"
309
+ }
310
+ },
311
+ "./navigation-menu-styles": {
312
+ "import": {
313
+ "types": "./dist/navigation-menu-styles.d.ts",
314
+ "default": "./dist/navigation-menu-styles.js"
315
+ },
316
+ "require": {
317
+ "types": "./dist/navigation-menu-styles.d.cts",
318
+ "default": "./dist/navigation-menu-styles.cjs"
319
+ }
320
+ },
321
+ "./navigation-menu-icons": {
322
+ "import": {
323
+ "types": "./dist/navigation-menu-icons.d.ts",
324
+ "default": "./dist/navigation-menu-icons.js"
325
+ },
326
+ "require": {
327
+ "types": "./dist/navigation-menu-icons.d.cts",
328
+ "default": "./dist/navigation-menu-icons.cjs"
329
+ }
330
+ },
331
+ "./lib/surface": {
332
+ "import": {
333
+ "types": "./dist/surface.d.ts",
334
+ "default": "./dist/surface.js"
335
+ },
336
+ "require": {
337
+ "types": "./dist/surface.d.cts",
338
+ "default": "./dist/surface.cjs"
339
+ }
340
+ },
341
+ "./lib/breakpoints": {
342
+ "import": {
343
+ "types": "./dist/breakpoints.d.ts",
344
+ "default": "./dist/breakpoints.js"
345
+ },
346
+ "require": {
347
+ "types": "./dist/breakpoints.d.cts",
348
+ "default": "./dist/breakpoints.cjs"
349
+ }
350
+ },
351
+ "./lib/ease": {
352
+ "import": {
353
+ "types": "./dist/ease.d.ts",
354
+ "default": "./dist/ease.js"
355
+ },
356
+ "require": {
357
+ "types": "./dist/ease.d.cts",
358
+ "default": "./dist/ease.cjs"
359
+ }
360
+ },
361
+ "./grainient.css": "./dist/grainient.css"
362
+ },
363
+ "files": [
364
+ "dist",
365
+ "LICENSE",
366
+ "README.md"
367
+ ],
368
+ "publishConfig": {
369
+ "access": "public",
370
+ "provenance": true
371
+ },
372
+ "scripts": {
373
+ "dev": "storybook dev -p 6006",
374
+ "build": "tsup && bun run build:types",
375
+ "build:types": "tsc -p tsconfig.build.json && bun scripts/gen-cjs-types.ts",
376
+ "build-storybook": "storybook build",
377
+ "typecheck": "tsc --noEmit",
378
+ "test": "vitest run",
379
+ "test:watch": "vitest",
380
+ "lint": "biome check .",
381
+ "lint:fix": "biome check --write .",
382
+ "changeset": "changeset",
383
+ "version-packages": "changeset version",
384
+ "release": "bun run build && changeset publish",
385
+ "prepare": "husky"
386
+ },
387
+ "dependencies": {
388
+ "@base-ui/react": "^1.7.0",
389
+ "@radix-ui/react-slot": "^1.2.3",
390
+ "class-variance-authority": "^0.7.1",
391
+ "clsx": "^2.1.1",
392
+ "framer-motion": "^12.42.2",
393
+ "tailwind-merge": "^3.6.0",
394
+ "ogl": "^1.0.11",
395
+ "rough-notation": "^0.5.1"
396
+ },
397
+ "peerDependencies": {
398
+ "react": ">=18.0.0",
399
+ "react-dom": ">=18.0.0"
400
+ },
401
+ "devDependencies": {
402
+ "@biomejs/biome": "^2.5",
403
+ "@changesets/changelog-github": "^0.6.0",
404
+ "@changesets/cli": "^2.31",
405
+ "@iv-stpn/biome-config": "^1.3",
406
+ "@paper-design/shaders-react": "^0.0.77",
407
+ "@storybook/addon-docs": "^10.5",
408
+ "@storybook/addon-themes": "^10.5",
409
+ "@storybook/addon-vitest": "^10.5",
410
+ "@storybook/react": "^10.5",
411
+ "@storybook/react-vite": "^10.5",
412
+ "@tailwindcss/vite": "^4.3",
413
+ "@types/node": "^26.2.0",
414
+ "@types/react": "^19",
415
+ "@types/react-dom": "^19",
416
+ "@vitest/browser-playwright": "^4.1",
417
+ "husky": "^9",
418
+ "playwright": "^1.61",
419
+ "react": "^19.2",
420
+ "react-dom": "^19.2",
421
+ "storybook": "^10.5",
422
+ "tailwindcss": "^4",
423
+ "tsup": "^8",
424
+ "typescript": "^7",
425
+ "vite": "^8",
426
+ "vitest": "^4"
427
+ }
428
+ }