diff --git a/src/components/DateTimePicker.jsx b/src/components/DateTimePicker.jsx index b2ab1e5..3384eda 100644 --- a/src/components/DateTimePicker.jsx +++ b/src/components/DateTimePicker.jsx @@ -1,9 +1,14 @@ import ReactDatePicker from 'react-datepicker'; import { de } from 'date-fns/locale'; -import { Calendar as CalendarIcon, Clock, X } from 'lucide-react'; +import { Calendar as CalendarIcon, Clock } from 'lucide-react'; import { forwardRef } from 'react'; +import { createPortal } from 'react-dom'; import 'react-datepicker/dist/react-datepicker.css'; +// Renders the calendar popper into document.body so it never affects the form +// layout (prevents the "everything shifts down + auto-scroll" bug). +const PopperContainer = ({ children }) => createPortal(children, document.body); + /** * Custom DateTimePicker that reads the app's CSS variables and * fully matches whatever theme is active. @@ -59,6 +64,7 @@ export default function DateTimePicker({ minDate={minDate} required={required} popperPlacement="bottom-start" + popperContainer={PopperContainer} popperModifiers={[ { name: 'offset', options: { offset: [0, 4] } }, { name: 'preventOverflow', options: { rootBoundary: 'viewport', tether: false, altAxis: true } }, @@ -68,8 +74,6 @@ export default function DateTimePicker({ dayClassName={(date) => 'dtp-day'} timeClassName={() => 'dtp-time-item'} renderCustomHeader={CalendarHeader} - isClearable - clearButtonClassName="dtp-clear-btn" wrapperClassName="dtp-dp-wrapper" /> diff --git a/src/components/Modal.jsx b/src/components/Modal.jsx index 7083a5d..ab0be65 100644 --- a/src/components/Modal.jsx +++ b/src/components/Modal.jsx @@ -4,9 +4,9 @@ export default function Modal({ title, children, onClose, maxWidth = 'max-w-lg' return (