@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.
- package/LICENSE +21 -0
- package/README.md +203 -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,166 @@
|
|
|
1
|
+
/* Styles owned by Avatar: a slowly turning neon ring; it speeds up and the face lifts on hover. */
|
|
2
|
+
.ad-avatar {
|
|
3
|
+
--ad-avatar: 3rem;
|
|
4
|
+
position: relative;
|
|
5
|
+
isolation: isolate;
|
|
6
|
+
width: var(--ad-avatar);
|
|
7
|
+
height: var(--ad-avatar);
|
|
8
|
+
display: grid;
|
|
9
|
+
place-items: center;
|
|
10
|
+
flex: none;
|
|
11
|
+
border-radius: 50%;
|
|
12
|
+
font-size: calc(var(--ad-avatar) * 0.42);
|
|
13
|
+
font-weight: 700;
|
|
14
|
+
color: #fff;
|
|
15
|
+
text-shadow: 0 0 0.5em var(--ad-primary);
|
|
16
|
+
background:
|
|
17
|
+
radial-gradient(circle at 35% 25%, #ffffff22, transparent 55%),
|
|
18
|
+
linear-gradient(160deg, var(--ad-primary-800), var(--ad-primary-900));
|
|
19
|
+
transition:
|
|
20
|
+
transform 0.4s cubic-bezier(0.34, 1.56, 0.5, 1),
|
|
21
|
+
box-shadow 0.4s,
|
|
22
|
+
filter 0.4s;
|
|
23
|
+
}
|
|
24
|
+
.ad-avatar[data-ad-size="xs"] {
|
|
25
|
+
--ad-avatar: 1.75rem;
|
|
26
|
+
}
|
|
27
|
+
.ad-avatar[data-ad-size="sm"] {
|
|
28
|
+
--ad-avatar: 2.25rem;
|
|
29
|
+
}
|
|
30
|
+
.ad-avatar[data-ad-size="lg"] {
|
|
31
|
+
--ad-avatar: 4rem;
|
|
32
|
+
}
|
|
33
|
+
/* Turning ring of light around the face. */
|
|
34
|
+
.ad-avatar::before {
|
|
35
|
+
content: "";
|
|
36
|
+
position: absolute;
|
|
37
|
+
z-index: -1;
|
|
38
|
+
inset: -0.125rem;
|
|
39
|
+
border-radius: 50%;
|
|
40
|
+
background: conic-gradient(
|
|
41
|
+
from 0deg,
|
|
42
|
+
var(--ad-primary),
|
|
43
|
+
var(--ad-secondary-100),
|
|
44
|
+
var(--ad-primary),
|
|
45
|
+
rgb(from var(--ad-primary) r g b / 0) 60%,
|
|
46
|
+
var(--ad-primary)
|
|
47
|
+
);
|
|
48
|
+
mask: radial-gradient(
|
|
49
|
+
closest-side,
|
|
50
|
+
transparent calc(100% - 0.125rem),
|
|
51
|
+
#000 calc(100% - 0.1rem)
|
|
52
|
+
);
|
|
53
|
+
animation: ad-avatar-ring 6s linear infinite;
|
|
54
|
+
}
|
|
55
|
+
.ad-avatar:hover {
|
|
56
|
+
transform: translateY(-0.15rem) scale(1.06);
|
|
57
|
+
box-shadow: 0 0.6rem 1.2rem rgb(from var(--ad-primary) r g b / 0.27);
|
|
58
|
+
}
|
|
59
|
+
.ad-avatar:hover::before {
|
|
60
|
+
animation-duration: 1.6s;
|
|
61
|
+
}
|
|
62
|
+
@keyframes ad-avatar-ring {
|
|
63
|
+
to {
|
|
64
|
+
rotate: 1turn;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/* Host variant: the neon seal replaces the face and its ring; it lifts and glows brighter on hover. */
|
|
68
|
+
/* The seal carries a label, so it starts larger than the initials at every size. */
|
|
69
|
+
.ad-avatar[data-variant="host"] {
|
|
70
|
+
--ad-avatar: 5.5rem;
|
|
71
|
+
background: none;
|
|
72
|
+
text-shadow: none;
|
|
73
|
+
}
|
|
74
|
+
.ad-avatar[data-variant="host"][data-ad-size="xs"] {
|
|
75
|
+
--ad-avatar: 3rem;
|
|
76
|
+
}
|
|
77
|
+
.ad-avatar[data-variant="host"][data-ad-size="sm"] {
|
|
78
|
+
--ad-avatar: 4.25rem;
|
|
79
|
+
}
|
|
80
|
+
.ad-avatar[data-variant="host"][data-ad-size="lg"] {
|
|
81
|
+
--ad-avatar: 8rem;
|
|
82
|
+
}
|
|
83
|
+
.ad-avatar[data-variant="host"]::before {
|
|
84
|
+
content: none;
|
|
85
|
+
}
|
|
86
|
+
.ad-avatar[data-variant="host"]:hover {
|
|
87
|
+
box-shadow: none;
|
|
88
|
+
filter: brightness(1.18) drop-shadow(0 0 0.6rem rgb(from var(--ad-primary) r g b / 0.4));
|
|
89
|
+
}
|
|
90
|
+
.ad-host-seal {
|
|
91
|
+
position: relative;
|
|
92
|
+
display: block;
|
|
93
|
+
width: 100%;
|
|
94
|
+
height: 100%;
|
|
95
|
+
}
|
|
96
|
+
/* The seal is a stack of drawings in paint order: the static ones are painted once, and each
|
|
97
|
+
ring is a layer of its own that only turns (around the ring's centre, 65 of 128). */
|
|
98
|
+
.ad-host-seal > svg {
|
|
99
|
+
position: absolute;
|
|
100
|
+
inset: 0;
|
|
101
|
+
display: block;
|
|
102
|
+
width: 100%;
|
|
103
|
+
height: 100%;
|
|
104
|
+
overflow: visible;
|
|
105
|
+
}
|
|
106
|
+
.ad-host-seal > svg[data-host-spin] {
|
|
107
|
+
transform-origin: 50.78125% 50.78125%;
|
|
108
|
+
will-change: transform;
|
|
109
|
+
animation: ad-host-spin linear infinite;
|
|
110
|
+
}
|
|
111
|
+
@keyframes ad-host-spin {
|
|
112
|
+
to {
|
|
113
|
+
transform: rotate(1turn);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
@media (prefers-reduced-motion: reduce) {
|
|
117
|
+
:root:not([data-ad-motion="on"]) .ad-host-seal > svg[data-host-spin] {
|
|
118
|
+
animation: none;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/* A photo fills the face; inside the host seal it takes the crown's place. */
|
|
122
|
+
.ad-avatar-photo {
|
|
123
|
+
width: 100%;
|
|
124
|
+
height: 100%;
|
|
125
|
+
border-radius: 50%;
|
|
126
|
+
object-fit: cover;
|
|
127
|
+
}
|
|
128
|
+
/* The tag sits on the ring's lower edge like a name plate. */
|
|
129
|
+
.ad-avatar-badge {
|
|
130
|
+
position: absolute;
|
|
131
|
+
bottom: -0.35em;
|
|
132
|
+
left: 50%;
|
|
133
|
+
translate: -50% 0;
|
|
134
|
+
padding: 0.15em 0.6em;
|
|
135
|
+
border: 0.0625rem solid rgb(from var(--ad-secondary) r g b / 0.6);
|
|
136
|
+
border-radius: 999px;
|
|
137
|
+
background: var(--ad-neutral-950);
|
|
138
|
+
color: var(--ad-secondary-100);
|
|
139
|
+
font-size: max(0.5625rem, calc(var(--ad-avatar) * 0.12));
|
|
140
|
+
font-weight: 700;
|
|
141
|
+
letter-spacing: 0.12em;
|
|
142
|
+
line-height: 1.3;
|
|
143
|
+
text-shadow: none;
|
|
144
|
+
text-transform: uppercase;
|
|
145
|
+
white-space: nowrap;
|
|
146
|
+
}
|
|
147
|
+
/* Presence: a lit dot on the lower right of the ring. */
|
|
148
|
+
.ad-avatar-presence {
|
|
149
|
+
position: absolute;
|
|
150
|
+
right: 4%;
|
|
151
|
+
bottom: 4%;
|
|
152
|
+
width: max(0.55rem, calc(var(--ad-avatar) * 0.24));
|
|
153
|
+
aspect-ratio: 1;
|
|
154
|
+
border: 0.125rem solid var(--ad-neutral-950);
|
|
155
|
+
border-radius: 50%;
|
|
156
|
+
background: var(--ad-success);
|
|
157
|
+
box-shadow: 0 0 0.4rem var(--ad-success);
|
|
158
|
+
}
|
|
159
|
+
.ad-avatar-presence[data-presence="busy"] {
|
|
160
|
+
background: var(--ad-primary);
|
|
161
|
+
box-shadow: 0 0 0.4rem var(--ad-primary);
|
|
162
|
+
}
|
|
163
|
+
.ad-avatar-presence[data-presence="offline"] {
|
|
164
|
+
background: var(--ad-neutral-600, #555);
|
|
165
|
+
box-shadow: none;
|
|
166
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* Styles owned by BrandMark: the logo breathes in neon and its strokes shift from ruby to white. */
|
|
2
|
+
.ad-brand-mark {
|
|
3
|
+
position: relative;
|
|
4
|
+
display: inline-grid;
|
|
5
|
+
justify-items: center;
|
|
6
|
+
gap: 0.25rem;
|
|
7
|
+
max-width: 100%;
|
|
8
|
+
color: var(--ad-secondary);
|
|
9
|
+
}
|
|
10
|
+
.ad-brand-mark > svg {
|
|
11
|
+
width: min(15rem, 100%);
|
|
12
|
+
height: auto;
|
|
13
|
+
filter: hue-rotate(var(--ad-hue-shift, 0deg)) drop-shadow(0 0 0.6rem rgb(from var(--ad-primary) r g b / 0.45));
|
|
14
|
+
animation: ad-brand-breathe 4s ease-in-out infinite;
|
|
15
|
+
}
|
|
16
|
+
.ad-brand-mark > small {
|
|
17
|
+
display: block;
|
|
18
|
+
opacity: 0.8;
|
|
19
|
+
font-size: 0.5rem;
|
|
20
|
+
letter-spacing: 0.28rem;
|
|
21
|
+
color: var(--ad-secondary-200);
|
|
22
|
+
animation: ad-brand-spacing 4s ease-in-out infinite;
|
|
23
|
+
will-change: transform, opacity;
|
|
24
|
+
}
|
|
25
|
+
@keyframes ad-brand-breathe {
|
|
26
|
+
0%,
|
|
27
|
+
100% {
|
|
28
|
+
opacity: 0.82;
|
|
29
|
+
}
|
|
30
|
+
50% {
|
|
31
|
+
opacity: 1;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
@keyframes ad-brand-spacing {
|
|
35
|
+
50% {
|
|
36
|
+
transform: scaleX(1.12);
|
|
37
|
+
opacity: 1;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const ButtonGroup: {
|
|
2
|
+
(p: import("../../..").CommonProps): import("react").DetailedReactHTMLElement<{
|
|
3
|
+
id: string | undefined;
|
|
4
|
+
className: string;
|
|
5
|
+
style: import("../../..").TokenStyle | undefined;
|
|
6
|
+
"data-ad-component": string;
|
|
7
|
+
"data-ad-material": import("../../..").Material | undefined;
|
|
8
|
+
"data-ad-size": import("../../..").ControlSize | undefined;
|
|
9
|
+
"data-ad-tone": import("../../..").Tone | undefined;
|
|
10
|
+
}, HTMLElement>;
|
|
11
|
+
displayName: string;
|
|
12
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/* ButtonGroup is a premium action tray: one shared surface with distinct full buttons. */
|
|
2
|
+
.ad-button-group {
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
gap: 0.42rem;
|
|
6
|
+
min-width: 0;
|
|
7
|
+
max-width: 100%;
|
|
8
|
+
padding: 0.4rem;
|
|
9
|
+
border: 0.0625rem solid transparent;
|
|
10
|
+
border-radius: calc(var(--ad-radius) + 0.32rem);
|
|
11
|
+
background:
|
|
12
|
+
linear-gradient(180deg, var(--ad-neutral-850), var(--ad-neutral-900) 70%, var(--ad-neutral-900)) padding-box,
|
|
13
|
+
linear-gradient(135deg, rgb(from var(--ad-secondary) r g b / 0.33), rgb(from var(--ad-primary-700) r g b / 0.21) 52%, rgb(from var(--ad-secondary) r g b / 0.17)) border-box;
|
|
14
|
+
box-shadow:
|
|
15
|
+
inset 0 0.075rem 0.15rem #ffffff20,
|
|
16
|
+
inset 0 -0.42rem 0.9rem #0008,
|
|
17
|
+
0 0.38rem 0.9rem #0008,
|
|
18
|
+
0 0 1rem rgb(from var(--ad-primary) r g b / 0.08);
|
|
19
|
+
isolation: isolate;
|
|
20
|
+
}
|
|
21
|
+
.ad-button-group > .ad {
|
|
22
|
+
flex: none;
|
|
23
|
+
margin: 0;
|
|
24
|
+
}
|
|
25
|
+
.ad-button-group > .ad-button {
|
|
26
|
+
min-inline-size: max-content;
|
|
27
|
+
}
|
|
28
|
+
.ad-button-group > .ad-icon-button,
|
|
29
|
+
.ad-button-group > .ad-toggle-button {
|
|
30
|
+
justify-self: center;
|
|
31
|
+
}
|
|
32
|
+
@media (max-width: 30rem) {
|
|
33
|
+
.ad-button-group {
|
|
34
|
+
flex-wrap: wrap;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { CardProps } from "../shared";
|
|
3
|
+
export declare const Card: ({ as, border, shell, padding, title, description, eyebrow, icon, actions, level, children, ...p }: CardProps) => React.DetailedReactHTMLElement<{
|
|
4
|
+
ref: React.RefObject<HTMLElement | null>;
|
|
5
|
+
"data-ad-padding": "sm" | "md" | "lg" | "none";
|
|
6
|
+
onPointerMove: (event: React.PointerEvent<HTMLElement>) => void;
|
|
7
|
+
id: string | undefined;
|
|
8
|
+
className: string;
|
|
9
|
+
style: import("../../..").TokenStyle | undefined;
|
|
10
|
+
"data-ad-component": string;
|
|
11
|
+
"data-ad-material": import("../../..").Material | undefined;
|
|
12
|
+
"data-ad-size": import("../../..").ControlSize | undefined;
|
|
13
|
+
"data-ad-tone": import("../../..").Tone | undefined;
|
|
14
|
+
}, HTMLElement>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
.ad-card {
|
|
2
|
+
min-width: 0;
|
|
3
|
+
position: relative;
|
|
4
|
+
}
|
|
5
|
+
.ad-card[data-ad-padding="none"] {
|
|
6
|
+
padding: 0;
|
|
7
|
+
}
|
|
8
|
+
.ad-card[data-ad-padding="sm"] {
|
|
9
|
+
padding: var(--ad-space-2);
|
|
10
|
+
}
|
|
11
|
+
.ad-card[data-ad-padding="md"] {
|
|
12
|
+
padding: var(--ad-space-4);
|
|
13
|
+
}
|
|
14
|
+
.ad-card[data-ad-padding="lg"] {
|
|
15
|
+
padding: var(--ad-space-6);
|
|
16
|
+
}
|
|
17
|
+
.ad-card > .ad-header {
|
|
18
|
+
margin-bottom: var(--ad-space-3);
|
|
19
|
+
}
|
|
20
|
+
/* Pointer spotlight: a soft ruby light under the cursor, faded in on hover. */
|
|
21
|
+
.ad-card::after {
|
|
22
|
+
content: "";
|
|
23
|
+
position: absolute;
|
|
24
|
+
inset: 0;
|
|
25
|
+
border-radius: inherit;
|
|
26
|
+
background: radial-gradient(
|
|
27
|
+
22rem circle at var(--ad-spot-x, 50%) var(--ad-spot-y, 0%),
|
|
28
|
+
rgb(from var(--ad-primary) r g b / 0.08),
|
|
29
|
+
transparent 60%
|
|
30
|
+
);
|
|
31
|
+
opacity: 0;
|
|
32
|
+
transition: opacity 0.35s;
|
|
33
|
+
pointer-events: none;
|
|
34
|
+
}
|
|
35
|
+
.ad-card:hover::after {
|
|
36
|
+
opacity: 1;
|
|
37
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const DialogActions: {
|
|
2
|
+
(p: import("../../..").CommonProps): import("react").DetailedReactHTMLElement<{
|
|
3
|
+
id: string | undefined;
|
|
4
|
+
className: string;
|
|
5
|
+
style: import("../../..").TokenStyle | undefined;
|
|
6
|
+
"data-ad-component": string;
|
|
7
|
+
"data-ad-material": import("../../..").Material | undefined;
|
|
8
|
+
"data-ad-size": import("../../..").ControlSize | undefined;
|
|
9
|
+
"data-ad-tone": import("../../..").Tone | undefined;
|
|
10
|
+
}, HTMLElement>;
|
|
11
|
+
displayName: string;
|
|
12
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* Styles owned by DialogActions. */
|
|
2
|
+
.ad-dialog-actions {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-wrap: wrap;
|
|
5
|
+
justify-content: flex-end;
|
|
6
|
+
gap: 0.625rem;
|
|
7
|
+
align-items: center;
|
|
8
|
+
}
|
|
9
|
+
.ad-dialog-actions > .ad-button {
|
|
10
|
+
height: auto;
|
|
11
|
+
min-height: var(--ad-size-h);
|
|
12
|
+
padding-block: 0.6rem;
|
|
13
|
+
}
|
|
14
|
+
.ad-dialog-actions .ad-button-label {
|
|
15
|
+
white-space: normal;
|
|
16
|
+
overflow-wrap: anywhere;
|
|
17
|
+
}
|
|
18
|
+
/* Actions arrive last, one after another. */
|
|
19
|
+
.ad-dialog[open] .ad-dialog-actions > * {
|
|
20
|
+
animation: ad-dialog-action 0.45s cubic-bezier(0.34, 1.4, 0.5, 1) both;
|
|
21
|
+
animation-delay: 0.22s;
|
|
22
|
+
}
|
|
23
|
+
.ad-dialog[open] .ad-dialog-actions > :nth-child(2) {
|
|
24
|
+
animation-delay: 0.3s;
|
|
25
|
+
}
|
|
26
|
+
@keyframes ad-dialog-action {
|
|
27
|
+
from {
|
|
28
|
+
opacity: 0;
|
|
29
|
+
transform: translateY(0.6rem) scale(0.95);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const DialogBody: {
|
|
2
|
+
(p: import("../../..").CommonProps): import("react").DetailedReactHTMLElement<{
|
|
3
|
+
id: string | undefined;
|
|
4
|
+
className: string;
|
|
5
|
+
style: import("../../..").TokenStyle | undefined;
|
|
6
|
+
"data-ad-component": string;
|
|
7
|
+
"data-ad-material": import("../../..").Material | undefined;
|
|
8
|
+
"data-ad-size": import("../../..").ControlSize | undefined;
|
|
9
|
+
"data-ad-tone": import("../../..").Tone | undefined;
|
|
10
|
+
}, HTMLElement>;
|
|
11
|
+
displayName: string;
|
|
12
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/* Styles owned by DialogBody. */
|
|
2
|
+
.ad-dialog-body {
|
|
3
|
+
min-height: 0;
|
|
4
|
+
max-height: calc(100dvh - 10rem);
|
|
5
|
+
overflow-y: auto;
|
|
6
|
+
overflow-x: clip;
|
|
7
|
+
overscroll-behavior: contain;
|
|
8
|
+
scrollbar-width: thin;
|
|
9
|
+
scrollbar-color: var(--ad-primary) transparent;
|
|
10
|
+
padding: 1.125rem 0;
|
|
11
|
+
padding-inline-end: var(--ad-space-2);
|
|
12
|
+
}
|
|
13
|
+
.ad-dialog-body p {
|
|
14
|
+
font-size: 0.875rem;
|
|
15
|
+
line-height: 1.65;
|
|
16
|
+
color: var(--ad-muted);
|
|
17
|
+
margin: 0 0 0.875rem;
|
|
18
|
+
}
|
|
19
|
+
/* Inside an opening dialog the body fades in right after the window. */
|
|
20
|
+
.ad-dialog[open] .ad-dialog-body {
|
|
21
|
+
animation: ad-dialog-part 0.45s 0.12s cubic-bezier(0.2, 0.8, 0.2, 1) both;
|
|
22
|
+
}
|
|
23
|
+
@keyframes ad-dialog-part {
|
|
24
|
+
from {
|
|
25
|
+
opacity: 0;
|
|
26
|
+
transform: translateY(0.5rem);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/* Styles owned by Divider. */
|
|
2
|
+
.ad-divider {
|
|
3
|
+
height: 0.0625rem;
|
|
4
|
+
width: 100%;
|
|
5
|
+
margin: 0.9375rem 0;
|
|
6
|
+
background: linear-gradient(
|
|
7
|
+
90deg,
|
|
8
|
+
transparent,
|
|
9
|
+
rgb(from var(--ad-primary-600) r g b / 0.34) 15%,
|
|
10
|
+
rgb(from var(--ad-primary-600) r g b / 0.34) 85%,
|
|
11
|
+
transparent
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
.ad-divider[aria-orientation="vertical"] {
|
|
15
|
+
width: 0.0625rem;
|
|
16
|
+
height: 1.875rem;
|
|
17
|
+
margin: 0 0.5rem;
|
|
18
|
+
}
|
|
19
|
+
/* A pulse of light travels along the line now and then. */
|
|
20
|
+
.ad-divider {
|
|
21
|
+
position: relative;
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
}
|
|
24
|
+
.ad-divider::after {
|
|
25
|
+
content: "";
|
|
26
|
+
position: absolute;
|
|
27
|
+
inset: 0 auto 0 0;
|
|
28
|
+
width: 40%;
|
|
29
|
+
background: linear-gradient(90deg, transparent, var(--ad-secondary-100), var(--ad-primary), transparent);
|
|
30
|
+
transform: translateX(-100%);
|
|
31
|
+
animation: ad-divider-pulse 6s ease-in-out infinite;
|
|
32
|
+
}
|
|
33
|
+
.ad-divider[aria-orientation="vertical"]::after {
|
|
34
|
+
inset: 0 0 auto;
|
|
35
|
+
width: auto;
|
|
36
|
+
height: 40%;
|
|
37
|
+
background: linear-gradient(180deg, transparent, var(--ad-secondary-100), var(--ad-primary), transparent);
|
|
38
|
+
transform: translateY(-100%);
|
|
39
|
+
animation-name: ad-divider-pulse-y;
|
|
40
|
+
}
|
|
41
|
+
@keyframes ad-divider-pulse {
|
|
42
|
+
0%,
|
|
43
|
+
55% {
|
|
44
|
+
transform: translateX(-100%);
|
|
45
|
+
}
|
|
46
|
+
100% {
|
|
47
|
+
transform: translateX(250%);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
@keyframes ad-divider-pulse-y {
|
|
51
|
+
0%,
|
|
52
|
+
55% {
|
|
53
|
+
transform: translateY(-100%);
|
|
54
|
+
}
|
|
55
|
+
100% {
|
|
56
|
+
transform: translateY(250%);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type CommonProps } from "../../../core/base";
|
|
3
|
+
import { type FloatingPanelOptions } from "./useFloatingPanel";
|
|
4
|
+
export interface FloatingPanelProps extends CommonProps, FloatingPanelOptions {
|
|
5
|
+
/** Resize handles on every edge and corner while the panel is selected. */
|
|
6
|
+
resizable?: boolean;
|
|
7
|
+
label?: string;
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A panel that floats over the page: drag it by its surface, select it with a click to resize it
|
|
12
|
+
* from any edge or corner. Focus the panel and use arrow keys to move; Shift+arrow resizes.
|
|
13
|
+
* Where it starts is up to its class; once moved, it keeps its place.
|
|
14
|
+
*/
|
|
15
|
+
export declare const FloatingPanel: ({ layout: saved, onLayoutChange, defaultSize, limits, onDragOutside, ignore, resizable, label, children, ...p }: FloatingPanelProps) => import("react").JSX.Element;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* Styles owned by FloatingPanel: grab to move; selected, it shows a glowing edge and resize zones. */
|
|
2
|
+
.ad-floating-panel {
|
|
3
|
+
position: fixed;
|
|
4
|
+
z-index: var(--ad-z-floating, 40);
|
|
5
|
+
touch-action: none;
|
|
6
|
+
cursor: grab;
|
|
7
|
+
border-radius: var(--ad-radius-lg, 1rem);
|
|
8
|
+
transition: box-shadow 0.25s;
|
|
9
|
+
}
|
|
10
|
+
.ad-floating-panel:active {
|
|
11
|
+
cursor: grabbing;
|
|
12
|
+
}
|
|
13
|
+
.ad-floating-panel[data-active] {
|
|
14
|
+
box-shadow:
|
|
15
|
+
0 0 0 0.0625rem rgb(from var(--ad-primary) r g b / 0.55),
|
|
16
|
+
0 0 1.5rem rgb(from var(--ad-primary) r g b / 0.25);
|
|
17
|
+
}
|
|
18
|
+
/* Invisible grab zones overlapping each edge and corner. */
|
|
19
|
+
.ad-floating-panel-handle {
|
|
20
|
+
position: absolute;
|
|
21
|
+
z-index: 5;
|
|
22
|
+
touch-action: none;
|
|
23
|
+
}
|
|
24
|
+
.ad-floating-panel-handle:is([data-edge="n"], [data-edge="s"]) {
|
|
25
|
+
left: 0.9rem;
|
|
26
|
+
right: 0.9rem;
|
|
27
|
+
height: 0.65rem;
|
|
28
|
+
cursor: ns-resize;
|
|
29
|
+
}
|
|
30
|
+
.ad-floating-panel-handle:is([data-edge="e"], [data-edge="w"]) {
|
|
31
|
+
top: 0.9rem;
|
|
32
|
+
bottom: 0.9rem;
|
|
33
|
+
width: 0.65rem;
|
|
34
|
+
cursor: ew-resize;
|
|
35
|
+
}
|
|
36
|
+
.ad-floating-panel-handle[data-edge="n"] { top: -0.3rem; }
|
|
37
|
+
.ad-floating-panel-handle[data-edge="s"] { bottom: -0.3rem; }
|
|
38
|
+
.ad-floating-panel-handle[data-edge="e"] { right: -0.3rem; }
|
|
39
|
+
.ad-floating-panel-handle[data-edge="w"] { left: -0.3rem; }
|
|
40
|
+
.ad-floating-panel-handle:is([data-edge="ne"], [data-edge="nw"], [data-edge="se"], [data-edge="sw"]) {
|
|
41
|
+
width: 1rem;
|
|
42
|
+
height: 1rem;
|
|
43
|
+
}
|
|
44
|
+
.ad-floating-panel-handle[data-edge="nw"] { top: -0.3rem; left: -0.3rem; cursor: nwse-resize; }
|
|
45
|
+
.ad-floating-panel-handle[data-edge="se"] { bottom: -0.3rem; right: -0.3rem; cursor: nwse-resize; }
|
|
46
|
+
.ad-floating-panel-handle[data-edge="ne"] { top: -0.3rem; right: -0.3rem; cursor: nesw-resize; }
|
|
47
|
+
.ad-floating-panel-handle[data-edge="sw"] { bottom: -0.3rem; left: -0.3rem; cursor: nesw-resize; }
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type KeyboardEvent, type PointerEvent as ReactPointerEvent, type RefObject } from "react";
|
|
2
|
+
/** Where a floating panel sits, in window pixels. */
|
|
3
|
+
export interface PanelLayout {
|
|
4
|
+
left: number;
|
|
5
|
+
top: number;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
}
|
|
9
|
+
/** A point on the screen, in screen pixels. */
|
|
10
|
+
export interface ScreenPoint {
|
|
11
|
+
screenX: number;
|
|
12
|
+
screenY: number;
|
|
13
|
+
}
|
|
14
|
+
/** Which edges a resize handle moves; a corner combines its two edges. */
|
|
15
|
+
export type ResizeEdge = "n" | "s" | "e" | "w" | "ne" | "nw" | "se" | "sw";
|
|
16
|
+
export declare const resizeEdges: readonly ResizeEdge[];
|
|
17
|
+
export interface FloatingPanelOptions {
|
|
18
|
+
/** The saved placement, or null for the panel's own default place. */
|
|
19
|
+
layout?: PanelLayout | null;
|
|
20
|
+
/** Called once a move or resize ends, with the new placement to keep. */
|
|
21
|
+
onLayoutChange?(layout: PanelLayout): void;
|
|
22
|
+
/** Size to start from before the panel can be measured (it has not been laid out yet). */
|
|
23
|
+
defaultSize?: {
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
};
|
|
27
|
+
/** Size limits while resizing. */
|
|
28
|
+
limits?: {
|
|
29
|
+
minWidth?: number;
|
|
30
|
+
minHeight?: number;
|
|
31
|
+
maxWidth?: number;
|
|
32
|
+
maxHeight?: number;
|
|
33
|
+
};
|
|
34
|
+
/** The panel was dragged out of the window (e.g. to become a window of its own). */
|
|
35
|
+
onDragOutside?(screenBounds: PanelLayout, pointer: ScreenPoint): void;
|
|
36
|
+
/** More elements that keep their own pointer gestures instead of moving the panel. */
|
|
37
|
+
ignore?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare const panelControls = "button, a, input, select, textarea, [role=slider], [role=button], [role=switch], [role=listbox], [contenteditable=true], .ad-rotary-knob";
|
|
40
|
+
/**
|
|
41
|
+
* Click a panel to select it, drag it anywhere in the window, resize it from any edge or corner,
|
|
42
|
+
* drag it past the window's edge to hand it over. The placement stays on screen when the window
|
|
43
|
+
* shrinks; the caller keeps it (storage, preferences) through `onLayoutChange`.
|
|
44
|
+
*/
|
|
45
|
+
export declare const useFloatingPanel: (frameRef: RefObject<HTMLElement | null>, options?: FloatingPanelOptions) => {
|
|
46
|
+
layout: PanelLayout | null;
|
|
47
|
+
active: boolean;
|
|
48
|
+
beginMove: (event: ReactPointerEvent<HTMLElement>) => void;
|
|
49
|
+
beginResize: (edge: ResizeEdge) => (event: ReactPointerEvent<HTMLElement>) => void;
|
|
50
|
+
handleMove: (event: ReactPointerEvent<HTMLElement>) => void;
|
|
51
|
+
handleUp: () => void;
|
|
52
|
+
handleCancel: () => void;
|
|
53
|
+
handleKeyDown: (event: KeyboardEvent<HTMLElement>, resizable?: boolean) => void;
|
|
54
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ElementType, HTMLAttributes } from "react";
|
|
2
|
+
import { type Breakpoint, type Responsive, type Spacing } from "../../../core/responsive";
|
|
3
|
+
export type GridBreakpoint = Breakpoint;
|
|
4
|
+
export type GridResponsive<T> = Responsive<T>;
|
|
5
|
+
export type GridSpacing = Spacing;
|
|
6
|
+
export type GridAlign = "start" | "center" | "end" | "stretch" | "baseline";
|
|
7
|
+
export type GridJustify = "start" | "center" | "end" | "stretch" | "between" | "around" | "evenly";
|
|
8
|
+
export interface GridProps extends Omit<HTMLAttributes<HTMLElement>, "color"> {
|
|
9
|
+
as?: ElementType;
|
|
10
|
+
columns?: GridResponsive<number | string>;
|
|
11
|
+
gap?: GridResponsive<GridSpacing>;
|
|
12
|
+
rowGap?: GridResponsive<GridSpacing>;
|
|
13
|
+
columnGap?: GridResponsive<GridSpacing>;
|
|
14
|
+
minChildWidth?: string;
|
|
15
|
+
dense?: boolean;
|
|
16
|
+
align?: GridResponsive<GridAlign>;
|
|
17
|
+
justify?: GridResponsive<GridJustify>;
|
|
18
|
+
span?: GridResponsive<number | "full">;
|
|
19
|
+
rowSpan?: GridResponsive<number>;
|
|
20
|
+
columnStart?: GridResponsive<number>;
|
|
21
|
+
rowStart?: GridResponsive<number>;
|
|
22
|
+
}
|
|
23
|
+
/** A Grid with placement props and no columns renders as a grid item, not a container. */
|
|
24
|
+
export declare function Grid({ as: Component, columns, gap, rowGap, columnGap, minChildWidth, dense, align, justify, span, rowSpan, columnStart, rowStart, className, style, ...props }: GridProps): import("react").JSX.Element;
|