@neo-ui-kit/react 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +203 -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,204 @@
1
+ import React from "react";
2
+ import type { ButtonHTMLAttributes, InputHTMLAttributes, ReactNode, Ref } from "react";
3
+ import { type CommonProps, type Variant } from "../../core/base";
4
+ import type { MenuProps } from "../feedback/shared";
5
+ export interface ButtonProps extends CommonProps, Omit<ButtonHTMLAttributes<HTMLButtonElement>, keyof CommonProps | "color"> {
6
+ variant?: Variant;
7
+ icon?: string;
8
+ endIcon?: string;
9
+ loading?: boolean;
10
+ round?: boolean;
11
+ label?: string;
12
+ ref?: Ref<HTMLButtonElement>;
13
+ }
14
+ export declare function buttonView(p: ButtonProps, name?: string): React.JSX.Element;
15
+ export interface IconButtonProps extends ButtonProps {
16
+ label: string;
17
+ }
18
+ export interface ToggleButtonProps extends ButtonProps {
19
+ checked?: boolean;
20
+ defaultChecked?: boolean;
21
+ onValueChange?: (value: boolean) => void;
22
+ }
23
+ export interface SplitButtonProps extends CommonProps {
24
+ variant?: Variant;
25
+ icon?: string;
26
+ label?: string;
27
+ items?: MenuProps["items"];
28
+ onClick?: () => void;
29
+ children?: ReactNode;
30
+ }
31
+ export interface TabProps extends ButtonProps {
32
+ selected?: boolean;
33
+ panelId?: string;
34
+ }
35
+ export interface TabItem<V extends string = string> {
36
+ value: V;
37
+ label: ReactNode;
38
+ icon?: string;
39
+ disabled?: boolean;
40
+ panelId?: string;
41
+ id?: string;
42
+ }
43
+ /** `V` narrows the values, e.g. `Tabs<"audio" | "video">`, so handlers get the exact type. */
44
+ export interface TabsProps<V extends string = string> extends CommonProps {
45
+ items?: TabItem<V>[];
46
+ value?: V;
47
+ defaultValue?: V;
48
+ onValueChange?: (value: V) => void;
49
+ label?: string;
50
+ }
51
+ /** Field appearance: boxed outline, tinted fill or a single bottom line. */
52
+ export type InputVariant = "outlined" | "filled" | "underlined";
53
+ /** Label above the field, or inside it rising on focus like Material inputs. */
54
+ export type LabelPlacement = "top" | "floating";
55
+ export interface FieldProps extends CommonProps, Omit<InputHTMLAttributes<HTMLInputElement>, keyof CommonProps | "size" | "value" | "defaultValue" | "onChange"> {
56
+ value?: string;
57
+ defaultValue?: string;
58
+ onValueChange?: (value: string) => void;
59
+ startAdornment?: ReactNode;
60
+ endAdornment?: ReactNode;
61
+ inputRef?: Ref<HTMLInputElement>;
62
+ variant?: InputVariant;
63
+ labelPlacement?: LabelPlacement;
64
+ }
65
+ export interface TextFieldProps extends FieldProps {
66
+ label?: ReactNode;
67
+ description?: ReactNode;
68
+ error?: ReactNode;
69
+ clearable?: boolean;
70
+ type?: InputHTMLAttributes<HTMLInputElement>["type"];
71
+ }
72
+ export interface NumberFieldProps extends Omit<TextFieldProps, "value" | "defaultValue" | "onValueChange" | "type"> {
73
+ value?: number | "";
74
+ defaultValue?: number | "";
75
+ onValueChange?: (value: number | "") => void;
76
+ /** The − and + buttons; off for values applied only when typing ends. */
77
+ controls?: boolean;
78
+ }
79
+ export interface TextAreaProps extends Omit<CommonProps, "children">, Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, keyof CommonProps | "value" | "defaultValue" | "onChange"> {
80
+ value?: string;
81
+ defaultValue?: string;
82
+ onValueChange?: (value: string) => void;
83
+ label?: ReactNode;
84
+ description?: ReactNode;
85
+ error?: ReactNode;
86
+ startAdornment?: ReactNode;
87
+ endAdornment?: ReactNode;
88
+ variant?: InputVariant;
89
+ labelPlacement?: LabelPlacement;
90
+ /** Which way the reader may drag the corner; `both` lets the field follow the width too. */
91
+ resize?: "vertical" | "both" | "none";
92
+ }
93
+ export interface AutocompleteOption {
94
+ value: string;
95
+ label: string;
96
+ }
97
+ export interface AutocompleteProps extends TextFieldProps {
98
+ options?: Array<string | AutocompleteOption>;
99
+ onOptionSelect?: (value: string) => void;
100
+ }
101
+ /** One choice of a Select: any value, shown with rich content. */
102
+ export interface SelectOption<V = string> {
103
+ value: V;
104
+ /** What the option shows; any content (text, badges, markup). */
105
+ label: ReactNode;
106
+ /** Plain text of the option for search, screen readers and the form value; defaults to the label when it is text. */
107
+ text?: string;
108
+ /** Icon before the label. */
109
+ icon?: string;
110
+ /** A person or item picture before the label: initials from `name`, or a photo. */
111
+ avatar?: {
112
+ name: string;
113
+ src?: string;
114
+ };
115
+ /** A second, quieter line under the label. */
116
+ description?: ReactNode;
117
+ /** Options with the same group are listed together under its name. */
118
+ group?: string;
119
+ disabled?: boolean;
120
+ }
121
+ /**
122
+ * `V` is the type of the values: strings, numbers or whole objects, e.g. `Select<User>`;
123
+ * the handler gets that exact type back.
124
+ * `className` and `style` size the field wrapper; `id`, ARIA and data attributes target
125
+ * the native trigger button. Explicit ARIA replaces the field label; the rendered value
126
+ * remains part of the button's accessible name for voice control.
127
+ */
128
+ export interface SelectProps<V = string> extends CommonProps {
129
+ label?: ReactNode;
130
+ description?: ReactNode;
131
+ error?: ReactNode;
132
+ placeholder?: string;
133
+ startAdornment?: ReactNode;
134
+ endAdornment?: ReactNode;
135
+ /** Plain strings or numbers, or options with labels, icons, avatars, descriptions and groups. */
136
+ options?: Array<(V & (string | number)) | SelectOption<V>>;
137
+ value?: V;
138
+ defaultValue?: V;
139
+ onValueChange?: (value: V) => void;
140
+ /** Identity of a value, for values that are objects (default: the value itself, or its JSON). */
141
+ getKey?: (value: V) => string;
142
+ /** Your own content for an option in the list. */
143
+ renderOption?: (option: SelectOption<V>, state: {
144
+ selected: boolean;
145
+ }) => ReactNode;
146
+ /** Your own content for the chosen value in the field. */
147
+ renderValue?: (option: SelectOption<V>) => ReactNode;
148
+ /** A search box above the list, for long lists. */
149
+ searchable?: boolean;
150
+ /** Placeholder of the search box. */
151
+ searchPlaceholder?: string;
152
+ icon?: string;
153
+ disabled?: boolean;
154
+ required?: boolean;
155
+ name?: string;
156
+ ref?: Ref<HTMLButtonElement>;
157
+ variant?: InputVariant;
158
+ labelPlacement?: LabelPlacement;
159
+ }
160
+ export interface BooleanProps extends CommonProps {
161
+ checked?: boolean;
162
+ defaultChecked?: boolean;
163
+ onValueChange?: (value: boolean) => void;
164
+ label?: ReactNode;
165
+ disabled?: boolean;
166
+ name?: string;
167
+ required?: boolean;
168
+ /** Checkbox only: neither on nor off, e.g. "select all" when some rows are chosen. */
169
+ indeterminate?: boolean;
170
+ }
171
+ export interface BooleanControlProps extends BooleanProps {
172
+ kind: "Switch" | "Checkbox";
173
+ }
174
+ export declare function BooleanControl({ kind, ...p }: BooleanControlProps): React.JSX.Element;
175
+ export interface SliderProps extends CommonProps {
176
+ value?: number;
177
+ defaultValue?: number;
178
+ min?: number;
179
+ max?: number;
180
+ step?: number;
181
+ label?: string;
182
+ disabled?: boolean;
183
+ onValueChange?: (value: number) => void;
184
+ ref?: Ref<HTMLInputElement>;
185
+ }
186
+ export interface FilePickerProps extends CommonProps {
187
+ label?: string;
188
+ description?: string;
189
+ icon?: string;
190
+ /** Name and existing photo used by the avatar chooser. */
191
+ name?: string;
192
+ src?: string;
193
+ avatarVariant?: "initials" | "host";
194
+ accept?: string;
195
+ multiple?: boolean;
196
+ onFiles?: (files: File[]) => void;
197
+ /** "zone" is a large drop area; "avatar" is an animated image chooser with an edit affordance. */
198
+ variant?: "button" | "zone" | "avatar";
199
+ /** Your own chooser instead of the browser's file input (e.g. a native dialog of a desktop app). */
200
+ onPick?: () => void;
201
+ /** Name of the chosen file, when the choice is kept outside (with `onPick`). */
202
+ value?: string;
203
+ disabled?: boolean;
204
+ }
@@ -0,0 +1,65 @@
1
+ import { type CommonProps } from "../../../core/base";
2
+ export interface PianoRollNote {
3
+ id: string;
4
+ /** Seconds. */
5
+ start: number;
6
+ end: number;
7
+ /** MIDI pitch: 60 is C4. */
8
+ pitch: number;
9
+ }
10
+ export interface PianoRollWord {
11
+ id: string;
12
+ text: string;
13
+ start: number;
14
+ end: number;
15
+ }
16
+ /** A drag in progress, measured from where it started; the owner applies its own rules (snapping, limits). */
17
+ export type PianoRollGesture = {
18
+ kind: "move";
19
+ ids: readonly string[];
20
+ pitch: number;
21
+ seconds: number;
22
+ } | {
23
+ kind: "resize";
24
+ id: string;
25
+ edge: "start" | "end";
26
+ seconds: number;
27
+ };
28
+ export interface PianoRollProps extends CommonProps {
29
+ notes?: readonly PianoRollNote[];
30
+ words?: readonly PianoRollWord[];
31
+ /** Length of the song, seconds. */
32
+ duration?: number;
33
+ /** Playback position, seconds. */
34
+ position?: number;
35
+ selected?: ReadonlySet<string>;
36
+ /** Horizontal zoom, 1 = a comfortable default; Ctrl + wheel changes it. */
37
+ zoom?: number;
38
+ defaultZoom?: number;
39
+ onZoomChange?: (zoom: number) => void;
40
+ /** Pitch range, lowest to highest MIDI note. */
41
+ minPitch?: number;
42
+ maxPitch?: number;
43
+ /** Keep the playhead in view while it moves. */
44
+ follow?: boolean;
45
+ /** Show the beat grid. */
46
+ grid?: boolean;
47
+ /** Seconds an arrow key moves a note. */
48
+ nudgeSeconds?: number;
49
+ onSelect?: (id: string, additive: boolean) => void;
50
+ onSelectArea?: (ids: string[], additive: boolean) => void;
51
+ onSeek?: (seconds: number) => void;
52
+ /** Offsets from the gesture start; cancellation sends zero offsets before `onNoteDragEnd`. */
53
+ onNoteDrag?: (gesture: PianoRollGesture) => void;
54
+ onNoteDragEnd?: () => void;
55
+ onNudge?: (id: string, pitch: number, seconds: number) => void;
56
+ /** Pressing a key, e.g. to hear its pitch. */
57
+ onKeyPress?: (midi: number) => void;
58
+ label?: string;
59
+ }
60
+ /**
61
+ * A melody editor: notes on a piano grid with the keyboard at the left, a ruler to seek, the
62
+ * syllables under the notes and the playhead. Drag a note to move it in time and pitch, drag its
63
+ * edges to change its length, drag on the empty grid to select an area, Ctrl + wheel to zoom.
64
+ */
65
+ export declare const PianoRoll: ({ notes, words, duration, position, selected, zoom: zoomProp, defaultZoom, onZoomChange, minPitch, maxPitch, follow, grid, nudgeSeconds, onSelect, onSelectArea, onSeek, onNoteDrag, onNoteDragEnd, onNudge, onKeyPress, label, ...p }: PianoRollProps) => import("react").JSX.Element;
@@ -0,0 +1,186 @@
1
+ /* Styles owned by PianoRoll: a scrolling piano grid; the keyboard and ruler stay in view, notes are
2
+ glossy capsules that glow when selected and flare under the playhead. */
3
+ .ad-piano-roll {
4
+ --ad-roll-row: clamp(0.85rem, 2.2dvh, 1.35rem);
5
+ --ad-roll-keys: clamp(3rem, 7vw, 4.5rem);
6
+ position: relative;
7
+ min-width: 0;
8
+ min-height: 12rem;
9
+ border: 0.0625rem solid rgb(from var(--ad-primary) r g b / 0.25);
10
+ border-radius: var(--ad-radius-lg, 1rem);
11
+ background: var(--ad-neutral-950);
12
+ overflow: hidden;
13
+ user-select: none;
14
+ -webkit-user-select: none;
15
+ }
16
+ .ad-piano-roll-scroll {
17
+ display: grid;
18
+ grid-template-columns: var(--ad-roll-keys) max-content;
19
+ width: 100%;
20
+ height: 100%;
21
+ overflow: auto;
22
+ scrollbar-width: thin;
23
+ scrollbar-color: var(--ad-primary-700) transparent;
24
+ }
25
+ .ad-piano-roll-corner {
26
+ position: sticky;
27
+ left: 0;
28
+ z-index: 4;
29
+ background: var(--ad-neutral-900);
30
+ }
31
+ .ad-piano-roll-corner:first-child {
32
+ top: 0;
33
+ z-index: 5;
34
+ }
35
+ /* The corner beside the syllables stays with them at the bottom, covering the keyboard under it. */
36
+ .ad-piano-roll-corner:has(+ .ad-piano-roll-words) {
37
+ bottom: 0;
38
+ z-index: 5;
39
+ border-top: 0.0625rem solid #ffffff14;
40
+ }
41
+ /* Ruler: seconds, the playhead mark; press to seek. */
42
+ .ad-piano-roll-ruler {
43
+ position: sticky;
44
+ top: 0;
45
+ z-index: 3;
46
+ height: 1.5rem;
47
+ border-bottom: 0.0625rem solid #ffffff14;
48
+ background: linear-gradient(180deg, var(--ad-neutral-850), var(--ad-neutral-900));
49
+ cursor: pointer;
50
+ }
51
+ .ad-piano-roll-ruler > span {
52
+ position: absolute;
53
+ bottom: 0.1rem;
54
+ padding-left: 0.2rem;
55
+ border-left: 0.0625rem solid #ffffff22;
56
+ color: var(--ad-muted);
57
+ font-size: var(--ad-font-size-caption);
58
+ line-height: 1;
59
+ }
60
+ .ad-piano-roll-ruler > span[data-major] {
61
+ border-left-color: rgb(from var(--ad-primary) r g b / 0.6);
62
+ color: var(--ad-text);
63
+ }
64
+ .ad-piano-roll-head-mark {
65
+ position: absolute;
66
+ top: 0;
67
+ bottom: 0;
68
+ width: 0.6rem;
69
+ translate: -50% 0;
70
+ background: var(--ad-primary);
71
+ clip-path: polygon(0 0, 100% 0, 50% 100%);
72
+ }
73
+ .ad-piano-roll-keys.ad-piano-keyboard {
74
+ position: sticky;
75
+ left: 0;
76
+ z-index: 2;
77
+ height: calc(var(--ad-roll-row) * var(--ad-roll-rows));
78
+ min-height: 0;
79
+ border-radius: 0;
80
+ }
81
+ /* The grid: a shaded band for every black key, a line every second. */
82
+ .ad-piano-roll-world {
83
+ position: relative;
84
+ height: calc(var(--ad-roll-row) * var(--ad-roll-rows));
85
+ cursor: crosshair;
86
+ }
87
+ .ad-piano-roll[data-grid] .ad-piano-roll-world {
88
+ background:
89
+ linear-gradient(90deg, #ffffff12 0.0625rem, transparent 0.0625rem) 0 0 / var(--ad-pps) 100%,
90
+ linear-gradient(#ffffff08 0.0625rem, transparent 0.0625rem) 0 0 / 100% var(--ad-roll-row);
91
+ }
92
+ .ad-piano-roll-row {
93
+ position: absolute;
94
+ left: 0;
95
+ right: 0;
96
+ height: var(--ad-roll-row);
97
+ background: #ffffff05;
98
+ pointer-events: none;
99
+ }
100
+ .ad-piano-roll-note {
101
+ position: absolute;
102
+ height: var(--ad-roll-row);
103
+ }
104
+ .ad-piano-roll-note-body {
105
+ position: absolute;
106
+ inset: 12% 0;
107
+ width: 100%;
108
+ padding: 0;
109
+ border: 0;
110
+ border-radius: 999px;
111
+ background: linear-gradient(90deg, var(--ad-primary), var(--ad-secondary));
112
+ box-shadow: inset 0 0.0625rem 0 #ffffff55, 0 0 0.4rem rgb(from var(--ad-primary) r g b / 0.45);
113
+ cursor: grab;
114
+ transition: filter 0.15s, box-shadow 0.15s;
115
+ }
116
+ .ad-piano-roll-note-body:active {
117
+ cursor: grabbing;
118
+ }
119
+ .ad-piano-roll-note-body:focus-visible {
120
+ outline: 0.125rem solid #fff;
121
+ outline-offset: 0.1rem;
122
+ }
123
+ .ad-piano-roll-note[data-selected] .ad-piano-roll-note-body {
124
+ box-shadow: inset 0 0 0 0.125rem #fff, 0 0 0.9rem var(--ad-primary);
125
+ }
126
+ .ad-piano-roll-note[data-now] .ad-piano-roll-note-body {
127
+ filter: brightness(1.35);
128
+ }
129
+ .ad-piano-roll-edge {
130
+ position: absolute;
131
+ top: 0;
132
+ bottom: 0;
133
+ width: max(0.35rem, 18%);
134
+ max-width: 0.6rem;
135
+ cursor: ew-resize;
136
+ }
137
+ .ad-piano-roll-edge[data-edge="start"] {
138
+ left: 0;
139
+ }
140
+ .ad-piano-roll-edge[data-edge="end"] {
141
+ right: 0;
142
+ }
143
+ .ad-piano-roll-area {
144
+ position: absolute;
145
+ display: none;
146
+ border: 0.0625rem dashed var(--ad-secondary-100);
147
+ background: rgb(from var(--ad-primary) r g b / 0.12);
148
+ pointer-events: none;
149
+ }
150
+ .ad-piano-roll-playhead {
151
+ position: absolute;
152
+ top: 0;
153
+ bottom: 0;
154
+ width: 0.125rem;
155
+ translate: -50% 0;
156
+ background: #fff;
157
+ box-shadow: 0 0 0.6rem #fff, 0 0 1rem var(--ad-primary);
158
+ pointer-events: none;
159
+ }
160
+ /* Syllables under the notes: sung ones dim, the current one lights up. */
161
+ .ad-piano-roll-words {
162
+ position: sticky;
163
+ bottom: 0;
164
+ z-index: 3;
165
+ height: 1.6rem;
166
+ border-top: 0.0625rem solid #ffffff14;
167
+ background: var(--ad-neutral-900);
168
+ }
169
+ .ad-piano-roll-words > span {
170
+ position: absolute;
171
+ top: 0.25rem;
172
+ overflow: hidden;
173
+ padding-left: 0.2rem;
174
+ border-left: 0.0625rem solid rgb(from var(--ad-primary) r g b / 0.4);
175
+ color: var(--ad-text);
176
+ font-size: var(--ad-font-size-caption);
177
+ white-space: nowrap;
178
+ text-overflow: ellipsis;
179
+ }
180
+ .ad-piano-roll-words > span[data-sung] {
181
+ color: var(--ad-muted);
182
+ }
183
+ .ad-piano-roll-words > span[data-now] {
184
+ color: var(--ad-secondary-100);
185
+ text-shadow: 0 0 0.4rem var(--ad-primary);
186
+ }
@@ -0,0 +1 @@
1
+ /* Shared only by sibling components. */
@@ -0,0 +1,9 @@
1
+ import type { ElementType, ReactNode } from "react";
2
+ import { type CommonProps } from "../../../core/base";
3
+ export interface AnimatedBorderProps extends CommonProps {
4
+ as?: ElementType;
5
+ children?: ReactNode;
6
+ shell?: boolean;
7
+ round?: boolean;
8
+ }
9
+ export declare function AnimatedBorder({ as, shell, round, children, ...props }: AnimatedBorderProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
@@ -0,0 +1,7 @@
1
+ /* AnimatedBorder owns only the decoration host. Layout stays with the consumer. */
2
+ .ad-animated-border {
3
+ position: relative;
4
+ min-width: 0;
5
+ min-height: 0;
6
+ border-radius: inherit;
7
+ }
@@ -0,0 +1,9 @@
1
+ import { type CommonProps } from "../../../core/base";
2
+ export interface BeaconProps extends CommonProps {
3
+ /** Rings run only while active. */
4
+ active?: boolean;
5
+ /** Ring colour; defaults to the theme accent. */
6
+ color?: string;
7
+ }
8
+ /** Radar rings spreading from behind the content, to draw attention to it. */
9
+ export declare function Beacon({ active, color, style, children, ...p }: BeaconProps): import("react").JSX.Element;
@@ -0,0 +1,38 @@
1
+ /* Styles owned by Beacon. */
2
+ .ad-beacon {
3
+ --ad-beacon: var(--ad-red);
4
+ position: relative;
5
+ contain: layout;
6
+ display: inline-grid;
7
+ place-items: center;
8
+ isolation: isolate;
9
+ }
10
+ .ad-beacon > i {
11
+ position: absolute;
12
+ z-index: -1;
13
+ inset: 0;
14
+ border-radius: 50%;
15
+ border: 0.125rem solid var(--ad-beacon);
16
+ box-shadow: 0 0 1rem var(--ad-beacon);
17
+ opacity: 0;
18
+ pointer-events: none;
19
+ }
20
+ .ad-beacon[data-active] > i {
21
+ animation: ad-beacon-ring 2.4s cubic-bezier(0.2, 0.6, 0.3, 1) infinite;
22
+ }
23
+ .ad-beacon[data-active] > i:nth-child(2) {
24
+ animation-delay: 0.8s;
25
+ }
26
+ .ad-beacon[data-active] > i:nth-child(3) {
27
+ animation-delay: 1.6s;
28
+ }
29
+ @keyframes ad-beacon-ring {
30
+ from {
31
+ opacity: 0.85;
32
+ scale: 0.9;
33
+ }
34
+ to {
35
+ opacity: 0;
36
+ scale: 2.2;
37
+ }
38
+ }
@@ -0,0 +1,14 @@
1
+ import { type CommonProps } from "../../../core/base";
2
+ export interface EqualizerProps extends CommonProps {
3
+ /** Number of bars. */
4
+ bars?: number;
5
+ /** Bars move only while playing. */
6
+ playing?: boolean;
7
+ /** Bar heights 0–1 from a live spectrum; they replace the built-in bounce. */
8
+ levels?: readonly number[];
9
+ /** Shifts the bounce, in seconds, so neighbouring equalizers do not move in step. */
10
+ phase?: number;
11
+ label?: string;
12
+ }
13
+ /** "Now playing" bars that bounce at different tempos. */
14
+ export declare function Equalizer({ bars, playing, levels, phase, label, ...p }: EqualizerProps): import("react").JSX.Element;
@@ -0,0 +1,38 @@
1
+ /* Styles owned by Equalizer. Size follows the font size. */
2
+ .ad-equalizer {
3
+ display: inline-flex;
4
+ align-items: flex-end;
5
+ gap: 0.15em;
6
+ height: 1.25em;
7
+ }
8
+ .ad-equalizer > i {
9
+ width: 0.22em;
10
+ height: 100%;
11
+ border-radius: 999rem;
12
+ background: linear-gradient(0deg, var(--ad-primary), var(--ad-secondary-100));
13
+ box-shadow: 0 0 0.35em rgb(from var(--ad-primary) r g b / 0.53);
14
+ transform-origin: bottom;
15
+ scale: 1 0.25;
16
+ transition: scale 0.3s;
17
+ }
18
+ .ad-equalizer[data-playing] > i {
19
+ animation: ad-eq-bounce 0.8s ease-in-out infinite alternate;
20
+ }
21
+ @keyframes ad-eq-bounce {
22
+ 0% {
23
+ scale: 1 0.2;
24
+ }
25
+ 40% {
26
+ scale: 1 0.9;
27
+ }
28
+ 70% {
29
+ scale: 1 0.45;
30
+ }
31
+ 100% {
32
+ scale: 1 1;
33
+ }
34
+ }
35
+ /* Driven by a live spectrum: the bars follow it closely instead of bouncing. */
36
+ .ad-equalizer[data-live] > i {
37
+ transition: scale 0.08s linear;
38
+ }
@@ -0,0 +1,9 @@
1
+ import { type ElementType } from "react";
2
+ import { type CommonProps } from "../../../core/base";
3
+ export interface GlowTextProps extends CommonProps {
4
+ as?: ElementType;
5
+ /** Flicker now and then like a neon sign. */
6
+ flicker?: boolean;
7
+ }
8
+ /** Neon text: a gradient flows through the letters under a soft halo. */
9
+ export declare function GlowText({ as, flicker, children, ...p }: GlowTextProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
@@ -0,0 +1,56 @@
1
+ /* Styles owned by GlowText. */
2
+ .ad-glow-text {
3
+ display: inline-block;
4
+ margin: 0;
5
+ font-weight: 800;
6
+ letter-spacing: -0.01em;
7
+ color: transparent;
8
+ background: linear-gradient(
9
+ 100deg,
10
+ var(--ad-primary),
11
+ var(--ad-secondary-200) 30%,
12
+ #fff 45%,
13
+ var(--ad-secondary-200) 60%,
14
+ var(--ad-primary) 80%,
15
+ var(--ad-primary)
16
+ )
17
+ 0 0 / 250% 100%;
18
+ background-clip: text;
19
+ -webkit-background-clip: text;
20
+ position: relative;
21
+ isolation: isolate;
22
+ animation: ad-glow-flow 5s linear infinite;
23
+ }
24
+ .ad-glow-text-halo {
25
+ position: absolute;
26
+ inset: 0;
27
+ z-index: -1;
28
+ color: transparent;
29
+ text-shadow: 0 0 0.35em rgb(from var(--ad-primary) r g b / 0.53), 0 0 1em rgb(from var(--ad-primary) r g b / 0.27);
30
+ pointer-events: none;
31
+ user-select: none;
32
+ will-change: transform;
33
+ }
34
+ .ad-glow-text[data-flicker] {
35
+ animation:
36
+ ad-glow-flow 5s linear infinite,
37
+ ad-glow-flicker 4.5s steps(1, end) infinite;
38
+ }
39
+ @keyframes ad-glow-flow {
40
+ to {
41
+ background-position: -250% 0;
42
+ }
43
+ }
44
+ @keyframes ad-glow-flicker {
45
+ 0%,
46
+ 41%,
47
+ 44%,
48
+ 47%,
49
+ 100% {
50
+ opacity: 1;
51
+ }
52
+ 42%,
53
+ 46% {
54
+ opacity: 0.35;
55
+ }
56
+ }
@@ -0,0 +1,13 @@
1
+ import { type CommonProps } from "../../../core/base";
2
+ export interface ImageShineProps extends CommonProps {
3
+ /** A picture with transparency (an icon, a logo): the light runs over its visible pixels only. */
4
+ src: string;
5
+ /** Breathe and glow around the picture as well. */
6
+ glow?: boolean;
7
+ label?: string;
8
+ }
9
+ /**
10
+ * A band of light sweeps across a picture's shape, as on a polished badge; the picture breathes.
11
+ * Built from stacked layers that only move and fade, so the browser composites it on the GPU.
12
+ */
13
+ export declare function ImageShine({ src, glow, label, style, ...p }: ImageShineProps): import("react").JSX.Element;