@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.
- package/LICENSE +21 -0
- package/README.md +213 -2
- package/dist/artwork/icons.json.d.ts +2 -0
- package/dist/artwork/illustrations.json.d.ts +2 -0
- package/dist/chunks/chunk-347P6ZE4.js +104 -0
- package/dist/chunks/chunk-BJSFN52W.js +417 -0
- package/dist/chunks/chunk-FCOU3ODR.js +63 -0
- package/dist/chunks/chunk-JZ4GDTH5.js +87 -0
- package/dist/chunks/chunk-UGDRXR7P.js +3362 -0
- package/dist/chunks/chunk-VK6GHRLV.js +335 -0
- package/dist/chunks/chunk-YKCUOZ7V.js +777 -0
- package/dist/components/artwork/DatabaseArt/DatabaseArt.d.ts +6 -0
- package/dist/components/artwork/DatabaseArt/styles.css +58 -0
- package/dist/components/artwork/Landscape/Landscape.d.ts +7 -0
- package/dist/components/artwork/Landscape/styles.css +79 -0
- package/dist/components/artwork/NeonWaves/NeonWaves.d.ts +15 -0
- package/dist/components/artwork/NeonWaves/styles.css +48 -0
- package/dist/components/artwork/Planet/Planet.d.ts +4 -0
- package/dist/components/artwork/Planet/styles.css +52 -0
- package/dist/components/artwork/QuantumField/QuantumField.d.ts +42 -0
- package/dist/components/artwork/QuantumField/QuantumFieldExperience.d.ts +22 -0
- package/dist/components/artwork/QuantumField/UPSTREAM-LICENSE.txt +21 -0
- package/dist/components/artwork/QuantumField/audio.d.ts +15 -0
- package/dist/components/artwork/QuantumField/renderer.d.ts +24 -0
- package/dist/components/artwork/QuantumField/styles.css +77 -0
- package/dist/components/artwork/ServerArt/ServerArt.d.ts +8 -0
- package/dist/components/artwork/ServerArt/styles.css +43 -0
- package/dist/components/artwork/Spectrum/Spectrum.d.ts +7 -0
- package/dist/components/artwork/Spectrum/styles.css +35 -0
- package/dist/components/artwork/layers.d.ts +15 -0
- package/dist/components/artwork/useArtwork.d.ts +8 -0
- package/dist/components/controls/Autocomplete/Autocomplete.d.ts +2 -0
- package/dist/components/controls/Autocomplete/styles.css +1 -0
- package/dist/components/controls/Button/Button.d.ts +2 -0
- package/dist/components/controls/Button/styles.css +1 -0
- package/dist/components/controls/Checkbox/Checkbox.d.ts +2 -0
- package/dist/components/controls/Checkbox/styles.css +70 -0
- package/dist/components/controls/Chip/Chip.d.ts +21 -0
- package/dist/components/controls/Chip/styles.css +74 -0
- package/dist/components/controls/ChipField.d.ts +25 -0
- package/dist/components/controls/ColorPicker/ColorPicker.d.ts +16 -0
- package/dist/components/controls/ColorPicker/color.d.ts +9 -0
- package/dist/components/controls/ColorPicker/styles.css +103 -0
- package/dist/components/controls/DatePicker/DatePicker.d.ts +19 -0
- package/dist/components/controls/DatePicker/styles.css +69 -0
- package/dist/components/controls/FilePicker/FilePicker.d.ts +2 -0
- package/dist/components/controls/FilePicker/styles.css +149 -0
- package/dist/components/controls/IconButton/IconButton.d.ts +2 -0
- package/dist/components/controls/IconButton/styles.css +4 -0
- package/dist/components/controls/InputBase/InputBase.d.ts +21 -0
- package/dist/components/controls/InputBase/styles.css +379 -0
- package/dist/components/controls/Link/Link.d.ts +11 -0
- package/dist/components/controls/Link/styles.css +50 -0
- package/dist/components/controls/NumberField/NumberField.d.ts +2 -0
- package/dist/components/controls/NumberField/styles.css +1 -0
- package/dist/components/controls/PeoplePicker/PeoplePicker.d.ts +37 -0
- package/dist/components/controls/PeoplePicker/styles.css +7 -0
- package/dist/components/controls/SegmentedControl/SegmentedControl.d.ts +2 -0
- package/dist/components/controls/SegmentedControl/styles.css +9 -0
- package/dist/components/controls/Select/Select.d.ts +8 -0
- package/dist/components/controls/Select/styles.css +142 -0
- package/dist/components/controls/Slider/Slider.d.ts +3 -0
- package/dist/components/controls/Slider/styles.css +138 -0
- package/dist/components/controls/SplitButton/SplitButton.d.ts +2 -0
- package/dist/components/controls/SplitButton/styles.css +169 -0
- package/dist/components/controls/Switch/Switch.d.ts +2 -0
- package/dist/components/controls/Switch/styles.css +54 -0
- package/dist/components/controls/Tab/Tab.d.ts +2 -0
- package/dist/components/controls/Tab/styles.css +111 -0
- package/dist/components/controls/Tabs/Tabs.d.ts +2 -0
- package/dist/components/controls/Tabs/styles.css +239 -0
- package/dist/components/controls/TagInput/TagInput.d.ts +24 -0
- package/dist/components/controls/TagInput/styles.css +24 -0
- package/dist/components/controls/TextArea/TextArea.d.ts +2 -0
- package/dist/components/controls/TextArea/styles.css +15 -0
- package/dist/components/controls/TextField/TextField.d.ts +2 -0
- package/dist/components/controls/ThemePicker/ThemePicker.d.ts +24 -0
- package/dist/components/controls/ThemePicker/styles.css +128 -0
- package/dist/components/controls/ToggleButton/ToggleButton.d.ts +2 -0
- package/dist/components/controls/ToggleButton/styles.css +49 -0
- package/dist/components/controls/internal.d.ts +62 -0
- package/dist/components/controls/shared.css +694 -0
- package/dist/components/controls/shared.d.ts +204 -0
- package/dist/components/editor/PianoRoll/PianoRoll.d.ts +65 -0
- package/dist/components/editor/PianoRoll/styles.css +186 -0
- package/dist/components/editor/shared.css +1 -0
- package/dist/components/effects/AnimatedBorder/AnimatedBorder.d.ts +9 -0
- package/dist/components/effects/AnimatedBorder/styles.css +7 -0
- package/dist/components/effects/Beacon/Beacon.d.ts +9 -0
- package/dist/components/effects/Beacon/styles.css +38 -0
- package/dist/components/effects/Equalizer/Equalizer.d.ts +14 -0
- package/dist/components/effects/Equalizer/styles.css +38 -0
- package/dist/components/effects/GlowText/GlowText.d.ts +9 -0
- package/dist/components/effects/GlowText/styles.css +56 -0
- package/dist/components/effects/ImageShine/ImageShine.d.ts +13 -0
- package/dist/components/effects/ImageShine/styles.css +66 -0
- package/dist/components/effects/Marquee/Marquee.d.ts +9 -0
- package/dist/components/effects/Marquee/styles.css +46 -0
- package/dist/components/effects/MelodixText/MelodixText.d.ts +15 -0
- package/dist/components/effects/MelodixText/styles.css +28 -0
- package/dist/components/effects/Reveal/Reveal.d.ts +13 -0
- package/dist/components/effects/Reveal/styles.css +25 -0
- package/dist/components/effects/Shimmer/Shimmer.d.ts +10 -0
- package/dist/components/effects/Shimmer/styles.css +48 -0
- package/dist/components/effects/Sparkles/Sparkles.d.ts +9 -0
- package/dist/components/effects/Sparkles/styles.css +28 -0
- package/dist/components/effects/Spotlight/Spotlight.d.ts +11 -0
- package/dist/components/effects/Spotlight/styles.css +45 -0
- package/dist/components/effects/Tilt/Tilt.d.ts +11 -0
- package/dist/components/effects/Tilt/styles.css +67 -0
- package/dist/components/feedback/Badge/Badge.d.ts +3 -0
- package/dist/components/feedback/Badge/styles.css +91 -0
- package/dist/components/feedback/CollapsibleSection/CollapsibleSection.d.ts +2 -0
- package/dist/components/feedback/CollapsibleSection/styles.css +76 -0
- package/dist/components/feedback/DataTable/DataTable.d.ts +16 -0
- package/dist/components/feedback/DataTable/styles.css +522 -0
- package/dist/components/feedback/Dialog/Dialog.d.ts +2 -0
- package/dist/components/feedback/Dialog/styles.css +82 -0
- package/dist/components/feedback/EmptyState/EmptyState.d.ts +2 -0
- package/dist/components/feedback/EmptyState/styles.css +80 -0
- package/dist/components/feedback/KeyValueList/KeyValueList.d.ts +2 -0
- package/dist/components/feedback/KeyValueList/styles.css +51 -0
- package/dist/components/feedback/Menu/Menu.d.ts +2 -0
- package/dist/components/feedback/Menu/styles.css +123 -0
- package/dist/components/feedback/MenuItem/MenuItem.d.ts +2 -0
- package/dist/components/feedback/MenuItem/styles.css +71 -0
- package/dist/components/feedback/MessageBar/MessageBar.d.ts +2 -0
- package/dist/components/feedback/MessageBar/styles.css +116 -0
- package/dist/components/feedback/Popover/Popover.d.ts +2 -0
- package/dist/components/feedback/Popover/styles.css +44 -0
- package/dist/components/feedback/ProgressBar/ProgressBar.d.ts +2 -0
- package/dist/components/feedback/ProgressBar/styles.css +76 -0
- package/dist/components/feedback/SignalBars/SignalBars.d.ts +11 -0
- package/dist/components/feedback/SignalBars/styles.css +31 -0
- package/dist/components/feedback/StatusIndicator/StatusIndicator.d.ts +2 -0
- package/dist/components/feedback/StatusIndicator/styles.css +88 -0
- package/dist/components/feedback/Steps/Steps.d.ts +2 -0
- package/dist/components/feedback/Steps/styles.css +152 -0
- package/dist/components/feedback/Toast/Toast.d.ts +2 -0
- package/dist/components/feedback/Toast/styles.css +89 -0
- package/dist/components/feedback/Tooltip/Tooltip.d.ts +15 -0
- package/dist/components/feedback/Tooltip/styles.css +38 -0
- package/dist/components/feedback/shared.css +22 -0
- package/dist/components/feedback/shared.d.ts +231 -0
- package/dist/components/forms/Form/Form.d.ts +35 -0
- package/dist/components/forms/Form/styles.css +1 -0
- package/dist/components/forms/FormFields/FormFields.d.ts +20 -0
- package/dist/components/forms/FormFields/styles.css +72 -0
- package/dist/components/foundation/Loader/Loader.d.ts +30 -0
- package/dist/components/foundation/LoaderGenerator/LoaderGenerator.d.ts +38 -0
- package/dist/components/foundation/LoaderGenerator/styles.css +104 -0
- package/dist/components/foundation/ThemeEditor/ThemeEditor.d.ts +15 -0
- package/dist/components/foundation/ThemeEditor/styles.css +97 -0
- package/dist/components/foundation/ThemeEditor/themeConfig.d.ts +47 -0
- package/dist/components/foundation/ThemeProvider/ThemeProvider.d.ts +32 -0
- package/dist/components/foundation/ThemeProvider/styles.css +59 -0
- package/dist/components/foundation/Typography/Typography.d.ts +17 -0
- package/dist/components/foundation/Typography/styles.css +115 -0
- package/dist/components/layout/Avatar/Avatar.d.ts +2 -0
- package/dist/components/layout/Avatar/HostSeal.d.ts +5 -0
- package/dist/components/layout/Avatar/styles.css +166 -0
- package/dist/components/layout/BrandMark/BrandMark.d.ts +2 -0
- package/dist/components/layout/BrandMark/styles.css +39 -0
- package/dist/components/layout/ButtonGroup/ButtonGroup.d.ts +12 -0
- package/dist/components/layout/ButtonGroup/styles.css +36 -0
- package/dist/components/layout/Card/Card.d.ts +14 -0
- package/dist/components/layout/Card/styles.css +37 -0
- package/dist/components/layout/DialogActions/DialogActions.d.ts +12 -0
- package/dist/components/layout/DialogActions/styles.css +31 -0
- package/dist/components/layout/DialogBody/DialogBody.d.ts +12 -0
- package/dist/components/layout/DialogBody/styles.css +28 -0
- package/dist/components/layout/Divider/Divider.d.ts +2 -0
- package/dist/components/layout/Divider/styles.css +58 -0
- package/dist/components/layout/FloatingPanel/FloatingPanel.d.ts +15 -0
- package/dist/components/layout/FloatingPanel/styles.css +47 -0
- package/dist/components/layout/FloatingPanel/useFloatingPanel.d.ts +54 -0
- package/dist/components/layout/Grid/Grid.d.ts +24 -0
- package/dist/components/layout/Grid/styles.css +90 -0
- package/dist/components/layout/Header/Header.d.ts +2 -0
- package/dist/components/layout/Header/styles.css +42 -0
- package/dist/components/layout/Icon/Icon.d.ts +4 -0
- package/dist/components/layout/Icon/styles.css +62 -0
- package/dist/components/layout/Illustration/Illustration.d.ts +2 -0
- package/dist/components/layout/Illustration/styles.css +104 -0
- package/dist/components/layout/ScrollArea/ScrollArea.d.ts +2 -0
- package/dist/components/layout/ScrollArea/styles.css +61 -0
- package/dist/components/layout/Stack/Stack.d.ts +21 -0
- package/dist/components/layout/Stack/styles.css +53 -0
- package/dist/components/layout/StatTile/StatTile.d.ts +20 -0
- package/dist/components/layout/StatTile/styles.css +90 -0
- package/dist/components/layout/TabPanel/TabPanel.d.ts +2 -0
- package/dist/components/layout/TabPanel/styles.css +16 -0
- package/dist/components/layout/Text/Text.d.ts +2 -0
- package/dist/components/layout/Text/styles.css +29 -0
- package/dist/components/layout/Toolbar/Toolbar.d.ts +12 -0
- package/dist/components/layout/Toolbar/styles.css +7 -0
- package/dist/components/layout/shared.css +79 -0
- package/dist/components/layout/shared.d.ts +64 -0
- package/dist/components/media/AudioPlayer/AudioPlayer.d.ts +2 -0
- package/dist/components/media/AudioPlayer/styles.css +86 -0
- package/dist/components/media/KaraokeLyrics/KaraokeLyrics.d.ts +25 -0
- package/dist/components/media/KaraokeLyrics/styles.css +56 -0
- package/dist/components/media/LevelMeter/LevelMeter.d.ts +7 -0
- package/dist/components/media/LevelMeter/styles.css +30 -0
- package/dist/components/media/MediaCard/MediaCard.d.ts +24 -0
- package/dist/components/media/MediaCard/styles.css +108 -0
- package/dist/components/media/MelodyRoll/MelodyRoll.d.ts +48 -0
- package/dist/components/media/MelodyRoll/styles.css +196 -0
- package/dist/components/media/PianoKeyboard/PianoKeyboard.d.ts +24 -0
- package/dist/components/media/PianoKeyboard/styles.css +83 -0
- package/dist/components/media/RotaryKnob/RotaryKnob.d.ts +3 -0
- package/dist/components/media/RotaryKnob/styles.css +319 -0
- package/dist/components/media/Sparkline/Sparkline.d.ts +2 -0
- package/dist/components/media/Sparkline/styles.css +70 -0
- package/dist/components/media/WaveDecoration/WaveDecoration.d.ts +2 -0
- package/dist/components/media/WaveDecoration/styles.css +2 -0
- package/dist/components/media/Waveform/Waveform.d.ts +9 -0
- package/dist/components/media/Waveform/styles.css +375 -0
- package/dist/components/media/Waveform/useWaveformPeaks.d.ts +11 -0
- package/dist/components/media/shared.css +7 -0
- package/dist/components/media/shared.d.ts +80 -0
- package/dist/components/navigation/Router/Router.d.ts +32 -0
- package/dist/components/navigation/Router/styles.css +1 -0
- package/dist/components.css +102 -0
- package/dist/core/artwork.d.ts +17 -0
- package/dist/core/base.d.ts +65 -0
- package/dist/core/environment.d.ts +5 -0
- package/dist/core/i18n.d.ts +34 -0
- package/dist/core/messages.d.ts +1 -0
- package/dist/core/motion/hooks.d.ts +17 -0
- package/dist/core/motion-engine.d.ts +13 -0
- package/dist/core/noise.d.ts +20 -0
- package/dist/core/providers/context.d.ts +4 -0
- package/dist/core/responsive.d.ts +13 -0
- package/dist/core.d.ts +8 -0
- package/dist/core.js +56 -0
- package/dist/editor.d.ts +2 -0
- package/dist/editor.js +8 -0
- package/dist/fonts/melodix/Melodix-100.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-200.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-300.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-400.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-500.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-600.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-700.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-800.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-900.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-100.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-200.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-300.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-400.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-500.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-600.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-700.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-800.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-900.woff2 +0 -0
- package/dist/fonts/melodix/OFL-PlayfairDisplay.txt +93 -0
- package/dist/fonts/melodix.css +123 -0
- package/dist/forms.d.ts +4 -0
- package/dist/forms.js +17 -0
- package/dist/index.d.ts +163 -0
- package/dist/index.js +9683 -0
- package/dist/router.d.ts +2 -0
- package/dist/router.js +11 -0
- package/dist/styles.css +2 -0
- package/dist/theme/base.css +221 -0
- package/dist/theme/tokens.css +196 -0
- package/dist/theme/typography.d.ts +24 -0
- package/dist/tokens.css +1 -0
- package/package.json +83 -4
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/* Styles owned by Tabs: a dark track with a neon rail, and a ruby "blade" that flies to the selected tab. */
|
|
2
|
+
.ad-tabs {
|
|
3
|
+
--ad-tabs-pad: 0.25rem;
|
|
4
|
+
--ad-tabs-spring: cubic-bezier(0.34, 1.45, 0.5, 1);
|
|
5
|
+
position: relative;
|
|
6
|
+
display: flex;
|
|
7
|
+
gap: 0.125rem;
|
|
8
|
+
min-width: 0;
|
|
9
|
+
padding: var(--ad-tabs-pad) var(--ad-tabs-pad)
|
|
10
|
+
calc(var(--ad-tabs-pad) + 0.3rem);
|
|
11
|
+
border: 0.0625rem solid rgb(from var(--ad-primary-600) r g b / 0.24);
|
|
12
|
+
border-radius: calc(var(--ad-size-radius) + 0.25rem);
|
|
13
|
+
background:
|
|
14
|
+
linear-gradient(180deg, #ffffff06, transparent 40%),
|
|
15
|
+
linear-gradient(180deg, var(--ad-neutral-900), var(--ad-neutral-950));
|
|
16
|
+
box-shadow:
|
|
17
|
+
inset 0 0.0625rem 0.1875rem #000c,
|
|
18
|
+
inset 0 -0.0625rem 0 #ffffff08;
|
|
19
|
+
isolation: isolate;
|
|
20
|
+
/* Tabs keep their labels whole; when they do not fit, the row scrolls. */
|
|
21
|
+
overflow-x: auto;
|
|
22
|
+
overscroll-behavior-x: contain;
|
|
23
|
+
scrollbar-width: none;
|
|
24
|
+
}
|
|
25
|
+
.ad-tabs::-webkit-scrollbar {
|
|
26
|
+
display: none;
|
|
27
|
+
}
|
|
28
|
+
/* The rail: a dim line along the bottom that lights up under the blade. */
|
|
29
|
+
.ad-tabs::after {
|
|
30
|
+
content: "";
|
|
31
|
+
position: absolute;
|
|
32
|
+
z-index: -3;
|
|
33
|
+
left: calc(var(--ad-tabs-pad) + 0.5rem);
|
|
34
|
+
right: calc(var(--ad-tabs-pad) + 0.5rem);
|
|
35
|
+
bottom: 0.25rem;
|
|
36
|
+
height: 0.0625rem;
|
|
37
|
+
background: linear-gradient(
|
|
38
|
+
90deg,
|
|
39
|
+
transparent,
|
|
40
|
+
rgb(from var(--ad-primary) r g b / 0.19) 15%,
|
|
41
|
+
rgb(from var(--ad-primary) r g b / 0.19) 85%,
|
|
42
|
+
transparent
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
.ad-tabs > .ad-tab {
|
|
46
|
+
flex: 1 0 auto;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Blade geometry: chamfered corners and a notch cut into the bottom edge. */
|
|
50
|
+
:is(.ad-tabs, .ad-tab) {
|
|
51
|
+
--ad-blade-cut: calc(var(--ad-size-radius) * 0.75);
|
|
52
|
+
--ad-blade-notch: 0.4rem;
|
|
53
|
+
--ad-blade: polygon(
|
|
54
|
+
var(--ad-blade-cut) 0,
|
|
55
|
+
calc(100% - var(--ad-blade-cut)) 0,
|
|
56
|
+
100% var(--ad-blade-cut),
|
|
57
|
+
100% calc(100% - var(--ad-blade-cut)),
|
|
58
|
+
calc(100% - var(--ad-blade-cut)) 100%,
|
|
59
|
+
calc(50% + var(--ad-blade-notch)) 100%,
|
|
60
|
+
50% calc(100% - var(--ad-blade-notch) * 0.75),
|
|
61
|
+
calc(50% - var(--ad-blade-notch)) 100%,
|
|
62
|
+
var(--ad-blade-cut) 100%,
|
|
63
|
+
0 calc(100% - var(--ad-blade-cut)),
|
|
64
|
+
0 var(--ad-blade-cut)
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.ad-tabs-indicator,
|
|
69
|
+
.ad-tabs-trail {
|
|
70
|
+
position: absolute;
|
|
71
|
+
top: var(--ad-tabs-pad);
|
|
72
|
+
bottom: calc(var(--ad-tabs-pad) + 0.3rem);
|
|
73
|
+
left: 0;
|
|
74
|
+
width: var(--ad-tabs-w);
|
|
75
|
+
transform: translateX(var(--ad-tabs-x));
|
|
76
|
+
pointer-events: none;
|
|
77
|
+
}
|
|
78
|
+
.ad-tabs-indicator {
|
|
79
|
+
z-index: -1;
|
|
80
|
+
transition:
|
|
81
|
+
transform 0.55s var(--ad-tabs-spring),
|
|
82
|
+
width 0.45s var(--ad-tabs-spring),
|
|
83
|
+
scale 0.3s ease-out;
|
|
84
|
+
}
|
|
85
|
+
/* The blade breathes: a soft glow under it swells and settles (opacity only; the blur is still). */
|
|
86
|
+
.ad-tabs-indicator::after {
|
|
87
|
+
content: "";
|
|
88
|
+
position: absolute;
|
|
89
|
+
inset: -0.35rem -0.25rem -0.15rem;
|
|
90
|
+
z-index: -1;
|
|
91
|
+
border-radius: var(--ad-size-radius);
|
|
92
|
+
background: radial-gradient(closest-side, rgb(from var(--ad-primary) r g b / 0.55), transparent);
|
|
93
|
+
filter: blur(0.45rem);
|
|
94
|
+
opacity: 0;
|
|
95
|
+
animation: ad-tabs-breathe 3.2s ease-in-out infinite;
|
|
96
|
+
will-change: opacity;
|
|
97
|
+
}
|
|
98
|
+
/* The blade's glow, drawn once: a still copy of its shape under it carries the shadows, so the
|
|
99
|
+
glint and the breath above never make them re-blur. (A filter on the clipped shape itself
|
|
100
|
+
would be clipped away, hence the wrapper.) */
|
|
101
|
+
.ad-tabs-halo {
|
|
102
|
+
position: absolute;
|
|
103
|
+
inset: 0;
|
|
104
|
+
z-index: -1;
|
|
105
|
+
filter: drop-shadow(0 0 0.4rem rgb(from var(--ad-primary) r g b / 0.4))
|
|
106
|
+
drop-shadow(0 0.2rem 0.6rem rgb(from var(--ad-primary) r g b / 0.2));
|
|
107
|
+
}
|
|
108
|
+
.ad-tabs-halo::before {
|
|
109
|
+
content: "";
|
|
110
|
+
position: absolute;
|
|
111
|
+
inset: 0;
|
|
112
|
+
clip-path: var(--ad-blade);
|
|
113
|
+
background: var(--ad-primary-800);
|
|
114
|
+
}
|
|
115
|
+
/* Neon edge: the blade's own background is the edge, a glint runs along it. */
|
|
116
|
+
.ad-tabs-blade {
|
|
117
|
+
position: absolute;
|
|
118
|
+
inset: 0;
|
|
119
|
+
isolation: isolate;
|
|
120
|
+
clip-path: var(--ad-blade);
|
|
121
|
+
}
|
|
122
|
+
/* The edge: two periods of the glint gradient side by side, sliding one period to the right.
|
|
123
|
+
It draws exactly what a moving background-position drew, but only moves a layer. */
|
|
124
|
+
.ad-tabs-blade-edge {
|
|
125
|
+
position: absolute;
|
|
126
|
+
top: 0;
|
|
127
|
+
bottom: 0;
|
|
128
|
+
left: 0;
|
|
129
|
+
z-index: -1;
|
|
130
|
+
width: 600%;
|
|
131
|
+
background: linear-gradient(
|
|
132
|
+
100deg,
|
|
133
|
+
var(--ad-secondary) 0%,
|
|
134
|
+
var(--ad-secondary-200) 38%,
|
|
135
|
+
var(--ad-neutral-200) 48%,
|
|
136
|
+
var(--ad-secondary-200) 58%,
|
|
137
|
+
var(--ad-primary-600) 100%
|
|
138
|
+
)
|
|
139
|
+
0 0 / 50% 100%;
|
|
140
|
+
transform: translateX(-50%);
|
|
141
|
+
animation: ad-tabs-glint 3.6s linear infinite;
|
|
142
|
+
will-change: transform;
|
|
143
|
+
}
|
|
144
|
+
/* Fill, one hairline inside the edge, with a hot core near the notch. */
|
|
145
|
+
.ad-tabs-blade::before {
|
|
146
|
+
content: "";
|
|
147
|
+
position: absolute;
|
|
148
|
+
inset: 0.0625rem;
|
|
149
|
+
clip-path: var(--ad-blade);
|
|
150
|
+
background:
|
|
151
|
+
radial-gradient(60% 90% at 50% 120%, rgb(from var(--ad-primary) r g b / 0.67), transparent 70%),
|
|
152
|
+
linear-gradient(180deg, #ffffff22, transparent 35%),
|
|
153
|
+
linear-gradient(180deg, var(--ad-primary-700), var(--ad-primary-800) 62%, var(--ad-primary-900));
|
|
154
|
+
}
|
|
155
|
+
/* A light sweep crosses the fill now and then. */
|
|
156
|
+
.ad-tabs-blade::after {
|
|
157
|
+
content: "";
|
|
158
|
+
position: absolute;
|
|
159
|
+
inset: 0;
|
|
160
|
+
clip-path: var(--ad-blade);
|
|
161
|
+
background: linear-gradient(105deg, transparent 35%, #ffffff30 48%, transparent 60%);
|
|
162
|
+
transform: translateX(-100%);
|
|
163
|
+
animation: ad-tabs-sweep 5.5s ease-in-out infinite;
|
|
164
|
+
}
|
|
165
|
+
/* Comet trail: a blurred copy that lags behind while the blade travels. */
|
|
166
|
+
.ad-tabs-trail {
|
|
167
|
+
z-index: -2;
|
|
168
|
+
border-radius: var(--ad-size-radius);
|
|
169
|
+
background: radial-gradient(closest-side, rgb(from var(--ad-primary) r g b / 0.5), transparent);
|
|
170
|
+
filter: blur(0.6rem);
|
|
171
|
+
opacity: 0;
|
|
172
|
+
transition:
|
|
173
|
+
transform 0.8s cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
174
|
+
width 0.8s cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
175
|
+
opacity 0.5s;
|
|
176
|
+
}
|
|
177
|
+
/* Rail glow under the blade, with a spark that drops from the notch. */
|
|
178
|
+
.ad-tabs-rail {
|
|
179
|
+
position: absolute;
|
|
180
|
+
z-index: -2;
|
|
181
|
+
left: 0;
|
|
182
|
+
bottom: 0.1875rem;
|
|
183
|
+
width: var(--ad-tabs-w);
|
|
184
|
+
height: 0.1875rem;
|
|
185
|
+
transform: translateX(var(--ad-tabs-x));
|
|
186
|
+
border-radius: 999rem;
|
|
187
|
+
background: radial-gradient(closest-side, var(--ad-neutral-200), var(--ad-primary) 45%, transparent);
|
|
188
|
+
box-shadow: 0 0 0.75rem 0.15rem rgb(from var(--ad-primary) r g b / 0.53);
|
|
189
|
+
pointer-events: none;
|
|
190
|
+
transition:
|
|
191
|
+
transform 0.6s var(--ad-tabs-spring),
|
|
192
|
+
width 0.5s var(--ad-tabs-spring);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* While travelling the blade squashes and flares, the trail shows. */
|
|
196
|
+
.ad-tabs[data-moving] .ad-tabs-indicator {
|
|
197
|
+
scale: 1.04 0.86;
|
|
198
|
+
filter: drop-shadow(0 0 0.8rem rgb(from var(--ad-primary) r g b / 0.67)) brightness(1.25);
|
|
199
|
+
}
|
|
200
|
+
.ad-tabs[data-moving] .ad-tabs-trail {
|
|
201
|
+
opacity: 1;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* Inside Tabs the blade is the selection, so selected tabs draw no fill of their own. */
|
|
205
|
+
.ad-tabs > .ad-tab[aria-selected="true"]::before {
|
|
206
|
+
display: none;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
@keyframes ad-tabs-glint {
|
|
210
|
+
to {
|
|
211
|
+
transform: translateX(0);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
@keyframes ad-tabs-sweep {
|
|
215
|
+
0%,
|
|
216
|
+
55% {
|
|
217
|
+
transform: translateX(-100%);
|
|
218
|
+
}
|
|
219
|
+
85%,
|
|
220
|
+
100% {
|
|
221
|
+
transform: translateX(100%);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
@keyframes ad-tabs-breathe {
|
|
225
|
+
50% {
|
|
226
|
+
opacity: 1;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
@media (prefers-reduced-motion: reduce) {
|
|
230
|
+
.ad-tabs-indicator,
|
|
231
|
+
.ad-tabs-trail,
|
|
232
|
+
.ad-tabs-rail,
|
|
233
|
+
.ad-tabs-blade-edge,
|
|
234
|
+
.ad-tabs-blade::after,
|
|
235
|
+
.ad-tabs-indicator::after {
|
|
236
|
+
transition: none;
|
|
237
|
+
animation: none;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type CommonProps } from "../../../core/base";
|
|
2
|
+
import type { InputVariant } from "../shared";
|
|
3
|
+
export interface TagInputProps extends CommonProps {
|
|
4
|
+
value?: string[];
|
|
5
|
+
defaultValue?: string[];
|
|
6
|
+
onValueChange?: (tags: string[]) => void;
|
|
7
|
+
label?: React.ReactNode;
|
|
8
|
+
description?: React.ReactNode;
|
|
9
|
+
error?: React.ReactNode;
|
|
10
|
+
placeholder?: string;
|
|
11
|
+
/** Offered while typing; a click or Enter adds one. */
|
|
12
|
+
suggestions?: string[];
|
|
13
|
+
/** The most tags allowed. */
|
|
14
|
+
max?: number;
|
|
15
|
+
/** Checks a new tag; a returned message refuses it and is shown under the field. */
|
|
16
|
+
validate?: (tag: string) => string | undefined;
|
|
17
|
+
icon?: string;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
required?: boolean;
|
|
20
|
+
variant?: InputVariant;
|
|
21
|
+
labelPlacement?: "top" | "floating";
|
|
22
|
+
}
|
|
23
|
+
/** Tags typed into a field: Enter, comma or a pasted list adds them, Backspace takes the last one back. */
|
|
24
|
+
export declare function TagInput({ value: controlled, defaultValue, onValueChange, suggestions, max, validate, icon, placeholder, ...p }: TagInputProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* Styles owned by TagInput (and the chip row it shares with PeoplePicker). */
|
|
2
|
+
.ad-chip-field-items {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-wrap: wrap;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: 0.35rem;
|
|
7
|
+
width: 100%;
|
|
8
|
+
min-height: calc(var(--ad-size-h, 2.5rem) - 0.75rem);
|
|
9
|
+
}
|
|
10
|
+
.ad-input-base .ad-chip-field-input {
|
|
11
|
+
flex: 1 1 6rem;
|
|
12
|
+
width: auto;
|
|
13
|
+
min-height: 1.75rem;
|
|
14
|
+
}
|
|
15
|
+
.ad-tag-input {
|
|
16
|
+
display: grid;
|
|
17
|
+
gap: 0.45rem;
|
|
18
|
+
min-width: 0;
|
|
19
|
+
}
|
|
20
|
+
.ad-tag-input-suggestions {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-wrap: wrap;
|
|
23
|
+
gap: 0.35rem;
|
|
24
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { TextAreaProps } from "../shared";
|
|
2
|
+
export declare const TextArea: ({ value, defaultValue, onValueChange, label, description, error, startAdornment, endAdornment, className, size, variant, labelPlacement, resize, tone: _tone, material: _material, style, ...textarea }: TextAreaProps) => import("react").JSX.Element;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/* Styles owned by TextArea: the corner drags vertically by default; `both` lets the field
|
|
2
|
+
follow the width the reader drags it to, `none` locks it. */
|
|
3
|
+
.ad-text-area--resize-both .ad-input-base {
|
|
4
|
+
width: fit-content;
|
|
5
|
+
max-width: 100%;
|
|
6
|
+
}
|
|
7
|
+
.ad-text-area--resize-both textarea {
|
|
8
|
+
resize: both;
|
|
9
|
+
width: min(30rem, 100%);
|
|
10
|
+
min-width: 10rem;
|
|
11
|
+
max-width: 100%;
|
|
12
|
+
}
|
|
13
|
+
.ad-text-area--resize-none textarea {
|
|
14
|
+
resize: none;
|
|
15
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { TextFieldProps } from "../shared";
|
|
2
|
+
export declare const TextField: ({ label, description, error, clearable, startAdornment, endAdornment, value, defaultValue, onValueChange, inputRef, className, size, variant, labelPlacement, tone: _tone, material: _material, style, children: _children, ...input }: TextFieldProps) => import("react").JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type CommonProps } from "../../../core/base";
|
|
2
|
+
import { type ThemeName } from "../../foundation/ThemeProvider/ThemeProvider";
|
|
3
|
+
export type { ThemeName };
|
|
4
|
+
/** A theme shown as a card: its picture, name, a line about it and its own colour. */
|
|
5
|
+
export interface ThemePickerOption<V extends string = string> {
|
|
6
|
+
value: V;
|
|
7
|
+
label: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
/** Picture of the theme (with transparency); the chosen one gets a moving shine. */
|
|
10
|
+
image?: string;
|
|
11
|
+
/** The theme's own colour for the card's edge and glow. */
|
|
12
|
+
color?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ThemePickerProps<V extends string = ThemeName> extends CommonProps {
|
|
15
|
+
value?: V;
|
|
16
|
+
defaultValue?: V;
|
|
17
|
+
onValueChange?: (value: V) => void;
|
|
18
|
+
/** Own themes as picture cards; without them the built-in themes are offered as swatches. */
|
|
19
|
+
options?: readonly ThemePickerOption<V>[];
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
label?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Choosing a theme: compact swatches for the built-in themes, or a gallery of picture cards. */
|
|
24
|
+
export declare function ThemePicker<V extends string = ThemeName>(p: ThemePickerProps<V>): import("react").JSX.Element;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
.ad-theme-picker {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
flex-wrap: wrap;
|
|
4
|
+
gap: var(--ad-space-2);
|
|
5
|
+
max-width: 100%;
|
|
6
|
+
}
|
|
7
|
+
.ad-theme-picker > .ad-button {
|
|
8
|
+
flex: none;
|
|
9
|
+
}
|
|
10
|
+
.ad-theme-picker > .ad-button[aria-checked="true"] {
|
|
11
|
+
--ad-btn-border-a: var(--ad-pink);
|
|
12
|
+
--ad-btn-glow: rgb(from var(--ad-primary) r g b / 0.42);
|
|
13
|
+
}
|
|
14
|
+
/* Names are short, so the label need not clip: the swatch and its glow stay round. */
|
|
15
|
+
.ad-theme-picker .ad-button-label {
|
|
16
|
+
display: inline-flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
gap: 0.45em;
|
|
19
|
+
overflow: visible;
|
|
20
|
+
}
|
|
21
|
+
.ad-theme-swatch {
|
|
22
|
+
flex: none;
|
|
23
|
+
width: 0.9em;
|
|
24
|
+
height: 0.9em;
|
|
25
|
+
border-radius: 50%;
|
|
26
|
+
box-shadow:
|
|
27
|
+
0 0 0 0.125rem #0007,
|
|
28
|
+
0 0 0.45em currentColor;
|
|
29
|
+
}
|
|
30
|
+
/* The chosen theme pulses its swatch; swatches hop on hover. */
|
|
31
|
+
.ad-theme-swatch {
|
|
32
|
+
transition: transform 0.35s cubic-bezier(0.34, 1.6, 0.5, 1);
|
|
33
|
+
}
|
|
34
|
+
.ad-theme-picker > .ad-button:hover .ad-theme-swatch {
|
|
35
|
+
transform: translateY(-0.15em) scale(1.25);
|
|
36
|
+
}
|
|
37
|
+
.ad-theme-picker > .ad-button[aria-checked="true"] .ad-theme-swatch {
|
|
38
|
+
position: relative;
|
|
39
|
+
}
|
|
40
|
+
.ad-theme-picker > .ad-button[aria-checked="true"] .ad-theme-swatch::after {
|
|
41
|
+
content: "";
|
|
42
|
+
position: absolute;
|
|
43
|
+
inset: 0;
|
|
44
|
+
border-radius: inherit;
|
|
45
|
+
box-shadow: 0 0 0 0.3em #ffffff22, 0 0 1em currentColor;
|
|
46
|
+
opacity: 0;
|
|
47
|
+
animation: ad-swatch-pulse 2s ease-in-out infinite;
|
|
48
|
+
}
|
|
49
|
+
@keyframes ad-swatch-pulse {
|
|
50
|
+
50% {
|
|
51
|
+
opacity: 1;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/* Gallery: one picture card per theme, edged and lit in that theme's colour. */
|
|
55
|
+
.ad-theme-picker[data-gallery] {
|
|
56
|
+
display: grid;
|
|
57
|
+
grid-template-columns: repeat(auto-fill, minmax(min(100%, 10rem), 1fr));
|
|
58
|
+
gap: var(--ad-space-3);
|
|
59
|
+
}
|
|
60
|
+
.ad-theme-card {
|
|
61
|
+
--ad-theme-card: var(--ad-primary);
|
|
62
|
+
position: relative;
|
|
63
|
+
isolation: isolate;
|
|
64
|
+
display: grid;
|
|
65
|
+
grid-template-rows: minmax(0, 1fr) auto;
|
|
66
|
+
aspect-ratio: 5 / 4;
|
|
67
|
+
padding: 0;
|
|
68
|
+
overflow: hidden;
|
|
69
|
+
border: 0.0625rem solid rgb(from var(--ad-theme-card) r g b / 0.38);
|
|
70
|
+
border-radius: 0.8rem;
|
|
71
|
+
background: linear-gradient(135deg, var(--ad-neutral-900), var(--ad-neutral-950));
|
|
72
|
+
color: var(--ad-text);
|
|
73
|
+
font: inherit;
|
|
74
|
+
cursor: pointer;
|
|
75
|
+
transition: filter 0.18s, box-shadow 0.18s, border-color 0.18s;
|
|
76
|
+
}
|
|
77
|
+
.ad-theme-card:hover {
|
|
78
|
+
filter: brightness(1.13);
|
|
79
|
+
}
|
|
80
|
+
.ad-theme-card:disabled {
|
|
81
|
+
cursor: not-allowed;
|
|
82
|
+
filter: grayscale(0.5);
|
|
83
|
+
}
|
|
84
|
+
.ad-theme-card[aria-checked="true"] {
|
|
85
|
+
border-color: color-mix(in oklch, var(--ad-theme-card) 75%, #fff);
|
|
86
|
+
box-shadow:
|
|
87
|
+
0 0 0.35rem rgb(from var(--ad-theme-card) r g b / 0.58),
|
|
88
|
+
0 0 1rem rgb(from var(--ad-theme-card) r g b / 0.28);
|
|
89
|
+
}
|
|
90
|
+
.ad-theme-card-preview {
|
|
91
|
+
display: grid;
|
|
92
|
+
place-items: center;
|
|
93
|
+
min-height: 0;
|
|
94
|
+
padding: var(--ad-space-2);
|
|
95
|
+
background: radial-gradient(ellipse at 50% 76%, rgb(from var(--ad-theme-card) r g b / 0.18), transparent 72%);
|
|
96
|
+
}
|
|
97
|
+
.ad-theme-card-preview > :is(img, svg, .ad-image-shine) {
|
|
98
|
+
width: auto;
|
|
99
|
+
max-width: 100%;
|
|
100
|
+
height: 100%;
|
|
101
|
+
aspect-ratio: 1;
|
|
102
|
+
object-fit: contain;
|
|
103
|
+
}
|
|
104
|
+
.ad-theme-card-caption {
|
|
105
|
+
display: grid;
|
|
106
|
+
justify-items: center;
|
|
107
|
+
gap: 0.15rem;
|
|
108
|
+
padding: var(--ad-space-2);
|
|
109
|
+
background: linear-gradient(180deg, transparent, var(--ad-neutral-950));
|
|
110
|
+
}
|
|
111
|
+
.ad-theme-card-caption > span {
|
|
112
|
+
color: var(--ad-muted);
|
|
113
|
+
font-size: var(--ad-font-size-caption);
|
|
114
|
+
text-align: center;
|
|
115
|
+
}
|
|
116
|
+
.ad-theme-card-check {
|
|
117
|
+
position: absolute;
|
|
118
|
+
top: 0.5rem;
|
|
119
|
+
right: 0.5rem;
|
|
120
|
+
display: grid;
|
|
121
|
+
place-items: center;
|
|
122
|
+
width: 1.6rem;
|
|
123
|
+
aspect-ratio: 1;
|
|
124
|
+
border-radius: 50%;
|
|
125
|
+
background: var(--ad-theme-card);
|
|
126
|
+
color: #fff;
|
|
127
|
+
box-shadow: 0 0 0.6rem var(--ad-theme-card);
|
|
128
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/* ToggleButton: active is intentionally identical to Primary, inactive to Secondary. */
|
|
2
|
+
.ad-toggle-button[aria-pressed="true"] {
|
|
3
|
+
background:
|
|
4
|
+
linear-gradient(
|
|
5
|
+
180deg,
|
|
6
|
+
var(--ad-btn-bg-top),
|
|
7
|
+
var(--ad-btn-bg-mid) 54%,
|
|
8
|
+
var(--ad-btn-bg-bottom)
|
|
9
|
+
)
|
|
10
|
+
padding-box,
|
|
11
|
+
linear-gradient(
|
|
12
|
+
135deg,
|
|
13
|
+
var(--ad-btn-border-a),
|
|
14
|
+
var(--ad-btn-border-b) 48%,
|
|
15
|
+
rgb(from var(--ad-secondary) r g b / 0.54) 78%,
|
|
16
|
+
rgb(from var(--ad-primary-700) r g b / 0.31)
|
|
17
|
+
)
|
|
18
|
+
border-box;
|
|
19
|
+
box-shadow:
|
|
20
|
+
inset 0 0.075rem 0.12rem var(--ad-btn-inner),
|
|
21
|
+
inset 0 -0.42rem 0.95rem var(--ad-btn-bottom),
|
|
22
|
+
0 0.32rem 0.75rem #0008,
|
|
23
|
+
0 0 1.15rem var(--ad-btn-glow);
|
|
24
|
+
color: var(--ad-neutral-200);
|
|
25
|
+
filter: none;
|
|
26
|
+
}
|
|
27
|
+
.ad-toggle-button[aria-pressed="false"] {
|
|
28
|
+
filter: saturate(0.88) brightness(0.94);
|
|
29
|
+
}
|
|
30
|
+
/* Switching on pops the button and spins its icon, then it settles into the breathing glow. */
|
|
31
|
+
.ad-toggle-button[aria-pressed="true"] {
|
|
32
|
+
animation:
|
|
33
|
+
ad-toggle-pop 0.45s cubic-bezier(0.34, 1.6, 0.5, 1),
|
|
34
|
+
ad-btn-breathe 3.1s 0.45s ease-in-out infinite;
|
|
35
|
+
}
|
|
36
|
+
.ad-toggle-button[aria-pressed="true"] > .ad-icon {
|
|
37
|
+
animation: ad-toggle-icon 0.55s cubic-bezier(0.34, 1.6, 0.5, 1);
|
|
38
|
+
}
|
|
39
|
+
@keyframes ad-toggle-pop {
|
|
40
|
+
40% {
|
|
41
|
+
scale: 1.08;
|
|
42
|
+
box-shadow: 0 0 1.6rem rgb(from var(--ad-primary) r g b / 0.67);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
@keyframes ad-toggle-icon {
|
|
46
|
+
from {
|
|
47
|
+
transform: rotate(-120deg) scale(0.4);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { CommonProps, Material, TokenStyle, Variant } from "../../core/base";
|
|
3
|
+
export declare const variantMaterial: Record<Variant, Material>;
|
|
4
|
+
/** An option as the list draws it: a string key and everything it shows. */
|
|
5
|
+
export type Option = {
|
|
6
|
+
value: string;
|
|
7
|
+
label: ReactNode;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
icon?: string;
|
|
10
|
+
avatar?: {
|
|
11
|
+
name: string;
|
|
12
|
+
src?: string;
|
|
13
|
+
};
|
|
14
|
+
description?: ReactNode;
|
|
15
|
+
group?: string;
|
|
16
|
+
/** Replaces the whole row's content. */
|
|
17
|
+
content?: ReactNode;
|
|
18
|
+
};
|
|
19
|
+
export declare const toOption: (option: string | Option) => Option;
|
|
20
|
+
/** Field label with the required mark, used above the field or floating inside it. */
|
|
21
|
+
export declare const fieldLabel: (label: ReactNode, required?: boolean) => import("react").JSX.Element;
|
|
22
|
+
/**
|
|
23
|
+
* Ids that tie a control to its own label and message. The frame is a wrapping label (a click
|
|
24
|
+
* anywhere on the field focuses the control), but its text also holds the message and any
|
|
25
|
+
* adornment buttons, so the generated name points at the label text. Explicit ARIA names
|
|
26
|
+
* and descriptions take precedence over the generated connections.
|
|
27
|
+
*/
|
|
28
|
+
export declare const useFieldIds: (label: ReactNode, message: ReactNode, controlId?: string, aria?: Pick<CommonProps, "aria-label" | "aria-labelledby" | "aria-describedby">) => {
|
|
29
|
+
valueLabelledBy: string | undefined;
|
|
30
|
+
aria: {
|
|
31
|
+
"aria-label": string | undefined;
|
|
32
|
+
"aria-labelledby": string | undefined;
|
|
33
|
+
"aria-describedby": string | undefined;
|
|
34
|
+
};
|
|
35
|
+
label: string;
|
|
36
|
+
message: string;
|
|
37
|
+
control: string;
|
|
38
|
+
value: string;
|
|
39
|
+
};
|
|
40
|
+
export type FieldIds = ReturnType<typeof useFieldIds>;
|
|
41
|
+
/** Keep a combobox's virtual focus visible without moving its typing focus or the page. */
|
|
42
|
+
export declare function useActiveOption(listId: string, active: number, open: boolean): void;
|
|
43
|
+
/** Label, control and description/error line shared by every text-like field. */
|
|
44
|
+
export declare function FieldFrame({ className, style, label, required, description, error, ids, children, }: {
|
|
45
|
+
className: string;
|
|
46
|
+
style?: TokenStyle;
|
|
47
|
+
ids: FieldIds;
|
|
48
|
+
label?: ReactNode;
|
|
49
|
+
required?: boolean;
|
|
50
|
+
description?: ReactNode;
|
|
51
|
+
error?: ReactNode;
|
|
52
|
+
children: ReactNode;
|
|
53
|
+
}): import("react").JSX.Element;
|
|
54
|
+
/** Flat option rows shared by Select and Autocomplete; the chosen one carries a check mark. */
|
|
55
|
+
export declare function OptionList({ id, options, selected, active, onChoose, onHover, }: {
|
|
56
|
+
id?: string;
|
|
57
|
+
options: Option[];
|
|
58
|
+
selected?: string;
|
|
59
|
+
active?: number;
|
|
60
|
+
onChoose: (value: string) => void;
|
|
61
|
+
onHover?: (index: number) => void;
|
|
62
|
+
}): import("react").JSX.Element;
|