@mova-ui/react 0.4.6 → 0.4.8

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 (499) hide show
  1. package/dist/catalog/components/dither-charts/DitherChartsGrid.js +3 -3
  2. package/dist/catalog/components/simple-comp/DitherChartsGrid.js +3 -3
  3. package/dist/catalog/data/ditherCharts.js +3 -3
  4. package/dist/catalog/data/formElements.js +2 -2
  5. package/dist/catalog/data/installCommand.js +2 -2
  6. package/dist/catalog/data/metrics.js +2 -2
  7. package/dist/catalog/data/supportedRegistryIds.js +1 -1
  8. package/dist/catalog/data/textAnimations.js +2 -2
  9. package/dist/catalog/data/toggles.js +2 -2
  10. package/dist/catalog/data/transitions.js +2 -2
  11. package/dist/catalog-chunks/{chunk-VMGI6CMO.js → chunk-6NP66VN5.js} +1 -1
  12. package/dist/catalog-chunks/{chunk-OWYADZUR.js → chunk-WKFJSUM3.js} +1 -1
  13. package/dist/catalog-chunks/{chunk-FXF53HPE.js → chunk-YPZZOKH4.js} +6 -0
  14. package/dist/index.d.ts +6 -0
  15. package/dist/index.js +3375 -682
  16. package/dist/styles.css +1 -1
  17. package/dist/ui/cards/balance-bar-chart-card.d.ts +25 -0
  18. package/dist/ui/cards/calendar-day-card.d.ts +32 -0
  19. package/dist/ui/cards/day-trading-order-ticket.d.ts +24 -0
  20. package/dist/ui/cards/imessage-chat.d.ts +21 -0
  21. package/dist/ui/cards/liquid-glass-sheet.d.ts +19 -0
  22. package/dist/ui/cards/voice-assistant-card.d.ts +21 -0
  23. package/package.json +3 -2
  24. package/registry/1.json +1 -1
  25. package/registry/10.json +1 -1
  26. package/registry/11.json +1 -1
  27. package/registry/12.json +1 -1
  28. package/registry/13.json +1 -1
  29. package/registry/14.json +1 -1
  30. package/registry/15.json +1 -1
  31. package/registry/16.json +1 -1
  32. package/registry/17.json +1 -1
  33. package/registry/18.json +1 -1
  34. package/registry/19.json +1 -1
  35. package/registry/2.json +1 -1
  36. package/registry/20.json +1 -1
  37. package/registry/21.json +1 -1
  38. package/registry/22.json +1 -1
  39. package/registry/23.json +1 -1
  40. package/registry/24.json +1 -1
  41. package/registry/25.json +1 -1
  42. package/registry/26.json +1 -1
  43. package/registry/27.json +1 -1
  44. package/registry/28.json +1 -1
  45. package/registry/29.json +1 -1
  46. package/registry/3.json +1 -1
  47. package/registry/30.json +1 -1
  48. package/registry/31.json +1 -1
  49. package/registry/32.json +1 -1
  50. package/registry/33.json +1 -1
  51. package/registry/34.json +1 -1
  52. package/registry/35.json +1 -1
  53. package/registry/36.json +1 -1
  54. package/registry/37.json +1 -1
  55. package/registry/4.json +1 -1
  56. package/registry/5.json +1 -1
  57. package/registry/6.json +1 -1
  58. package/registry/7.json +1 -1
  59. package/registry/8.json +1 -1
  60. package/registry/9.json +1 -1
  61. package/registry/ab-segmented-tabs.json +1 -1
  62. package/registry/accordion-blind.json +1 -1
  63. package/registry/accordion-loader.json +1 -1
  64. package/registry/ai-approval-card.json +1 -1
  65. package/registry/ai-code-block.json +1 -1
  66. package/registry/ai-context-meter.json +1 -1
  67. package/registry/ai-fine-tune-card.json +1 -1
  68. package/registry/ai-prompt-bar.json +1 -1
  69. package/registry/ai-sidebar-nav.json +1 -1
  70. package/registry/ai-sources.json +1 -1
  71. package/registry/ai-suggestions.json +1 -1
  72. package/registry/ai-task-list.json +1 -1
  73. package/registry/ai-tool-call.json +1 -1
  74. package/registry/analyzing-image.json +1 -1
  75. package/registry/animated-sidebar.json +1 -1
  76. package/registry/animated-tags.json +1 -1
  77. package/registry/app-icon-load.json +1 -1
  78. package/registry/apple-breathe.json +1 -1
  79. package/registry/apple-equalizer.json +1 -1
  80. package/registry/apple-icon-morph.json +1 -1
  81. package/registry/apple-pulse-dots.json +1 -1
  82. package/registry/apple-scale-pulse.json +1 -1
  83. package/registry/apple-sound-wave.json +1 -1
  84. package/registry/apple-text-reveal.json +1 -1
  85. package/registry/apple-unlock.json +1 -1
  86. package/registry/arc-tracer.json +1 -1
  87. package/registry/balance-bar-chart-card.json +18 -0
  88. package/registry/bar-cascade.json +1 -1
  89. package/registry/bar-sweep.json +1 -1
  90. package/registry/blur-text.json +1 -1
  91. package/registry/blur-up-char.json +1 -1
  92. package/registry/blur-up-word.json +1 -1
  93. package/registry/bobbing-dots.json +1 -1
  94. package/registry/bookmark-corner-peel.json +1 -1
  95. package/registry/bookmark-save-pill.json +1 -1
  96. package/registry/bookmark-toggle.json +1 -1
  97. package/registry/border-trail-loading.json +1 -1
  98. package/registry/bounce-dots.json +1 -1
  99. package/registry/bounce-in-char.json +1 -1
  100. package/registry/bouncing-bars.json +1 -1
  101. package/registry/bouncing-dots.json +1 -1
  102. package/registry/bouncing-lines.json +1 -1
  103. package/registry/bouncing-square.json +1 -1
  104. package/registry/breathe-ring.json +1 -1
  105. package/registry/breathing-glow.json +1 -1
  106. package/registry/breathing-square.json +1 -1
  107. package/registry/btn-1.json +1 -1
  108. package/registry/btn-10.json +1 -1
  109. package/registry/btn-11.json +1 -1
  110. package/registry/btn-12.json +1 -1
  111. package/registry/btn-13.json +1 -1
  112. package/registry/btn-14.json +1 -1
  113. package/registry/btn-15.json +1 -1
  114. package/registry/btn-16.json +1 -1
  115. package/registry/btn-17.json +1 -1
  116. package/registry/btn-18.json +1 -1
  117. package/registry/btn-19.json +1 -1
  118. package/registry/btn-2.json +1 -1
  119. package/registry/btn-20.json +1 -1
  120. package/registry/btn-21.json +1 -1
  121. package/registry/btn-22.json +1 -1
  122. package/registry/btn-23.json +1 -1
  123. package/registry/btn-24.json +1 -1
  124. package/registry/btn-25.json +1 -1
  125. package/registry/btn-26.json +1 -1
  126. package/registry/btn-27.json +1 -1
  127. package/registry/btn-28.json +1 -1
  128. package/registry/btn-29.json +1 -1
  129. package/registry/btn-3.json +1 -1
  130. package/registry/btn-30.json +1 -1
  131. package/registry/btn-31.json +1 -1
  132. package/registry/btn-32.json +1 -1
  133. package/registry/btn-33.json +1 -1
  134. package/registry/btn-34.json +1 -1
  135. package/registry/btn-35.json +1 -1
  136. package/registry/btn-36.json +1 -1
  137. package/registry/btn-37.json +1 -1
  138. package/registry/btn-4.json +1 -1
  139. package/registry/btn-5.json +1 -1
  140. package/registry/btn-6.json +1 -1
  141. package/registry/btn-7.json +1 -1
  142. package/registry/btn-8.json +1 -1
  143. package/registry/btn-9.json +1 -1
  144. package/registry/button-slide-arrow.json +1 -1
  145. package/registry/cacheable-bandwidth-cost.json +1 -1
  146. package/registry/calendar-day-card.json +19 -0
  147. package/registry/card-arc-5.json +1 -1
  148. package/registry/card-arc-7.json +1 -1
  149. package/registry/card-carousel-mono.json +1 -1
  150. package/registry/card-carousel.json +1 -1
  151. package/registry/card-cascade-stagger.json +1 -1
  152. package/registry/card-corner-fan.json +1 -1
  153. package/registry/card-cover-flow-mono.json +1 -1
  154. package/registry/card-cover-flow.json +1 -1
  155. package/registry/card-deck-cascade.json +1 -1
  156. package/registry/card-glance-preview.json +1 -1
  157. package/registry/card-hover.json +1 -1
  158. package/registry/card-linear-spread.json +1 -1
  159. package/registry/card-long-arc-5.json +1 -1
  160. package/registry/card-scatter-spread.json +1 -1
  161. package/registry/card-stack-peel.json +1 -1
  162. package/registry/card-stamp-arc.json +1 -1
  163. package/registry/card-time-machine-mono.json +1 -1
  164. package/registry/card-time-machine.json +1 -1
  165. package/registry/card-wheel-fan.json +1 -1
  166. package/registry/category-select.json +1 -1
  167. package/registry/character-stagger.json +1 -1
  168. package/registry/checkbox-draw.json +1 -1
  169. package/registry/checkmark-draw.json +1 -1
  170. package/registry/circle-toggle.json +1 -1
  171. package/registry/circuit-trace-draw.json +1 -1
  172. package/registry/circular-bars.json +1 -1
  173. package/registry/circular-create-button.json +1 -1
  174. package/registry/classic-spinner.json +1 -1
  175. package/registry/classic-toggle.json +1 -1
  176. package/registry/clock-spinner.json +1 -1
  177. package/registry/comet-spinner.json +1 -1
  178. package/registry/compass-needle-deflect.json +1 -1
  179. package/registry/concentric-pulse.json +1 -1
  180. package/registry/concentric-ring.json +1 -1
  181. package/registry/concentric-squares.json +1 -1
  182. package/registry/context-menu.json +1 -1
  183. package/registry/conveyor-loop.json +1 -1
  184. package/registry/credit-score-barcode-meter.json +1 -1
  185. package/registry/cross-spinner.json +1 -1
  186. package/registry/cube-flip-spring.json +1 -1
  187. package/registry/cursor-trail.json +1 -1
  188. package/registry/dash-ring.json +1 -1
  189. package/registry/dashed-spiral.json +1 -1
  190. package/registry/date-position-selector.json +1 -1
  191. package/registry/day-trading-order-ticket.json +17 -0
  192. package/registry/dia-text-reveal.json +1 -1
  193. package/registry/diamond-grid.json +1 -1
  194. package/registry/diamond-rotate-spring.json +1 -1
  195. package/registry/dislike-toggle.json +1 -1
  196. package/registry/dither-book.json +1 -1
  197. package/registry/domino-cascade.json +1 -1
  198. package/registry/dot-spinner.json +1 -1
  199. package/registry/dots-ring.json +1 -1
  200. package/registry/double-bounce-toggle.json +1 -1
  201. package/registry/double-ring.json +1 -1
  202. package/registry/download-icons.json +1 -1
  203. package/registry/drop-dot.json +1 -1
  204. package/registry/drop-in-char.json +1 -1
  205. package/registry/droplet-squish.json +1 -1
  206. package/registry/dual-arc.json +1 -1
  207. package/registry/dual-magnet-dipole.json +1 -1
  208. package/registry/dynamic-island.json +1 -1
  209. package/registry/elastic-bars.json +1 -1
  210. package/registry/elastic-square.json +1 -1
  211. package/registry/elastic-tag-snap.json +1 -1
  212. package/registry/error-shake.json +1 -1
  213. package/registry/expanding-cross.json +1 -1
  214. package/registry/expanding-icon-tabs.json +1 -1
  215. package/registry/face-id-scan.json +1 -1
  216. package/registry/fade-arc.json +1 -1
  217. package/registry/fade-dots.json +1 -1
  218. package/registry/fade-down.json +1 -1
  219. package/registry/fade-in-char.json +1 -1
  220. package/registry/fade-in-text.json +1 -1
  221. package/registry/fade-in-word.json +1 -1
  222. package/registry/fade-in.json +1 -1
  223. package/registry/fade-up.json +1 -1
  224. package/registry/file-upload-dropzone.json +1 -1
  225. package/registry/filter-tag-pill.json +1 -1
  226. package/registry/flip-square.json +1 -1
  227. package/registry/flip-x-char.json +1 -1
  228. package/registry/flip-y-char.json +1 -1
  229. package/registry/float-char.json +1 -1
  230. package/registry/float-word.json +1 -1
  231. package/registry/floating-diamonds.json +1 -1
  232. package/registry/floating-label-input.json +1 -1
  233. package/registry/fluid-bars.json +1 -1
  234. package/registry/fluid-diamond.json +1 -1
  235. package/registry/fluid-dot-orbit.json +1 -1
  236. package/registry/fluid-skeleton.json +1 -1
  237. package/registry/focus-blur.json +1 -1
  238. package/registry/form-submit-button.json +1 -1
  239. package/registry/french-doors-3d.json +1 -1
  240. package/registry/gear-tooth-step.json +1 -1
  241. package/registry/gears.json +1 -1
  242. package/registry/gelatin-wobble.json +1 -1
  243. package/registry/geometric-iris-shutter.json +1 -1
  244. package/registry/glassmorphic-card.json +1 -1
  245. package/registry/glow-button.json +1 -1
  246. package/registry/glow-text.json +1 -1
  247. package/registry/gooey-popover.json +1 -1
  248. package/registry/gradient-arc.json +1 -1
  249. package/registry/gradient-shimmer.json +1 -1
  250. package/registry/grid-dots.json +1 -1
  251. package/registry/haptic-ring.json +1 -1
  252. package/registry/heartbeat.json +1 -1
  253. package/registry/hex-lattice-draw.json +1 -1
  254. package/registry/hexagon-spinner.json +1 -1
  255. package/registry/hourglass.json +1 -1
  256. package/registry/hover-lift-char.json +1 -1
  257. package/registry/hover-lift-word.json +1 -1
  258. package/registry/hover-link-card.json +1 -1
  259. package/registry/hover-scale-char.json +1 -1
  260. package/registry/hover-scale-word.json +1 -1
  261. package/registry/imessage-chat.json +19 -0
  262. package/registry/inertia-skid-stop.json +1 -1
  263. package/registry/infinity-path.json +1 -1
  264. package/registry/input-focus-glow.json +1 -1
  265. package/registry/inset-action-button.json +1 -1
  266. package/registry/inset-button.json +1 -1
  267. package/registry/intersecting-rings.json +1 -1
  268. package/registry/ios-spinner.json +1 -1
  269. package/registry/kinetic-metronome-tick.json +1 -1
  270. package/registry/kinetic-tension-capsule.json +1 -1
  271. package/registry/light-dark-morph.json +1 -1
  272. package/registry/like-toggle.json +1 -1
  273. package/registry/line-spinner.json +1 -1
  274. package/registry/liquid-dots.json +1 -1
  275. package/registry/liquid-glass-sheet.json +16 -0
  276. package/registry/mac-terminal.json +1 -1
  277. package/registry/magnetic-button.json +1 -1
  278. package/registry/magnetic-disks.json +1 -1
  279. package/registry/magnetic-dots.json +1 -1
  280. package/registry/magnetic-slide-btn.json +1 -1
  281. package/registry/manifest.json +750 -642
  282. package/registry/matrix-grid-loader.json +1 -1
  283. package/registry/minimal-triangle.json +1 -1
  284. package/registry/modular-tile-snap.json +1 -1
  285. package/registry/mono-activity-blue.json +1 -1
  286. package/registry/mono-activity-green.json +1 -1
  287. package/registry/mono-activity-purple.json +1 -1
  288. package/registry/mono-heatmap.json +1 -1
  289. package/registry/mono-rounded-area.json +1 -1
  290. package/registry/mono-rounded-bar.json +1 -1
  291. package/registry/mono-rounded-bubble.json +1 -1
  292. package/registry/mono-rounded-bullet.json +1 -1
  293. package/registry/mono-rounded-candlestick.json +1 -1
  294. package/registry/mono-rounded-composed.json +1 -1
  295. package/registry/mono-rounded-donut.json +1 -1
  296. package/registry/mono-rounded-funnel.json +1 -1
  297. package/registry/mono-rounded-gauge-arc.json +1 -1
  298. package/registry/mono-rounded-heatmap.json +1 -1
  299. package/registry/mono-rounded-kpi.json +1 -1
  300. package/registry/mono-rounded-line.json +1 -1
  301. package/registry/mono-rounded-meter.json +1 -1
  302. package/registry/mono-rounded-polar.json +1 -1
  303. package/registry/mono-rounded-pyramid.json +1 -1
  304. package/registry/mono-rounded-radar.json +1 -1
  305. package/registry/mono-rounded-radial-gauge.json +1 -1
  306. package/registry/mono-rounded-radial-group.json +1 -1
  307. package/registry/mono-rounded-range.json +1 -1
  308. package/registry/mono-rounded-sankey.json +1 -1
  309. package/registry/mono-rounded-scatter.json +1 -1
  310. package/registry/mono-rounded-sparkline.json +1 -1
  311. package/registry/mono-rounded-stacked-bar.json +1 -1
  312. package/registry/mono-rounded-step.json +1 -1
  313. package/registry/mono-rounded-stream.json +1 -1
  314. package/registry/mono-rounded-treemap.json +1 -1
  315. package/registry/mono-rounded-waterfall.json +1 -1
  316. package/registry/mono-stock.json +1 -1
  317. package/registry/morph-action-pill.json +1 -1
  318. package/registry/morph-dot-ring.json +1 -1
  319. package/registry/morph-loader.json +1 -1
  320. package/registry/morph-toggle.json +1 -1
  321. package/registry/morphing-bars.json +1 -1
  322. package/registry/morphing-infinity.json +1 -1
  323. package/registry/morphing-ring.json +1 -1
  324. package/registry/morphing-shape.json +1 -1
  325. package/registry/mouse-follow.json +1 -1
  326. package/registry/multi-select-chips.json +1 -1
  327. package/registry/multi-tab-bar.json +1 -1
  328. package/registry/neon-sign-draw.json +1 -1
  329. package/registry/nested-orbital-gimbal.json +1 -1
  330. package/registry/network-telemetry-matrix.json +1 -1
  331. package/registry/newtons-cradle.json +1 -1
  332. package/registry/noise-decibel-level.json +1 -1
  333. package/registry/obsidian-liquid-wave.json +1 -1
  334. package/registry/offset-rings.json +1 -1
  335. package/registry/orbiting-circles.json +1 -1
  336. package/registry/orbiting-dot.json +1 -1
  337. package/registry/origami-envelope-unfold.json +1 -1
  338. package/registry/origami-shape.json +1 -1
  339. package/registry/otp-input.json +1 -1
  340. package/registry/overview-bar-scrubber-card.json +1 -1
  341. package/registry/page-transition.json +1 -1
  342. package/registry/page-turn-curl.json +1 -1
  343. package/registry/password-toggle.json +1 -1
  344. package/registry/pendulum-bubble-level.json +1 -1
  345. package/registry/pendulum.json +1 -1
  346. package/registry/perspective-flip-stage.json +1 -1
  347. package/registry/perspective-flip.json +1 -1
  348. package/registry/perspective-layout-switcher.json +1 -1
  349. package/registry/physics-dock.json +1 -1
  350. package/registry/pill-tabs.json +1 -1
  351. package/registry/plus-minus-toggle.json +1 -1
  352. package/registry/presets.json +1 -1
  353. package/registry/prism-block-stack.json +1 -1
  354. package/registry/progress-indicator-piano.json +1 -1
  355. package/registry/progress-indicator.json +1 -1
  356. package/registry/progress-stepper.json +1 -1
  357. package/registry/pulsating-dots.json +1 -1
  358. package/registry/pulse-char.json +1 -1
  359. package/registry/pulse-dot.json +1 -1
  360. package/registry/pulse-dots.json +1 -1
  361. package/registry/pulse-square.json +1 -1
  362. package/registry/pulse-word.json +1 -1
  363. package/registry/pulse.json +1 -1
  364. package/registry/pumping-heart.json +1 -1
  365. package/registry/pyramid-block-build.json +1 -1
  366. package/registry/radar-sweep.json +1 -1
  367. package/registry/radial-iris-mask.json +1 -1
  368. package/registry/radial-spinner.json +1 -1
  369. package/registry/radio-scale.json +1 -1
  370. package/registry/range-slider.json +1 -1
  371. package/registry/receipt-tape-print.json +1 -1
  372. package/registry/rectangle-toggle.json +1 -1
  373. package/registry/repost-toggle.json +1 -1
  374. package/registry/reveal-text.json +1 -1
  375. package/registry/ribbon-banner-slide.json +1 -1
  376. package/registry/ring-sweep.json +1 -1
  377. package/registry/ripple-effect.json +1 -1
  378. package/registry/rise-up-word.json +1 -1
  379. package/registry/roller-blind-drop.json +1 -1
  380. package/registry/rolling-tumble.json +1 -1
  381. package/registry/rotate-in-char.json +1 -1
  382. package/registry/rotating-cross.json +1 -1
  383. package/registry/rotating-louvers.json +1 -1
  384. package/registry/rotating-triangle.json +1 -1
  385. package/registry/rudder-issue-board.json +1 -1
  386. package/registry/sales-analytics-dual-bars.json +1 -1
  387. package/registry/sales-overview-radial-dashboard.json +1 -1
  388. package/registry/sales-target-segmented-arc.json +1 -1
  389. package/registry/scale-in-char.json +1 -1
  390. package/registry/scale-in-text.json +1 -1
  391. package/registry/scale-in-word.json +1 -1
  392. package/registry/scale-in.json +1 -1
  393. package/registry/scramble-text.json +1 -1
  394. package/registry/scroll-canvas-unroll.json +1 -1
  395. package/registry/scroll-reveal.json +1 -1
  396. package/registry/search-expand.json +1 -1
  397. package/registry/segmented-arc-meter.json +1 -1
  398. package/registry/segmented-link-stretch.json +1 -1
  399. package/registry/segmented-step-bar.json +1 -1
  400. package/registry/segmented-stepper-dots.json +1 -1
  401. package/registry/select-dropdown.json +1 -1
  402. package/registry/server-performance-step-bars.json +1 -1
  403. package/registry/shape-shift-grid.json +1 -1
  404. package/registry/shimmer-line.json +1 -1
  405. package/registry/shimmer-text.json +1 -1
  406. package/registry/shutter-slide.json +1 -1
  407. package/registry/shutter-step-slices.json +1 -1
  408. package/registry/siri-wave.json +1 -1
  409. package/registry/skeleton-loader.json +1 -1
  410. package/registry/skeleton.json +1 -1
  411. package/registry/skew-x-char.json +1 -1
  412. package/registry/slide-down-char.json +1 -1
  413. package/registry/slide-down-word.json +1 -1
  414. package/registry/slide-left-char.json +1 -1
  415. package/registry/slide-left.json +1 -1
  416. package/registry/slide-right-char.json +1 -1
  417. package/registry/slide-right.json +1 -1
  418. package/registry/slide-up-char.json +1 -1
  419. package/registry/slide-up-text.json +1 -1
  420. package/registry/slide-up-word.json +1 -1
  421. package/registry/sliding-bars.json +1 -1
  422. package/registry/slinky-coil.json +1 -1
  423. package/registry/smart-card-dispenser.json +1 -1
  424. package/registry/smooth-dot-shift.json +1 -1
  425. package/registry/smooth-ring.json +1 -1
  426. package/registry/smooth-rounded-square.json +1 -1
  427. package/registry/solid-switch.json +1 -1
  428. package/registry/spatial-door-portal.json +1 -1
  429. package/registry/spinning-squares.json +1 -1
  430. package/registry/spiral-spinner.json +1 -1
  431. package/registry/split-gate-reveal.json +1 -1
  432. package/registry/spotlight.json +1 -1
  433. package/registry/spring-bars.json +1 -1
  434. package/registry/spring-dot-matrix.json +1 -1
  435. package/registry/spring-hexagon.json +1 -1
  436. package/registry/spring-ring-expand.json +1 -1
  437. package/registry/spring-text-pop.json +1 -1
  438. package/registry/spring-text.json +1 -1
  439. package/registry/square-accordion.json +1 -1
  440. package/registry/square-grid.json +1 -1
  441. package/registry/square-snake.json +1 -1
  442. package/registry/square-spinner.json +1 -1
  443. package/registry/squash-sphere.json +1 -1
  444. package/registry/stacked-bar-pulse.json +1 -1
  445. package/registry/stagger-text.json +1 -1
  446. package/registry/staggered-glass-curtain.json +1 -1
  447. package/registry/sticky-note-peel.json +1 -1
  448. package/registry/sticky-reveal.json +1 -1
  449. package/registry/stretch-x-char.json +1 -1
  450. package/registry/stretch-y-char.json +1 -1
  451. package/registry/stroke-waveform.json +1 -1
  452. package/registry/submenu-flyout.json +1 -1
  453. package/registry/success-check.json +1 -1
  454. package/registry/sudden-brake.json +1 -1
  455. package/registry/swapping-dots.json +1 -1
  456. package/registry/swing-word.json +1 -1
  457. package/registry/swirling-spinner.json +1 -1
  458. package/registry/symmetric-wave.json +1 -1
  459. package/registry/terminal-loader.json +1 -1
  460. package/registry/text-blink.json +1 -1
  461. package/registry/text-dots.json +1 -1
  462. package/registry/text-morph.json +1 -1
  463. package/registry/text-reveal.json +1 -1
  464. package/registry/text-shimmer-wave.json +1 -1
  465. package/registry/text-shimmer.json +1 -1
  466. package/registry/textarea-auto-grow.json +1 -1
  467. package/registry/theme-toggle.json +1 -1
  468. package/registry/tilt-card.json +1 -1
  469. package/registry/timer-preparation-segmented.json +1 -1
  470. package/registry/tracking-in-text.json +1 -1
  471. package/registry/tracking-out-text.json +1 -1
  472. package/registry/trailing-dots.json +1 -1
  473. package/registry/triple-dot-spinner.json +1 -1
  474. package/registry/twin-orbit.json +1 -1
  475. package/registry/typewriter-text.json +1 -1
  476. package/registry/typing-indicator.json +1 -1
  477. package/registry/typing.json +1 -1
  478. package/registry/use-mouse-position.json +1 -1
  479. package/registry/use-reduced-motion.json +1 -1
  480. package/registry/use-scroll-progress.json +1 -1
  481. package/registry/use-stagger.json +1 -1
  482. package/registry/use-web-haptics.json +1 -1
  483. package/registry/users-growth-pill-progress.json +1 -1
  484. package/registry/utils.json +1 -1
  485. package/registry/vertical-wheel-counter.json +1 -1
  486. package/registry/views-hourly-wave-chart.json +1 -1
  487. package/registry/voice-assistant-card.json +19 -0
  488. package/registry/wandering-cube.json +1 -1
  489. package/registry/wandering-eyes.json +1 -1
  490. package/registry/watch-spinner.json +1 -1
  491. package/registry/wave-dots.json +1 -1
  492. package/registry/wave-physics-loader.json +1 -1
  493. package/registry/wave-reveal.json +1 -1
  494. package/registry/waveform-loader.json +1 -1
  495. package/registry/word-reveal.json +1 -1
  496. package/registry/zig-zag-pulse.json +1 -1
  497. package/registry/zoom-in-text.json +1 -1
  498. package/registry/zoom-in.json +1 -1
  499. package/registry/zoom-out-text.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "conveyor-loop",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "conveyor-loop.tsx",
6
6
  "sourcePath": "ui/loading/conveyor-loop.tsx",
7
7
  "registryFile": "conveyor-loop.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "credit-score-barcode-meter",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "credit-score-barcode-meter.tsx",
6
6
  "registryFile": "credit-score-barcode-meter.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "cross-spinner",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "cross-spinner.tsx",
6
6
  "sourcePath": "ui/loading/cross-spinner.tsx",
7
7
  "registryFile": "cross-spinner.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "cube-flip-spring",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "cube-flip-spring.tsx",
6
6
  "sourcePath": "ui/loading/cube-flip-spring.tsx",
7
7
  "registryFile": "cube-flip-spring.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "cursor-trail",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "cursor-trail.tsx",
6
6
  "sourcePath": "ui/cursor/cursor-trail.tsx",
7
7
  "registryFile": "cursor-trail.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dash-ring",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dash-ring.tsx",
6
6
  "sourcePath": "ui/loading/dash-ring.tsx",
7
7
  "registryFile": "dash-ring.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dashed-spiral",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dashed-spiral.tsx",
6
6
  "sourcePath": "ui/loading/dashed-spiral.tsx",
7
7
  "registryFile": "dashed-spiral.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "date-position-selector",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "date-position-selector.tsx",
6
6
  "sourcePath": "components/css-animations/yui-components/YuiUiKit1.tsx",
7
7
  "registryFile": "date-position-selector.json",
@@ -0,0 +1,17 @@
1
+ {
2
+ "id": "day-trading-order-ticket",
3
+ "tier": "free",
4
+ "version": "0.4.8",
5
+ "file": "day-trading-order-ticket.tsx",
6
+ "sourcePath": "ui/cards/day-trading-order-ticket.tsx",
7
+ "registryFile": "day-trading-order-ticket.json",
8
+ "exports": [
9
+ "DayTradingOrderDraft",
10
+ "DayTradingOrderTicket",
11
+ "DayTradingOrderTicketProps"
12
+ ],
13
+ "dependencies": [],
14
+ "license": "MIT",
15
+ "previewMode": "client",
16
+ "content": "\"use client\";\n\"use client\";\n\n/** Adapted from the supplied Transitions.dev order-ticket reference. Local preview only; no brokerage connection. */\nimport * as React from \"react\";\n\nexport interface DayTradingOrderDraft {\n symbol: string;\n side: \"buy\" | \"sell\";\n type: \"market\" | \"limit\" | \"stop\" | \"trail\";\n shares: number;\n price: number;\n estimatedTotal: number;\n /** Trailing-stop distance; price remains the quote used for the estimate. */\n trailAmount?: number;\n}\nexport interface DayTradingOrderTicketProps {\n symbol?: string;\n company?: string;\n quote?: number;\n change?: string;\n initialShares?: number;\n onSubmit?: (draft: DayTradingOrderDraft) => void | Promise<void>;\n theme?: \"light\" | \"dark\";\n className?: string;\n style?: React.CSSProperties;\n}\nconst types = [\n { id: \"market\", label: \"Market\", priceLabel: \"\", hint: \"\" },\n { id: \"limit\", label: \"Limit\", priceLabel: \"Limit price\", hint: \"a limit price\" },\n { id: \"stop\", label: \"Stop market\", priceLabel: \"Stop price\", hint: \"a stop price\" },\n { id: \"trail\", label: \"Trailing stop\", priceLabel: \"Trail amount\", hint: \"a trail amount\" },\n] as const;\nconst money = (value: number) => new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" }).format(value);\n\nfunction SwapText({ text }: { text: string }) {\n const ref = React.useRef<HTMLSpanElement>(null);\n const [shown, setShown] = React.useState(text);\n const entering = React.useRef(false);\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n if (text === shown) { el.classList.remove(\"mot-is-exit\"); return; }\n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) { setShown(text); return; }\n el.classList.remove(\"mot-is-enter-start\");\n el.classList.add(\"mot-is-exit\");\n const timer = window.setTimeout(() => { entering.current = true; setShown(text); }, 150);\n return () => window.clearTimeout(timer);\n }, [text, shown]);\n React.useLayoutEffect(() => {\n if (!entering.current || !ref.current) return;\n entering.current = false;\n ref.current.classList.remove(\"mot-is-exit\");\n ref.current.classList.add(\"mot-is-enter-start\");\n void ref.current.offsetHeight;\n ref.current.classList.remove(\"mot-is-enter-start\");\n }, [shown]);\n return <span ref={ref} className=\"mot-t-text-swap\">{shown}</span>;\n}\nfunction PopNumber({ value }: { value: string }) {\n const ref = React.useRef<HTMLSpanElement>(null);\n const previous = React.useRef(value);\n const samePrefix = React.useRef(value.length);\n if (previous.current !== value) {\n let same = 0;\n while (same < previous.current.length && same < value.length && previous.current[same] === value[same]) same++;\n samePrefix.current = same;\n }\n const same = samePrefix.current;\n React.useLayoutEffect(() => {\n if (previous.current === value || !ref.current) return;\n previous.current = value;\n ref.current.classList.remove(\"mot-is-animating\");\n void ref.current.offsetHeight;\n ref.current.classList.add(\"mot-is-animating\");\n }, [value]);\n return <span ref={ref} className=\"mot-t-digit-group\" aria-hidden=\"true\">{value.split(\"\").map((character, index) => <span key={index} className=\"mot-t-digit\" data-same={index < same ? \"\" : undefined} data-stagger={index === value.length - 2 ? \"1\" : index === value.length - 1 ? \"2\" : undefined}>{character}</span>)}</span>;\n}\nfunction CheckMark({ size = 16 }: { size?: number }) {\n return <svg className=\"mot-hi\" width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={size === 24 ? 2 : 3} aria-hidden=\"true\"><path d=\"M5.25 12.7033 9.40385 17.37 18.75 6.87\" /></svg>;\n}\nfunction useFieldError() {\n const [error, setError] = React.useState(false);\n const [shake, setShake] = React.useState(0);\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const box = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => () => { if (timer.current) clearTimeout(timer.current); }, []);\n React.useLayoutEffect(() => {\n if (!error || !box.current) return;\n box.current.classList.remove(\"mot-is-shaking\");\n void box.current.offsetWidth;\n box.current.classList.add(\"mot-is-shaking\");\n const shakeTimer = setTimeout(() => box.current?.classList.remove(\"mot-is-shaking\"), 300);\n return () => clearTimeout(shakeTimer);\n }, [error, shake]);\n const clear = () => { if (timer.current) clearTimeout(timer.current); setError(false); };\n const show = () => {\n if (timer.current) clearTimeout(timer.current);\n setError(true); setShake(value => value + 1);\n timer.current = setTimeout(() => setError(false), 3280);\n };\n return { error, box, clear, show };\n}\n\nexport function DayTradingOrderTicket({ symbol = \"NOVA\", company = \"Novaline Robotics\", quote = 184.20, change = \"+1.24%\", initialShares = 10, onSubmit, theme = \"light\", className = \"\", style }: DayTradingOrderTicketProps = {}) {\n const [side, setSide] = React.useState<DayTradingOrderDraft[\"side\"]>(\"buy\");\n const [type, setType] = React.useState<DayTradingOrderDraft[\"type\"]>(\"limit\");\n const [shares, setShares] = React.useState(String(Math.min(9999, Math.max(0, Math.trunc(Number.isFinite(initialShares) ? initialShares : 10)))));\n const [price, setPrice] = React.useState(quote.toFixed(2));\n const [menuOpen, setMenuOpen] = React.useState(false);\n const [menuClosing, setMenuClosing] = React.useState(false);\n const [busy, setBusy] = React.useState(false);\n const [done, setDone] = React.useState<DayTradingOrderDraft | null>(null);\n const [submitError, setSubmitError] = React.useState(\"\");\n const sharesError = useFieldError();\n const priceError = useFieldError();\n const guard = React.useRef(false);\n const alive = React.useRef(true);\n const placedTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const menuTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const menu = React.useRef<HTMLDivElement>(null);\n const typeButton = React.useRef<HTMLButtonElement>(null);\n const heading = React.useRef<HTMLHeadingElement>(null);\n const shareInput = React.useRef<HTMLInputElement>(null);\n const priceInput = React.useRef<HTMLInputElement>(null);\n const newOrderFocus = React.useRef(false);\n const id = React.useId();\n const typeInfo = types.find(item => item.id === type)!;\n const count = parseInt(shares, 10) || 0;\n const numericPrice = parseFloat(price);\n const effectivePrice = type === \"limit\" || type === \"stop\" ? numericPrice : quote;\n const total = count > 0 && Number.isFinite(effectivePrice) && effectivePrice > 0 ? count * effectivePrice : 0;\n const totalText = money(total);\n const description = (draft: DayTradingOrderDraft) => draft.type === \"market\" ? \"at market\" : draft.type === \"limit\" ? `at ${money(draft.price)}` : draft.type === \"stop\" ? `stop ${money(draft.price)}` : `trailing ${money(draft.trailAmount ?? 0)}`;\n React.useEffect(() => {\n alive.current = true;\n return () => { alive.current = false; if (placedTimer.current) clearTimeout(placedTimer.current); if (menuTimer.current) clearTimeout(menuTimer.current); };\n }, []);\n React.useEffect(() => {\n if (done) heading.current?.focus();\n else if (newOrderFocus.current) { newOrderFocus.current = false; (type === \"market\" ? typeButton : shareInput).current?.focus(); }\n }, [done, type]);\n function closeMenu(focus = false) {\n setMenuOpen(false); setMenuClosing(true);\n if (menuTimer.current) clearTimeout(menuTimer.current);\n menuTimer.current = setTimeout(() => setMenuClosing(false), 150);\n if (focus) typeButton.current?.focus();\n }\n React.useEffect(() => {\n if (!menuOpen) return;\n const onDown = (event: PointerEvent) => { if (!menu.current?.contains(event.target as Node)) closeMenu(); };\n const onKey = (event: KeyboardEvent) => { if (event.key === \"Escape\") { event.preventDefault(); closeMenu(true); } };\n document.addEventListener(\"pointerdown\", onDown); document.addEventListener(\"keydown\", onKey);\n return () => { document.removeEventListener(\"pointerdown\", onDown); document.removeEventListener(\"keydown\", onKey); };\n }, [menuOpen]);\n function openMenu(focusIndex?: number) {\n if (menuTimer.current) clearTimeout(menuTimer.current);\n setMenuClosing(false); setMenuOpen(true);\n if (focusIndex !== undefined) requestAnimationFrame(() => menu.current?.querySelectorAll<HTMLButtonElement>('[role=\"menuitemradio\"]')[focusIndex]?.focus());\n }\n function selectType(value: DayTradingOrderDraft[\"type\"]) {\n if ((value === \"trail\") !== (type === \"trail\")) setPrice(value === \"trail\" ? \"1.50\" : quote.toFixed(2));\n priceError.clear(); sharesError.clear(); setSubmitError(\"\"); setType(value); closeMenu(true);\n }\n const updateShares = (value: string) => { setShares(value); sharesError.clear(); setSubmitError(\"\"); };\n async function submit(event: React.FormEvent) {\n event.preventDefault();\n if (guard.current || done) return;\n const invalidShares = count < 1 || count > 9999;\n const invalidPrice = type !== \"market\" && !(Number.isFinite(numericPrice) && numericPrice > 0);\n if (invalidShares) sharesError.show();\n if (invalidPrice) priceError.show();\n if (invalidShares || invalidPrice) { if (type === \"market\") typeButton.current?.focus(); else (invalidShares ? shareInput : priceInput).current?.focus(); return; }\n if (!Number.isFinite(effectivePrice) || effectivePrice <= 0) { setSubmitError(\"The quote must be greater than zero.\"); return; }\n const draft: DayTradingOrderDraft = { symbol, side, type, shares: count, price: effectivePrice, estimatedTotal: total, ...(type === \"trail\" ? { trailAmount: numericPrice } : {}) };\n guard.current = true; setBusy(true); setSubmitError(\"\"); closeMenu();\n try {\n await Promise.all([onSubmit?.(draft), new Promise<void>(resolve => { placedTimer.current = setTimeout(() => { placedTimer.current = null; resolve(); }, 1800); })]);\n if (alive.current) setDone(draft);\n } catch {\n if (placedTimer.current) { clearTimeout(placedTimer.current); placedTimer.current = null; }\n if (alive.current) setSubmitError(\"The order could not be submitted. Please try again.\");\n } finally { guard.current = false; if (alive.current) setBusy(false); }\n }\n return <section className={`mova-order ${className}`} data-theme={theme} style={style} aria-label=\"Trading order ticket\">\n <style>{css}</style>\n {!onSubmit && <p className=\"mot-sr-only\">Interactive preview · no real order</p>}\n <div className=\"mot-t-page-slide\" data-page={done ? 2 : 1}>\n <form className=\"mot-t-page mot-page-form\" data-page-id=\"1\" onSubmit={event => void submit(event)} noValidate inert={!!done} aria-hidden={done ? true : undefined}>\n <header className=\"mot-head\"><div className=\"mot-head-main\"><h2 className=\"mot-ticker\">{symbol}</h2><p className=\"mot-company\">{company}</p></div><div className=\"mot-quote\"><span className=\"mot-quote-price\">{money(quote)}</span><span className=\"mot-badge\" data-negative={change.trim().startsWith(\"-\")}>{change}</span></div></header>\n <div className=\"mot-t-tabs\" role=\"tablist\" aria-label=\"Order side\"><span className=\"mot-t-tabs-pill\" aria-hidden=\"true\" style={{ transform: `translateX(${side === \"buy\" ? \"3px\" : \"calc(100% + 6px)\"})` }} />{([\"buy\", \"sell\"] as const).map((value, index) => <button key={value} type=\"button\" role=\"tab\" className=\"mot-t-tab\" aria-selected={value === side} tabIndex={value === side ? 0 : -1} disabled={busy} onClick={() => setSide(value)} onKeyDown={event => { if ([\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) { event.preventDefault(); const next = event.key === \"Home\" ? \"buy\" : event.key === \"End\" ? \"sell\" : index === 0 ? \"sell\" : \"buy\"; setSide(next); (event.currentTarget.parentElement?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]')[next === \"buy\" ? 0 : 1])?.focus(); } }}>{value === \"buy\" ? \"Buy\" : \"Sell\"}</button>)}</div>\n <div className=\"mot-fields\">\n <div className=\"mot-field\"><span className=\"mot-field-label\" id={`${id}-type-label`}>Order type</span><div className=\"mot-type-anchor\" ref={menu}>\n <button type=\"button\" ref={typeButton} className=\"mot-box mot-type-btn mot-t-input\" aria-haspopup=\"menu\" aria-expanded={menuOpen} aria-controls={`${id}-types`} aria-labelledby={`${id}-type-label ${id}-type-value`} disabled={busy} onClick={() => menuOpen ? closeMenu() : openMenu()} onKeyDown={event => { if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") { event.preventDefault(); openMenu(event.key === \"ArrowDown\" ? 0 : types.length - 1); } }}><span className=\"mot-type-btn-label\" id={`${id}-type-value`}><SwapText text={typeInfo.label} /></span><svg className=\"mot-hi\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M4.46967 6.46967C4.76256 6.17678 5.23744 6.17678 5.53033 6.46967L8 8.93934L10.4697 6.46967C10.7626 6.17678 11.2374 6.17678 11.5303 6.46967C11.8232 6.76256 11.8232 7.23744 11.5303 7.53033L8.53033 10.5303C8.23744 10.8232 7.76256 10.8232 7.46967 10.5303L4.46967 7.53033C4.17678 7.23744 4.17678 6.76256 4.46967 6.46967Z\" /></svg></button>\n <div id={`${id}-types`} className={`mot-t-dropdown${menuOpen ? \" mot-is-open\" : menuClosing ? \" mot-is-closing\" : \"\"}`} role=\"menu\" aria-label=\"Order type\" aria-hidden={!menuOpen} inert={!menuOpen} onKeyDown={event => { const items = Array.from(event.currentTarget.querySelectorAll<HTMLButtonElement>('[role=\"menuitemradio\"]')); const current = items.indexOf(document.activeElement as HTMLButtonElement); const next = event.key === \"ArrowDown\" ? (current + 1) % items.length : event.key === \"ArrowUp\" ? (current + items.length - 1) % items.length : event.key === \"Home\" ? 0 : event.key === \"End\" ? items.length - 1 : -1; if (next >= 0) { event.preventDefault(); items[next]?.focus(); } if (event.key === \"Tab\") closeMenu(); }}>\n {types.map(item => <button key={item.id} type=\"button\" role=\"menuitemradio\" aria-checked={item.id === type} className=\"mot-menu-item\" tabIndex={menuOpen ? 0 : -1} onClick={() => selectType(item.id)}><span>{item.label}</span>{item.id === type && <CheckMark />}</button>)}\n </div>\n </div></div>\n <div className=\"mot-t-acc\" data-open={type !== \"market\"} aria-hidden={type === \"market\"} inert={type === \"market\"}><div className=\"mot-t-acc-panel\"><div className=\"mot-t-acc-panel-inner\"><div className=\"mot-t-acc-body\">\n <div className={`mot-field mot-t-input-wrap${sharesError.error ? \" mot-is-error\" : \"\"}`}><label className=\"mot-field-label\" htmlFor={`${id}-shares`}>Shares</label><div className={`mot-box mot-t-input${sharesError.error ? \" mot-is-error\" : \"\"}`} ref={sharesError.box}><button type=\"button\" className=\"mot-step\" aria-label=\"One share less\" disabled={busy} onClick={() => updateShares(String(Math.max(0, count - 1)))}><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"2.25\" aria-hidden=\"true\"><path d=\"M5 12h14\" /></svg></button><input ref={shareInput} id={`${id}-shares`} inputMode=\"numeric\" value={shares} disabled={busy} aria-invalid={sharesError.error} aria-describedby={sharesError.error ? `${id}-shares-error` : undefined} onChange={event => updateShares(event.target.value.replace(/\\D/g, \"\").slice(0, 4))} /><button type=\"button\" className=\"mot-step\" aria-label=\"One share more\" disabled={busy} onClick={() => updateShares(String(Math.min(9999, count + 1)))}><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"2.25\" aria-hidden=\"true\"><path d=\"M12 4.5v15m7.5-7.5h-15\" /></svg></button></div><p className=\"mot-t-error-msg\" id={`${id}-shares-error`} role={sharesError.error ? \"alert\" : undefined}>Enter at least 1 share</p></div>\n <div className={`mot-field mot-t-input-wrap${priceError.error ? \" mot-is-error\" : \"\"}`}><label className=\"mot-field-label\" htmlFor={`${id}-price`}><SwapText text={typeInfo.priceLabel || \"Limit price\"} /></label><div className={`mot-box mot-price mot-t-input${priceError.error ? \" mot-is-error\" : \"\"}`} ref={priceError.box}><span className=\"mot-prefix\" aria-hidden=\"true\">$</span><input ref={priceInput} id={`${id}-price`} tabIndex={type === \"market\" ? -1 : 0} inputMode=\"decimal\" value={price} disabled={busy} aria-invalid={priceError.error} aria-describedby={priceError.error ? `${id}-price-error` : undefined} onChange={event => { setPrice(event.target.value.replace(/[^0-9.]/g, \"\").replace(/(\\..*)\\./g, \"$1\").slice(0, 8)); priceError.clear(); setSubmitError(\"\"); }} /></div><p className=\"mot-t-error-msg\" id={`${id}-price-error`} role={priceError.error ? \"alert\" : undefined}>Enter {typeInfo.hint || \"a limit price\"}</p></div>\n </div></div></div></div>\n </div>\n <div className=\"mot-divider\" aria-hidden=\"true\" />\n <div className=\"mot-total\"><span className=\"mot-total-label\">Est. total</span><span className=\"mot-total-value\"><PopNumber value={totalText} /><span className=\"mot-sr-only\" aria-live=\"polite\">{totalText}</span></span></div>\n {submitError && <p className=\"mot-submit-error\" role=\"alert\">{submitError}</p>}\n <button type=\"submit\" className={`mot-submit${busy ? \" mot-is-loading\" : \"\"}`} aria-live=\"polite\" aria-busy={busy} disabled={busy}><span className=\"mot-btn-loader\"><span className=\"mot-t-matrix\" aria-hidden=\"true\">{Array.from({ length: 16 }, (_, index) => <i key={index} className={[0, 3, 12, 15].includes(index) ? \"mot-is-gap\" : undefined} style={{ \"--d\": (index % 4) * 120 } as React.CSSProperties} />)}</span></span><SwapText text={busy ? \"Placing order\" : side === \"buy\" ? \"Buy\" : \"Sell\"} /></button>\n </form>\n <section className=\"mot-t-page mot-page-done\" data-page-id=\"2\" aria-hidden={!done} inert={!done}>\n <div className=\"mot-done-head\"><span className=\"mot-done-icon\"><CheckMark size={24} /></span><h2 className=\"mot-done-title\" ref={heading} tabIndex={-1}>{onSubmit ? \"Order submitted\" : \"Order preview ready\"}</h2><p className=\"mot-done-meta\">{done ? `${done.side === \"buy\" ? \"Buy\" : \"Sell\"} ${done.shares} ${done.symbol} ${description(done)}` : `Buy ${count} ${symbol} at ${money(quote)}`}</p></div>\n <div className=\"mot-divider\" aria-hidden=\"true\" /><div className=\"mot-total\"><span className=\"mot-total-label\">Est. total</span><span className=\"mot-total-value\">{money(done?.estimatedTotal ?? total)}</span></div>\n <button type=\"button\" className=\"mot-again\" tabIndex={done ? 0 : -1} onClick={() => { newOrderFocus.current = true; setDone(null); }}>New order</button>\n </section>\n </div>\n </section>;\n}\n\nconst css = `\n.mova-order{--stage-fg:#0d0d0d;--stage-muted:#6c6c6c;--stage-border:rgba(0,0,0,.08);--stage-surface:#fff;--stage-accent:#17181c;--stage-on-accent:#fff;color-scheme:light;font:400 13px/20px \"Inter Variable\",Inter,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;font-optical-sizing:auto;font-feature-settings:\"liga\" 1,\"calt\" 1;letter-spacing:0;-webkit-font-smoothing:antialiased}\n.mova-order[data-theme=dark]{--stage-fg:#f2f2f2;--stage-muted:rgba(202,202,202,.7);--stage-border:rgba(255,255,255,.08);--stage-surface:#1d1d1d;--stage-accent:#fff;--stage-on-accent:#0d0d0d;color-scheme:dark}\n.mova-order *{box-sizing:border-box}\n.mova-order {\n --page-slide-dur: 250ms;\n --page-fade-dur: 250ms;\n --page-slide-distance: 8px;\n --page-blur: 3px;\n --page-stagger: 0ms;\n --page-exit-enabled: 1;\n --page-slide-ease: cubic-bezier(0.22, 1, 0.36, 1);\n --page-fade-ease: cubic-bezier(0.22, 1, 0.36, 1);\n --matrix-cycle: 1200ms;\n --matrix-base: color-mix(in srgb, var(--stage-on-accent) 35%, transparent);\n --matrix-active: var(--stage-on-accent);\n --matrix-ease: ease-in-out;\n --done-pop-dur: 500ms;\n --done-pop-scale: 0.6;\n --shake-distance: 6px;\n --shake-overshoot: 4px;\n --shake-dur-a: 80ms;\n --shake-dur-b: 60ms;\n --shake-ease: cubic-bezier(0.22, 1, 0.36, 1);\n --revert-hold: 3000ms;\n --revert-dur: 280ms;\n --digit-dur: 500ms;\n --digit-distance: 8px;\n --digit-stagger: 70ms;\n --digit-blur: 2px;\n --digit-ease: cubic-bezier(0.34, 1.45, 0.64, 1);\n --digit-dir-x: 0;\n --digit-dir-y: 1;\n --tabs-dur: 250ms;\n --tabs-ease: cubic-bezier(0.22, 1, 0.36, 1);\n --tabs-text-muted: var(--stage-muted);\n --tabs-text-active: var(--stage-fg);\n --tabs-bar-bg: var(--chip);\n --tabs-pill-bg: var(--stage-surface);\n --text-swap-dur: 150ms;\n --text-swap-translate-y: 4px;\n --text-swap-blur: 2px;\n --text-swap-ease: ease-in-out;\n --press-scale: 0.99;\n --press-dur: 150ms;\n --ease-smooth-out: cubic-bezier(0.22, 1, 0.36, 1);\n --duration-quick: 150ms;\n --ease-out: ease-out;\n\n --dropdown-open-dur: 250ms;\n --dropdown-close-dur: 150ms;\n --dropdown-pre-scale: 0.97;\n --dropdown-closing-scale: 0.99;\n --dropdown-ease: cubic-bezier(0.22, 1, 0.36, 1);\n --acc-expand: 250ms;\n --acc-collapse: 250ms;\n --acc-chevron: 250ms;\n --acc-ease: cubic-bezier(0.22, 1, 0.36, 1);\n --menu-shadow: 0 4px 42px rgba(0,0,0,.06), 0 2px 6px rgba(0,0,0,.05), 0 0 0 1px rgba(0,0,0,.06);\n\n --chip: rgba(0,0,0,.04);\n --chip-hover: rgba(0,0,0,.06);\n --chip-press: rgba(0,0,0,.08);\n --ring-soft: rgba(0,0,0,.06);\n --err: #EC4A4A;\n --divider: color-mix(in srgb, var(--stage-border) 49%, transparent);\n --badge-fill: #E7F9F3;\n --badge-ink: #216E55;\n --pill-shadow: 0 1px 2px rgba(0,0,0,.06), 0 0 0 1px rgba(0,0,0,.04);\n --cta-shadow: 0 1px 2px 0 rgba(0,0,0,.2);\n --cta-hover: rgba(255,255,255,.06);\n --card-shadow: 0 0 0 1px rgba(0,0,0,.04), 0 8px 32px -4px rgba(0,0,0,.06), 0 1px 3px 0 rgba(0,0,0,.04);\n}\n.mova-order[data-theme=\"dark\"] {\n --chip: rgba(255,255,255,.07);\n --chip-hover: rgba(255,255,255,.10);\n --chip-press: rgba(255,255,255,.08);\n --ring-soft: rgba(255,255,255,.10);\n --err: #FF6B6B;\n --badge-fill: rgba(33,110,85,.28);\n --badge-ink: #7FDDB8;\n --tabs-pill-bg: rgba(255,255,255,.10);\n --pill-shadow: 0 1px 2px rgba(0,0,0,.24), inset 0 1px 0 rgba(255,255,255,.06);\n --cta-shadow: 0 1px 2px 0 rgba(0,0,0,.4);\n --cta-hover: rgba(0,0,0,.06);\n --card-shadow: 0 0 0 1px rgba(255,255,255,.06), 0 8px 32px -4px rgba(0,0,0,.3), 0 1px 3px 0 rgba(0,0,0,.2);\n}\n\n.mova-order {\n width: 300px;\n max-width: 100%;\n box-sizing: border-box;\n padding: 24px;\n border-radius: 24px;\n background: var(--stage-surface);\n box-shadow: var(--card-shadow);\n color: var(--stage-fg);\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n:where(.mova-order) :is(button, input) { font: inherit; color: inherit; }\n:where(.mova-order) button { padding: 0; border: 0; background: none; cursor: pointer; }\n:where(.mova-order) p { margin: 0; }\n.mova-order :focus-visible:not(input) {\n outline: none;\n box-shadow: 0 0 0 2px var(--stage-surface), 0 0 0 4px var(--stage-accent);\n}\n\n.mot-head { display: flex; align-items: flex-start; gap: 12px; }\n.mot-head-main { flex: 1; min-width: 0; }\n.mot-ticker { font-size: 16px; line-height: 22px; font-weight: 500; margin: 0; }\n.mot-company { font-size: 12px; line-height: 16px; color: var(--stage-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.mot-quote { flex: none; display: flex; flex-direction: column; align-items: flex-end; gap: 2px; }\n.mot-quote-price { font-size: 13px; line-height: 20px; font-variant-numeric: tabular-nums; }\n.mot-badge {\n display: inline-flex; align-items: center;\n height: 18px; padding: 0 6px; border-radius: 50px;\n font-size: 11px; line-height: 16px; font-weight: 500;\n background: var(--badge-fill); color: var(--badge-ink);\n box-shadow: 0 1px 3px rgba(0,0,0,.04), inset 0 0 0 1px color-mix(in srgb, var(--badge-ink) 14%, transparent), inset 0 -1px 0 0 color-mix(in srgb, var(--badge-ink) 10%, transparent);\n font-variant-numeric: tabular-nums;\n}\n\n/* Tabs sliding */\n.mot-t-tabs {\n position: relative;\n display: flex;\n align-items: center;\n gap: 3px;\n padding: 3px;\n border-radius: 48px;\n background: var(--tabs-bar-bg);\n}\n.mot-t-tab {\n position: relative;\n flex: 1;\n appearance: none;\n border: 0;\n background: transparent;\n height: 30px;\n padding: 4px 12px;\n font-size: 13px;\n line-height: 20px;\n font-weight: 500;\n color: var(--tabs-text-muted);\n cursor: pointer;\n border-radius: 48px;\n z-index: 1;\n --press-scale: 0.97;\n transition: color var(--tabs-dur) var(--tabs-ease), transform var(--press-dur) var(--ease-smooth-out);\n}\n.mova-order .mot-t-tab { color: var(--tabs-text-muted); }\n.mova-order .mot-t-tab[aria-selected=\"true\"] { color: var(--tabs-text-active); }\n@media (hover: hover) and (pointer: fine) { .mova-order .mot-t-tab:not([aria-selected=\"true\"]):hover { color: var(--tabs-text-active); } }\n.mot-t-tabs-pill {\n position: absolute;\n top: 3px;\n left: 0;\n height: 30px;\n width: calc((100% - 9px) / 2);\n background: var(--tabs-pill-bg);\n box-shadow: var(--pill-shadow);\n border-radius: 48px;\n transform: translateX(0);\n transition: transform var(--tabs-dur) var(--tabs-ease), width var(--tabs-dur) var(--tabs-ease);\n will-change: transform, width;\n z-index: 0;\n pointer-events: none;\n}\n\n/* Fields */\n.mot-fields { display: flex; flex-direction: column; gap: 4px; }\n.mot-field {\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n column-gap: 12px;\n}\n.mot-field-label { font-size: 13px; line-height: 20px; }\n.mot-box {\n width: 136px;\n height: 36px;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 0 4px;\n border-radius: 10px;\n background: var(--stage-surface);\n box-shadow: 0 0 0 1px var(--stage-border);\n}\n.mot-t-input {\n transition: box-shadow var(--duration-quick) var(--ease-out);\n will-change: transform;\n}\n.mot-box:focus-within { box-shadow: 0 0 0 1px var(--stage-accent), 0 0 0 3px var(--ring-soft); }\n.mot-t-input.mot-is-error,\n.mot-t-input.mot-is-error:focus-within {\n box-shadow: 0 0 0 1px var(--err), 0 0 0 3px color-mix(in srgb, var(--err) 14%, transparent);\n transition: box-shadow var(--revert-dur, 280ms) ease-out;\n}\n.mot-box input {\n flex: 1;\n min-width: 0;\n height: 100%;\n border: 0;\n outline: none;\n background: none;\n padding: 0;\n font-size: 13px;\n line-height: 20px;\n font-weight: 400;\n font-variant-numeric: tabular-nums;\n color: var(--stage-fg);\n text-align: center;\n}\n.mot-box.mot-price { padding: 0 12px; gap: 2px; }\n.mot-box.mot-price input { text-align: right; }\n.mot-prefix { font-size: 13px; line-height: 20px; color: var(--stage-muted); }\n.mot-step {\n flex: none;\n width: 28px;\n height: 28px;\n border-radius: 6px;\n display: grid;\n place-items: center;\n color: var(--stage-muted);\n --press-scale: 0.95;\n transition: background-color var(--duration-quick) var(--ease-out), transform var(--press-dur) var(--ease-smooth-out);\n}\n@media (hover: hover) and (pointer: fine) { .mot-step:hover { background: var(--chip); } }\n.mot-step:is(:active,.mot-is-pressed) { background: var(--chip-press); transform: scale(var(--press-scale)); }\n\n.mot-t-error-msg {\n grid-column: 1 / -1;\n margin: 4px 0 0;\n height: 16px;\n font-size: 12px;\n line-height: 16px;\n text-align: right;\n color: var(--err);\n opacity: 0;\n visibility: hidden;\n transition: opacity var(--revert-dur, 280ms) ease-out, visibility 0s linear var(--revert-dur, 280ms);\n}\n.mot-t-input-wrap.mot-is-error .mot-t-error-msg {\n opacity: 1;\n visibility: visible;\n transition: opacity var(--revert-dur, 280ms) ease-out, visibility 0s linear 0s;\n}\n.mot-t-input.mot-is-shaking {\n animation: mot-t-input-shake calc(var(--shake-dur-a) * 2 + var(--shake-dur-b) * 2) linear;\n}\n@keyframes mot-t-input-shake {\n 0% { transform: translateX(0); animation-timing-function: var(--shake-ease); }\n 28.57% { transform: translateX(var(--shake-distance)); animation-timing-function: var(--shake-ease); }\n 57.14% { transform: translateX(calc(var(--shake-distance) * -1)); animation-timing-function: var(--shake-ease); }\n 78.57% { transform: translateX(var(--shake-overshoot)); animation-timing-function: var(--shake-ease); }\n 100% { transform: translateX(0); }\n}\n\n/* Total */\n.mot-divider { height: 1px; background: linear-gradient(90deg, transparent, var(--divider) 20%, var(--divider) 80%, transparent); }\n.mot-total { display: flex; align-items: center; justify-content: space-between; gap: 12px; font-size: 13px; line-height: 20px; }\n.mot-total-label { color: var(--stage-muted); }\n.mot-total-value { font-variant-numeric: tabular-nums; }\n\n@keyframes mot-t-digit-pop-in {\n 0% {\n transform: translate(calc(var(--digit-distance) * var(--digit-dir-x)), calc(var(--digit-distance) * var(--digit-dir-y)));\n opacity: 0;\n filter: blur(var(--digit-blur));\n }\n 100% { transform: translate(0, 0); opacity: 1; filter: blur(0); }\n}\n.mot-t-digit-group { display: inline-flex; align-items: baseline; }\n.mot-t-digit { display: inline-block; white-space: pre; }\n.mot-t-digit-group.mot-is-animating .mot-t-digit { animation: mot-t-digit-pop-in var(--digit-dur) var(--digit-ease) both; }\n.mot-t-digit-group.mot-is-animating .mot-t-digit[data-stagger=\"1\"] { animation-delay: var(--digit-stagger); }\n.mot-t-digit-group.mot-is-animating .mot-t-digit[data-stagger=\"2\"] { animation-delay: calc(var(--digit-stagger) * 2); }\n.mot-t-digit-group.mot-is-animating .mot-t-digit[data-same] { animation: none; }\n\n/* Submit */\n.mot-submit {\n height: 36px;\n width: 100%;\n border-radius: 40px;\n background: var(--stage-accent);\n color: var(--stage-on-accent);\n box-shadow: var(--cta-shadow);\n font-size: 13px;\n line-height: 20px;\n font-weight: 500;\n padding: 0 12px;\n overflow: hidden;\n transition: transform var(--press-dur) var(--ease-smooth-out), background-color var(--duration-quick) var(--ease-out);\n}\n.mova-order .mot-submit { color: var(--stage-on-accent); }\n@media (hover: hover) and (pointer: fine) { .mot-submit:hover { background-image: linear-gradient(var(--cta-hover), var(--cta-hover)); } }\n.mot-submit:is(:active,.mot-is-pressed) { transform: scale(var(--press-scale)); }\n.mot-t-tab:is(:active,.mot-is-pressed) { transform: scale(var(--press-scale)); }\n\n.mot-t-text-swap {\n display: inline-block;\n transform: translateY(0);\n filter: blur(0);\n opacity: 1;\n transition: transform var(--text-swap-dur) var(--text-swap-ease), filter var(--text-swap-dur) var(--text-swap-ease), opacity var(--text-swap-dur) var(--text-swap-ease);\n}\n.mot-t-text-swap.mot-is-exit { transform: translateY(calc(var(--text-swap-translate-y) * -1)); filter: blur(var(--text-swap-blur)); opacity: 0; }\n.mot-t-text-swap.mot-is-enter-start { transform: translateY(var(--text-swap-translate-y)); filter: blur(var(--text-swap-blur)); opacity: 0; transition: none; }\n\n/* Page side-by-side */\n.mot-t-page-slide { position: relative; display: grid; }\n.mot-t-page-slide .mot-t-page[data-page-id=\"1\"] { --t-page-from-x: calc(var(--page-slide-distance) * -1); }\n.mot-t-page-slide .mot-t-page[data-page-id=\"2\"] { --t-page-from-x: var(--page-slide-distance); }\n.mot-t-page-slide .mot-t-page {\n grid-area: 1 / 1;\n opacity: 0;\n pointer-events: none;\n transform: translateX(calc(var(--t-page-from-x, 0px) * var(--page-exit-enabled)));\n filter: blur(calc(var(--page-blur) * var(--page-exit-enabled)));\n transition: opacity var(--page-fade-dur) var(--page-fade-ease), transform var(--page-slide-dur) var(--page-slide-ease), filter var(--page-slide-dur) var(--page-slide-ease);\n}\n.mot-t-page-slide[data-page=\"1\"] .mot-t-page[data-page-id=\"1\"],\n.mot-t-page-slide[data-page=\"2\"] .mot-t-page[data-page-id=\"2\"] {\n opacity: 1;\n pointer-events: auto;\n transform: translateX(0);\n filter: blur(0);\n transition-delay: var(--page-stagger);\n}\n.mot-page-form { display: flex; flex-direction: column; gap: 16px; }\n.mot-page-done { display: flex; flex-direction: column; align-items: stretch; justify-content: center; gap: 16px; text-align: center; }\n.mot-done-head { display: flex; flex-direction: column; align-items: center; gap: 4px; }\n.mot-done-icon {\n width: 48px; height: 48px; border-radius: 50%;\n display: grid; place-items: center;\n margin-bottom: 8px;\n background: var(--badge-fill); color: var(--badge-ink);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--badge-ink) 14%, transparent);\n opacity: 0;\n transform: scale(var(--done-pop-scale));\n transition: opacity var(--done-pop-dur) var(--ease-smooth-out), transform var(--done-pop-dur) var(--ease-smooth-out);\n}\n.mot-t-page-slide[data-page=\"2\"] .mot-done-icon { opacity: 1; transform: scale(1); transition-delay: var(--page-slide-dur); }\n.mot-done-title { font-size: 16px; line-height: 22px; font-weight: 500; }\n.mot-done-meta { font-size: 12px; line-height: 16px; color: var(--stage-muted); }\n.mot-again {\n height: 36px; width: 100%; border-radius: 40px;\n background: var(--chip); color: var(--stage-fg);\n font-size: 13px; line-height: 20px; font-weight: 500;\n --press-scale: 0.97;\n transition: transform var(--press-dur) var(--ease-smooth-out), background-color var(--duration-quick) var(--ease-out);\n}\n@media (hover: hover) and (pointer: fine) { .mot-again:hover { background: var(--chip-hover); } }\n.mot-again:is(:active,.mot-is-pressed) { background: var(--chip-press); transform: scale(var(--press-scale)); }\n\n/* Matrix dot loader */\n.mot-btn-loader { position: absolute; left: 16px; top: 50%; translate: 0 -50%; opacity: 0; transition: opacity var(--duration-quick) var(--ease-out); }\n.mot-submit.mot-is-loading .mot-btn-loader { opacity: 1; }\n.mot-submit { position: relative; }\n.mot-t-matrix { display: grid; grid-template-columns: repeat(4, 2px); grid-auto-rows: 2px; gap: 2px; }\n.mot-t-matrix i { display: block; background: var(--matrix-base); animation: mot-t-matrix-pulse var(--matrix-cycle) var(--matrix-ease) infinite; animation-delay: calc(var(--d, 0) * 1ms); }\n.mot-t-matrix i.mot-is-gap { visibility: hidden; animation: none; }\n@keyframes mot-t-matrix-pulse {\n 0%, 45%, 100% { background-color: var(--matrix-base); }\n 15% { background-color: var(--matrix-active); }\n}\n\n.mot-sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n\n@media (prefers-reduced-motion: reduce) {\n .mot-t-input { animation: none !important; transform: none !important; }\n .mot-t-digit-group .mot-t-digit { animation: none !important; }\n .mot-t-tabs-pill, .mot-t-tab { transition: none !important; }\n .mot-t-text-swap { transition: none !important; }\n .mot-t-page-slide .mot-t-page, .mot-done-icon { transition: none !important; }\n .mot-t-matrix i { animation: none !important; }\n .mot-again:is(:active,.mot-is-pressed) { transform: none; }\n .mot-submit:is(:active,.mot-is-pressed), .mot-step:is(:active,.mot-is-pressed), .mot-t-tab:is(:active,.mot-is-pressed) { transform: none; }\n}\n/* Order type menu */\n.mova-order[data-theme=\"dark\"] { --menu-shadow: 0 1px 3px rgba(0,0,0,.04), inset 0 1px 0 rgba(255,255,255,.04), inset 0 0 0 1px rgba(196,196,196,.08); }\n.mot-type-anchor { position: relative; }\n.mot-box.mot-type-btn {\n width: 136px;\n justify-content: space-between;\n padding: 0 10px 0 12px;\n gap: 6px;\n font-size: 13px;\n line-height: 20px;\n --press-scale: 0.97;\n transition: box-shadow var(--duration-quick) var(--ease-out), transform var(--press-dur) var(--ease-smooth-out);\n}\n.mot-box.mot-type-btn:is(:active,.mot-is-pressed) { transform: scale(var(--press-scale)); }\n.mot-type-btn .mot-hi, .mot-type-btn [data-icon] { color: var(--stage-muted); flex: none; }\n.mot-type-btn-label { overflow: hidden; white-space: nowrap; }\n.mova-order .mot-box.mot-type-btn:focus-visible { box-shadow: 0 0 0 1px var(--stage-accent), 0 0 0 3px var(--ring-soft); }\n.mot-t-dropdown {\n position: absolute;\n top: 40px;\n right: 0;\n z-index: 5;\n width: 168px;\n box-sizing: border-box;\n padding: 6px;\n border-radius: 12px;\n background: var(--stage-surface);\n box-shadow: var(--menu-shadow);\n transform-origin: top right;\n transform: scale(var(--dropdown-pre-scale));\n opacity: 0;\n pointer-events: none;\n transition: transform var(--dropdown-open-dur) var(--dropdown-ease), opacity var(--dropdown-open-dur) var(--dropdown-ease);\n will-change: transform, opacity;\n}\n.mot-t-dropdown.mot-is-open { transform: scale(1); opacity: 1; pointer-events: auto; }\n.mot-t-dropdown.mot-is-closing {\n transform: scale(var(--dropdown-closing-scale));\n opacity: 0;\n pointer-events: none;\n transition: transform var(--dropdown-close-dur) var(--dropdown-ease), opacity var(--dropdown-close-dur) var(--dropdown-ease);\n}\n.mot-menu-item {\n width: 100%;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 0 6px 0 8px;\n border-radius: 8px;\n font-size: 13px;\n line-height: 20px;\n text-align: left;\n --press-scale: 0.97;\n transition: background-color var(--duration-quick) var(--ease-out), transform var(--press-dur) var(--ease-smooth-out);\n}\n@media (hover: hover) and (pointer: fine) { .mot-menu-item:hover { background: var(--chip); } }\n.mot-menu-item:is(:active,.mot-is-pressed) { background: var(--chip-press); transform: scale(var(--press-scale)); }\n.mot-menu-item [data-icon], .mot-menu-item .mot-hi { color: var(--stage-muted); }\n\n/* Accordion expand */\n.mot-t-acc { margin: -4px -4px; }\n.mot-t-acc-panel { display: grid; grid-template-rows: 0fr; transition: grid-template-rows var(--acc-collapse) var(--acc-ease); }\n.mot-t-acc[data-open=\"true\"] .mot-t-acc-panel { grid-template-rows: 1fr; transition: grid-template-rows var(--acc-expand) var(--acc-ease); }\n.mot-t-acc-panel-inner {\n min-height: 0;\n overflow: hidden;\n opacity: 0;\n filter: blur(2px);\n transition: opacity var(--acc-collapse) var(--acc-ease), filter var(--acc-collapse) var(--acc-ease);\n}\n.mot-t-acc[data-open=\"true\"] .mot-t-acc-panel-inner {\n opacity: 1;\n filter: blur(0);\n transition: opacity var(--acc-expand) var(--acc-ease), filter var(--acc-expand) var(--acc-ease);\n}\n.mot-t-acc-body { padding: 4px; }\n\n@media (prefers-reduced-motion: reduce) {\n .mot-t-dropdown, .mot-box.mot-type-btn, .mot-menu-item { transition: none !important; }\n .mot-box.mot-type-btn:is(:active,.mot-is-pressed), .mot-menu-item:is(:active,.mot-is-pressed) { transform: none; }\n .mot-t-acc-panel, .mot-t-acc-panel-inner, .mot-t-acc-chevron { transition: none !important; }\n}\n\n/* Icons: Heroicons (outline), Copyright (c) Tailwind Labs, Inc. MIT License */\n.mot-hi-play{translate:1px 0}.mot-hi-heart{translate:0 1px}\n\n/* Touch press feedback stays local to this component. */\n.mova-order :is(button,[role=\"tab\"],[role=\"menuitemradio\"]){-webkit-tap-highlight-color:transparent;touch-action:manipulation;user-select:none;-webkit-touch-callout:none}\n\n.mova-order .mot-done-title{margin:0}\n.mova-order .mot-done-title:focus{outline:none;box-shadow:none}\n.mova-order button:disabled{cursor:default}\n.mova-order .mot-badge[data-negative=true]{--badge-fill:#fbe9e9;--badge-ink:#ad3c3c}\n.mova-order[data-theme=dark] .mot-badge[data-negative=true]{--badge-fill:#4c2b2b;--badge-ink:#ffaaaa}\n.mova-order .mot-submit-error{font-size:12px;line-height:16px;color:var(--err)}\n@media(prefers-reduced-motion:reduce){.mova-order *{animation:none!important;transition:none!important}.mova-order .mot-t-text-swap{transform:none;filter:none;opacity:1}}\n`;\n"
17
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dia-text-reveal",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dia-text-reveal.tsx",
6
6
  "registryFile": "dia-text-reveal.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "diamond-grid",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "diamond-grid.tsx",
6
6
  "sourcePath": "ui/loading/diamond-grid.tsx",
7
7
  "registryFile": "diamond-grid.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "diamond-rotate-spring",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "diamond-rotate-spring.tsx",
6
6
  "sourcePath": "ui/loading/diamond-rotate-spring.tsx",
7
7
  "registryFile": "diamond-rotate-spring.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dislike-toggle",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dislike-toggle.tsx",
6
6
  "registryFile": "dislike-toggle.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dither-book",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dither-book.tsx",
6
6
  "registryFile": "dither-book.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "domino-cascade",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "domino-cascade.tsx",
6
6
  "sourcePath": "components/css-animations/whimsical/WhimsicalVariations.tsx",
7
7
  "registryFile": "domino-cascade.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dot-spinner",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dot-spinner.tsx",
6
6
  "sourcePath": "ui/loading/dot-spinner.tsx",
7
7
  "registryFile": "dot-spinner.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dots-ring",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dots-ring.tsx",
6
6
  "sourcePath": "ui/loading/dots-ring.tsx",
7
7
  "registryFile": "dots-ring.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "double-bounce-toggle",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "double-bounce-toggle.tsx",
6
6
  "registryFile": "double-bounce-toggle.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "double-ring",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "double-ring.tsx",
6
6
  "sourcePath": "ui/loading/double-ring.tsx",
7
7
  "registryFile": "double-ring.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "download-icons",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "download-icons.tsx",
6
6
  "sourcePath": "components/css-animations/yui-components/YuiUiKit2.tsx",
7
7
  "registryFile": "download-icons.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "drop-dot",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "drop-dot.tsx",
6
6
  "sourcePath": "ui/loading/drop-dot.tsx",
7
7
  "registryFile": "drop-dot.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "drop-in-char",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "drop-in-char.tsx",
6
6
  "registryFile": "drop-in-char.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "droplet-squish",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "droplet-squish.tsx",
6
6
  "sourcePath": "components/css-animations/whimsical/ConceptTrios3.tsx",
7
7
  "registryFile": "droplet-squish.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dual-arc",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dual-arc.tsx",
6
6
  "sourcePath": "ui/loading/dual-arc.tsx",
7
7
  "registryFile": "dual-arc.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dual-magnet-dipole",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dual-magnet-dipole.tsx",
6
6
  "sourcePath": "components/css-animations/whimsical/RedesignedPhysicsTrios.tsx",
7
7
  "registryFile": "dual-magnet-dipole.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dynamic-island",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "dynamic-island.tsx",
6
6
  "sourcePath": "ui/loading/dynamic-island.tsx",
7
7
  "registryFile": "dynamic-island.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "elastic-bars",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "elastic-bars.tsx",
6
6
  "sourcePath": "ui/loading/elastic-bars.tsx",
7
7
  "registryFile": "elastic-bars.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "elastic-square",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "elastic-square.tsx",
6
6
  "sourcePath": "ui/loading/elastic-square.tsx",
7
7
  "registryFile": "elastic-square.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "elastic-tag-snap",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "elastic-tag-snap.tsx",
6
6
  "sourcePath": "components/css-animations/whimsical/RedesignedPhysicsTrios.tsx",
7
7
  "registryFile": "elastic-tag-snap.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "error-shake",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "error-shake.tsx",
6
6
  "registryFile": "error-shake.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "expanding-cross",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "expanding-cross.tsx",
6
6
  "sourcePath": "ui/loading/expanding-cross.tsx",
7
7
  "registryFile": "expanding-cross.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "expanding-icon-tabs",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "expanding-icon-tabs.tsx",
6
6
  "sourcePath": "ui/patterns/expanding-icon-tabs.tsx",
7
7
  "registryFile": "expanding-icon-tabs.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "face-id-scan",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "face-id-scan.tsx",
6
6
  "sourcePath": "ui/loading/face-id-scan.tsx",
7
7
  "registryFile": "face-id-scan.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "fade-arc",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "fade-arc.tsx",
6
6
  "sourcePath": "ui/loading/fade-arc.tsx",
7
7
  "registryFile": "fade-arc.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "fade-dots",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "fade-dots.tsx",
6
6
  "sourcePath": "ui/loading/fade-dots.tsx",
7
7
  "registryFile": "fade-dots.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "fade-down",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "fade-down.tsx",
6
6
  "sourcePath": "ui/entrance/fade-down.tsx",
7
7
  "registryFile": "fade-down.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "fade-in-char",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "fade-in-char.tsx",
6
6
  "registryFile": "fade-in-char.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "fade-in-text",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "fade-in-text.tsx",
6
6
  "registryFile": "fade-in-text.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "fade-in-word",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "fade-in-word.tsx",
6
6
  "registryFile": "fade-in-word.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "fade-in",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "fade-in.tsx",
6
6
  "sourcePath": "ui/entrance/fade-in.tsx",
7
7
  "registryFile": "fade-in.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "fade-up",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "fade-up.tsx",
6
6
  "sourcePath": "ui/entrance/fade-up.tsx",
7
7
  "registryFile": "fade-up.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "file-upload-dropzone",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "file-upload-dropzone.tsx",
6
6
  "registryFile": "file-upload-dropzone.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "filter-tag-pill",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "filter-tag-pill.tsx",
6
6
  "sourcePath": "components/css-animations/yui-components/UiKitTrios.tsx",
7
7
  "registryFile": "filter-tag-pill.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "flip-square",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "flip-square.tsx",
6
6
  "sourcePath": "ui/loading/flip-square.tsx",
7
7
  "registryFile": "flip-square.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "flip-x-char",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "flip-x-char.tsx",
6
6
  "registryFile": "flip-x-char.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "flip-y-char",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "flip-y-char.tsx",
6
6
  "registryFile": "flip-y-char.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "float-char",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "float-char.tsx",
6
6
  "registryFile": "float-char.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "float-word",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "float-word.tsx",
6
6
  "registryFile": "float-word.json",
7
7
  "exports": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "floating-diamonds",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "floating-diamonds.tsx",
6
6
  "sourcePath": "ui/loading/floating-diamonds.tsx",
7
7
  "registryFile": "floating-diamonds.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "floating-label-input",
3
3
  "tier": "free",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "file": "floating-label-input.tsx",
6
6
  "registryFile": "floating-label-input.json",
7
7
  "exports": [