Custom Container
Control where the timepicker modal is rendered in the DOM
💡
appendModalSelector
By default, the timepicker modal is appended to
document.body. Use appendModalSelector to render it inside a specific container element.Custom Container
Append the modal to a specific container:
Within Modal Dialog
Use inside a modal or dialog component:
import { TimepickerUI } from 'timepicker-ui';// HTML:// <div class="modal" id="appointment-modal">// <div class="modal-content" id="modal-content">// <h2>Schedule Appointment</h2>// <input id="timepicker" type="text" />// </div>// </div>const input = document.querySelector('#timepicker');const picker = new TimepickerUI(input, {// Append to modal content instead of bodyappendModalSelector: '#modal-content'});picker.create();
Shadow DOM
Use with Web Components and Shadow DOM:
class TimePickerComponent extends HTMLElement {constructor() {super();this.attachShadow({ mode: 'open' });}connectedCallback() {// Create container inside shadow DOMthis.shadowRoot.innerHTML = `<style>@import url('timepicker-ui/index.css');</style><div id="picker-container"><input id="timepicker" type="text" /></div>`;const input = this.shadowRoot.querySelector('#timepicker');const container = this.shadowRoot.querySelector('#picker-container');const picker = new TimepickerUI(input, {appendModalSelector: container});picker.create();}}customElements.define('time-picker', TimePickerComponent);
React Portal Pattern
Integrate with React Portals for complex layouts:
import { useEffect, useRef, useMemo } from 'react';import { createPortal } from 'react-dom';import { TimepickerUI } from 'timepicker-ui';function TimepickerWithPortal() {const inputRef = useRef<HTMLInputElement>(null);const containerRef = useRef<HTMLDivElement>(null);const pickerRef = useRef<TimepickerUI | null>(null);const options = useMemo(() => ({appendModalSelector: containerRef.current}), []);useEffect(() => {if (!inputRef.current || !containerRef.current) return;pickerRef.current = new TimepickerUI(inputRef.current,options);pickerRef.current.create();return () => {pickerRef.current?.destroy();};}, []);return (<><input ref={inputRef} type="text" />{createPortal(<div ref={containerRef} />,document.body)}</>);}
Iframe Integration
Use timepicker inside an iframe:
// Inside iframe documentimport { TimepickerUI } from 'timepicker-ui';const input = document.querySelector('#timepicker');const iframeBody = document.body;const picker = new TimepickerUI(input, {// Keep modal inside iframeappendModalSelector: iframeBody});picker.create();// Or append to parent document (if same origin)const parentContainer = window.parent.document.querySelector('#container');const pickerToParent = new TimepickerUI(input, {appendModalSelector: parentContainer});
Scoped Styles
Use custom container with scoped CSS:
import { TimepickerUI } from 'timepicker-ui';// HTML:// <div class="custom-scope" id="scoped-container">// <input id="timepicker" type="text" />// </div>const input = document.querySelector('#timepicker');const picker = new TimepickerUI(input, {appendModalSelector: '#scoped-container',cssClass: 'scoped-picker'});picker.create();// CSS:// .custom-scope {// /* Container styles */// position: relative;// z-index: 100;// }//// .custom-scope .timepicker-ui-modal {// /* Scoped modal styles */// position: absolute;// }
Multiple Containers
Different pickers in different containers:
import { TimepickerUI } from 'timepicker-ui';// Picker 1 in sidebarconst input1 = document.querySelector('#timepicker-1');const picker1 = new TimepickerUI(input1, {appendModalSelector: '#sidebar-container'});picker1.create();// Picker 2 in main contentconst input2 = document.querySelector('#timepicker-2');const picker2 = new TimepickerUI(input2, {appendModalSelector: '#main-content'});picker2.create();// Picker 3 in modalconst input3 = document.querySelector('#timepicker-3');const picker3 = new TimepickerUI(input3, {appendModalSelector: '#modal-dialog'});picker3.create();