Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pages/app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
}

// Theming generates inline styles in runtime
if (location.hash.includes('theming') || location.hash.includes('side-navigation/collapsed')) {
if (location.hash.includes('theming') || location.hash.includes('side-navigation/collapsed') || location.hash.includes('tooltip/motion')) {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is needed in order to use applyTheme in the new page

csp['style-src'] = "'unsafe-inline' 'self'";
}
if (location.hash.includes('code-editor')) {
Expand Down
154 changes: 154 additions & 0 deletions pages/tooltip/motion.page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import React, { useEffect, useRef, useState } from 'react';

import Box from '~components/box';
import Button from '~components/button';
import FormField from '~components/form-field';
import SegmentedControl from '~components/segmented-control';
import SpaceBetween from '~components/space-between';
import { applyTheme } from '~components/theming';
import Tooltip from '~components/tooltip';

import { SimplePage } from '../app/templates';

type DurationOption = 'default' | 'slow' | 'very-slow' | 'none';

const durationValues: Record<DurationOption, string> = {
default: '115ms',
slow: '500ms',
'very-slow': '1500ms',
none: '0ms',
};

const easingValues: Record<string, string> = {
default: 'cubic-bezier(0, 0, 0, 1)',
'ease-out': 'ease-out',
linear: 'linear',
'ease-in-out': 'ease-in-out',
bounce: 'cubic-bezier(0.68, -0.55, 0.27, 1.55)',
};

export default function TooltipMotionPage() {
const [duration, setDuration] = useState<DurationOption>('default');
const [easing, setEasing] = useState<string>('default');

useEffect(() => {
const { reset } = applyTheme({
theme: {
tokens: {
motionDurationTooltipEnter: durationValues[duration],
motionEasingTooltipEnter: easingValues[easing],
},
} as any,
baseThemeId: 'visual-refresh',
});
return reset;
}, [duration, easing]);

return (
<SimplePage
title="Tooltip Enter Animation Token"
screenshotArea={{}}
settings={
<SpaceBetween size="l">
<FormField label="Animation duration (motionDurationTooltipEnter)">
<SegmentedControl
selectedId={duration}
onChange={({ detail }) => setDuration(detail.selectedId as DurationOption)}
options={[
{ id: 'default', text: `Default (${durationValues.default})` },
{ id: 'slow', text: `Slow (${durationValues.slow})` },
{ id: 'very-slow', text: `Very slow (${durationValues['very-slow']})` },
{ id: 'none', text: 'None (0ms)' },
]}
/>
</FormField>
<FormField label="Animation easing (motionEasingTooltipEnter)">
<SegmentedControl
selectedId={easing}
onChange={({ detail }) => setEasing(detail.selectedId)}
options={[
{ id: 'default', text: 'Default' },
{ id: 'ease-out', text: 'ease-out' },
{ id: 'linear', text: 'linear' },
{ id: 'ease-in-out', text: 'ease-in-out' },
{ id: 'bounce', text: 'Bounce' },
]}
/>
</FormField>
</SpaceBetween>
}
>
<SpaceBetween size="xl">
<Box variant="h2">Hover or focus the buttons to see the tooltip enter animation</Box>

<SpaceBetween direction="horizontal" size="l">
<TooltipButton position="top" label="Top" content="Tooltip on top" />
<TooltipButton position="right" label="Right" content="Tooltip on right" />
<TooltipButton position="bottom" label="Bottom" content="Tooltip on bottom" />
<TooltipButton position="left" label="Left" content="Tooltip on left" />
</SpaceBetween>

<Box variant="h3">Longer content</Box>
<SpaceBetween direction="horizontal" size="l">
<TooltipButton
position="top"
label="Multi-line"
content="This tooltip has longer content to demonstrate the fade-in animation with more visual area."
/>
<TooltipButton
position="bottom"
label="Rich content"
content={
<SpaceBetween size="xxs">
<Box variant="strong">Tooltip title</Box>
<Box variant="small">Supporting description with multiple lines of text for testing.</Box>
</SpaceBetween>
}
/>
</SpaceBetween>

<Box variant="h3">Rapid hover (toggle quickly to test animation restart)</Box>
<SpaceBetween direction="horizontal" size="xs">
{Array.from({ length: 5 }, (_, i) => (
<TooltipButton key={i} position="top" label={`Item ${i + 1}`} content={`Tooltip ${i + 1}`} />
))}
</SpaceBetween>

<Box color="text-body-secondary" variant="small">
Current settings: duration={durationValues[duration]}, easing={easingValues[easing]}
</Box>
</SpaceBetween>
</SimplePage>
);
}

function TooltipButton({
position,
label,
content,
}: {
position: 'top' | 'right' | 'bottom' | 'left';
label: string;
content: React.ReactNode;
}) {
const ref = useRef<HTMLDivElement>(null);
const [show, setShow] = useState(false);

return (
<div ref={ref} onMouseEnter={() => setShow(true)} onMouseLeave={() => setShow(false)}>
<Button
nativeButtonAttributes={{
onFocus: () => setShow(true),
onBlur: () => setShow(false),
}}
>
{label}
</Button>
{show && (
<Tooltip content={content} getTrack={() => ref.current} position={position} onEscape={() => setShow(false)} />
)}
</div>
);
}
16 changes: 16 additions & 0 deletions src/__integ__/__snapshots__/themes.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -781,6 +781,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "compact" 1`] =
"motion-duration-show-paced": "180ms",
"motion-duration-show-quick": "135ms",
"motion-duration-slow": "180ms",
"motion-duration-tooltip-enter": "0ms",
"motion-duration-transition-quick": "90ms",
"motion-duration-transition-show-paced": "180ms",
"motion-duration-transition-show-quick": "90ms",
Expand All @@ -796,6 +797,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "compact" 1`] =
"motion-easing-show-paced": "ease-out",
"motion-easing-show-quick": "ease-out",
"motion-easing-sticky": "ease-out",
"motion-easing-tooltip-enter": "cubic-bezier(0, 0, 0, 1)",
"motion-easing-transition-quick": "linear",
"motion-easing-transition-show-paced": "ease-out",
"motion-keyframes-fade-in": "awsui-fade-in-35003c",
Expand Down Expand Up @@ -1729,6 +1731,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "dark" 1`] = `
"motion-duration-show-paced": "180ms",
"motion-duration-show-quick": "135ms",
"motion-duration-slow": "180ms",
"motion-duration-tooltip-enter": "0ms",
"motion-duration-transition-quick": "90ms",
"motion-duration-transition-show-paced": "180ms",
"motion-duration-transition-show-quick": "90ms",
Expand All @@ -1744,6 +1747,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "dark" 1`] = `
"motion-easing-show-paced": "ease-out",
"motion-easing-show-quick": "ease-out",
"motion-easing-sticky": "ease-out",
"motion-easing-tooltip-enter": "cubic-bezier(0, 0, 0, 1)",
"motion-easing-transition-quick": "linear",
"motion-easing-transition-show-paced": "ease-out",
"motion-keyframes-fade-in": "awsui-fade-in-35003c",
Expand Down Expand Up @@ -2677,6 +2681,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "light" 1`] = `
"motion-duration-show-paced": "180ms",
"motion-duration-show-quick": "135ms",
"motion-duration-slow": "180ms",
"motion-duration-tooltip-enter": "0ms",
"motion-duration-transition-quick": "90ms",
"motion-duration-transition-show-paced": "180ms",
"motion-duration-transition-show-quick": "90ms",
Expand All @@ -2692,6 +2697,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "light" 1`] = `
"motion-easing-show-paced": "ease-out",
"motion-easing-show-quick": "ease-out",
"motion-easing-sticky": "ease-out",
"motion-easing-tooltip-enter": "cubic-bezier(0, 0, 0, 1)",
"motion-easing-transition-quick": "linear",
"motion-easing-transition-show-paced": "ease-out",
"motion-keyframes-fade-in": "awsui-fade-in-35003c",
Expand Down Expand Up @@ -3625,6 +3631,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "reduced-motion"
"motion-duration-show-paced": "0ms",
"motion-duration-show-quick": "0ms",
"motion-duration-slow": "0ms",
"motion-duration-tooltip-enter": "0ms",
"motion-duration-transition-quick": "0ms",
"motion-duration-transition-show-paced": "0ms",
"motion-duration-transition-show-quick": "0ms",
Expand All @@ -3640,6 +3647,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "reduced-motion"
"motion-easing-show-paced": "ease-out",
"motion-easing-show-quick": "ease-out",
"motion-easing-sticky": "ease-out",
"motion-easing-tooltip-enter": "cubic-bezier(0, 0, 0, 1)",
"motion-easing-transition-quick": "linear",
"motion-easing-transition-show-paced": "ease-out",
"motion-keyframes-fade-in": "awsui-fade-in-35003c",
Expand Down Expand Up @@ -4573,6 +4581,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh"
"motion-duration-show-paced": "180ms",
"motion-duration-show-quick": "135ms",
"motion-duration-slow": "180ms",
"motion-duration-tooltip-enter": "115ms",
"motion-duration-transition-quick": "90ms",
"motion-duration-transition-show-paced": "180ms",
"motion-duration-transition-show-quick": "90ms",
Expand All @@ -4588,6 +4597,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh"
"motion-easing-show-paced": "ease-out",
"motion-easing-show-quick": "ease-out",
"motion-easing-sticky": "cubic-bezier(1, 0, 0.83, 1)",
"motion-easing-tooltip-enter": "cubic-bezier(0, 0, 0, 1)",
"motion-easing-transition-quick": "linear",
"motion-easing-transition-show-paced": "ease-out",
"motion-keyframes-fade-in": "awsui-fade-in-35003c",
Expand Down Expand Up @@ -5521,6 +5531,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh-
"motion-duration-show-paced": "180ms",
"motion-duration-show-quick": "135ms",
"motion-duration-slow": "180ms",
"motion-duration-tooltip-enter": "115ms",
"motion-duration-transition-quick": "90ms",
"motion-duration-transition-show-paced": "180ms",
"motion-duration-transition-show-quick": "90ms",
Expand All @@ -5536,6 +5547,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh-
"motion-easing-show-paced": "ease-out",
"motion-easing-show-quick": "ease-out",
"motion-easing-sticky": "cubic-bezier(1, 0, 0.83, 1)",
"motion-easing-tooltip-enter": "cubic-bezier(0, 0, 0, 1)",
"motion-easing-transition-quick": "linear",
"motion-easing-transition-show-paced": "ease-out",
"motion-keyframes-fade-in": "awsui-fade-in-35003c",
Expand Down Expand Up @@ -6469,6 +6481,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh-
"motion-duration-show-paced": "180ms",
"motion-duration-show-quick": "135ms",
"motion-duration-slow": "180ms",
"motion-duration-tooltip-enter": "115ms",
"motion-duration-transition-quick": "90ms",
"motion-duration-transition-show-paced": "180ms",
"motion-duration-transition-show-quick": "90ms",
Expand All @@ -6484,6 +6497,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh-
"motion-easing-show-paced": "ease-out",
"motion-easing-show-quick": "ease-out",
"motion-easing-sticky": "cubic-bezier(1, 0, 0.83, 1)",
"motion-easing-tooltip-enter": "cubic-bezier(0, 0, 0, 1)",
"motion-easing-transition-quick": "linear",
"motion-easing-transition-show-paced": "ease-out",
"motion-keyframes-fade-in": "awsui-fade-in-35003c",
Expand Down Expand Up @@ -7417,6 +7431,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh-
"motion-duration-show-paced": "180ms",
"motion-duration-show-quick": "135ms",
"motion-duration-slow": "180ms",
"motion-duration-tooltip-enter": "115ms",
"motion-duration-transition-quick": "90ms",
"motion-duration-transition-show-paced": "180ms",
"motion-duration-transition-show-quick": "90ms",
Expand All @@ -7432,6 +7447,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh-
"motion-easing-show-paced": "ease-out",
"motion-easing-show-quick": "ease-out",
"motion-easing-sticky": "cubic-bezier(1, 0, 0.83, 1)",
"motion-easing-tooltip-enter": "cubic-bezier(0, 0, 0, 1)",
"motion-easing-transition-quick": "linear",
"motion-easing-transition-show-paced": "ease-out",
"motion-keyframes-fade-in": "awsui-fade-in-35003c",
Expand Down
Loading
Loading