Skip to content

Commit 00c6316

Browse files
committed
Animate target switch dropdown using CSS transitions
- should show targets with transition (use opacity and transform y) └── packages └── ui └── src └── components └── editor └── common └── prompts ├── PromptField │ ├── PromptField.module.scss │ ├── PromptField.stories.tsx │ ├── PromptField.tsx │ ├── components │ │ ├── CompletedTasks │ │ │ ├── CompletedTasks.module.scss │ │ │ ├── CompletedTasks.tsx │ │ │ └── index.ts │ │ ├── Footer │ │ │ ├── Footer.module.scss │ │ │ ├── Footer.tsx │ │ │ └── index.ts │ │ └── Tabs │ │ ├── Tabs.module.scss │ │ ├── Tabs.tsx │ │ └── index.ts │ ├── hooks │ │ ├── use-drag-drop.ts │ │ ├── use-dropdown.ts │ │ ├── use-ghost-text.ts │ │ ├── use-handlers │ │ │ ├── handle-copy.ts │ │ │ ├── handle-cut.ts │ │ │ ├── handle-input-change.ts │ │ │ ├── handle-input-click.ts │ │ │ ├── handle-key-down.ts │ │ │ ├── handle-paste.ts │ │ │ ├── handle-submit.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── use-handlers.ts │ │ │ └── utils.ts │ │ └── use-keyboard-shortcuts.ts │ └── index.ts ├── Template │ ├── Template.module.scss │ ├── Template.tsx │ └── index.ts └── shared ├── hooks │ └── use-undo-redo.ts └── symbols ├── caret.ts ├── get-highlighted-text.tsx ├── index.ts ├── position-mapping.ts ├── prompt-symbols.module.scss ├── reconstruct-raw-value.ts └── use-symbol-deletion.ts
1 parent 551db6c commit 00c6316

2 files changed

Lines changed: 45 additions & 33 deletions

File tree

‎packages/ui/src/components/editor/common/prompts/PromptField/components/Footer/Footer.module.scss‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,18 @@
104104
position: absolute;
105105
bottom: 100%;
106106
left: 50%;
107-
transform: translateX(-50%);
107+
transform: translateX(-50%) translateY(4px);
108108
padding-bottom: 4px;
109109
z-index: 1;
110+
opacity: 0;
111+
112+
&--open {
113+
opacity: 1;
114+
transform: translateX(-50%) translateY(0);
115+
transition:
116+
opacity 120ms ease-in-out,
117+
transform 120ms ease-in-out;
118+
}
110119
}
111120

112121
&__dropdown {

‎packages/ui/src/components/editor/common/prompts/PromptField/components/Footer/Footer.tsx‎

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -424,41 +424,44 @@ export const Footer: React.FC<Props> = (props) => {
424424
>
425425
{props.props.target && props.props.on_target_change && (
426426
<div className={styles['footer__right__target-switch']}>
427-
{(is_target_dropdown_open || props.is_alt_pressed) && (
428-
<div
429-
className={
430-
styles['footer__right__target-switch__dropdown-wrapper']
427+
<div
428+
className={cn(
429+
styles['footer__right__target-switch__dropdown-wrapper'],
430+
{
431+
[styles[
432+
'footer__right__target-switch__dropdown-wrapper--open'
433+
]]: is_target_dropdown_open || props.is_alt_pressed
431434
}
435+
)}
436+
>
437+
<div
438+
className={styles['footer__right__target-switch__dropdown']}
439+
onClick={(e) => e.stopPropagation()}
432440
>
433-
<div
434-
className={styles['footer__right__target-switch__dropdown']}
435-
onClick={(e) => e.stopPropagation()}
436-
>
437-
{(['WEB', 'API', 'CLI'] as Target[]).map((t, idx) => (
438-
<button
439-
key={t}
440-
className={
441-
styles['footer__right__target-switch__dropdown-item']
442-
}
443-
onClick={(e) => {
444-
e.stopPropagation()
445-
props.props.on_target_change!(t)
446-
set_is_target_dropdown_open(false)
447-
}}
448-
disabled={t === props.props.target}
449-
>
450-
{props.is_alt_pressed && t !== props.props.target ? (
451-
<KeycapWrapper char={(idx + 1).toString()}>
452-
<span>{t}</span>
453-
</KeycapWrapper>
454-
) : (
455-
t
456-
)}
457-
</button>
458-
))}
459-
</div>
441+
{(['WEB', 'API', 'CLI'] as Target[]).map((t, idx) => (
442+
<button
443+
key={t}
444+
className={
445+
styles['footer__right__target-switch__dropdown-item']
446+
}
447+
onClick={(e) => {
448+
e.stopPropagation()
449+
props.props.on_target_change!(t)
450+
set_is_target_dropdown_open(false)
451+
}}
452+
disabled={t === props.props.target}
453+
>
454+
{props.is_alt_pressed && t !== props.props.target ? (
455+
<KeycapWrapper char={(idx + 1).toString()}>
456+
<span>{t}</span>
457+
</KeycapWrapper>
458+
) : (
459+
t
460+
)}
461+
</button>
462+
))}
460463
</div>
461-
)}
464+
</div>
462465
<button
463466
className={cn(
464467
styles['footer__right__submit__button'],

0 commit comments

Comments
 (0)