refactor: time input labels on hover (#1855)

This commit is contained in:
Shobhit Nagpal
2025-11-11 11:12:55 +05:30
committed by GitHub
parent 47ba90f191
commit 70846aefbe
4 changed files with 44 additions and 4 deletions
@@ -134,6 +134,13 @@ $skip-opacity: 0.2;
height: 100%; height: 100%;
} }
.eventTimers.editMode:hover {
[class*="hoverLabel"] {
opacity: 1;
transition: opacity 0.15s 0.5s ease;
}
}
.chipSection { .chipSection {
grid-area: chip; grid-area: chip;
} }
@@ -10,10 +10,12 @@ import {
IoTime, IoTime,
} from 'react-icons/io5'; } from 'react-icons/io5';
import { LuArrowDownToLine } from 'react-icons/lu'; import { LuArrowDownToLine } from 'react-icons/lu';
import { useSessionStorage } from '@mantine/hooks';
import { EndAction, Playback, TimerType, TimeStrategy } from 'ontime-types'; import { EndAction, Playback, TimerType, TimeStrategy } from 'ontime-types';
import Tooltip from '../../../common/components/tooltip/Tooltip'; import Tooltip from '../../../common/components/tooltip/Tooltip';
import { cx } from '../../../common/utils/styleUtils'; import { cx } from '../../../common/utils/styleUtils';
import { AppMode, sessionKeys } from '../../../ontimeConfig';
import TitleEditor from '../common/TitleEditor'; import TitleEditor from '../common/TitleEditor';
import TimeInputFlow from '../time-input-flow/TimeInputFlow'; import TimeInputFlow from '../time-input-flow/TimeInputFlow';
@@ -76,6 +78,11 @@ function RundownEventInner({
}: RundownEventInnerProps) { }: RundownEventInnerProps) {
const [renderInner, setRenderInner] = useState(false); const [renderInner, setRenderInner] = useState(false);
const [editorMode] = useSessionStorage({
key: sessionKeys.editorMode,
defaultValue: AppMode.Edit,
});
useEffect(() => { useEffect(() => {
setRenderInner(true); setRenderInner(true);
}, []); }, []);
@@ -92,7 +99,7 @@ function RundownEventInner({
return !renderInner ? null : ( return !renderInner ? null : (
<> <>
<div className={style.eventTimers}> <div className={cx([style.eventTimers, editorMode === AppMode.Edit && style.editMode])}>
<TimeInputFlow <TimeInputFlow
eventId={eventId} eventId={eventId}
timeStart={timeStart} timeStart={timeStart}
@@ -15,3 +15,26 @@
.active { .active {
color: $active-indicator; color: $active-indicator;
} }
.inputWrapper {
position: relative;
}
.hoverLabel {
position: absolute;
top: -1.5rem;
background-color: $ui-white;
padding: 0.125rem 0.5rem;
color: $ui-black;
left: 0;
opacity: 0;
border-radius: $component-border-radius-md;
transition: opacity 0.15s ease; // no delay on fade out
pointer-events: none;
z-index: $zindex-floating;
&.visible {
opacity: 1;
transition: opacity 0.15s 0.5s ease; // small delay before fade in
}
}
@@ -67,8 +67,9 @@ function TimeInputFlow({
return ( return (
<> <>
<div> <div className={style.inputWrapper}>
{showLabels && <Editor.Label className={style.sectionTitle}>Start time</Editor.Label>} {showLabels && <Editor.Label className={style.sectionTitle}>Start time</Editor.Label>}
<Editor.Label className={style.hoverLabel}>Start</Editor.Label>
<TimeInputGroup hasDelay={hasDelay}> <TimeInputGroup hasDelay={hasDelay}>
<TimeInput <TimeInput
name='timeStart' name='timeStart'
@@ -88,8 +89,9 @@ function TimeInputFlow({
</TimeInputGroup> </TimeInputGroup>
</div> </div>
<div> <div className={style.inputWrapper}>
{showLabels && <Editor.Label>End time</Editor.Label>} {showLabels && <Editor.Label>End time</Editor.Label>}
<Editor.Label className={style.hoverLabel}>End</Editor.Label>
<TimeInputGroup hasDelay={hasDelay}> <TimeInputGroup hasDelay={hasDelay}>
<TimeInput <TimeInput
name='timeEnd' name='timeEnd'
@@ -110,8 +112,9 @@ function TimeInputFlow({
</TimeInputGroup> </TimeInputGroup>
</div> </div>
<div> <div className={style.inputWrapper}>
{showLabels && <Editor.Label>Duration</Editor.Label>} {showLabels && <Editor.Label>Duration</Editor.Label>}
<Editor.Label className={style.hoverLabel}>Duration</Editor.Label>
<TimeInputGroup hasDelay={hasDelay}> <TimeInputGroup hasDelay={hasDelay}>
<TimeInput <TimeInput
name='duration' name='duration'