@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,379 @@
1
+ /* Shared foundation of every text-like control: TextField, NumberField, TextArea, Select, Autocomplete. */
2
+
3
+ /* Field frame: label, control, description or error. */
4
+ .ad-field {
5
+ display: grid;
6
+ gap: calc(var(--ad-space-1) * 1.5);
7
+ min-width: 0;
8
+ color: var(--ad-text);
9
+ font-size: var(--ad-size-font);
10
+ }
11
+ .ad-field-label {
12
+ display: inline-flex;
13
+ gap: 0.2em;
14
+ font-size: var(--ad-font-size-label);
15
+ font-weight: 600;
16
+ letter-spacing: 0.01em;
17
+ color: var(--ad-neutral-200);
18
+ }
19
+ .ad-field-required {
20
+ color: var(--ad-pink);
21
+ }
22
+ .ad-field-message {
23
+ display: flex;
24
+ align-items: flex-start;
25
+ gap: 0.35em;
26
+ color: var(--ad-muted);
27
+ font-size: var(--ad-font-size-caption);
28
+ line-height: 1.4;
29
+ }
30
+ .ad-field-message[data-error] {
31
+ color: var(--ad-secondary);
32
+ }
33
+ .ad-field-message > .ad-icon {
34
+ --ad-icon-size: 1.15em;
35
+ flex: none;
36
+ margin-top: 0.05em;
37
+ }
38
+
39
+ /* Control box. */
40
+ .ad-input-base {
41
+ --ad-input-accent: var(--ad-pink);
42
+ --ad-input-icon: calc(var(--ad-size-font) * 1.45);
43
+ position: relative;
44
+ display: flex;
45
+ align-items: center;
46
+ gap: calc(var(--ad-size-gap) * 0.75);
47
+ min-width: 0;
48
+ width: 100%;
49
+ min-height: var(--ad-size-h);
50
+ padding-inline: var(--ad-size-pad-x);
51
+ border: 0.0625rem solid rgb(from var(--ad-secondary) r g b / 0.18);
52
+ border-radius: var(--ad-size-radius);
53
+ background: var(--ad-surface-input);
54
+ box-shadow: var(--ad-shadow-input);
55
+ font-size: var(--ad-size-font);
56
+ color: var(--ad-text);
57
+ cursor: text;
58
+ transition:
59
+ border-color 0.18s,
60
+ box-shadow 0.18s,
61
+ background 0.18s;
62
+ }
63
+ .ad-input-base:hover:not([data-disabled]) {
64
+ border-color: rgb(from var(--ad-secondary) r g b / 0.42);
65
+ }
66
+ .ad-input-base:focus-within {
67
+ border-color: var(--ad-input-accent);
68
+ box-shadow:
69
+ 0 0 0 0.1875rem rgb(from var(--ad-primary) r g b / 0.14),
70
+ 0 0 1rem rgb(from var(--ad-primary) r g b / 0.15),
71
+ inset 0 0.0625rem 0.125rem rgb(from var(--ad-neutral-200) r g b / 0.13);
72
+ }
73
+ /* Fluent-style accent line that grows from the centre on focus. */
74
+ .ad-input-base::after {
75
+ content: "";
76
+ position: absolute;
77
+ inset: auto 0.5rem -0.0625rem;
78
+ height: 0.125rem;
79
+ border-radius: 999rem;
80
+ background: linear-gradient(
81
+ 90deg,
82
+ transparent,
83
+ var(--ad-input-accent),
84
+ transparent
85
+ );
86
+ box-shadow: 0 0 0.5rem var(--ad-red);
87
+ transform: scaleX(0);
88
+ transition: transform 0.24s cubic-bezier(0.2, 0.8, 0.2, 1);
89
+ pointer-events: none;
90
+ }
91
+ .ad-input-base:focus-within::after {
92
+ transform: scaleX(1);
93
+ }
94
+ .ad-input-base[data-invalid] {
95
+ --ad-input-accent: var(--ad-secondary);
96
+ border-color: rgb(from var(--ad-primary) r g b / 0.61);
97
+ }
98
+ .ad-input-base[data-disabled] {
99
+ opacity: 0.45;
100
+ cursor: not-allowed;
101
+ }
102
+ .ad-input-base[data-readonly] {
103
+ border-style: dashed;
104
+ border-color: rgb(from var(--ad-secondary) r g b / 0.4);
105
+ background: var(--ad-neutral-900);
106
+ box-shadow: none;
107
+ }
108
+
109
+ /* Variants. */
110
+ .ad-input-base[data-ad-variant="filled"] {
111
+ border-color: transparent;
112
+ border-bottom-color: rgb(from var(--ad-secondary) r g b / 0.4);
113
+ border-end-start-radius: 0.25rem;
114
+ border-end-end-radius: 0.25rem;
115
+ background: linear-gradient(180deg, var(--ad-neutral-800), var(--ad-neutral-850));
116
+ box-shadow: inset 0 0.0625rem 0 #ffffff10;
117
+ }
118
+ .ad-input-base[data-ad-variant="filled"]:hover:not([data-disabled]) {
119
+ background: linear-gradient(180deg, var(--ad-primary-800), var(--ad-neutral-800));
120
+ border-color: transparent;
121
+ border-bottom-color: rgb(from var(--ad-secondary) r g b / 0.66);
122
+ }
123
+ .ad-input-base[data-ad-variant="underlined"] {
124
+ padding-inline: 0.125rem;
125
+ border-color: transparent;
126
+ border-bottom-color: rgb(from var(--ad-secondary) r g b / 0.42);
127
+ border-radius: 0;
128
+ background: transparent;
129
+ box-shadow: none;
130
+ }
131
+ .ad-input-base[data-ad-variant="underlined"]:hover:not([data-disabled]) {
132
+ border-color: transparent;
133
+ border-bottom-color: rgb(from var(--ad-secondary) r g b / 0.77);
134
+ }
135
+ .ad-input-base:is(
136
+ [data-ad-variant="filled"],
137
+ [data-ad-variant="underlined"]
138
+ ):focus-within {
139
+ border-color: transparent;
140
+ border-bottom-color: var(--ad-input-accent);
141
+ box-shadow: none;
142
+ }
143
+ .ad-input-base[data-ad-variant="underlined"]::after {
144
+ inset-inline: 0;
145
+ }
146
+
147
+ /* Content. */
148
+ .ad-input-base[data-multiline] {
149
+ align-items: flex-start;
150
+ padding-block: calc(var(--ad-size-pad-x) * 0.75);
151
+ }
152
+ .ad-input-base-content {
153
+ display: flex;
154
+ align-items: center;
155
+ flex: 1;
156
+ min-width: 0;
157
+ align-self: stretch;
158
+ }
159
+ .ad-input-base input,
160
+ .ad-input-base textarea,
161
+ .ad-input-base button.ad-input-control {
162
+ flex: 1;
163
+ min-width: 0;
164
+ width: 100%;
165
+ min-height: calc(var(--ad-size-h) - 0.125rem);
166
+ padding: 0;
167
+ border: 0;
168
+ outline: 0;
169
+ background: transparent;
170
+ color: inherit;
171
+ font: inherit;
172
+ text-align: left;
173
+ }
174
+ .ad-input-base input::placeholder,
175
+ .ad-input-base textarea::placeholder {
176
+ color: var(--ad-neutral-500);
177
+ opacity: 1;
178
+ }
179
+ .ad-input-base textarea {
180
+ min-height: 4lh;
181
+ resize: vertical;
182
+ line-height: 1.5;
183
+ }
184
+ .ad-input-base input[type="number"] {
185
+ appearance: textfield;
186
+ -moz-appearance: textfield;
187
+ }
188
+ .ad-input-base input::-webkit-inner-spin-button,
189
+ .ad-input-base input::-webkit-outer-spin-button {
190
+ -webkit-appearance: none;
191
+ margin: 0;
192
+ }
193
+ .ad-input-base button.ad-input-control {
194
+ display: flex;
195
+ align-items: center;
196
+ cursor: pointer;
197
+ }
198
+ .ad-input-base button.ad-input-control:disabled {
199
+ cursor: not-allowed;
200
+ }
201
+
202
+ /* Adornments: icons follow the field size, buttons inside a field are flat. */
203
+ .ad-input-adornment {
204
+ display: inline-flex;
205
+ align-items: center;
206
+ gap: 0.125rem;
207
+ flex: none;
208
+ color: var(--ad-muted);
209
+ }
210
+ .ad-input-base[data-multiline] .ad-input-adornment {
211
+ min-height: calc(var(--ad-size-h) - 0.125rem - var(--ad-size-pad-x) * 1.5);
212
+ }
213
+ .ad-input-adornment > .ad-icon,
214
+ .ad-input-adornment .ad-icon-button > .ad-icon {
215
+ --ad-icon-size: var(--ad-input-icon);
216
+ width: var(--ad-icon-size);
217
+ height: var(--ad-icon-size);
218
+ }
219
+ .ad-input-base:focus-within .ad-input-adornment[data-position="start"] {
220
+ color: var(--ad-input-accent);
221
+ }
222
+ .ad-input-adornment .ad-icon-button {
223
+ --ad-size-h: calc(var(--ad-input-icon) + 0.5rem);
224
+ width: var(--ad-size-h);
225
+ min-width: var(--ad-size-h);
226
+ height: var(--ad-size-h);
227
+ border: 0;
228
+ border-radius: 999rem;
229
+ background: transparent;
230
+ box-shadow: none;
231
+ color: var(--ad-muted);
232
+ animation: none;
233
+ transform: none;
234
+ filter: none;
235
+ }
236
+ .ad-input-adornment .ad-icon-button::before,
237
+ .ad-input-adornment .ad-icon-button::after {
238
+ display: none;
239
+ }
240
+ .ad-input-adornment .ad-icon-button > .ad-icon {
241
+ filter: none;
242
+ }
243
+ .ad-input-adornment .ad-icon-button:hover:not(:disabled) {
244
+ background: rgb(from var(--ad-primary) r g b / 0.08);
245
+ color: var(--ad-text);
246
+ transform: none;
247
+ box-shadow: none;
248
+ }
249
+ .ad-input-adornment .ad-icon-button:active:not(:disabled) {
250
+ background: rgb(from var(--ad-primary) r g b / 0.14);
251
+ transform: scale(0.94);
252
+ }
253
+ .ad-input-adornment .ad-icon-button:disabled {
254
+ opacity: 0.35;
255
+ filter: none;
256
+ }
257
+ .ad-input-adornment .ad-icon-button:focus-visible {
258
+ outline: 0.125rem solid var(--ad-input-accent);
259
+ outline-offset: 0;
260
+ }
261
+ /* The box shows focus for the whole field, so the inner control draws no ring of its own. */
262
+ .ad-input-base :is(input, textarea, button.ad-input-control):focus-visible {
263
+ outline: 0;
264
+ }
265
+ /* A field that turns invalid gives one short shake. */
266
+ .ad-input-base[data-invalid] {
267
+ animation: ad-field-shake 0.4s cubic-bezier(0.36, 0.07, 0.19, 0.97);
268
+ }
269
+ @keyframes ad-field-shake {
270
+ 20%,
271
+ 60% {
272
+ transform: translateX(-0.25rem);
273
+ }
274
+ 40%,
275
+ 80% {
276
+ transform: translateX(0.25rem);
277
+ }
278
+ }
279
+ /* Focus lights the label and slides the placeholder aside. */
280
+ .ad-field-label {
281
+ transition:
282
+ color 0.25s,
283
+ text-shadow 0.25s;
284
+ }
285
+ .ad-field:focus-within .ad-field-label {
286
+ color: var(--ad-pink);
287
+ text-shadow: 0 0 0.6rem rgb(from var(--ad-primary) r g b / 0.4);
288
+ }
289
+ .ad-input-base input::placeholder,
290
+ .ad-input-base textarea::placeholder {
291
+ transition:
292
+ opacity 0.3s,
293
+ transform 0.3s;
294
+ }
295
+ .ad-input-base:focus-within input::placeholder,
296
+ .ad-input-base:focus-within textarea::placeholder {
297
+ opacity: 0.45;
298
+ transform: translateX(0.35rem);
299
+ }
300
+ .ad-input-adornment[data-position="start"] > .ad-icon {
301
+ transition:
302
+ transform 0.35s cubic-bezier(0.34, 1.56, 0.5, 1),
303
+ color 0.25s;
304
+ }
305
+ .ad-input-base:focus-within
306
+ .ad-input-adornment[data-position="start"]
307
+ > .ad-icon {
308
+ transform: scale(1.12);
309
+ }
310
+
311
+ /* Floating label (labelPlacement="floating"): rests inside the box like a placeholder,
312
+ then shrinks and rises to the top edge on focus or once there is a value. */
313
+ .ad-input-base-content {
314
+ position: relative;
315
+ }
316
+ .ad-input-base[data-floating] {
317
+ --ad-float-h: calc(var(--ad-size-h) + 0.75rem);
318
+ min-height: var(--ad-float-h);
319
+ }
320
+ .ad-input-label {
321
+ position: absolute;
322
+ left: 0;
323
+ top: 50%;
324
+ max-width: 100%;
325
+ overflow: hidden;
326
+ text-overflow: ellipsis;
327
+ white-space: nowrap;
328
+ color: var(--ad-neutral-400);
329
+ font-size: var(--ad-size-font);
330
+ transform-origin: left center;
331
+ translate: 0 -50%;
332
+ pointer-events: none;
333
+ transition:
334
+ top 0.3s cubic-bezier(0.2, 0.8, 0.2, 1),
335
+ translate 0.3s cubic-bezier(0.2, 0.8, 0.2, 1),
336
+ scale 0.3s cubic-bezier(0.2, 0.8, 0.2, 1),
337
+ color 0.25s,
338
+ text-shadow 0.25s,
339
+ letter-spacing 0.3s;
340
+ }
341
+ .ad-input-base[data-floating]:is(:focus-within, [data-filled]) .ad-input-label {
342
+ top: 0.45rem;
343
+ translate: 0 0;
344
+ scale: 0.76;
345
+ letter-spacing: 0.03em;
346
+ }
347
+ .ad-input-base[data-floating]:focus-within .ad-input-label {
348
+ color: var(--ad-pink);
349
+ text-shadow: 0 0 0.6rem rgb(from var(--ad-primary) r g b / 0.4);
350
+ }
351
+ .ad-input-base[data-floating][data-filled]:not(:focus-within) .ad-input-label {
352
+ color: var(--ad-neutral-300);
353
+ }
354
+ /* The text sits under the raised label. */
355
+ .ad-input-base[data-floating] :is(input, button.ad-input-control) {
356
+ min-height: calc(var(--ad-float-h) - 0.125rem);
357
+ padding-top: 1rem;
358
+ }
359
+ /* While the label rests in its place the placeholder stays hidden, as in Material. */
360
+ .ad-input-base[data-floating]:not(:focus-within):not([data-filled])
361
+ :is(input, textarea)::placeholder {
362
+ opacity: 0;
363
+ }
364
+ .ad-input-base[data-floating]:not(:focus-within):not([data-filled])
365
+ .ad-select-control {
366
+ color: transparent;
367
+ }
368
+ /* Multiline: the label rests on the first line and rises above it. */
369
+ .ad-input-base[data-floating][data-multiline] .ad-input-label {
370
+ top: calc(1rem + 0.75em);
371
+ }
372
+ .ad-input-base[data-floating][data-multiline]:is(:focus-within, [data-filled])
373
+ .ad-input-label {
374
+ top: -0.05rem;
375
+ translate: 0 0;
376
+ }
377
+ .ad-input-base[data-floating][data-multiline] textarea {
378
+ padding-top: 1rem;
379
+ }
@@ -0,0 +1,11 @@
1
+ import type { AnchorHTMLAttributes, ReactNode } from "react";
2
+ import { type CommonProps } from "../../../core/base";
3
+ export interface LinkProps extends CommonProps, Omit<AnchorHTMLAttributes<HTMLAnchorElement>, keyof CommonProps | "color"> {
4
+ href?: string;
5
+ icon?: string;
6
+ endIcon?: string;
7
+ external?: boolean;
8
+ underline?: "none" | "hover" | "always";
9
+ children?: ReactNode;
10
+ }
11
+ export declare function Link({ href, icon, endIcon, external, underline, children, ...props }: LinkProps): import("react").JSX.Element;
@@ -0,0 +1,50 @@
1
+ .ad-link {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ gap: 0.45rem;
5
+ min-width: 0;
6
+ color: inherit;
7
+ text-decoration: none;
8
+ border-radius: 0.55rem;
9
+ outline: none;
10
+ transition:
11
+ color 0.16s,
12
+ background 0.16s,
13
+ box-shadow 0.16s,
14
+ transform 0.16s;
15
+ }
16
+ .ad-link[data-ad-underline="always"] {
17
+ text-decoration: underline;
18
+ text-underline-offset: 0.18em;
19
+ }
20
+ /* The underline grows from the left instead of snapping in. */
21
+ .ad-link[data-ad-underline="hover"] {
22
+ background: linear-gradient(90deg, var(--ad-pink), var(--ad-secondary-100)) 0 100% / 0
23
+ 0.0625rem no-repeat;
24
+ transition:
25
+ color 0.2s,
26
+ background-size 0.35s cubic-bezier(0.2, 0.8, 0.2, 1);
27
+ }
28
+ .ad-link[data-ad-underline="hover"]:hover {
29
+ background-size: 100% 0.0625rem;
30
+ }
31
+ .ad-link > .ad-icon {
32
+ transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.5, 1);
33
+ }
34
+ .ad-link:hover > .ad-icon:last-child:not(:first-child) {
35
+ transform: translateX(0.2rem);
36
+ }
37
+ .ad-link:hover > .ad-icon:first-child {
38
+ transform: scale(1.12) rotate(-6deg);
39
+ }
40
+ .ad-link:hover {
41
+ color: var(--ad-pink);
42
+ }
43
+ .ad-link:focus-visible {
44
+ outline: 0.125rem solid var(--ad-secondary-100);
45
+ outline-offset: 0.18rem;
46
+ }
47
+ .ad-link > .ad-icon {
48
+ width: 1em;
49
+ height: 1em;
50
+ }
@@ -0,0 +1,2 @@
1
+ import type { NumberFieldProps } from "../shared";
2
+ export declare const NumberField: ({ value, defaultValue, onValueChange, min, max, step, endAdornment, className, controls, ...p }: NumberFieldProps) => import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ /* Styles owned by NumberField. */
@@ -0,0 +1,37 @@
1
+ import { type CommonProps } from "../../../core/base";
2
+ import type { InputVariant } from "../shared";
3
+ export interface PickerPerson {
4
+ id: string;
5
+ name: string;
6
+ /** Photo; initials are shown without it. */
7
+ src?: string;
8
+ /** A second line: role, e-mail, status. */
9
+ description?: string;
10
+ presence?: "online" | "busy" | "offline";
11
+ }
12
+ export interface PeoplePickerProps extends CommonProps {
13
+ /** Everyone who can be picked; filtered by name and description while typing. */
14
+ people?: PickerPerson[];
15
+ /** Search elsewhere; the optional signal cancels superseded or unmounted requests. */
16
+ onSearch?: (query: string, signal?: AbortSignal) => Promise<PickerPerson[]> | PickerPerson[];
17
+ value?: PickerPerson[];
18
+ defaultValue?: PickerPerson[];
19
+ onValueChange?: (people: PickerPerson[]) => void;
20
+ /** Pick one person instead of several. */
21
+ single?: boolean;
22
+ /** The most people allowed. */
23
+ max?: number;
24
+ label?: React.ReactNode;
25
+ description?: React.ReactNode;
26
+ error?: React.ReactNode;
27
+ placeholder?: string;
28
+ disabled?: boolean;
29
+ required?: boolean;
30
+ variant?: InputVariant;
31
+ labelPlacement?: "top" | "floating";
32
+ }
33
+ /**
34
+ * Picking people: type a name, choose from the list with avatars, presence and roles; chosen
35
+ * people become chips. Works on a given list or with an asynchronous search.
36
+ */
37
+ export declare function PeoplePicker({ people, onSearch, value: controlled, defaultValue, onValueChange, single, max, placeholder, ...p }: PeoplePickerProps): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ /* Styles owned by PeoplePicker: the chip row comes from TagInput's styles, the list from Select's. */
2
+ .ad-people-picker {
3
+ min-width: 0;
4
+ }
5
+ .ad-people-picker .ad-option {
6
+ min-height: 2.75rem;
7
+ }
@@ -0,0 +1,2 @@
1
+ import { type TabsProps } from "../shared";
2
+ export declare const SegmentedControl: <V extends string = string>(p: TabsProps<V>) => import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ /* Styles owned by SegmentedControl: Tabs sized to their content instead of the full row. */
2
+ .ad-segmented-control {
3
+ display: inline-flex;
4
+ max-width: 100%;
5
+ min-width: 0;
6
+ }
7
+ .ad-segmented-control > .ad-tabs {
8
+ flex: 1;
9
+ }
@@ -0,0 +1,8 @@
1
+ import { type ReactElement } from "react";
2
+ import type { SelectProps } from "../shared";
3
+ /**
4
+ * A choice from a list. Values can be strings, numbers or whole objects; options can carry an
5
+ * icon, an avatar, a description and a group, or be drawn by `renderOption`; long lists get a
6
+ * search box with `searchable`.
7
+ */
8
+ export declare const Select: <V = string>(p: SelectProps<V>) => ReactElement;
@@ -0,0 +1,142 @@
1
+ .ad-select-control {
2
+ white-space: nowrap;
3
+ overflow: hidden;
4
+ text-overflow: ellipsis;
5
+ }
6
+ .ad-select-control[data-placeholder] {
7
+ color: var(--ad-neutral-500);
8
+ }
9
+ .ad-select-chevron {
10
+ transition:
11
+ transform 0.2s,
12
+ color 0.2s;
13
+ }
14
+ .ad-input-base:has([aria-expanded="true"]) .ad-select-chevron {
15
+ transform: rotate(180deg);
16
+ color: var(--ad-text);
17
+ }
18
+
19
+ /* Option list shared by Select and Autocomplete. */
20
+ .ad-option-popover {
21
+ padding: 0.3rem !important;
22
+ background: var(--ad-surface-dialog) !important;
23
+ box-shadow: var(--ad-shadow-dialog) !important;
24
+ border-color: rgb(from var(--ad-secondary) r g b / 0.31) !important;
25
+ }
26
+ .ad-option-list {
27
+ display: grid;
28
+ gap: 0.0625rem;
29
+ max-height: min(42dvh, 18rem);
30
+ overflow: auto;
31
+ overscroll-behavior: contain;
32
+ scrollbar-width: thin;
33
+ }
34
+ .ad-option {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: 0.5rem;
38
+ width: 100%;
39
+ min-height: 2.25rem;
40
+ padding: 0.4rem 0.65rem;
41
+ border: 0;
42
+ border-radius: calc(var(--ad-radius) * 0.6);
43
+ background: transparent;
44
+ color: var(--ad-neutral-300);
45
+ font: inherit;
46
+ font-size: var(--ad-font-size-body-sm);
47
+ text-align: left;
48
+ cursor: pointer;
49
+ }
50
+ .ad-option-text {
51
+ display: grid;
52
+ flex: 1;
53
+ min-width: 0;
54
+ }
55
+ .ad-option-label {
56
+ min-width: 0;
57
+ overflow: hidden;
58
+ text-overflow: ellipsis;
59
+ white-space: nowrap;
60
+ }
61
+ .ad-option-description {
62
+ overflow: hidden;
63
+ color: var(--ad-muted);
64
+ font-size: var(--ad-font-size-caption);
65
+ font-weight: var(--ad-font-weight-regular);
66
+ text-overflow: ellipsis;
67
+ white-space: nowrap;
68
+ }
69
+ .ad-option > .ad-icon {
70
+ --ad-icon-size: 1rem;
71
+ flex: none;
72
+ }
73
+ .ad-option-icon {
74
+ color: var(--ad-secondary-100);
75
+ }
76
+ .ad-option-check {
77
+ color: var(--ad-pink);
78
+ }
79
+ /* Group names between the options of each group. */
80
+ .ad-option-group {
81
+ padding: 0.5rem 0.65rem 0.2rem;
82
+ color: var(--ad-secondary-100);
83
+ font-size: var(--ad-font-size-caption);
84
+ font-weight: var(--ad-font-weight-bold);
85
+ letter-spacing: var(--ad-letter-spacing-eyebrow);
86
+ text-transform: uppercase;
87
+ }
88
+ /* Search box over a long list. */
89
+ .ad-option-search {
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 0.45rem;
93
+ margin-bottom: 0.3rem;
94
+ padding: 0.35rem 0.65rem;
95
+ border-bottom: 0.0625rem solid rgb(from var(--ad-secondary) r g b / 0.2);
96
+ color: var(--ad-muted);
97
+ --ad-icon-size: 0.95rem;
98
+ }
99
+ .ad-option-search > input {
100
+ flex: 1;
101
+ min-width: 0;
102
+ border: 0;
103
+ background: none;
104
+ color: var(--ad-text);
105
+ font: inherit;
106
+ font-size: var(--ad-font-size-body-sm);
107
+ outline: none;
108
+ }
109
+ .ad-option-empty {
110
+ padding: 0.75rem;
111
+ color: var(--ad-muted);
112
+ font-size: var(--ad-font-size-body-sm);
113
+ text-align: center;
114
+ }
115
+ /* The chosen value in the field: its avatar or icon beside the label. */
116
+ .ad-select-value {
117
+ display: inline-flex;
118
+ align-items: center;
119
+ gap: 0.45rem;
120
+ max-width: 100%;
121
+ vertical-align: middle;
122
+ }
123
+ .ad-select-value-text {
124
+ overflow: hidden;
125
+ text-overflow: ellipsis;
126
+ }
127
+ .ad-option:hover:not(:disabled),
128
+ .ad-option[data-active],
129
+ .ad-option:focus-visible {
130
+ background: rgb(from var(--ad-neutral-200) r g b / 0.06);
131
+ color: var(--ad-text);
132
+ outline: 0;
133
+ }
134
+ .ad-option[aria-selected="true"] {
135
+ background: linear-gradient(90deg, rgb(from var(--ad-primary-700) r g b / 0.37), rgb(from var(--ad-primary-900) r g b / 0.27) 80%);
136
+ color: var(--ad-text);
137
+ font-weight: 600;
138
+ }
139
+ .ad-option:disabled {
140
+ opacity: 0.4;
141
+ cursor: not-allowed;
142
+ }
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import type { SliderProps } from "../shared";
3
+ export declare const Slider: React.ForwardRefExoticComponent<Omit<SliderProps, "ref"> & React.RefAttributes<HTMLInputElement>>;