@neo-ui-kit/react 0.0.0-stage → 1.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 (270) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +213 -2
  3. package/dist/artwork/icons.json.d.ts +2 -0
  4. package/dist/artwork/illustrations.json.d.ts +2 -0
  5. package/dist/chunks/chunk-347P6ZE4.js +104 -0
  6. package/dist/chunks/chunk-BJSFN52W.js +417 -0
  7. package/dist/chunks/chunk-FCOU3ODR.js +63 -0
  8. package/dist/chunks/chunk-JZ4GDTH5.js +87 -0
  9. package/dist/chunks/chunk-UGDRXR7P.js +3362 -0
  10. package/dist/chunks/chunk-VK6GHRLV.js +335 -0
  11. package/dist/chunks/chunk-YKCUOZ7V.js +777 -0
  12. package/dist/components/artwork/DatabaseArt/DatabaseArt.d.ts +6 -0
  13. package/dist/components/artwork/DatabaseArt/styles.css +58 -0
  14. package/dist/components/artwork/Landscape/Landscape.d.ts +7 -0
  15. package/dist/components/artwork/Landscape/styles.css +79 -0
  16. package/dist/components/artwork/NeonWaves/NeonWaves.d.ts +15 -0
  17. package/dist/components/artwork/NeonWaves/styles.css +48 -0
  18. package/dist/components/artwork/Planet/Planet.d.ts +4 -0
  19. package/dist/components/artwork/Planet/styles.css +52 -0
  20. package/dist/components/artwork/QuantumField/QuantumField.d.ts +42 -0
  21. package/dist/components/artwork/QuantumField/QuantumFieldExperience.d.ts +22 -0
  22. package/dist/components/artwork/QuantumField/UPSTREAM-LICENSE.txt +21 -0
  23. package/dist/components/artwork/QuantumField/audio.d.ts +15 -0
  24. package/dist/components/artwork/QuantumField/renderer.d.ts +24 -0
  25. package/dist/components/artwork/QuantumField/styles.css +77 -0
  26. package/dist/components/artwork/ServerArt/ServerArt.d.ts +8 -0
  27. package/dist/components/artwork/ServerArt/styles.css +43 -0
  28. package/dist/components/artwork/Spectrum/Spectrum.d.ts +7 -0
  29. package/dist/components/artwork/Spectrum/styles.css +35 -0
  30. package/dist/components/artwork/layers.d.ts +15 -0
  31. package/dist/components/artwork/useArtwork.d.ts +8 -0
  32. package/dist/components/controls/Autocomplete/Autocomplete.d.ts +2 -0
  33. package/dist/components/controls/Autocomplete/styles.css +1 -0
  34. package/dist/components/controls/Button/Button.d.ts +2 -0
  35. package/dist/components/controls/Button/styles.css +1 -0
  36. package/dist/components/controls/Checkbox/Checkbox.d.ts +2 -0
  37. package/dist/components/controls/Checkbox/styles.css +70 -0
  38. package/dist/components/controls/Chip/Chip.d.ts +21 -0
  39. package/dist/components/controls/Chip/styles.css +74 -0
  40. package/dist/components/controls/ChipField.d.ts +25 -0
  41. package/dist/components/controls/ColorPicker/ColorPicker.d.ts +16 -0
  42. package/dist/components/controls/ColorPicker/color.d.ts +9 -0
  43. package/dist/components/controls/ColorPicker/styles.css +103 -0
  44. package/dist/components/controls/DatePicker/DatePicker.d.ts +19 -0
  45. package/dist/components/controls/DatePicker/styles.css +69 -0
  46. package/dist/components/controls/FilePicker/FilePicker.d.ts +2 -0
  47. package/dist/components/controls/FilePicker/styles.css +149 -0
  48. package/dist/components/controls/IconButton/IconButton.d.ts +2 -0
  49. package/dist/components/controls/IconButton/styles.css +4 -0
  50. package/dist/components/controls/InputBase/InputBase.d.ts +21 -0
  51. package/dist/components/controls/InputBase/styles.css +379 -0
  52. package/dist/components/controls/Link/Link.d.ts +11 -0
  53. package/dist/components/controls/Link/styles.css +50 -0
  54. package/dist/components/controls/NumberField/NumberField.d.ts +2 -0
  55. package/dist/components/controls/NumberField/styles.css +1 -0
  56. package/dist/components/controls/PeoplePicker/PeoplePicker.d.ts +37 -0
  57. package/dist/components/controls/PeoplePicker/styles.css +7 -0
  58. package/dist/components/controls/SegmentedControl/SegmentedControl.d.ts +2 -0
  59. package/dist/components/controls/SegmentedControl/styles.css +9 -0
  60. package/dist/components/controls/Select/Select.d.ts +8 -0
  61. package/dist/components/controls/Select/styles.css +142 -0
  62. package/dist/components/controls/Slider/Slider.d.ts +3 -0
  63. package/dist/components/controls/Slider/styles.css +138 -0
  64. package/dist/components/controls/SplitButton/SplitButton.d.ts +2 -0
  65. package/dist/components/controls/SplitButton/styles.css +169 -0
  66. package/dist/components/controls/Switch/Switch.d.ts +2 -0
  67. package/dist/components/controls/Switch/styles.css +54 -0
  68. package/dist/components/controls/Tab/Tab.d.ts +2 -0
  69. package/dist/components/controls/Tab/styles.css +111 -0
  70. package/dist/components/controls/Tabs/Tabs.d.ts +2 -0
  71. package/dist/components/controls/Tabs/styles.css +239 -0
  72. package/dist/components/controls/TagInput/TagInput.d.ts +24 -0
  73. package/dist/components/controls/TagInput/styles.css +24 -0
  74. package/dist/components/controls/TextArea/TextArea.d.ts +2 -0
  75. package/dist/components/controls/TextArea/styles.css +15 -0
  76. package/dist/components/controls/TextField/TextField.d.ts +2 -0
  77. package/dist/components/controls/ThemePicker/ThemePicker.d.ts +24 -0
  78. package/dist/components/controls/ThemePicker/styles.css +128 -0
  79. package/dist/components/controls/ToggleButton/ToggleButton.d.ts +2 -0
  80. package/dist/components/controls/ToggleButton/styles.css +49 -0
  81. package/dist/components/controls/internal.d.ts +62 -0
  82. package/dist/components/controls/shared.css +694 -0
  83. package/dist/components/controls/shared.d.ts +204 -0
  84. package/dist/components/editor/PianoRoll/PianoRoll.d.ts +65 -0
  85. package/dist/components/editor/PianoRoll/styles.css +186 -0
  86. package/dist/components/editor/shared.css +1 -0
  87. package/dist/components/effects/AnimatedBorder/AnimatedBorder.d.ts +9 -0
  88. package/dist/components/effects/AnimatedBorder/styles.css +7 -0
  89. package/dist/components/effects/Beacon/Beacon.d.ts +9 -0
  90. package/dist/components/effects/Beacon/styles.css +38 -0
  91. package/dist/components/effects/Equalizer/Equalizer.d.ts +14 -0
  92. package/dist/components/effects/Equalizer/styles.css +38 -0
  93. package/dist/components/effects/GlowText/GlowText.d.ts +9 -0
  94. package/dist/components/effects/GlowText/styles.css +56 -0
  95. package/dist/components/effects/ImageShine/ImageShine.d.ts +13 -0
  96. package/dist/components/effects/ImageShine/styles.css +66 -0
  97. package/dist/components/effects/Marquee/Marquee.d.ts +9 -0
  98. package/dist/components/effects/Marquee/styles.css +46 -0
  99. package/dist/components/effects/MelodixText/MelodixText.d.ts +15 -0
  100. package/dist/components/effects/MelodixText/styles.css +28 -0
  101. package/dist/components/effects/Reveal/Reveal.d.ts +13 -0
  102. package/dist/components/effects/Reveal/styles.css +25 -0
  103. package/dist/components/effects/Shimmer/Shimmer.d.ts +10 -0
  104. package/dist/components/effects/Shimmer/styles.css +48 -0
  105. package/dist/components/effects/Sparkles/Sparkles.d.ts +9 -0
  106. package/dist/components/effects/Sparkles/styles.css +28 -0
  107. package/dist/components/effects/Spotlight/Spotlight.d.ts +11 -0
  108. package/dist/components/effects/Spotlight/styles.css +45 -0
  109. package/dist/components/effects/Tilt/Tilt.d.ts +11 -0
  110. package/dist/components/effects/Tilt/styles.css +67 -0
  111. package/dist/components/feedback/Badge/Badge.d.ts +3 -0
  112. package/dist/components/feedback/Badge/styles.css +91 -0
  113. package/dist/components/feedback/CollapsibleSection/CollapsibleSection.d.ts +2 -0
  114. package/dist/components/feedback/CollapsibleSection/styles.css +76 -0
  115. package/dist/components/feedback/DataTable/DataTable.d.ts +16 -0
  116. package/dist/components/feedback/DataTable/styles.css +522 -0
  117. package/dist/components/feedback/Dialog/Dialog.d.ts +2 -0
  118. package/dist/components/feedback/Dialog/styles.css +82 -0
  119. package/dist/components/feedback/EmptyState/EmptyState.d.ts +2 -0
  120. package/dist/components/feedback/EmptyState/styles.css +80 -0
  121. package/dist/components/feedback/KeyValueList/KeyValueList.d.ts +2 -0
  122. package/dist/components/feedback/KeyValueList/styles.css +51 -0
  123. package/dist/components/feedback/Menu/Menu.d.ts +2 -0
  124. package/dist/components/feedback/Menu/styles.css +123 -0
  125. package/dist/components/feedback/MenuItem/MenuItem.d.ts +2 -0
  126. package/dist/components/feedback/MenuItem/styles.css +71 -0
  127. package/dist/components/feedback/MessageBar/MessageBar.d.ts +2 -0
  128. package/dist/components/feedback/MessageBar/styles.css +116 -0
  129. package/dist/components/feedback/Popover/Popover.d.ts +2 -0
  130. package/dist/components/feedback/Popover/styles.css +44 -0
  131. package/dist/components/feedback/ProgressBar/ProgressBar.d.ts +2 -0
  132. package/dist/components/feedback/ProgressBar/styles.css +76 -0
  133. package/dist/components/feedback/SignalBars/SignalBars.d.ts +11 -0
  134. package/dist/components/feedback/SignalBars/styles.css +31 -0
  135. package/dist/components/feedback/StatusIndicator/StatusIndicator.d.ts +2 -0
  136. package/dist/components/feedback/StatusIndicator/styles.css +88 -0
  137. package/dist/components/feedback/Steps/Steps.d.ts +2 -0
  138. package/dist/components/feedback/Steps/styles.css +152 -0
  139. package/dist/components/feedback/Toast/Toast.d.ts +2 -0
  140. package/dist/components/feedback/Toast/styles.css +89 -0
  141. package/dist/components/feedback/Tooltip/Tooltip.d.ts +15 -0
  142. package/dist/components/feedback/Tooltip/styles.css +38 -0
  143. package/dist/components/feedback/shared.css +22 -0
  144. package/dist/components/feedback/shared.d.ts +231 -0
  145. package/dist/components/forms/Form/Form.d.ts +35 -0
  146. package/dist/components/forms/Form/styles.css +1 -0
  147. package/dist/components/forms/FormFields/FormFields.d.ts +20 -0
  148. package/dist/components/forms/FormFields/styles.css +72 -0
  149. package/dist/components/foundation/Loader/Loader.d.ts +30 -0
  150. package/dist/components/foundation/LoaderGenerator/LoaderGenerator.d.ts +38 -0
  151. package/dist/components/foundation/LoaderGenerator/styles.css +104 -0
  152. package/dist/components/foundation/ThemeEditor/ThemeEditor.d.ts +15 -0
  153. package/dist/components/foundation/ThemeEditor/styles.css +97 -0
  154. package/dist/components/foundation/ThemeEditor/themeConfig.d.ts +47 -0
  155. package/dist/components/foundation/ThemeProvider/ThemeProvider.d.ts +32 -0
  156. package/dist/components/foundation/ThemeProvider/styles.css +59 -0
  157. package/dist/components/foundation/Typography/Typography.d.ts +17 -0
  158. package/dist/components/foundation/Typography/styles.css +115 -0
  159. package/dist/components/layout/Avatar/Avatar.d.ts +2 -0
  160. package/dist/components/layout/Avatar/HostSeal.d.ts +5 -0
  161. package/dist/components/layout/Avatar/styles.css +166 -0
  162. package/dist/components/layout/BrandMark/BrandMark.d.ts +2 -0
  163. package/dist/components/layout/BrandMark/styles.css +39 -0
  164. package/dist/components/layout/ButtonGroup/ButtonGroup.d.ts +12 -0
  165. package/dist/components/layout/ButtonGroup/styles.css +36 -0
  166. package/dist/components/layout/Card/Card.d.ts +14 -0
  167. package/dist/components/layout/Card/styles.css +37 -0
  168. package/dist/components/layout/DialogActions/DialogActions.d.ts +12 -0
  169. package/dist/components/layout/DialogActions/styles.css +31 -0
  170. package/dist/components/layout/DialogBody/DialogBody.d.ts +12 -0
  171. package/dist/components/layout/DialogBody/styles.css +28 -0
  172. package/dist/components/layout/Divider/Divider.d.ts +2 -0
  173. package/dist/components/layout/Divider/styles.css +58 -0
  174. package/dist/components/layout/FloatingPanel/FloatingPanel.d.ts +15 -0
  175. package/dist/components/layout/FloatingPanel/styles.css +47 -0
  176. package/dist/components/layout/FloatingPanel/useFloatingPanel.d.ts +54 -0
  177. package/dist/components/layout/Grid/Grid.d.ts +24 -0
  178. package/dist/components/layout/Grid/styles.css +90 -0
  179. package/dist/components/layout/Header/Header.d.ts +2 -0
  180. package/dist/components/layout/Header/styles.css +42 -0
  181. package/dist/components/layout/Icon/Icon.d.ts +4 -0
  182. package/dist/components/layout/Icon/styles.css +62 -0
  183. package/dist/components/layout/Illustration/Illustration.d.ts +2 -0
  184. package/dist/components/layout/Illustration/styles.css +104 -0
  185. package/dist/components/layout/ScrollArea/ScrollArea.d.ts +2 -0
  186. package/dist/components/layout/ScrollArea/styles.css +61 -0
  187. package/dist/components/layout/Stack/Stack.d.ts +21 -0
  188. package/dist/components/layout/Stack/styles.css +53 -0
  189. package/dist/components/layout/StatTile/StatTile.d.ts +20 -0
  190. package/dist/components/layout/StatTile/styles.css +90 -0
  191. package/dist/components/layout/TabPanel/TabPanel.d.ts +2 -0
  192. package/dist/components/layout/TabPanel/styles.css +16 -0
  193. package/dist/components/layout/Text/Text.d.ts +2 -0
  194. package/dist/components/layout/Text/styles.css +29 -0
  195. package/dist/components/layout/Toolbar/Toolbar.d.ts +12 -0
  196. package/dist/components/layout/Toolbar/styles.css +7 -0
  197. package/dist/components/layout/shared.css +79 -0
  198. package/dist/components/layout/shared.d.ts +64 -0
  199. package/dist/components/media/AudioPlayer/AudioPlayer.d.ts +2 -0
  200. package/dist/components/media/AudioPlayer/styles.css +86 -0
  201. package/dist/components/media/KaraokeLyrics/KaraokeLyrics.d.ts +25 -0
  202. package/dist/components/media/KaraokeLyrics/styles.css +56 -0
  203. package/dist/components/media/LevelMeter/LevelMeter.d.ts +7 -0
  204. package/dist/components/media/LevelMeter/styles.css +30 -0
  205. package/dist/components/media/MediaCard/MediaCard.d.ts +24 -0
  206. package/dist/components/media/MediaCard/styles.css +108 -0
  207. package/dist/components/media/MelodyRoll/MelodyRoll.d.ts +48 -0
  208. package/dist/components/media/MelodyRoll/styles.css +196 -0
  209. package/dist/components/media/PianoKeyboard/PianoKeyboard.d.ts +24 -0
  210. package/dist/components/media/PianoKeyboard/styles.css +83 -0
  211. package/dist/components/media/RotaryKnob/RotaryKnob.d.ts +3 -0
  212. package/dist/components/media/RotaryKnob/styles.css +319 -0
  213. package/dist/components/media/Sparkline/Sparkline.d.ts +2 -0
  214. package/dist/components/media/Sparkline/styles.css +70 -0
  215. package/dist/components/media/WaveDecoration/WaveDecoration.d.ts +2 -0
  216. package/dist/components/media/WaveDecoration/styles.css +2 -0
  217. package/dist/components/media/Waveform/Waveform.d.ts +9 -0
  218. package/dist/components/media/Waveform/styles.css +375 -0
  219. package/dist/components/media/Waveform/useWaveformPeaks.d.ts +11 -0
  220. package/dist/components/media/shared.css +7 -0
  221. package/dist/components/media/shared.d.ts +80 -0
  222. package/dist/components/navigation/Router/Router.d.ts +32 -0
  223. package/dist/components/navigation/Router/styles.css +1 -0
  224. package/dist/components.css +102 -0
  225. package/dist/core/artwork.d.ts +17 -0
  226. package/dist/core/base.d.ts +65 -0
  227. package/dist/core/environment.d.ts +5 -0
  228. package/dist/core/i18n.d.ts +34 -0
  229. package/dist/core/messages.d.ts +1 -0
  230. package/dist/core/motion/hooks.d.ts +17 -0
  231. package/dist/core/motion-engine.d.ts +13 -0
  232. package/dist/core/noise.d.ts +20 -0
  233. package/dist/core/providers/context.d.ts +4 -0
  234. package/dist/core/responsive.d.ts +13 -0
  235. package/dist/core.d.ts +8 -0
  236. package/dist/core.js +56 -0
  237. package/dist/editor.d.ts +2 -0
  238. package/dist/editor.js +8 -0
  239. package/dist/fonts/melodix/Melodix-100.woff2 +0 -0
  240. package/dist/fonts/melodix/Melodix-200.woff2 +0 -0
  241. package/dist/fonts/melodix/Melodix-300.woff2 +0 -0
  242. package/dist/fonts/melodix/Melodix-400.woff2 +0 -0
  243. package/dist/fonts/melodix/Melodix-500.woff2 +0 -0
  244. package/dist/fonts/melodix/Melodix-600.woff2 +0 -0
  245. package/dist/fonts/melodix/Melodix-700.woff2 +0 -0
  246. package/dist/fonts/melodix/Melodix-800.woff2 +0 -0
  247. package/dist/fonts/melodix/Melodix-900.woff2 +0 -0
  248. package/dist/fonts/melodix/MelodixText-100.woff2 +0 -0
  249. package/dist/fonts/melodix/MelodixText-200.woff2 +0 -0
  250. package/dist/fonts/melodix/MelodixText-300.woff2 +0 -0
  251. package/dist/fonts/melodix/MelodixText-400.woff2 +0 -0
  252. package/dist/fonts/melodix/MelodixText-500.woff2 +0 -0
  253. package/dist/fonts/melodix/MelodixText-600.woff2 +0 -0
  254. package/dist/fonts/melodix/MelodixText-700.woff2 +0 -0
  255. package/dist/fonts/melodix/MelodixText-800.woff2 +0 -0
  256. package/dist/fonts/melodix/MelodixText-900.woff2 +0 -0
  257. package/dist/fonts/melodix/OFL-PlayfairDisplay.txt +93 -0
  258. package/dist/fonts/melodix.css +123 -0
  259. package/dist/forms.d.ts +4 -0
  260. package/dist/forms.js +17 -0
  261. package/dist/index.d.ts +163 -0
  262. package/dist/index.js +9683 -0
  263. package/dist/router.d.ts +2 -0
  264. package/dist/router.js +11 -0
  265. package/dist/styles.css +2 -0
  266. package/dist/theme/base.css +221 -0
  267. package/dist/theme/tokens.css +196 -0
  268. package/dist/theme/typography.d.ts +24 -0
  269. package/dist/tokens.css +1 -0
  270. package/package.json +83 -4
@@ -0,0 +1,196 @@
1
+ /* Styles owned by MelodyRoll: a dark glass lane with a semitone and seconds grid; notes glide in,
2
+ flash green when sung right; the playhead and lane breathe with the music. */
3
+ .ad-melody-roll {
4
+ --ad-roll-keys: clamp(2.75rem, 8%, 4.5rem);
5
+ position: relative;
6
+ display: grid;
7
+ grid-template-columns: var(--ad-roll-keys) minmax(0, 1fr);
8
+ width: 100%;
9
+ height: 100%;
10
+ min-height: 8rem;
11
+ overflow: hidden;
12
+ isolation: isolate;
13
+ /* Room for the hairline edge that the glass layer below draws. */
14
+ padding: 0.0625rem;
15
+ border-radius: var(--ad-radius-lg, 1rem);
16
+ box-shadow: 0 0 calc(var(--ad-roll-beat) * 1.6rem) rgb(from var(--ad-primary) r g b / 0.25);
17
+ transition: box-shadow 0.12s;
18
+ }
19
+ /* The glass: its own still layer, so the frosted backdrop is never redrawn by the beat or by the
20
+ notes moving over it. */
21
+ .ad-melody-roll::before,
22
+ .ad-melody-roll::after {
23
+ content: "";
24
+ position: absolute;
25
+ inset: 0;
26
+ z-index: -1;
27
+ border: 0.0625rem solid rgb(from var(--ad-primary) r g b / 0.18);
28
+ border-radius: inherit;
29
+ pointer-events: none;
30
+ }
31
+ .ad-melody-roll::before {
32
+ background:
33
+ radial-gradient(80% 120% at 25% 50%, rgb(from var(--ad-primary) r g b / 0.05), transparent 70%),
34
+ linear-gradient(180deg, rgb(from var(--ad-neutral-950) r g b / 0.72), rgb(from var(--ad-neutral-900) r g b / 0.6));
35
+ box-shadow: inset 0 0.0625rem 0 #ffffff12;
36
+ backdrop-filter: blur(0.5rem);
37
+ }
38
+ /* The beat: a brighter edge and a warmer light over the glass, faded in with the music. */
39
+ .ad-melody-roll::after {
40
+ border-color: rgb(from var(--ad-primary) r g b / 0.35);
41
+ background: radial-gradient(80% 120% at 25% 50%, rgb(from var(--ad-primary) r g b / 0.12), transparent 70%);
42
+ opacity: var(--ad-roll-beat);
43
+ transition: opacity 0.12s;
44
+ will-change: opacity;
45
+ }
46
+ .ad-melody-roll-keys.ad-piano-keyboard {
47
+ min-height: 0;
48
+ z-index: 2;
49
+ }
50
+ .ad-melody-roll-lane {
51
+ position: relative;
52
+ container-type: size;
53
+ overflow: hidden;
54
+ border-left: 0.0625rem solid #ffffff22;
55
+ /* One line per semitone; the second lines scroll with the song on a layer of their own. */
56
+ background: linear-gradient(#ffffff0d 0.0625rem, transparent 0.0625rem) 0 0 / 100% calc(100% / var(--ad-roll-rows));
57
+ }
58
+ /* One line per second, a second wider than the lane, slid back by the song's fraction of a second. */
59
+ .ad-melody-roll-seconds {
60
+ position: absolute;
61
+ top: 0;
62
+ bottom: 0;
63
+ left: 0;
64
+ width: calc(100cqw + var(--ad-roll-second));
65
+ background: linear-gradient(90deg, #ffffff0a 0.0625rem, transparent 0.0625rem) 0 0 / var(--ad-roll-second) 100%;
66
+ transform: translateX(var(--ad-roll-shift));
67
+ will-change: transform;
68
+ pointer-events: none;
69
+ }
70
+ .ad-melody-roll-strip {
71
+ position: absolute;
72
+ inset: 0;
73
+ will-change: transform;
74
+ }
75
+ /* A note: a glossy capsule in the theme colours. */
76
+ .ad-melody-note {
77
+ position: absolute;
78
+ /* Three quarters of a semitone row, centred in it. */
79
+ height: calc(100% / var(--ad-roll-rows) * 0.76);
80
+ translate: 0 15.8%;
81
+ border-radius: 999px;
82
+ background-image: linear-gradient(90deg, var(--ad-primary), var(--ad-secondary));
83
+ box-shadow: inset 0 0.0625rem 0 #ffffff55;
84
+ display: flex;
85
+ align-items: center;
86
+ overflow: hidden;
87
+ transition:
88
+ filter 0.2s,
89
+ opacity 0.3s;
90
+ }
91
+ .ad-melody-note > span {
92
+ padding-inline: 0.4em;
93
+ color: #fff;
94
+ font: 600 clamp(0.5rem, 1.6cqh, 0.75rem) / 1 var(--ad-font-family-sans);
95
+ white-space: nowrap;
96
+ text-shadow: 0 0 0.3em #0008;
97
+ }
98
+ /* Under the playhead: brighter, lifted. */
99
+ .ad-melody-note[data-now] {
100
+ filter: brightness(1.3) drop-shadow(0 0 0.4rem var(--ad-primary));
101
+ }
102
+ .ad-melody-note[data-past]:not([data-hit]) {
103
+ opacity: 0.45;
104
+ }
105
+ /* Sung right: green with a burst of light. */
106
+ .ad-melody-note[data-hit] {
107
+ background-image: linear-gradient(90deg, #55ff9a, #16d875);
108
+ filter: drop-shadow(0 0 0.45rem #32ff8ff0) drop-shadow(0 0 1.1rem #32ff8f99);
109
+ animation: ad-melody-hit 0.62s ease-out;
110
+ }
111
+ @keyframes ad-melody-hit {
112
+ 28% {
113
+ filter: brightness(1.9) drop-shadow(0 0 1.2rem #32ff8f);
114
+ scale: 1 1.6;
115
+ }
116
+ }
117
+ .ad-melody-trail {
118
+ position: absolute;
119
+ inset: 0;
120
+ width: 100%;
121
+ height: 100%;
122
+ overflow: visible;
123
+ pointer-events: none;
124
+ }
125
+ .ad-melody-trail > path {
126
+ fill: none;
127
+ stroke: color-mix(in oklch, var(--ad-secondary-100), #3dff91 calc(var(--ad-roll-accuracy) * 100%));
128
+ stroke-width: 0.15rem;
129
+ stroke-linecap: round;
130
+ stroke-linejoin: round;
131
+ opacity: 0.75;
132
+ }
133
+ /* The trail's glow without a filter: two wider, faint copies of the line under it, so the
134
+ growing trail is never re-blurred. */
135
+ .ad-melody-trail > path[data-halo] {
136
+ stroke: currentColor;
137
+ }
138
+ .ad-melody-trail > path[data-halo="wide"] {
139
+ stroke-width: calc(0.15rem + 0.5rem);
140
+ opacity: 0.1;
141
+ }
142
+ .ad-melody-trail > path[data-halo="near"] {
143
+ stroke-width: calc(0.15rem + 0.25rem);
144
+ opacity: 0.22;
145
+ }
146
+ .ad-melody-playhead {
147
+ position: absolute;
148
+ top: 0;
149
+ bottom: 0;
150
+ width: 0.125rem;
151
+ translate: -50% 0;
152
+ background: #fff;
153
+ box-shadow:
154
+ 0 0 0.6rem #fff,
155
+ 0 0 1rem var(--ad-primary);
156
+ }
157
+ /* The playhead flares on the beat: a wider glow, drawn once, faded in. */
158
+ .ad-melody-playhead::after {
159
+ content: "";
160
+ position: absolute;
161
+ inset: 0;
162
+ box-shadow:
163
+ 0 0 1.6rem #fff,
164
+ 0 0 2.6rem var(--ad-primary);
165
+ opacity: var(--ad-roll-beat);
166
+ will-change: opacity;
167
+ }
168
+ /* The singer's voice: grows with loudness, greens with accuracy. */
169
+ .ad-melody-voice {
170
+ --ad-voice: calc(0.95rem + var(--ad-roll-level) * 0.7rem);
171
+ position: absolute;
172
+ z-index: 3;
173
+ width: var(--ad-voice);
174
+ height: var(--ad-voice);
175
+ translate: -50% -50%;
176
+ border: 0.125rem solid #fff;
177
+ border-radius: 50%;
178
+ background: color-mix(in oklch, #fff, #2ee886 calc(var(--ad-roll-accuracy) * 100%));
179
+ box-shadow:
180
+ 0 0 0 0.2rem #ffffff22,
181
+ 0 0 calc(0.5rem + var(--ad-roll-accuracy) * 1rem) rgb(46 232 134 / calc(0.2 + var(--ad-roll-accuracy) * 0.7));
182
+ transition:
183
+ top 0.08s linear,
184
+ width 0.08s,
185
+ height 0.08s,
186
+ background 0.08s;
187
+ }
188
+ .ad-melody-voice[data-hit] {
189
+ background: #4dffa0;
190
+ animation: ad-melody-voice-hit 0.42s ease-out;
191
+ }
192
+ @keyframes ad-melody-voice-hit {
193
+ 45% {
194
+ scale: 1.35;
195
+ }
196
+ }
@@ -0,0 +1,24 @@
1
+ import { type CommonProps } from "../../../core/base";
2
+ /** Whether a MIDI note is a black key. */
3
+ export declare const isBlackKey: (midi: number) => boolean;
4
+ /** Scientific pitch name of a MIDI note: 60 is "C4". */
5
+ export declare const noteName: (midi: number) => string;
6
+ export interface PianoKeyboardProps extends CommonProps {
7
+ /** Lowest and highest MIDI notes shown, bottom to top. */
8
+ minMidi?: number;
9
+ maxMidi?: number;
10
+ /** The note being sung or played now; its key lights up. */
11
+ activeMidi?: number;
12
+ /** The active note is the right one: the key turns green and pulses. */
13
+ hit?: boolean;
14
+ /** Which keys carry their name. */
15
+ labels?: "all" | "octaves" | "none";
16
+ /** Pressing a key, e.g. to hear its pitch. Without it the keyboard is a picture. */
17
+ onKeyPress?: (midi: number) => void;
18
+ label?: string;
19
+ }
20
+ /**
21
+ * A vertical piano keyboard that fills its box: the sung note's key glows, a correct one turns
22
+ * green and pulses, a pressed key dips like a real one.
23
+ */
24
+ export declare const PianoKeyboard: import("react").NamedExoticComponent<PianoKeyboardProps>;
@@ -0,0 +1,83 @@
1
+ /* Styles owned by PianoKeyboard: ivory and ebony keys; the sung key glows, a correct one pulses green. */
2
+ .ad-piano-keyboard {
3
+ position: relative;
4
+ container-type: size;
5
+ width: 100%;
6
+ height: 100%;
7
+ min-height: 6rem;
8
+ overflow: hidden;
9
+ border-radius: 0 0.5rem 0.5rem 0;
10
+ background: var(--ad-neutral-950);
11
+ box-shadow: 0.35rem 0 1rem #0007;
12
+ user-select: none;
13
+ }
14
+ .ad-piano-key {
15
+ position: absolute;
16
+ left: 0;
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: flex-end;
20
+ width: 100%;
21
+ margin: 0;
22
+ padding: 0 0.3rem 0 0;
23
+ border: 0;
24
+ border-bottom: 0.0625rem solid #00000022;
25
+ border-radius: 0 0.3rem 0.3rem 0;
26
+ background: linear-gradient(90deg, #d8d4de, #f7f5fa 35%, #fff 70%, #e4e0e8);
27
+ box-shadow: inset -0.2rem 0 0.35rem #0000001a, inset 0 -0.0625rem 0 #ffffffb0;
28
+ color: var(--ad-primary);
29
+ font: 700 clamp(0.4rem, calc(100cqh / var(--ad-keys) * 0.55), 0.8rem) / 1 var(--ad-font-family-sans);
30
+ letter-spacing: 0.02em;
31
+ cursor: default;
32
+ transition:
33
+ background 0.18s,
34
+ box-shadow 0.18s,
35
+ color 0.18s,
36
+ translate 0.12s;
37
+ }
38
+ .ad-piano-key[data-black] {
39
+ z-index: 1;
40
+ width: 64%;
41
+ border: 0.0625rem solid #000;
42
+ background: linear-gradient(90deg, #030305, #16161c 55%, #2c2c35 88%, #18181e);
43
+ box-shadow: 0.15rem 0.2rem 0.35rem #000a, inset -0.0625rem 0 #ffffff1a;
44
+ color: var(--ad-neutral-200);
45
+ }
46
+ button.ad-piano-key {
47
+ cursor: pointer;
48
+ }
49
+ button.ad-piano-key:hover {
50
+ filter: brightness(1.08);
51
+ }
52
+ .ad-piano-key[data-pressed] {
53
+ translate: -0.12rem 0;
54
+ box-shadow: inset 0.25rem 0 0.5rem #0004;
55
+ }
56
+ /* The note being sung now. */
57
+ .ad-piano-key[data-active] {
58
+ color: #fff;
59
+ background: linear-gradient(90deg, var(--ad-primary-800), var(--ad-primary) 55%, var(--ad-secondary-100));
60
+ box-shadow:
61
+ inset 0 0 0.5rem #ffffff70,
62
+ 0 0 0.5rem var(--ad-primary),
63
+ 0 0 1.1rem rgb(from var(--ad-primary) r g b / 0.7);
64
+ }
65
+ /* …and it is the right note. */
66
+ .ad-piano-key[data-hit] {
67
+ color: #052a17;
68
+ background: linear-gradient(90deg, #12b85f, #6dffab 62%, #eafff3);
69
+ box-shadow:
70
+ inset 0 0 0.5rem #ffffffb8,
71
+ 0 0 0.55rem #3dff91,
72
+ 0 0 1.2rem #24e878b8;
73
+ animation: ad-piano-key-hit 0.9s ease-in-out infinite;
74
+ }
75
+ @keyframes ad-piano-key-hit {
76
+ 50% {
77
+ filter: brightness(1.25);
78
+ }
79
+ }
80
+ .ad-piano-key > span {
81
+ pointer-events: none;
82
+ white-space: nowrap;
83
+ }
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { type RotaryKnobProps } from "../shared";
3
+ export declare const RotaryKnob: (p: RotaryKnobProps) => React.JSX.Element;
@@ -0,0 +1,319 @@
1
+ /* Styles owned by RotaryKnob. */
2
+ /* Exact CSS geometry from premium-knob-interactive-neon(2).html, scoped to Neo UI. */
3
+ .ad-rotary-knob.knob {
4
+ --size: 13.75rem;
5
+ --angle: 45.9deg;
6
+ --rotation: 0deg;
7
+ position: relative;
8
+ width: min(var(--size), 100%);
9
+ max-width: 100%;
10
+ aspect-ratio: 1;
11
+ flex: none;
12
+ isolation: isolate;
13
+ -webkit-tap-highlight-color: transparent;
14
+ /* Leans towards the pointer in 3D; settles back when it leaves or is grabbed. */
15
+ transform: perspective(60rem) rotateX(var(--tilt-x, 0deg))
16
+ rotateY(var(--tilt-y, 0deg));
17
+ transition: transform 0.5s cubic-bezier(0.2, 0.8, 0.2, 1);
18
+ }
19
+ .ad-rotary-knob.knob::before {
20
+ content: "";
21
+ position: absolute;
22
+ inset: 3.8%;
23
+ border-radius: 50%;
24
+ pointer-events: none;
25
+ background: radial-gradient(
26
+ circle at 50% 50%,
27
+ transparent 58%,
28
+ rgb(from var(--ad-primary) r g b / 0.055) 68%,
29
+ transparent 78%
30
+ );
31
+ box-shadow:
32
+ 0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.18),
33
+ 0 0 3.25rem rgb(from var(--ad-primary) r g b / 0.12),
34
+ 0 0 5.375rem rgb(from var(--ad-primary) r g b / 0.06);
35
+ z-index: -1;
36
+ animation: ad-knob-breathe 5s ease-in-out infinite;
37
+ }
38
+ /* At rest the halo breathes slowly; grabbing the knob wakes it fully. */
39
+ @keyframes ad-knob-breathe {
40
+ 50% {
41
+ opacity: 0.6;
42
+ }
43
+ }
44
+ .ad-rotary-knob.is-dragging.knob::before {
45
+ animation: none;
46
+ }
47
+ .ad-rotary-knob.knob::after {
48
+ content: "";
49
+ position: absolute;
50
+ inset: 8.6%;
51
+ border-radius: 50%;
52
+ pointer-events: none;
53
+ border: 0.0625rem solid rgb(from var(--ad-primary) r g b / 0.16);
54
+ box-shadow:
55
+ inset 0 0 0.9375rem rgb(from var(--ad-primary) r g b / 0.12),
56
+ 0 0 0.75rem rgb(from var(--ad-primary) r g b / 0.1);
57
+ }
58
+ .ad-rotary-knob .knob__surface {
59
+ display: block;
60
+ position: absolute;
61
+ inset: 0;
62
+ width: 100%;
63
+ height: 100%;
64
+ pointer-events: none;
65
+ filter: hue-rotate(var(--ad-hue-shift, 0deg))
66
+ drop-shadow(0 0 0.4375rem rgb(from var(--ad-primary) r g b / 0.18))
67
+ drop-shadow(0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.1));
68
+ }
69
+ .ad-rotary-knob .knob__control {
70
+ position: absolute;
71
+ inset: 5.5%;
72
+ border-radius: 50%;
73
+ cursor: grab;
74
+ outline: none;
75
+ touch-action: none;
76
+ user-select: none;
77
+ -webkit-user-select: none;
78
+ }
79
+ .ad-rotary-knob .knob__control:active,
80
+ .ad-rotary-knob.is-dragging .knob__control {
81
+ cursor: grabbing;
82
+ }
83
+ .ad-rotary-knob.is-dragging .knob__surface,
84
+ .ad-rotary-knob:hover .knob__surface {
85
+ filter: hue-rotate(var(--ad-hue-shift, 0deg))
86
+ drop-shadow(0 0 0.625rem rgb(from var(--ad-primary) r g b / 0.28))
87
+ drop-shadow(0 0 1.75rem rgb(from var(--ad-primary) r g b / 0.16));
88
+ }
89
+ .ad-rotary-knob .knob__surface {
90
+ transition:
91
+ filter 0.4s ease,
92
+ scale 0.3s cubic-bezier(0.34, 1.56, 0.5, 1);
93
+ }
94
+ /* Depth: the knob stands off the panel and casts a soft shadow; the cap stands off the bezel. */
95
+ .ad-rotary-knob .knob__base {
96
+ filter: hue-rotate(var(--ad-hue-shift, 0deg))
97
+ drop-shadow(0 0.9rem 1.1rem #000c)
98
+ drop-shadow(0 0 0.4375rem rgb(from var(--ad-primary) r g b / 0.18))
99
+ drop-shadow(0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.1));
100
+ }
101
+ .ad-rotary-knob .knob__rotor-frame {
102
+ overflow: clip;
103
+ filter: hue-rotate(var(--ad-hue-shift, 0deg))
104
+ drop-shadow(0 0.35rem 0.45rem #000b);
105
+ }
106
+ .ad-rotary-knob .knob__rotor {
107
+ display: block;
108
+ width: 100%;
109
+ height: 100%;
110
+ transform: rotate(var(--rotation));
111
+ transform-origin: center;
112
+ will-change: transform;
113
+ }
114
+ /* Grabbed, the cap sinks a touch into the panel. */
115
+ .ad-rotary-knob.is-dragging .knob__rotor,
116
+ .ad-rotary-knob.is-dragging .knob__sheen {
117
+ scale: 0.975;
118
+ }
119
+ /* Fixed studio lights on the cap: the brushed metal turns, its highlights stay put. */
120
+ .ad-rotary-knob .knob__sheen {
121
+ position: absolute;
122
+ inset: 18.7%;
123
+ border-radius: 50%;
124
+ pointer-events: none;
125
+ background:
126
+ radial-gradient(circle at 34% 26%, #ffffff2e, transparent 42%),
127
+ conic-gradient(
128
+ from 0deg,
129
+ transparent 0deg,
130
+ #ffffff14 30deg,
131
+ transparent 70deg,
132
+ transparent 150deg,
133
+ rgb(from var(--ad-secondary) r g b / 0.07) 200deg,
134
+ transparent 240deg,
135
+ transparent 300deg,
136
+ #ffffff10 330deg,
137
+ transparent 360deg
138
+ );
139
+ box-shadow:
140
+ inset 0 0.0625rem 0.0625rem #ffffff2a,
141
+ inset 0 -0.25rem 0.75rem #0009;
142
+ mix-blend-mode: screen;
143
+ transition: scale 0.3s cubic-bezier(0.34, 1.56, 0.5, 1);
144
+ }
145
+ /* The value sits in the scale's dead zone at the bottom, like a hardware display;
146
+ click it to type a number. */
147
+ .ad-rotary-knob .knob__value,
148
+ .ad-rotary-knob .knob__input {
149
+ position: absolute;
150
+ left: 50%;
151
+ bottom: 2.5%;
152
+ translate: -50% 0;
153
+ min-width: 3.4em;
154
+ padding: 0.12em 0.45em;
155
+ border-radius: 0.4em;
156
+ color: var(--ad-neutral-200);
157
+ font: 600 max(0.625rem, calc(var(--size) * 0.068)) / 1.2
158
+ var(--ad-font-family-mono, monospace);
159
+ font-variant-numeric: tabular-nums;
160
+ text-align: center;
161
+ text-shadow:
162
+ 0 0 0.3125rem var(--ad-neutral-200),
163
+ 0 0 0.875rem var(--ad-primary);
164
+ background: linear-gradient(rgb(from var(--ad-neutral-900) r g b / 0.9), rgb(from var(--ad-neutral-850) r g b / 0.9));
165
+ box-shadow:
166
+ inset 0 0 0 0.0625rem rgb(from var(--ad-primary) r g b / 0.24),
167
+ inset 0 0.0625rem 0 #ffffff14,
168
+ 0 0.25rem 0.75rem #0009;
169
+ transition:
170
+ box-shadow 0.25s,
171
+ color 0.25s;
172
+ }
173
+ .ad-rotary-knob .knob__value[data-editable] {
174
+ cursor: text;
175
+ }
176
+ .ad-rotary-knob .knob__value[data-editable]:hover {
177
+ box-shadow:
178
+ inset 0 0 0 0.0625rem rgb(from var(--ad-secondary) r g b / 0.67),
179
+ inset 0 0.0625rem 0 #ffffff1f,
180
+ 0 0 0.9rem rgb(from var(--ad-primary) r g b / 0.33);
181
+ }
182
+ .ad-rotary-knob .knob__value[data-editing] {
183
+ visibility: hidden;
184
+ }
185
+ .ad-rotary-knob .knob__input {
186
+ width: 3.4em;
187
+ border: 0;
188
+ outline: none;
189
+ box-shadow:
190
+ inset 0 0 0 0.0625rem var(--ad-secondary),
191
+ 0 0 1rem rgb(from var(--ad-primary) r g b / 0.47);
192
+ caret-color: #fff;
193
+ }
194
+ .ad-rotary-knob[data-ad-size="xs"] .knob__value,
195
+ .ad-rotary-knob[data-ad-size="xs"] .knob__input {
196
+ bottom: -0.4em;
197
+ }
198
+ .ad-rotary-knob .knob__control:focus-visible::after {
199
+ content: "";
200
+ position: absolute;
201
+ inset: -2%;
202
+ border: 0.125rem solid var(--ad-secondary);
203
+ border-radius: inherit;
204
+ box-shadow: 0 0 0.75rem rgb(from var(--ad-primary) r g b / 0.27);
205
+ pointer-events: none;
206
+ filter: drop-shadow(0 0 0.4375rem rgb(from var(--ad-primary) r g b / 0.18))
207
+ drop-shadow(0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.1));
208
+ }
209
+ .ad-rotary-knob .knob__indicator {
210
+ position: absolute;
211
+ inset: 0;
212
+ border-radius: 50%;
213
+ pointer-events: none;
214
+ }
215
+ .ad-rotary-knob .knob__slot {
216
+ position: absolute;
217
+ left: 48.4%;
218
+ top: 16.65%;
219
+ width: 3.2%;
220
+ height: 11.25%;
221
+ /* Orbit the small marker around the control's centre; rotating its full-size
222
+ invisible wrapper would enlarge the container's scrollable bounds. */
223
+ transform: rotate(var(--angle));
224
+ transform-origin: 50% calc(100% * (50 - 16.65) / 11.25);
225
+ will-change: transform;
226
+ border-radius: 62.4375rem;
227
+ background: linear-gradient(
228
+ 90deg,
229
+ var(--ad-neutral-950) 0%,
230
+ var(--ad-primary-900) 25%,
231
+ var(--ad-primary-800) 66%,
232
+ var(--ad-primary-900) 100%
233
+ );
234
+ box-shadow:
235
+ 0 0 0 0.0625rem var(--ad-primary-900),
236
+ 0 0.0625rem 0.0625rem 0.0625rem rgb(from var(--ad-secondary) r g b / 0.5),
237
+ inset 0.0625rem 0.1875rem 0.3125rem #000,
238
+ 0 0 0.625rem 0.1875rem rgb(from var(--ad-primary) r g b / 0.38),
239
+ 0 0 1.5rem 0.375rem rgb(from var(--ad-primary) r g b / 0.16);
240
+ }
241
+ .ad-rotary-knob .knob__slot::before {
242
+ content: "";
243
+ position: absolute;
244
+ inset: 9% 20%;
245
+ border-radius: inherit;
246
+ background: linear-gradient(
247
+ 90deg,
248
+ var(--ad-primary) 0%,
249
+ var(--ad-secondary) 17%,
250
+ var(--ad-neutral-200) 47%,
251
+ #fff 62%,
252
+ var(--ad-secondary) 85%,
253
+ var(--ad-primary) 100%
254
+ );
255
+ box-shadow:
256
+ 0 0 0.125rem 0.0625rem var(--ad-neutral-200),
257
+ 0 0 0.3125rem 0.125rem var(--ad-primary),
258
+ 0 0 0.875rem 0.25rem rgb(from var(--ad-primary) r g b / 0.82),
259
+ 0 0 1.875rem 0.5rem rgb(from var(--ad-primary) r g b / 0.38),
260
+ 0 0 3.375rem 0.75rem rgb(from var(--ad-primary) r g b / 0.16);
261
+ }
262
+ .ad-rotary-knob .knob__slot::after {
263
+ content: "";
264
+ position: absolute;
265
+ inset: -7% -40%;
266
+ border-radius: 50%;
267
+ background: radial-gradient(ellipse, rgb(from var(--ad-primary) r g b / 0.08) 20%, transparent 72%);
268
+ }
269
+ .ad-rotary-knob[data-disabled="true"] {
270
+ opacity: 0.45;
271
+ filter: saturate(0.55);
272
+ pointer-events: none;
273
+ }
274
+ .ad-rotary-knob[data-readonly="true"] .knob__control {
275
+ cursor: default;
276
+ }
277
+ .ad-sr-only {
278
+ position: absolute !important;
279
+ width: 0.0625rem !important;
280
+ height: 0.0625rem !important;
281
+ padding: 0 !important;
282
+ margin: -0.0625rem !important;
283
+ overflow: hidden !important;
284
+ clip-path: inset(50%) !important;
285
+ white-space: nowrap !important;
286
+ border: 0 !important;
287
+ }
288
+ @media (prefers-reduced-motion: reduce) {
289
+ .ad-rotary-knob .knob__indicator,
290
+ .ad-rotary-knob .knob__rotor {
291
+ will-change: auto;
292
+ }
293
+ }
294
+ /* Hover and grab brighten the glow but keep the depth shadows. */
295
+ .ad-rotary-knob:is(:hover, .is-dragging) .knob__base {
296
+ filter: hue-rotate(var(--ad-hue-shift, 0deg))
297
+ drop-shadow(0 0.9rem 1.1rem #000c)
298
+ drop-shadow(0 0 0.625rem rgb(from var(--ad-primary) r g b / 0.28))
299
+ drop-shadow(0 0 1.75rem rgb(from var(--ad-primary) r g b / 0.16));
300
+ }
301
+ .ad-rotary-knob:is(:hover, .is-dragging) .knob__rotor {
302
+ filter: hue-rotate(var(--ad-hue-shift, 0deg))
303
+ drop-shadow(0 0.35rem 0.45rem #000b);
304
+ }
305
+
306
+ /* A printed label under the knob; the knob keeps room for it below. */
307
+ .ad-rotary-knob.knob[data-labelled] {
308
+ margin-block-end: 1.6em;
309
+ }
310
+ .ad-rotary-knob .knob__label {
311
+ position: absolute;
312
+ top: 100%;
313
+ left: 50%;
314
+ translate: -50% 0.4em;
315
+ color: var(--ad-muted);
316
+ font-size: var(--ad-font-size-caption);
317
+ white-space: nowrap;
318
+ pointer-events: none;
319
+ }
@@ -0,0 +1,2 @@
1
+ import { type SparklineProps } from "../shared";
2
+ export declare const Sparkline: (p: SparklineProps) => import("react").JSX.Element;
@@ -0,0 +1,70 @@
1
+ /* Styles owned by Sparkline. */
2
+ .ad-sparkline {
3
+ display: block;
4
+ width: 100%;
5
+ max-width: 20rem;
6
+ aspect-ratio: 24 / 7;
7
+ height: auto;
8
+ position: relative;
9
+ overflow: visible;
10
+ }
11
+ /* The drawings lie over each other; the beacon is isolated in a separate SVG. */
12
+ .ad-sparkline > svg {
13
+ position: absolute;
14
+ inset: 0;
15
+ display: block;
16
+ width: 100%;
17
+ height: 100%;
18
+ overflow: visible;
19
+ }
20
+ .ad-sparkline-area {
21
+ animation: ad-spark-fade 1.2s 0.4s ease-out both;
22
+ }
23
+ .ad-sparkline-line {
24
+ fill: none;
25
+ stroke: var(--ad-spark);
26
+ stroke-width: 1.6;
27
+ stroke-linecap: round;
28
+ stroke-linejoin: round;
29
+ vector-effect: non-scaling-stroke;
30
+ stroke-dasharray: 1;
31
+ filter: drop-shadow(0 0 0.25rem var(--ad-spark));
32
+ animation: ad-spark-draw 1.4s cubic-bezier(0.6, 0, 0.2, 1) both;
33
+ }
34
+ .ad-sparkline-dot {
35
+ fill: #fff;
36
+ vector-effect: non-scaling-stroke;
37
+ filter: drop-shadow(0 0 0.3rem var(--ad-spark));
38
+ }
39
+ .ad-sparkline-ping {
40
+ fill: none;
41
+ stroke: var(--ad-spark);
42
+ stroke-width: 1;
43
+ vector-effect: non-scaling-stroke;
44
+ transform-box: fill-box;
45
+ transform-origin: center;
46
+ animation: ad-spark-ping 1.8s 1.4s ease-out infinite;
47
+ }
48
+ @keyframes ad-spark-draw {
49
+ from {
50
+ stroke-dashoffset: 1;
51
+ }
52
+ to {
53
+ stroke-dashoffset: 0;
54
+ }
55
+ }
56
+ @keyframes ad-spark-fade {
57
+ from {
58
+ opacity: 0;
59
+ }
60
+ }
61
+ @keyframes ad-spark-ping {
62
+ from {
63
+ scale: 1;
64
+ opacity: 0.9;
65
+ }
66
+ to {
67
+ scale: 4;
68
+ opacity: 0;
69
+ }
70
+ }
@@ -0,0 +1,2 @@
1
+ import { type CommonProps } from "../../../core/base";
2
+ export declare const WaveDecoration: (p: CommonProps) => import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ /* Styles owned by WaveDecoration. */
2
+ /* Animated path data needs no full-width transform layer. */