trotl-modal 1.0.12 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +2 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.css +2 -157
- package/dist/index.css.map +1 -0
- package/dist/index.esm.js +2 -2
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/dist/dist/index.css +0 -2
- package/dist/dist/index.css.map +0 -1
package/dist/index.cjs.js
CHANGED
|
@@ -71,7 +71,7 @@ function Modal({
|
|
|
71
71
|
const timeout = setTimeout(() => setRendered(false), 200);
|
|
72
72
|
return () => clearTimeout(timeout);
|
|
73
73
|
}
|
|
74
|
-
}, [isOpen
|
|
74
|
+
}, [isOpen]);
|
|
75
75
|
|
|
76
76
|
// ESC key handler
|
|
77
77
|
React.useEffect(() => {
|
|
@@ -382,7 +382,7 @@ function Drawer({
|
|
|
382
382
|
const timeout = setTimeout(() => setRendered(false), toMs(transitionDuration));
|
|
383
383
|
return () => clearTimeout(timeout);
|
|
384
384
|
}
|
|
385
|
-
}, [isOpen,
|
|
385
|
+
}, [isOpen, transitionDuration]);
|
|
386
386
|
React.useEffect(() => {
|
|
387
387
|
if (isOpen) setShrink(null);
|
|
388
388
|
}, [isOpen, children, orientation]);
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/components/Modal.jsx","../src/components/Drawer.jsx"],"sourcesContent":["import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'center',\r\n theme = 'light' // new prop: 'light' or 'dark'\r\n}){\r\n const modalRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n // explicit coords – treat as pixels from top-left of modal\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n // transition helpers -> keep component rendered during fade-out\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n // when isOpen changes, trigger fade in / fade out\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n // next frame to allow initial render before adding class\r\n requestAnimationFrame(() => {\r\n setVisible(true)\r\n })\r\n } else if (rendered) {\r\n setVisible(false)\r\n // remove from DOM after transition duration\r\n const timeout = setTimeout(() => setRendered(false), 200)\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered])\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n // calculate coordinates synchronously before paint so the dialog doesn't\r\n // jump from {0,0} when it first renders. using useLayoutEffect ensures the\r\n // position is available when visible transitions start.\r\n useLayoutEffect(() => {\r\n // only position when the modal is actually rendered & opening\r\n if (!isOpen || !rendered) return\r\n const el = modalRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const maxX = Math.max(0, innerWidth - rect.width)\r\n const maxY = Math.max(0, innerHeight - rect.height)\r\n const centerX = (innerWidth - rect.width) / 2\r\n const centerY = (innerHeight - rect.height) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n // clamp to viewport\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n // compute desired position\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n // clamp to viewport so it can't be dragged fully offscreen\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = modalRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n // ensure we re-enable selection when drag ends\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n // final clamp to ensure modal stays visible if window size changed\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\"modal\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n ref={modalRef}\r\n style={{left:`${pos.x}px`, top:`${pos.y}px`, transformOrigin: origin}}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Drawer({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'left',\r\n transitionDuration = '0.45s',\r\n theme = 'light' // support light/dark themes\r\n}){\r\n const drawerRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n // determine orientation (horizontal/vertical) and simple side for animation\r\n function detectOrientation(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left') || pos.includes('right')) return 'horizontal'\r\n if(pos.includes('top') || pos.includes('bottom')) return 'vertical'\r\n }\r\n // fall back to horizontal for coordinate objects\r\n return 'horizontal'\r\n }\r\n function detectSide(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left')) return 'left'\r\n if(pos.includes('right')) return 'right'\r\n if(pos.includes('top')) return 'top'\r\n if(pos.includes('bottom')) return 'bottom'\r\n }\r\n return 'left'\r\n }\r\n const orientation = detectOrientation(initialPosition)\r\n const side = detectSide(initialPosition)\r\n const [shrink, setShrink] = useState(null)\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right': return '100% 50%'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left': return '0 50%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n function toMs(duration){\r\n if (typeof duration !== 'string') return 450\r\n const trimmed = duration.trim()\r\n if (trimmed.endsWith('ms')) {\r\n const val = Number(trimmed.slice(0, -2))\r\n return Number.isFinite(val) ? val : 450\r\n }\r\n if (trimmed.endsWith('s')) {\r\n const val = Number(trimmed.slice(0, -1))\r\n return Number.isFinite(val) ? Math.round(val * 1000) : 450\r\n }\r\n return 450\r\n }\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n setShrink(null)\r\n requestAnimationFrame(() => setVisible(true))\r\n } else if (rendered) {\r\n setVisible(false)\r\n const timeout = setTimeout(\r\n () => setRendered(false),\r\n toMs(transitionDuration)\r\n )\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered, transitionDuration])\r\n\r\n useEffect(() => {\r\n if (isOpen) setShrink(null)\r\n }, [isOpen, children, orientation])\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || !rendered) return\r\n const el = drawerRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const effectiveWidth = orientation === 'horizontal' && shrink === true\r\n ? Math.round(innerWidth * 0.3)\r\n : rect.width\r\n const effectiveHeight = orientation === 'vertical' && shrink === true\r\n ? Math.round(innerHeight * 0.3)\r\n : rect.height\r\n const maxX = Math.max(0, innerWidth - effectiveWidth)\r\n const maxY = Math.max(0, innerHeight - effectiveHeight)\r\n const centerX = (innerWidth - effectiveWidth) / 2\r\n const centerY = (innerHeight - effectiveHeight) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'left':\r\n x = 0; y = 0; break\r\n case 'right':\r\n x = maxX; y = 0; break\r\n case 'top':\r\n x = 0; y = 0; break\r\n case 'bottom':\r\n x = 0; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered, orientation, shrink])\r\n\r\n // shrink measurement – check dimensions after render\r\n useLayoutEffect(() => {\r\n if (!rendered || !drawerRef.current) return\r\n if (!isOpen) return\r\n if (shrink !== null) return\r\n const el = drawerRef.current\r\n const { innerWidth, innerHeight } = window\r\n if (orientation === 'horizontal') {\r\n setShrink(el.scrollWidth < innerWidth * 0.3)\r\n } else {\r\n setShrink(el.scrollHeight < innerHeight * 0.3)\r\n }\r\n }, [rendered, visible, children, orientation, shrink])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = drawerRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay drawer-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\r\n `drawer ${orientation} side-${side}` + (visible ? \" visible\" : \"\")\r\n }\r\n data-theme={theme}\r\n ref={drawerRef}\r\n style={{\r\n left:`${pos.x}px`,\r\n top:`${pos.y}px`,\r\n transformOrigin: origin,\r\n '--drawer-transition': transitionDuration,\r\n ...(orientation === 'horizontal' ? {height: '100%'} : {width: '100%'}),\r\n ...(shrink === true\r\n ? (orientation === 'horizontal'\r\n ? {width: '30vw'}\r\n : {height: '30vh'})\r\n : {}),\r\n }}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["Modal","isOpen","onClose","title","children","initialPosition","theme","modalRef","useRef","headerRef","pos","setPos","useState","x","y","origin","setOrigin","computeOrigin","left","top","draggingRef","offsetRef","rendered","setRendered","visible","setVisible","useEffect","requestAnimationFrame","timeout","setTimeout","clearTimeout","handleEsc","e","key","window","addEventListener","removeEventListener","useLayoutEffect","el","current","innerWidth","innerHeight","rect","getBoundingClientRect","maxX","Math","max","width","maxY","height","centerX","centerY","min","onMove","touches","preventDefault","clientX","clientY","desiredX","desiredY","clampedX","clampedY","onUp","passive","startDrag","document","body","style","userSelect","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","transformOrigin","onTouchStart","onClick","Drawer","transitionDuration","drawerRef","detectOrientation","includes","detectSide","orientation","side","shrink","setShrink","toMs","duration","trimmed","trim","endsWith","val","Number","slice","isFinite","round","effectiveWidth","effectiveHeight","scrollWidth","scrollHeight"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/components/Modal.jsx","../src/components/Drawer.jsx"],"sourcesContent":["import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'center',\r\n theme = 'light' // new prop: 'light' or 'dark'\r\n}){\r\n const modalRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n // explicit coords – treat as pixels from top-left of modal\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n // transition helpers -> keep component rendered during fade-out\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n // when isOpen changes, trigger fade in / fade out\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n // next frame to allow initial render before adding class\r\n requestAnimationFrame(() => {\r\n setVisible(true)\r\n })\r\n } else if (rendered) {\r\n setVisible(false)\r\n // remove from DOM after transition duration\r\n const timeout = setTimeout(() => setRendered(false), 200)\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen])\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n // calculate coordinates synchronously before paint so the dialog doesn't\r\n // jump from {0,0} when it first renders. using useLayoutEffect ensures the\r\n // position is available when visible transitions start.\r\n useLayoutEffect(() => {\r\n // only position when the modal is actually rendered & opening\r\n if (!isOpen || !rendered) return\r\n const el = modalRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const maxX = Math.max(0, innerWidth - rect.width)\r\n const maxY = Math.max(0, innerHeight - rect.height)\r\n const centerX = (innerWidth - rect.width) / 2\r\n const centerY = (innerHeight - rect.height) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n // clamp to viewport\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n // compute desired position\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n // clamp to viewport so it can't be dragged fully offscreen\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = modalRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n // ensure we re-enable selection when drag ends\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n // final clamp to ensure modal stays visible if window size changed\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\"modal\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n ref={modalRef}\r\n style={{left:`${pos.x}px`, top:`${pos.y}px`, transformOrigin: origin}}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Drawer({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'left',\r\n transitionDuration = '0.45s',\r\n theme = 'light' // support light/dark themes\r\n}){\r\n const drawerRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n // determine orientation (horizontal/vertical) and simple side for animation\r\n function detectOrientation(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left') || pos.includes('right')) return 'horizontal'\r\n if(pos.includes('top') || pos.includes('bottom')) return 'vertical'\r\n }\r\n // fall back to horizontal for coordinate objects\r\n return 'horizontal'\r\n }\r\n function detectSide(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left')) return 'left'\r\n if(pos.includes('right')) return 'right'\r\n if(pos.includes('top')) return 'top'\r\n if(pos.includes('bottom')) return 'bottom'\r\n }\r\n return 'left'\r\n }\r\n const orientation = detectOrientation(initialPosition)\r\n const side = detectSide(initialPosition)\r\n const [shrink, setShrink] = useState(null)\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right': return '100% 50%'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left': return '0 50%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n function toMs(duration){\r\n if (typeof duration !== 'string') return 450\r\n const trimmed = duration.trim()\r\n if (trimmed.endsWith('ms')) {\r\n const val = Number(trimmed.slice(0, -2))\r\n return Number.isFinite(val) ? val : 450\r\n }\r\n if (trimmed.endsWith('s')) {\r\n const val = Number(trimmed.slice(0, -1))\r\n return Number.isFinite(val) ? Math.round(val * 1000) : 450\r\n }\r\n return 450\r\n }\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n setShrink(null)\r\n requestAnimationFrame(() => setVisible(true))\r\n } else if (rendered) {\r\n setVisible(false)\r\n const timeout = setTimeout(\r\n () => setRendered(false),\r\n toMs(transitionDuration)\r\n )\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, transitionDuration])\r\n\r\n useEffect(() => {\r\n if (isOpen) setShrink(null)\r\n }, [isOpen, children, orientation])\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || !rendered) return\r\n const el = drawerRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const effectiveWidth = orientation === 'horizontal' && shrink === true\r\n ? Math.round(innerWidth * 0.3)\r\n : rect.width\r\n const effectiveHeight = orientation === 'vertical' && shrink === true\r\n ? Math.round(innerHeight * 0.3)\r\n : rect.height\r\n const maxX = Math.max(0, innerWidth - effectiveWidth)\r\n const maxY = Math.max(0, innerHeight - effectiveHeight)\r\n const centerX = (innerWidth - effectiveWidth) / 2\r\n const centerY = (innerHeight - effectiveHeight) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'left':\r\n x = 0; y = 0; break\r\n case 'right':\r\n x = maxX; y = 0; break\r\n case 'top':\r\n x = 0; y = 0; break\r\n case 'bottom':\r\n x = 0; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered, orientation, shrink])\r\n\r\n // shrink measurement – check dimensions after render\r\n useLayoutEffect(() => {\r\n if (!rendered || !drawerRef.current) return\r\n if (!isOpen) return\r\n if (shrink !== null) return\r\n const el = drawerRef.current\r\n const { innerWidth, innerHeight } = window\r\n if (orientation === 'horizontal') {\r\n setShrink(el.scrollWidth < innerWidth * 0.3)\r\n } else {\r\n setShrink(el.scrollHeight < innerHeight * 0.3)\r\n }\r\n }, [rendered, visible, children, orientation, shrink])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = drawerRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay drawer-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\r\n `drawer ${orientation} side-${side}` + (visible ? \" visible\" : \"\")\r\n }\r\n data-theme={theme}\r\n ref={drawerRef}\r\n style={{\r\n left:`${pos.x}px`,\r\n top:`${pos.y}px`,\r\n transformOrigin: origin,\r\n '--drawer-transition': transitionDuration,\r\n ...(orientation === 'horizontal' ? {height: '100%'} : {width: '100%'}),\r\n ...(shrink === true\r\n ? (orientation === 'horizontal'\r\n ? {width: '30vw'}\r\n : {height: '30vh'})\r\n : {}),\r\n }}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["Modal","isOpen","onClose","title","children","initialPosition","theme","modalRef","useRef","headerRef","pos","setPos","useState","x","y","origin","setOrigin","computeOrigin","left","top","draggingRef","offsetRef","rendered","setRendered","visible","setVisible","useEffect","requestAnimationFrame","timeout","setTimeout","clearTimeout","handleEsc","e","key","window","addEventListener","removeEventListener","useLayoutEffect","el","current","innerWidth","innerHeight","rect","getBoundingClientRect","maxX","Math","max","width","maxY","height","centerX","centerY","min","onMove","touches","preventDefault","clientX","clientY","desiredX","desiredY","clampedX","clampedY","onUp","passive","startDrag","document","body","style","userSelect","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","transformOrigin","onTouchStart","onClick","Drawer","transitionDuration","drawerRef","detectOrientation","includes","detectSide","orientation","side","shrink","setShrink","toMs","duration","trimmed","trim","endsWith","val","Number","slice","isFinite","round","effectiveWidth","effectiveHeight","scrollWidth","scrollHeight"],"mappings":";;;;;;AAEe,SAASA,KAAKA,CAAC;EAC5BC,MAAM;EACNC,OAAO;EACPC,KAAK;EACLC,QAAQ;AACRC,EAAAA,eAAe,GAAG,QAAQ;EAC1BC,KAAK,GAAG,OAAO;AACjB,CAAC,EAAC;AACA,EAAA,MAAMC,QAAQ,GAAGC,YAAM,CAAC,IAAI,CAAC;AAC7B,EAAA,MAAMC,SAAS,GAAGD,YAAM,CAAC,IAAI,CAAC;AAC9B,EAAA,MAAM,CAACE,GAAG,EAAEC,MAAM,CAAC,GAAGC,cAAQ,CAAC;AAACC,IAAAA,CAAC,EAAE,CAAC;AAAEC,IAAAA,CAAC,EAAE;AAAC,GAAC,CAAC;EAC5C,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGJ,cAAQ,CAAC,SAAS,CAAC;EAE/C,SAASK,aAAaA,CAACP,GAAG,EAAC;AACzB,IAAA,IAAG,OAAOA,GAAG,KAAK,QAAQ,EAAC;AACzB;AACA,MAAA,MAAMG,CAAC,GAAG,OAAOH,GAAG,CAACQ,IAAI,KAAK,QAAQ,GAAG,GAAGR,GAAG,CAACQ,IAAI,CAAA,EAAA,CAAI,GAAG,GAAG;AAC9D,MAAA,MAAMJ,CAAC,GAAG,OAAOJ,GAAG,CAACS,GAAG,KAAK,QAAQ,GAAG,GAAGT,GAAG,CAACS,GAAG,CAAA,EAAA,CAAI,GAAG,GAAG;AAC5D,MAAA,OAAO,CAAA,EAAGN,CAAC,CAAA,CAAA,EAAIC,CAAC,CAAA,CAAE;AACpB,IAAA;AACA,IAAA,QAAOJ,GAAG;AACR,MAAA,KAAK,UAAU;AAAE,QAAA,OAAO,KAAK;AAC7B,MAAA,KAAK,YAAY;AAAE,QAAA,OAAO,OAAO;AACjC,MAAA,KAAK,WAAW;AAAE,QAAA,OAAO,QAAQ;AACjC,MAAA,KAAK,cAAc;AAAE,QAAA,OAAO,UAAU;AACtC,MAAA,KAAK,cAAc;AAAE,QAAA,OAAO,WAAW;AACvC,MAAA,KAAK,eAAe;AAAE,QAAA,OAAO,UAAU;AACvC,MAAA,KAAK,aAAa;AAAE,QAAA,OAAO,QAAQ;AACnC,MAAA,KAAK,aAAa;AAAE,QAAA,OAAO,OAAO;AAClC,MAAA,KAAK,QAAQ;AACb,MAAA;AAAS,QAAA,OAAO,SAAS;AAC3B;AACF,EAAA;AACA,EAAA,MAAMU,WAAW,GAAGZ,YAAM,CAAC,KAAK,CAAC;EACjC,MAAMa,SAAS,GAAGb,YAAM,CAAC;AAACK,IAAAA,CAAC,EAAC,CAAC;AAACC,IAAAA,CAAC,EAAC;AAAC,GAAC,CAAC;AACnC;EACA,MAAM,CAACQ,QAAQ,EAAEC,WAAW,CAAC,GAAGX,cAAQ,CAACX,MAAM,CAAC;EAChD,MAAM,CAACuB,OAAO,EAAEC,UAAU,CAAC,GAAGb,cAAQ,CAACX,MAAM,CAAC;;AAE9C;AACAyB,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAIzB,MAAM,EAAE;MACVsB,WAAW,CAAC,IAAI,CAAC;AACjB;AACAI,MAAAA,qBAAqB,CAAC,MAAM;QAC1BF,UAAU,CAAC,IAAI,CAAC;AAClB,MAAA,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIH,QAAQ,EAAE;MACnBG,UAAU,CAAC,KAAK,CAAC;AACjB;MACA,MAAMG,OAAO,GAAGC,UAAU,CAAC,MAAMN,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;AACzD,MAAA,OAAO,MAAMO,YAAY,CAACF,OAAO,CAAC;AACpC,IAAA;AACF,EAAA,CAAC,EAAE,CAAC3B,MAAM,CAAC,CAAC;;AAEZ;AACAyB,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACzB,MAAM,EAAE;IACb,SAAS8B,SAASA,CAACC,CAAC,EAAE;AACpB,MAAA,IAAIA,CAAC,CAACC,GAAG,KAAK,QAAQ,EAAE;AACtB/B,QAAAA,OAAO,EAAE;AACX,MAAA;AACF,IAAA;AACAgC,IAAAA,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEJ,SAAS,CAAC;IAC7C,OAAO,MAAMG,MAAM,CAACE,mBAAmB,CAAC,SAAS,EAAEL,SAAS,CAAC;AAC/D,EAAA,CAAC,EAAE,CAAC9B,MAAM,EAAEC,OAAO,CAAC,CAAC;;AAErB;AACA;AACA;AACAmC,EAAAA,qBAAe,CAAC,MAAM;AACpB;AACA,IAAA,IAAI,CAACpC,MAAM,IAAI,CAACqB,QAAQ,EAAE;AAC1B,IAAA,MAAMgB,EAAE,GAAG/B,QAAQ,CAACgC,OAAO;IAC3B,IAAI,CAACD,EAAE,EAAE;IAET,MAAM;MAAEE,UAAU;AAAEC,MAAAA;AAAY,KAAC,GAAGP,MAAM;AAC1C,IAAA,MAAMQ,IAAI,GAAGJ,EAAE,CAACK,qBAAqB,EAAE;AACvC,IAAA,MAAMC,IAAI,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEN,UAAU,GAAGE,IAAI,CAACK,KAAK,CAAC;AACjD,IAAA,MAAMC,IAAI,GAAGH,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEL,WAAW,GAAGC,IAAI,CAACO,MAAM,CAAC;IACnD,MAAMC,OAAO,GAAG,CAACV,UAAU,GAAGE,IAAI,CAACK,KAAK,IAAI,CAAC;IAC7C,MAAMI,OAAO,GAAG,CAACV,WAAW,GAAGC,IAAI,CAACO,MAAM,IAAI,CAAC;IAE/C,IAAIpC,CAAC,GAAGqC,OAAO;IACf,IAAIpC,CAAC,GAAGqC,OAAO;AAEf,IAAA,IAAI,OAAO9C,eAAe,KAAK,QAAQ,EAAE;MACvC,IAAI,OAAOA,eAAe,CAACa,IAAI,KAAK,QAAQ,EAAEL,CAAC,GAAGR,eAAe,CAACa,IAAI;MACtE,IAAI,OAAOb,eAAe,CAACc,GAAG,KAAK,QAAQ,EAAEL,CAAC,GAAGT,eAAe,CAACc,GAAG;AACtE,IAAA,CAAC,MAAM;AACL,MAAA,QAAQd,eAAe;AACrB,QAAA,KAAK,YAAY;AACfQ,UAAAA,CAAC,GAAGqC,OAAO;AAAEpC,UAAAA,CAAC,GAAG,CAAC;AAAE,UAAA;AACtB,QAAA,KAAK,eAAe;AAClBD,UAAAA,CAAC,GAAGqC,OAAO;AAAEpC,UAAAA,CAAC,GAAGkC,IAAI;AAAE,UAAA;AACzB,QAAA,KAAK,UAAU;AACbnC,UAAAA,CAAC,GAAG,CAAC;AAAEC,UAAAA,CAAC,GAAG,CAAC;AAAE,UAAA;AAChB,QAAA,KAAK,WAAW;AACdD,UAAAA,CAAC,GAAG+B,IAAI;AAAE9B,UAAAA,CAAC,GAAG,CAAC;AAAE,UAAA;AACnB,QAAA,KAAK,aAAa;AAChBD,UAAAA,CAAC,GAAG,CAAC;AAAEC,UAAAA,CAAC,GAAGkC,IAAI;AAAE,UAAA;AACnB,QAAA,KAAK,cAAc;AACjBnC,UAAAA,CAAC,GAAG+B,IAAI;AAAE9B,UAAAA,CAAC,GAAGkC,IAAI;AAAE,UAAA;AACtB,QAAA,KAAK,aAAa;AAChBnC,UAAAA,CAAC,GAAG,CAAC;AAAEC,UAAAA,CAAC,GAAGqC,OAAO;AAAE,UAAA;AACtB,QAAA,KAAK,cAAc;AACjBtC,UAAAA,CAAC,GAAG+B,IAAI;AAAE9B,UAAAA,CAAC,GAAGqC,OAAO;AAAE,UAAA;AACzB,QAAA,KAAK,QAAQ;AACb,QAAA;AACEtC,UAAAA,CAAC,GAAGqC,OAAO;AAAEpC,UAAAA,CAAC,GAAGqC,OAAO;AAAE,UAAA;AAC9B;AACF,IAAA;;AAEA;AACAtC,IAAAA,CAAC,GAAGgC,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEjC,CAAC,CAAC,EAAE+B,IAAI,CAAC;AAClC9B,IAAAA,CAAC,GAAG+B,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEhC,CAAC,CAAC,EAAEkC,IAAI,CAAC;AAElCrC,IAAAA,MAAM,CAAC;MAAEE,CAAC;AAAEC,MAAAA;AAAE,KAAC,CAAC;AAChBE,IAAAA,SAAS,CAACC,aAAa,CAACZ,eAAe,CAAC,CAAC;EAC3C,CAAC,EAAE,CAACJ,MAAM,EAAEI,eAAe,EAAEiB,QAAQ,CAAC,CAAC;AAEvCI,EAAAA,eAAS,CAAC,MAAI;IACZ,SAAS2B,MAAMA,CAACrB,CAAC,EAAC;AAChB,MAAA,IAAG,CAACZ,WAAW,CAACmB,OAAO,EAAE;MACzB,IAAIP,CAAC,CAACsB,OAAO,EAAEtB,CAAC,CAACuB,cAAc,EAAE;AACjC,MAAA,MAAMC,OAAO,GAAGxB,CAAC,CAACsB,OAAO,GAAGtB,CAAC,CAACsB,OAAO,CAAC,CAAC,CAAC,CAACE,OAAO,GAAGxB,CAAC,CAACwB,OAAO;AAC5D,MAAA,MAAMC,OAAO,GAAGzB,CAAC,CAACsB,OAAO,GAAGtB,CAAC,CAACsB,OAAO,CAAC,CAAC,CAAC,CAACG,OAAO,GAAGzB,CAAC,CAACyB,OAAO;AAC5D;MACA,MAAMC,QAAQ,GAAGF,OAAO,GAAGnC,SAAS,CAACkB,OAAO,CAAC1B,CAAC;MAC9C,MAAM8C,QAAQ,GAAGF,OAAO,GAAGpC,SAAS,CAACkB,OAAO,CAACzB,CAAC;AAC9C;AACA,MAAA,MAAMwB,EAAE,GAAG/B,QAAQ,CAACgC,OAAO;AAC3B,MAAA,IAAGD,EAAE,EAAC;AACJ,QAAA,MAAMI,IAAI,GAAGJ,EAAE,CAACK,qBAAqB,EAAE;QACvC,MAAMC,IAAI,GAAGV,MAAM,CAACM,UAAU,GAAGE,IAAI,CAACK,KAAK;QAC3C,MAAMC,IAAI,GAAGd,MAAM,CAACO,WAAW,GAAGC,IAAI,CAACO,MAAM;QAC7C,MAAMW,QAAQ,GAAGf,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEY,QAAQ,CAAC,EAAEb,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAI,CAAC,CAAC;QACnE,MAAMiB,QAAQ,GAAGhB,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEa,QAAQ,CAAC,EAAEd,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEE,IAAI,CAAC,CAAC;AACnErC,QAAAA,MAAM,CAAC;AAACE,UAAAA,CAAC,EAAE+C,QAAQ;AAAE9C,UAAAA,CAAC,EAAE+C;AAAQ,SAAC,CAAC;AACpC,MAAA,CAAC,MAAM;AACLlD,QAAAA,MAAM,CAAC;AAACE,UAAAA,CAAC,EAAE6C,QAAQ;AAAE5C,UAAAA,CAAC,EAAE6C;AAAQ,SAAC,CAAC;AACpC,MAAA;AACF,IAAA;IACA,SAASG,IAAIA,GAAE;MAAE1C,WAAW,CAACmB,OAAO,GAAG,KAAK;AAAC,IAAA;AAC7CL,IAAAA,MAAM,CAACC,gBAAgB,CAAC,WAAW,EAAEkB,MAAM,CAAC;AAC5CnB,IAAAA,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAE2B,IAAI,CAAC;AACxC5B,IAAAA,MAAM,CAACC,gBAAgB,CAAC,WAAW,EAAEkB,MAAM,EAAE;AAACU,MAAAA,OAAO,EAAC;AAAK,KAAC,CAAC;AAC7D7B,IAAAA,MAAM,CAACC,gBAAgB,CAAC,UAAU,EAAE2B,IAAI,CAAC;AACzC,IAAA,OAAO,MAAI;AACT5B,MAAAA,MAAM,CAACE,mBAAmB,CAAC,WAAW,EAAEiB,MAAM,CAAC;AAC/CnB,MAAAA,MAAM,CAACE,mBAAmB,CAAC,SAAS,EAAE0B,IAAI,CAAC;AAC3C5B,MAAAA,MAAM,CAACE,mBAAmB,CAAC,WAAW,EAAEiB,MAAM,CAAC;AAC/CnB,MAAAA,MAAM,CAACE,mBAAmB,CAAC,UAAU,EAAE0B,IAAI,CAAC;IAC9C,CAAC;EACH,CAAC,EAAC,EAAE,CAAC;EAEL,SAASE,SAASA,CAAChC,CAAC,EAAC;IACnBA,CAAC,CAACuB,cAAc,EAAE;IAClBnC,WAAW,CAACmB,OAAO,GAAG,IAAI;AAC1B0B,IAAAA,QAAQ,CAACC,IAAI,CAACC,KAAK,CAACC,UAAU,GAAG,MAAM;AACvC,IAAA,MAAMZ,OAAO,GAAGxB,CAAC,CAACsB,OAAO,GAAGtB,CAAC,CAACsB,OAAO,CAAC,CAAC,CAAC,CAACE,OAAO,GAAGxB,CAAC,CAACwB,OAAO;AAC5D,IAAA,MAAMC,OAAO,GAAGzB,CAAC,CAACsB,OAAO,GAAGtB,CAAC,CAACsB,OAAO,CAAC,CAAC,CAAC,CAACG,OAAO,GAAGzB,CAAC,CAACyB,OAAO;IAC5D,MAAMf,IAAI,GAAGnC,QAAQ,CAACgC,OAAO,CAACI,qBAAqB,EAAE;IACrDtB,SAAS,CAACkB,OAAO,GAAG;AAAC1B,MAAAA,CAAC,EAAE2C,OAAO,GAAGd,IAAI,CAACxB,IAAI;AAAEJ,MAAAA,CAAC,EAAE2C,OAAO,GAAGf,IAAI,CAACvB;KAAI;AACrE,EAAA;;AAEA;AACAO,EAAAA,eAAS,CAAC,MAAI;IACZ,SAAS2C,WAAWA,GAAE;MACpBjD,WAAW,CAACmB,OAAO,GAAG,KAAK;AAC3B0B,MAAAA,QAAQ,CAACC,IAAI,CAACC,KAAK,CAACC,UAAU,GAAG,EAAE;AACnC;AACA,MAAA,MAAM9B,EAAE,GAAG/B,QAAQ,CAACgC,OAAO;AAC3B,MAAA,IAAGD,EAAE,EAAC;AACJ,QAAA,MAAMI,IAAI,GAAGJ,EAAE,CAACK,qBAAqB,EAAE;QACvC,MAAMC,IAAI,GAAGV,MAAM,CAACM,UAAU,GAAGE,IAAI,CAACK,KAAK;QAC3C,MAAMC,IAAI,GAAGd,MAAM,CAACO,WAAW,GAAGC,IAAI,CAACO,MAAM;QAC7CtC,MAAM,CAAC2D,IAAI,KAAK;UACdzD,CAAC,EAAEgC,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEwB,IAAI,CAACzD,CAAC,CAAC,EAAEgC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAI,CAAC,CAAC;UACnD9B,CAAC,EAAE+B,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEwB,IAAI,CAACxD,CAAC,CAAC,EAAE+B,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEE,IAAI,CAAC;AACpD,SAAC,CAAC,CAAC;AACL,MAAA;AACF,IAAA;AACAd,IAAAA,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEkC,WAAW,CAAC;AAC/CnC,IAAAA,MAAM,CAACC,gBAAgB,CAAC,UAAU,EAAEkC,WAAW,CAAC;AAChD,IAAA,OAAO,MAAI;AACTnC,MAAAA,MAAM,CAACE,mBAAmB,CAAC,SAAS,EAAEiC,WAAW,CAAC;AAClDnC,MAAAA,MAAM,CAACE,mBAAmB,CAAC,UAAU,EAAEiC,WAAW,CAAC;IACrD,CAAC;EACH,CAAC,EAAC,EAAE,CAAC;AAEL,EAAA,IAAI,CAAC/C,QAAQ,EAAE,OAAO,IAAI;EAE1B,oBACEiD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IACEC,SAAS,EAAE,eAAe,IAAIjD,OAAO,GAAG,UAAU,GAAG,EAAE,CAAE;AACzD,IAAA,YAAA,EAAYlB,KAAM;IAClBoE,WAAW,EAAG1C,CAAC,IAAK;AAAE,MAAA,IAAIR,OAAO,IAAIQ,CAAC,CAAC2C,MAAM,KAAK3C,CAAC,CAAC4C,aAAa,EAAE1E,OAAO,EAAE;AAAC,IAAA;GAAE,eAC/EqE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IACEC,SAAS,EAAE,OAAO,IAAIjD,OAAO,GAAG,UAAU,GAAG,EAAE,CAAE;AACjD,IAAA,YAAA,EAAYlB,KAAM;AAClBuE,IAAAA,GAAG,EAAEtE,QAAS;AACd4D,IAAAA,KAAK,EAAE;AAACjD,MAAAA,IAAI,EAAC,CAAA,EAAGR,GAAG,CAACG,CAAC,CAAA,EAAA,CAAI;AAAEM,MAAAA,GAAG,EAAC,CAAA,EAAGT,GAAG,CAACI,CAAC,CAAA,EAAA,CAAI;AAAEgE,MAAAA,eAAe,EAAE/D;AAAM;GAAE,eACtEwD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,cAAc;AAACI,IAAAA,GAAG,EAAEpE,SAAU;AAACiE,IAAAA,WAAW,EAAEV,SAAU;AAACe,IAAAA,YAAY,EAAEf;GAAU,eAC5FO,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC;AAAa,GAAA,EAAEtE,KAAW,CAAC,eAC1CoE,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQC,IAAAA,SAAS,EAAC,aAAa;AAACO,IAAAA,OAAO,EAAE9E;AAAQ,GAAA,EAAC,MAAS,CACxD,CAAC,eACNqE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC;GAAY,EAAErE,QAAc,CACxC,CACF,CAAC;AAEV;;ACnNe,SAAS6E,MAAMA,CAAC;EAC7BhF,MAAM;EACNC,OAAO;EACPC,KAAK;EACLC,QAAQ;AACRC,EAAAA,eAAe,GAAG,MAAM;AACxB6E,EAAAA,kBAAkB,GAAG,OAAO;EAC5B5E,KAAK,GAAG,OAAO;AACjB,CAAC,EAAC;AACA,EAAA,MAAM6E,SAAS,GAAG3E,YAAM,CAAC,IAAI,CAAC;AAC9B,EAAA,MAAMC,SAAS,GAAGD,YAAM,CAAC,IAAI,CAAC;AAC9B,EAAA,MAAM,CAACE,GAAG,EAAEC,MAAM,CAAC,GAAGC,cAAQ,CAAC;AAACC,IAAAA,CAAC,EAAE,CAAC;AAAEC,IAAAA,CAAC,EAAE;AAAC,GAAC,CAAC;EAC5C,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGJ,cAAQ,CAAC,SAAS,CAAC;;AAE/C;EACA,SAASwE,iBAAiBA,CAAC1E,GAAG,EAAC;AAC7B,IAAA,IAAG,OAAOA,GAAG,KAAK,QAAQ,EAAC;AACzB,MAAA,IAAGA,GAAG,CAAC2E,QAAQ,CAAC,MAAM,CAAC,IAAI3E,GAAG,CAAC2E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,YAAY;AACrE,MAAA,IAAG3E,GAAG,CAAC2E,QAAQ,CAAC,KAAK,CAAC,IAAI3E,GAAG,CAAC2E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,UAAU;AACrE,IAAA;AACA;AACA,IAAA,OAAO,YAAY;AACrB,EAAA;EACA,SAASC,UAAUA,CAAC5E,GAAG,EAAC;AACtB,IAAA,IAAG,OAAOA,GAAG,KAAK,QAAQ,EAAC;MACzB,IAAGA,GAAG,CAAC2E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,MAAM;MACtC,IAAG3E,GAAG,CAAC2E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,OAAO;MACxC,IAAG3E,GAAG,CAAC2E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;MACpC,IAAG3E,GAAG,CAAC2E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,QAAQ;AAC5C,IAAA;AACA,IAAA,OAAO,MAAM;AACf,EAAA;AACA,EAAA,MAAME,WAAW,GAAGH,iBAAiB,CAAC/E,eAAe,CAAC;AACtD,EAAA,MAAMmF,IAAI,GAAGF,UAAU,CAACjF,eAAe,CAAC;EACxC,MAAM,CAACoF,MAAM,EAAEC,SAAS,CAAC,GAAG9E,cAAQ,CAAC,IAAI,CAAC;EAE1C,SAASK,aAAaA,CAACP,GAAG,EAAC;AACzB,IAAA,IAAG,OAAOA,GAAG,KAAK,QAAQ,EAAC;AACzB,MAAA,MAAMG,CAAC,GAAG,OAAOH,GAAG,CAACQ,IAAI,KAAK,QAAQ,GAAG,GAAGR,GAAG,CAACQ,IAAI,CAAA,EAAA,CAAI,GAAG,GAAG;AAC9D,MAAA,MAAMJ,CAAC,GAAG,OAAOJ,GAAG,CAACS,GAAG,KAAK,QAAQ,GAAG,GAAGT,GAAG,CAACS,GAAG,CAAA,EAAA,CAAI,GAAG,GAAG;AAC5D,MAAA,OAAO,CAAA,EAAGN,CAAC,CAAA,CAAA,EAAIC,CAAC,CAAA,CAAE;AACpB,IAAA;AACA,IAAA,QAAOJ,GAAG;AACR,MAAA,KAAK,UAAU;AAAE,QAAA,OAAO,KAAK;AAC7B,MAAA,KAAK,YAAY;AAAE,QAAA,OAAO,OAAO;AACjC,MAAA,KAAK,WAAW;AAAE,QAAA,OAAO,QAAQ;AACjC,MAAA,KAAK,OAAO;AAAE,QAAA,OAAO,UAAU;AAC/B,MAAA,KAAK,cAAc;AAAE,QAAA,OAAO,UAAU;AACtC,MAAA,KAAK,cAAc;AAAE,QAAA,OAAO,WAAW;AACvC,MAAA,KAAK,eAAe;AAAE,QAAA,OAAO,UAAU;AACvC,MAAA,KAAK,aAAa;AAAE,QAAA,OAAO,QAAQ;AACnC,MAAA,KAAK,MAAM;AAAE,QAAA,OAAO,OAAO;AAC3B,MAAA,KAAK,aAAa;AAAE,QAAA,OAAO,OAAO;AAClC,MAAA,KAAK,QAAQ;AACb,MAAA;AAAS,QAAA,OAAO,SAAS;AAC3B;AACF,EAAA;AAEA,EAAA,MAAMU,WAAW,GAAGZ,YAAM,CAAC,KAAK,CAAC;EACjC,MAAMa,SAAS,GAAGb,YAAM,CAAC;AAACK,IAAAA,CAAC,EAAC,CAAC;AAACC,IAAAA,CAAC,EAAC;AAAC,GAAC,CAAC;EACnC,MAAM,CAACQ,QAAQ,EAAEC,WAAW,CAAC,GAAGX,cAAQ,CAACX,MAAM,CAAC;EAChD,MAAM,CAACuB,OAAO,EAAEC,UAAU,CAAC,GAAGb,cAAQ,CAACX,MAAM,CAAC;EAE9C,SAAS0F,IAAIA,CAACC,QAAQ,EAAC;AACrB,IAAA,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE,OAAO,GAAG;AAC5C,IAAA,MAAMC,OAAO,GAAGD,QAAQ,CAACE,IAAI,EAAE;AAC/B,IAAA,IAAID,OAAO,CAACE,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC1B,MAAA,MAAMC,GAAG,GAAGC,MAAM,CAACJ,OAAO,CAACK,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;MACxC,OAAOD,MAAM,CAACE,QAAQ,CAACH,GAAG,CAAC,GAAGA,GAAG,GAAG,GAAG;AACzC,IAAA;AACA,IAAA,IAAIH,OAAO,CAACE,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzB,MAAA,MAAMC,GAAG,GAAGC,MAAM,CAACJ,OAAO,CAACK,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxC,MAAA,OAAOD,MAAM,CAACE,QAAQ,CAACH,GAAG,CAAC,GAAGnD,IAAI,CAACuD,KAAK,CAACJ,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG;AAC5D,IAAA;AACA,IAAA,OAAO,GAAG;AACZ,EAAA;;AAEA;AACAtE,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACzB,MAAM,EAAE;IACb,SAAS8B,SAASA,CAACC,CAAC,EAAE;AACpB,MAAA,IAAIA,CAAC,CAACC,GAAG,KAAK,QAAQ,EAAE;AACtB/B,QAAAA,OAAO,EAAE;AACX,MAAA;AACF,IAAA;AACAgC,IAAAA,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEJ,SAAS,CAAC;IAC7C,OAAO,MAAMG,MAAM,CAACE,mBAAmB,CAAC,SAAS,EAAEL,SAAS,CAAC;AAC/D,EAAA,CAAC,EAAE,CAAC9B,MAAM,EAAEC,OAAO,CAAC,CAAC;AAErBwB,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAIzB,MAAM,EAAE;MACVsB,WAAW,CAAC,IAAI,CAAC;MACjBmE,SAAS,CAAC,IAAI,CAAC;AACf/D,MAAAA,qBAAqB,CAAC,MAAMF,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,MAAM,IAAIH,QAAQ,EAAE;MACnBG,UAAU,CAAC,KAAK,CAAC;AACjB,MAAA,MAAMG,OAAO,GAAGC,UAAU,CACxB,MAAMN,WAAW,CAAC,KAAK,CAAC,EACxBoE,IAAI,CAACT,kBAAkB,CACzB,CAAC;AACD,MAAA,OAAO,MAAMpD,YAAY,CAACF,OAAO,CAAC;AACpC,IAAA;AACF,EAAA,CAAC,EAAE,CAAC3B,MAAM,EAAEiF,kBAAkB,CAAC,CAAC;AAEhCxD,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAIzB,MAAM,EAAEyF,SAAS,CAAC,IAAI,CAAC;EAC7B,CAAC,EAAE,CAACzF,MAAM,EAAEG,QAAQ,EAAEmF,WAAW,CAAC,CAAC;AAEnClD,EAAAA,qBAAe,CAAC,MAAM;AACpB,IAAA,IAAI,CAACpC,MAAM,IAAI,CAACqB,QAAQ,EAAE;AAC1B,IAAA,MAAMgB,EAAE,GAAG6C,SAAS,CAAC5C,OAAO;IAC5B,IAAI,CAACD,EAAE,EAAE;IAET,MAAM;MAAEE,UAAU;AAAEC,MAAAA;AAAY,KAAC,GAAGP,MAAM;AAC1C,IAAA,MAAMQ,IAAI,GAAGJ,EAAE,CAACK,qBAAqB,EAAE;IACvC,MAAM0D,cAAc,GAAGd,WAAW,KAAK,YAAY,IAAIE,MAAM,KAAK,IAAI,GAClE5C,IAAI,CAACuD,KAAK,CAAC5D,UAAU,GAAG,GAAG,CAAC,GAC5BE,IAAI,CAACK,KAAK;IACd,MAAMuD,eAAe,GAAGf,WAAW,KAAK,UAAU,IAAIE,MAAM,KAAK,IAAI,GACjE5C,IAAI,CAACuD,KAAK,CAAC3D,WAAW,GAAG,GAAG,CAAC,GAC7BC,IAAI,CAACO,MAAM;IACf,MAAML,IAAI,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEN,UAAU,GAAG6D,cAAc,CAAC;IACrD,MAAMrD,IAAI,GAAGH,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEL,WAAW,GAAG6D,eAAe,CAAC;AACvD,IAAA,MAAMpD,OAAO,GAAG,CAACV,UAAU,GAAG6D,cAAc,IAAI,CAAC;AACjD,IAAA,MAAMlD,OAAO,GAAG,CAACV,WAAW,GAAG6D,eAAe,IAAI,CAAC;IAEnD,IAAIzF,CAAC,GAAGqC,OAAO;IACf,IAAIpC,CAAC,GAAGqC,OAAO;AAEf,IAAA,IAAI,OAAO9C,eAAe,KAAK,QAAQ,EAAE;MACvC,IAAI,OAAOA,eAAe,CAACa,IAAI,KAAK,QAAQ,EAAEL,CAAC,GAAGR,eAAe,CAACa,IAAI;MACtE,IAAI,OAAOb,eAAe,CAACc,GAAG,KAAK,QAAQ,EAAEL,CAAC,GAAGT,eAAe,CAACc,GAAG;AACtE,IAAA,CAAC,MAAM;AACL,MAAA,QAAQd,eAAe;AACrB,QAAA,KAAK,MAAM;AACTQ,UAAAA,CAAC,GAAG,CAAC;AAAEC,UAAAA,CAAC,GAAG,CAAC;AAAE,UAAA;AAChB,QAAA,KAAK,OAAO;AACVD,UAAAA,CAAC,GAAG+B,IAAI;AAAE9B,UAAAA,CAAC,GAAG,CAAC;AAAE,UAAA;AACnB,QAAA,KAAK,KAAK;AACRD,UAAAA,CAAC,GAAG,CAAC;AAAEC,UAAAA,CAAC,GAAG,CAAC;AAAE,UAAA;AAChB,QAAA,KAAK,QAAQ;AACXD,UAAAA,CAAC,GAAG,CAAC;AAAEC,UAAAA,CAAC,GAAGkC,IAAI;AAAE,UAAA;AACnB,QAAA,KAAK,UAAU;AACbnC,UAAAA,CAAC,GAAG,CAAC;AAAEC,UAAAA,CAAC,GAAG,CAAC;AAAE,UAAA;AAChB,QAAA,KAAK,WAAW;AACdD,UAAAA,CAAC,GAAG+B,IAAI;AAAE9B,UAAAA,CAAC,GAAG,CAAC;AAAE,UAAA;AACnB,QAAA,KAAK,aAAa;AAChBD,UAAAA,CAAC,GAAG,CAAC;AAAEC,UAAAA,CAAC,GAAGkC,IAAI;AAAE,UAAA;AACnB,QAAA,KAAK,cAAc;AACjBnC,UAAAA,CAAC,GAAG+B,IAAI;AAAE9B,UAAAA,CAAC,GAAGkC,IAAI;AAAE,UAAA;AACtB,QAAA,KAAK,YAAY;AACfnC,UAAAA,CAAC,GAAGqC,OAAO;AAAEpC,UAAAA,CAAC,GAAG,CAAC;AAAE,UAAA;AACtB,QAAA,KAAK,eAAe;AAClBD,UAAAA,CAAC,GAAGqC,OAAO;AAAEpC,UAAAA,CAAC,GAAGkC,IAAI;AAAE,UAAA;AACzB,QAAA,KAAK,aAAa;AAChBnC,UAAAA,CAAC,GAAG,CAAC;AAAEC,UAAAA,CAAC,GAAGqC,OAAO;AAAE,UAAA;AACtB,QAAA,KAAK,cAAc;AACjBtC,UAAAA,CAAC,GAAG+B,IAAI;AAAE9B,UAAAA,CAAC,GAAGqC,OAAO;AAAE,UAAA;AACzB,QAAA,KAAK,QAAQ;AACb,QAAA;AACEtC,UAAAA,CAAC,GAAGqC,OAAO;AAAEpC,UAAAA,CAAC,GAAGqC,OAAO;AAAE,UAAA;AAC9B;AACF,IAAA;AAEAtC,IAAAA,CAAC,GAAGgC,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEjC,CAAC,CAAC,EAAE+B,IAAI,CAAC;AAClC9B,IAAAA,CAAC,GAAG+B,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEhC,CAAC,CAAC,EAAEkC,IAAI,CAAC;AAElCrC,IAAAA,MAAM,CAAC;MAAEE,CAAC;AAAEC,MAAAA;AAAE,KAAC,CAAC;AAChBE,IAAAA,SAAS,CAACC,aAAa,CAACZ,eAAe,CAAC,CAAC;AAC3C,EAAA,CAAC,EAAE,CAACJ,MAAM,EAAEI,eAAe,EAAEiB,QAAQ,EAAEiE,WAAW,EAAEE,MAAM,CAAC,CAAC;;AAE5D;AACApD,EAAAA,qBAAe,CAAC,MAAM;AACpB,IAAA,IAAI,CAACf,QAAQ,IAAI,CAAC6D,SAAS,CAAC5C,OAAO,EAAE;IACrC,IAAI,CAACtC,MAAM,EAAE;IACb,IAAIwF,MAAM,KAAK,IAAI,EAAE;AACrB,IAAA,MAAMnD,EAAE,GAAG6C,SAAS,CAAC5C,OAAO;IAC5B,MAAM;MAAEC,UAAU;AAAEC,MAAAA;AAAY,KAAC,GAAGP,MAAM;IAC1C,IAAIqD,WAAW,KAAK,YAAY,EAAE;MAChCG,SAAS,CAACpD,EAAE,CAACiE,WAAW,GAAG/D,UAAU,GAAG,GAAG,CAAC;AAC9C,IAAA,CAAC,MAAM;MACLkD,SAAS,CAACpD,EAAE,CAACkE,YAAY,GAAG/D,WAAW,GAAG,GAAG,CAAC;AAChD,IAAA;AACF,EAAA,CAAC,EAAE,CAACnB,QAAQ,EAAEE,OAAO,EAAEpB,QAAQ,EAAEmF,WAAW,EAAEE,MAAM,CAAC,CAAC;AAEtD/D,EAAAA,eAAS,CAAC,MAAI;IACZ,SAAS2B,MAAMA,CAACrB,CAAC,EAAC;AAChB,MAAA,IAAG,CAACZ,WAAW,CAACmB,OAAO,EAAE;MACzB,IAAIP,CAAC,CAACsB,OAAO,EAAEtB,CAAC,CAACuB,cAAc,EAAE;AACjC,MAAA,MAAMC,OAAO,GAAGxB,CAAC,CAACsB,OAAO,GAAGtB,CAAC,CAACsB,OAAO,CAAC,CAAC,CAAC,CAACE,OAAO,GAAGxB,CAAC,CAACwB,OAAO;AAC5D,MAAA,MAAMC,OAAO,GAAGzB,CAAC,CAACsB,OAAO,GAAGtB,CAAC,CAACsB,OAAO,CAAC,CAAC,CAAC,CAACG,OAAO,GAAGzB,CAAC,CAACyB,OAAO;MAC5D,MAAMC,QAAQ,GAAGF,OAAO,GAAGnC,SAAS,CAACkB,OAAO,CAAC1B,CAAC;MAC9C,MAAM8C,QAAQ,GAAGF,OAAO,GAAGpC,SAAS,CAACkB,OAAO,CAACzB,CAAC;AAC9C,MAAA,MAAMwB,EAAE,GAAG6C,SAAS,CAAC5C,OAAO;AAC5B,MAAA,IAAGD,EAAE,EAAC;AACJ,QAAA,MAAMI,IAAI,GAAGJ,EAAE,CAACK,qBAAqB,EAAE;QACvC,MAAMC,IAAI,GAAGV,MAAM,CAACM,UAAU,GAAGE,IAAI,CAACK,KAAK;QAC3C,MAAMC,IAAI,GAAGd,MAAM,CAACO,WAAW,GAAGC,IAAI,CAACO,MAAM;QAC7C,MAAMW,QAAQ,GAAGf,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEY,QAAQ,CAAC,EAAEb,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAI,CAAC,CAAC;QACnE,MAAMiB,QAAQ,GAAGhB,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEa,QAAQ,CAAC,EAAEd,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEE,IAAI,CAAC,CAAC;AACnErC,QAAAA,MAAM,CAAC;AAACE,UAAAA,CAAC,EAAE+C,QAAQ;AAAE9C,UAAAA,CAAC,EAAE+C;AAAQ,SAAC,CAAC;AACpC,MAAA,CAAC,MAAM;AACLlD,QAAAA,MAAM,CAAC;AAACE,UAAAA,CAAC,EAAE6C,QAAQ;AAAE5C,UAAAA,CAAC,EAAE6C;AAAQ,SAAC,CAAC;AACpC,MAAA;AACF,IAAA;IACA,SAASG,IAAIA,GAAE;MAAE1C,WAAW,CAACmB,OAAO,GAAG,KAAK;AAAC,IAAA;AAC7CL,IAAAA,MAAM,CAACC,gBAAgB,CAAC,WAAW,EAAEkB,MAAM,CAAC;AAC5CnB,IAAAA,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAE2B,IAAI,CAAC;AACxC5B,IAAAA,MAAM,CAACC,gBAAgB,CAAC,WAAW,EAAEkB,MAAM,EAAE;AAACU,MAAAA,OAAO,EAAC;AAAK,KAAC,CAAC;AAC7D7B,IAAAA,MAAM,CAACC,gBAAgB,CAAC,UAAU,EAAE2B,IAAI,CAAC;AACzC,IAAA,OAAO,MAAI;AACT5B,MAAAA,MAAM,CAACE,mBAAmB,CAAC,WAAW,EAAEiB,MAAM,CAAC;AAC/CnB,MAAAA,MAAM,CAACE,mBAAmB,CAAC,SAAS,EAAE0B,IAAI,CAAC;AAC3C5B,MAAAA,MAAM,CAACE,mBAAmB,CAAC,WAAW,EAAEiB,MAAM,CAAC;AAC/CnB,MAAAA,MAAM,CAACE,mBAAmB,CAAC,UAAU,EAAE0B,IAAI,CAAC;IAC9C,CAAC;EACH,CAAC,EAAC,EAAE,CAAC;EAEL,SAASE,SAASA,CAAChC,CAAC,EAAC;IACnBA,CAAC,CAACuB,cAAc,EAAE;IAClBnC,WAAW,CAACmB,OAAO,GAAG,IAAI;AAC1B0B,IAAAA,QAAQ,CAACC,IAAI,CAACC,KAAK,CAACC,UAAU,GAAG,MAAM;AACvC,IAAA,MAAMZ,OAAO,GAAGxB,CAAC,CAACsB,OAAO,GAAGtB,CAAC,CAACsB,OAAO,CAAC,CAAC,CAAC,CAACE,OAAO,GAAGxB,CAAC,CAACwB,OAAO;AAC5D,IAAA,MAAMC,OAAO,GAAGzB,CAAC,CAACsB,OAAO,GAAGtB,CAAC,CAACsB,OAAO,CAAC,CAAC,CAAC,CAACG,OAAO,GAAGzB,CAAC,CAACyB,OAAO;IAC5D,MAAMf,IAAI,GAAGyC,SAAS,CAAC5C,OAAO,CAACI,qBAAqB,EAAE;IACtDtB,SAAS,CAACkB,OAAO,GAAG;AAAC1B,MAAAA,CAAC,EAAE2C,OAAO,GAAGd,IAAI,CAACxB,IAAI;AAAEJ,MAAAA,CAAC,EAAE2C,OAAO,GAAGf,IAAI,CAACvB;KAAI;AACrE,EAAA;AAEAO,EAAAA,eAAS,CAAC,MAAI;IACZ,SAAS2C,WAAWA,GAAE;MACpBjD,WAAW,CAACmB,OAAO,GAAG,KAAK;AAC3B0B,MAAAA,QAAQ,CAACC,IAAI,CAACC,KAAK,CAACC,UAAU,GAAG,EAAE;AACnC,MAAA,MAAM9B,EAAE,GAAG6C,SAAS,CAAC5C,OAAO;AAC5B,MAAA,IAAGD,EAAE,EAAC;AACJ,QAAA,MAAMI,IAAI,GAAGJ,EAAE,CAACK,qBAAqB,EAAE;QACvC,MAAMC,IAAI,GAAGV,MAAM,CAACM,UAAU,GAAGE,IAAI,CAACK,KAAK;QAC3C,MAAMC,IAAI,GAAGd,MAAM,CAACO,WAAW,GAAGC,IAAI,CAACO,MAAM;QAC7CtC,MAAM,CAAC2D,IAAI,KAAK;UACdzD,CAAC,EAAEgC,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEwB,IAAI,CAACzD,CAAC,CAAC,EAAEgC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAI,CAAC,CAAC;UACnD9B,CAAC,EAAE+B,IAAI,CAACO,GAAG,CAACP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEwB,IAAI,CAACxD,CAAC,CAAC,EAAE+B,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEE,IAAI,CAAC;AACpD,SAAC,CAAC,CAAC;AACL,MAAA;AACF,IAAA;AACAd,IAAAA,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEkC,WAAW,CAAC;AAC/CnC,IAAAA,MAAM,CAACC,gBAAgB,CAAC,UAAU,EAAEkC,WAAW,CAAC;AAChD,IAAA,OAAO,MAAI;AACTnC,MAAAA,MAAM,CAACE,mBAAmB,CAAC,SAAS,EAAEiC,WAAW,CAAC;AAClDnC,MAAAA,MAAM,CAACE,mBAAmB,CAAC,UAAU,EAAEiC,WAAW,CAAC;IACrD,CAAC;EACH,CAAC,EAAC,EAAE,CAAC;AAEL,EAAA,IAAI,CAAC/C,QAAQ,EAAE,OAAO,IAAI;EAE1B,oBACEiD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IACEC,SAAS,EAAE,8BAA8B,IAAIjD,OAAO,GAAG,UAAU,GAAG,EAAE,CAAE;AACxE,IAAA,YAAA,EAAYlB,KAAM;IAClBoE,WAAW,EAAG1C,CAAC,IAAK;AAAE,MAAA,IAAIR,OAAO,IAAIQ,CAAC,CAAC2C,MAAM,KAAK3C,CAAC,CAAC4C,aAAa,EAAE1E,OAAO,EAAE;AAAC,IAAA;GAAE,eAC/EqE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EACP,CAAA,OAAA,EAAUc,WAAW,CAAA,MAAA,EAASC,IAAI,CAAA,CAAE,IAAIhE,OAAO,GAAG,UAAU,GAAG,EAAE,CAClE;AACD,IAAA,YAAA,EAAYlB,KAAM;AAClBuE,IAAAA,GAAG,EAAEM,SAAU;AACfhB,IAAAA,KAAK,EAAE;AACLjD,MAAAA,IAAI,EAAC,CAAA,EAAGR,GAAG,CAACG,CAAC,CAAA,EAAA,CAAI;AACjBM,MAAAA,GAAG,EAAC,CAAA,EAAGT,GAAG,CAACI,CAAC,CAAA,EAAA,CAAI;AAChBgE,MAAAA,eAAe,EAAE/D,MAAM;AACvB,MAAA,qBAAqB,EAAEmE,kBAAkB;MACzC,IAAIK,WAAW,KAAK,YAAY,GAAG;AAACtC,QAAAA,MAAM,EAAE;AAAM,OAAC,GAAG;AAACF,QAAAA,KAAK,EAAE;AAAM,OAAC,CAAC;AACpE,MAAA,IAAI0C,MAAM,KAAK,IAAI,GAChBF,WAAW,KAAK,YAAY,GACzB;AAACxC,QAAAA,KAAK,EAAE;AAAM,OAAC,GACf;AAACE,QAAAA,MAAM,EAAE;OAAO,GACpB,EAAE;AACR;GAAE,eACFsB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,cAAc;AAACI,IAAAA,GAAG,EAAEpE,SAAU;AAACiE,IAAAA,WAAW,EAAEV,SAAU;AAACe,IAAAA,YAAY,EAAEf;GAAU,eAC5FO,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC;AAAa,GAAA,EAAEtE,KAAW,CAAC,eAC1CoE,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQC,IAAAA,SAAS,EAAC,aAAa;AAACO,IAAAA,OAAO,EAAE9E;AAAQ,GAAA,EAAC,MAAS,CACxD,CAAC,eACNqE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC;GAAY,EAAErE,QAAc,CACxC,CACF,CAAC;AAEV;;;;;;"}
|
package/dist/index.css
CHANGED
|
@@ -1,157 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/* sensible defaults so modal isn't transparent when used standalone */
|
|
4
|
-
--overlay: rgba(0,0,0,0.35);
|
|
5
|
-
--overlay-strong: rgba(0,0,0,0.6);
|
|
6
|
-
--bg: #ffffff;
|
|
7
|
-
--header-bg: #f5f5f5;
|
|
8
|
-
--header-color: #000;
|
|
9
|
-
--modal-z: 60000;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/* theme overrides (use data-theme to scope) */
|
|
13
|
-
[data-theme='light'] {
|
|
14
|
-
--overlay: rgba(0,0,0,0.35);
|
|
15
|
-
--overlay-strong: rgba(0,0,0,0.6);
|
|
16
|
-
--bg: #ffffff;
|
|
17
|
-
--header-bg: #f5f5f5;
|
|
18
|
-
--header-color: #000;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
[data-theme='dark'] {
|
|
22
|
-
--overlay: rgba(0,0,0,0.6);
|
|
23
|
-
--overlay-strong: rgba(0,0,0,0.85);
|
|
24
|
-
--bg: #2c2c2c;
|
|
25
|
-
--header-bg: #3a3a3a;
|
|
26
|
-
--header-color: #f1f1f1;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.app-root {
|
|
30
|
-
max-width: 900px;
|
|
31
|
-
margin: 0 auto
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
button {
|
|
35
|
-
cursor: pointer
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* ensure modal overlay sits above other UI (other packages use very large z-index values) */
|
|
39
|
-
.modal-overlay {
|
|
40
|
-
position: fixed;
|
|
41
|
-
inset: 0;
|
|
42
|
-
/* background: var(--overlay); */
|
|
43
|
-
display: flex;
|
|
44
|
-
align-items: flex-start;
|
|
45
|
-
justify-content: center;
|
|
46
|
-
padding: 40px;
|
|
47
|
-
z-index: 60000; /* raised from 999 */
|
|
48
|
-
opacity: 0;
|
|
49
|
-
transition: opacity 0.2s ease;
|
|
50
|
-
|
|
51
|
-
/* when invisible we don't want it blocking clicks */
|
|
52
|
-
pointer-events: none;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.modal-overlay.visible {
|
|
56
|
-
opacity: 1;
|
|
57
|
-
pointer-events: auto;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/* drawer-specific overlay adjustments */
|
|
61
|
-
.modal-overlay.drawer-overlay {
|
|
62
|
-
padding: 0; /* flush to edges for drawers */
|
|
63
|
-
background: var(--overlay-strong);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.modal {
|
|
67
|
-
position: absolute;
|
|
68
|
-
z-index: 60001; /* keep modal above the overlay's stacking context children */
|
|
69
|
-
background: var(--bg);
|
|
70
|
-
min-width: 300px;
|
|
71
|
-
border-radius: 2px;
|
|
72
|
-
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
|
|
73
|
-
overflow: hidden;
|
|
74
|
-
|
|
75
|
-
/* entry animation state */
|
|
76
|
-
opacity: 0;
|
|
77
|
-
transform: translateY(-20px) scale(0.85) rotate(-4deg);
|
|
78
|
-
transition: opacity 0.25s ease, transform 0.25s ease;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.modal.visible {
|
|
82
|
-
opacity: 1;
|
|
83
|
-
transform: translateY(0) scale(1) rotate(0);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/* drawer uses a simple slide animation and adapts to the chosen edge */
|
|
87
|
-
.drawer {
|
|
88
|
-
position: absolute;
|
|
89
|
-
z-index: 60001;
|
|
90
|
-
background: var(--bg);
|
|
91
|
-
min-width: 300px;
|
|
92
|
-
border-radius: 2px;
|
|
93
|
-
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
|
|
94
|
-
overflow: hidden;
|
|
95
|
-
max-width: 100%;
|
|
96
|
-
max-height: 100%;
|
|
97
|
-
|
|
98
|
-
opacity: 0;
|
|
99
|
-
transform: translate(0,0);
|
|
100
|
-
transition: opacity var(--drawer-transition, 0.45s) ease,
|
|
101
|
-
transform var(--drawer-transition, 0.45s) ease;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/* full height when coming from left/right, full width for top/bottom */
|
|
105
|
-
.drawer.horizontal { height: 100%; }
|
|
106
|
-
.drawer.vertical { width: 100%; }
|
|
107
|
-
|
|
108
|
-
/* offscreen start positions by 100% of its own size */
|
|
109
|
-
.drawer.horizontal.side-left { transform: translateX(-100%); }
|
|
110
|
-
.drawer.horizontal.side-right { transform: translateX(100%); }
|
|
111
|
-
.drawer.vertical.side-top { transform: translateY(-100%); }
|
|
112
|
-
.drawer.vertical.side-bottom { transform: translateY(100%); }
|
|
113
|
-
|
|
114
|
-
.drawer.visible {
|
|
115
|
-
opacity: 1;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.drawer.visible.horizontal.side-left,
|
|
119
|
-
.drawer.visible.horizontal.side-right {
|
|
120
|
-
transform: translateX(0);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.drawer.visible.vertical.side-top,
|
|
124
|
-
.drawer.visible.vertical.side-bottom {
|
|
125
|
-
transform: translateY(0);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
.modal-header {
|
|
129
|
-
display: flex;
|
|
130
|
-
align-items: center;
|
|
131
|
-
justify-content: space-between;
|
|
132
|
-
padding: 10px 12px;
|
|
133
|
-
background: var(--header-bg);
|
|
134
|
-
color: var(--header-color);
|
|
135
|
-
cursor: grab
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.modal-title {
|
|
139
|
-
font-weight: 600
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
.modal-close {
|
|
143
|
-
border: none;
|
|
144
|
-
background: transparent;
|
|
145
|
-
font-size: 18px;
|
|
146
|
-
padding: 4px 8px
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
.modal-body {
|
|
150
|
-
padding: 12px
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
@media (max-width:480px) {
|
|
154
|
-
.modal {
|
|
155
|
-
min-width: 260px
|
|
156
|
-
}
|
|
157
|
-
}
|
|
1
|
+
:root{--overlay:rgba(0,0,0,.35);--overlay-strong:rgba(0,0,0,.6);--bg:#fff;--header-bg:#f5f5f5;--header-color:#000;--modal-z:60000}[data-theme=light]{--overlay:rgba(0,0,0,.35);--overlay-strong:rgba(0,0,0,.6);--bg:#fff;--header-bg:#f5f5f5;--header-color:#000}[data-theme=dark]{--overlay:rgba(0,0,0,.6);--overlay-strong:rgba(0,0,0,.85);--bg:#2c2c2c;--header-bg:#3a3a3a;--header-color:#f1f1f1}.app-root{margin:0 auto;max-width:900px}button{cursor:pointer}.modal-overlay{align-items:flex-start;background:var(--overlay);display:flex;inset:0;justify-content:center;opacity:0;padding:40px;pointer-events:none;position:fixed;transition:opacity .2s ease;z-index:60000}.modal-overlay.visible{opacity:1;pointer-events:auto}.modal-overlay.drawer-overlay{background:var(--overlay-strong);padding:0}.modal{background:var(--bg);border-radius:2px;box-shadow:0 10px 30px rgba(0,0,0,.3);min-width:300px;opacity:0;overflow:hidden;position:absolute;transform:translateY(-20px) scale(.85) rotate(-4deg);transition:opacity .25s ease,transform .25s ease;z-index:60001}.modal.visible{opacity:1;transform:translateY(0) scale(1) rotate(0)}.drawer{background:var(--bg);border-radius:2px;box-shadow:0 10px 30px rgba(0,0,0,.3);max-height:100%;max-width:100%;min-width:300px;opacity:0;overflow:hidden;position:absolute;transform:translate(0);transition:opacity var(--drawer-transition,.45s) ease,transform var(--drawer-transition,.45s) ease;z-index:60001}.drawer.horizontal{height:100%}.drawer.vertical{width:100%}.drawer.horizontal.side-left{transform:translateX(-100%)}.drawer.horizontal.side-right{transform:translateX(100%)}.drawer.vertical.side-top{transform:translateY(-100%)}.drawer.vertical.side-bottom{transform:translateY(100%)}.drawer.visible{opacity:1}.drawer.visible.horizontal.side-left,.drawer.visible.horizontal.side-right{transform:translateX(0)}.drawer.visible.vertical.side-bottom,.drawer.visible.vertical.side-top{transform:translateY(0)}.modal-header{align-items:center;background:var(--header-bg);color:var(--header-color);cursor:grab;display:flex;justify-content:space-between;padding:10px 12px}.modal-title{font-weight:600}.modal-close{background:transparent;border:none;font-size:18px;padding:4px 8px}.modal-body{padding:12px}@media (max-width:480px){.modal{min-width:260px}}
|
|
2
|
+
/*# sourceMappingURL=index.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.css"],"names":[],"mappings":"AACA,MAEE,yBAA2B,CAC3B,+BAAiC,CACjC,SAAa,CACb,mBAAoB,CACpB,mBAAoB,CACpB,eACF,CAGA,mBACE,yBAA2B,CAC3B,+BAAiC,CACjC,SAAa,CACb,mBAAoB,CACpB,mBACF,CAEA,kBACE,wBAA0B,CAC1B,gCAAkC,CAClC,YAAa,CACb,mBAAoB,CACpB,sBACF,CAEA,UAEE,aAAA,CADA,eAEF,CAEA,OACE,cACF,CAGA,eAKE,sBAAuB,CAFvB,yBAA0B,CAC1B,YAAa,CAFb,OAAQ,CAIR,sBAAuB,CAGvB,SAAU,CAFV,YAAa,CAMb,mBAAoB,CAZpB,cAAe,CASf,2BAA6B,CAF7B,aAMF,CAEA,uBACE,SAAU,CACV,mBACF,CAGA,8BAEE,gCAAiC,CADjC,SAEF,CAEA,OAGE,oBAAqB,CAErB,iBAAkB,CAClB,qCAA0C,CAF1C,eAAgB,CAMhB,SAAU,CAHV,eAAgB,CANhB,iBAAkB,CAUlB,oDAAsD,CACtD,gDAAoD,CAVpD,aAWF,CAEA,eACE,SAAU,CACV,0CACF,CAGA,QAGE,oBAAqB,CAErB,iBAAkB,CAClB,qCAA0C,CAG1C,eAAgB,CADhB,cAAe,CAJf,eAAgB,CAOhB,SAAU,CAJV,eAAgB,CANhB,iBAAkB,CAWlB,sBAAyB,CACzB,kGACgD,CAZhD,aAaF,CAGA,mBAAqB,WAAc,CACnC,iBAAmB,UAAa,CAGhC,6BAAgC,2BAA8B,CAC9D,8BAAgC,0BAA6B,CAC7D,0BAAgC,2BAA8B,CAC9D,6BAAgC,0BAA6B,CAE7D,gBACE,SACF,CAEA,2EAEE,uBACF,CAEA,uEAEE,uBACF,CAEA,cAEE,kBAAmB,CAGnB,2BAA4B,CAC5B,yBAA0B,CAC1B,WAAA,CANA,YAAa,CAEb,6BAA8B,CAC9B,iBAIF,CAEA,aACE,eACF,CAEA,aAEE,sBAAuB,CADvB,WAAY,CAEZ,cAAe,CACf,eACF,CAEA,YACE,YACF,CAEA,yBACE,OACE,eACF,CACF","file":"index.css","sourcesContent":["\r\n:root {\r\n /* sensible defaults so modal isn't transparent when used standalone */\r\n --overlay: rgba(0,0,0,0.35);\r\n --overlay-strong: rgba(0,0,0,0.6);\r\n --bg: #ffffff;\r\n --header-bg: #f5f5f5;\r\n --header-color: #000;\r\n --modal-z: 60000;\r\n}\r\n\r\n/* theme overrides (use data-theme to scope) */\r\n[data-theme='light'] {\r\n --overlay: rgba(0,0,0,0.35);\r\n --overlay-strong: rgba(0,0,0,0.6);\r\n --bg: #ffffff;\r\n --header-bg: #f5f5f5;\r\n --header-color: #000;\r\n}\r\n\r\n[data-theme='dark'] {\r\n --overlay: rgba(0,0,0,0.6);\r\n --overlay-strong: rgba(0,0,0,0.85);\r\n --bg: #2c2c2c;\r\n --header-bg: #3a3a3a;\r\n --header-color: #f1f1f1;\r\n}\r\n\r\n.app-root {\r\n max-width: 900px;\r\n margin: 0 auto\r\n}\r\n\r\nbutton {\r\n cursor: pointer\r\n}\r\n\r\n/* ensure modal overlay sits above other UI (other packages use very large z-index values) */\r\n.modal-overlay {\r\n position: fixed;\r\n inset: 0;\r\n background: var(--overlay);\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: center;\r\n padding: 40px;\r\n z-index: 60000; /* raised from 999 */\r\n opacity: 0;\r\n transition: opacity 0.2s ease;\r\n\r\n /* when invisible we don't want it blocking clicks */\r\n pointer-events: none;\r\n}\r\n\r\n.modal-overlay.visible {\r\n opacity: 1;\r\n pointer-events: auto;\r\n}\r\n\r\n/* drawer-specific overlay adjustments */\r\n.modal-overlay.drawer-overlay {\r\n padding: 0; /* flush to edges for drawers */\r\n background: var(--overlay-strong);\r\n}\r\n\r\n.modal {\r\n position: absolute;\r\n z-index: 60001; /* keep modal above the overlay's stacking context children */\r\n background: var(--bg);\r\n min-width: 300px;\r\n border-radius: 2px;\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\r\n overflow: hidden;\r\n\r\n /* entry animation state */\r\n opacity: 0;\r\n transform: translateY(-20px) scale(0.85) rotate(-4deg);\r\n transition: opacity 0.25s ease, transform 0.25s ease;\r\n}\r\n\r\n.modal.visible {\r\n opacity: 1;\r\n transform: translateY(0) scale(1) rotate(0);\r\n}\r\n\r\n/* drawer uses a simple slide animation and adapts to the chosen edge */\r\n.drawer {\r\n position: absolute;\r\n z-index: 60001;\r\n background: var(--bg);\r\n min-width: 300px;\r\n border-radius: 2px;\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\r\n overflow: hidden;\r\n max-width: 100%;\r\n max-height: 100%;\r\n\r\n opacity: 0;\r\n transform: translate(0,0);\r\n transition: opacity var(--drawer-transition, 0.45s) ease,\r\n transform var(--drawer-transition, 0.45s) ease;\r\n}\r\n\r\n/* full height when coming from left/right, full width for top/bottom */\r\n.drawer.horizontal { height: 100%; }\r\n.drawer.vertical { width: 100%; }\r\n\r\n/* offscreen start positions by 100% of its own size */\r\n.drawer.horizontal.side-left { transform: translateX(-100%); }\r\n.drawer.horizontal.side-right { transform: translateX(100%); }\r\n.drawer.vertical.side-top { transform: translateY(-100%); }\r\n.drawer.vertical.side-bottom { transform: translateY(100%); }\r\n\r\n.drawer.visible {\r\n opacity: 1;\r\n}\r\n\r\n.drawer.visible.horizontal.side-left,\r\n.drawer.visible.horizontal.side-right {\r\n transform: translateX(0);\r\n}\r\n\r\n.drawer.visible.vertical.side-top,\r\n.drawer.visible.vertical.side-bottom {\r\n transform: translateY(0);\r\n}\r\n\r\n.modal-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 10px 12px;\r\n background: var(--header-bg);\r\n color: var(--header-color);\r\n cursor: grab\r\n}\r\n\r\n.modal-title {\r\n font-weight: 600\r\n}\r\n\r\n.modal-close {\r\n border: none;\r\n background: transparent;\r\n font-size: 18px;\r\n padding: 4px 8px\r\n}\r\n\r\n.modal-body {\r\n padding: 12px\r\n}\r\n\r\n@media (max-width:480px) {\r\n .modal {\r\n min-width: 260px\r\n }\r\n}"]}
|
package/dist/index.esm.js
CHANGED
|
@@ -67,7 +67,7 @@ function Modal({
|
|
|
67
67
|
const timeout = setTimeout(() => setRendered(false), 200);
|
|
68
68
|
return () => clearTimeout(timeout);
|
|
69
69
|
}
|
|
70
|
-
}, [isOpen
|
|
70
|
+
}, [isOpen]);
|
|
71
71
|
|
|
72
72
|
// ESC key handler
|
|
73
73
|
useEffect(() => {
|
|
@@ -378,7 +378,7 @@ function Drawer({
|
|
|
378
378
|
const timeout = setTimeout(() => setRendered(false), toMs(transitionDuration));
|
|
379
379
|
return () => clearTimeout(timeout);
|
|
380
380
|
}
|
|
381
|
-
}, [isOpen,
|
|
381
|
+
}, [isOpen, transitionDuration]);
|
|
382
382
|
useEffect(() => {
|
|
383
383
|
if (isOpen) setShrink(null);
|
|
384
384
|
}, [isOpen, children, orientation]);
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/components/Modal.jsx","../src/components/Drawer.jsx"],"sourcesContent":["import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'center',\r\n theme = 'light' // new prop: 'light' or 'dark'\r\n}){\r\n const modalRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n // explicit coords – treat as pixels from top-left of modal\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n // transition helpers -> keep component rendered during fade-out\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n // when isOpen changes, trigger fade in / fade out\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n // next frame to allow initial render before adding class\r\n requestAnimationFrame(() => {\r\n setVisible(true)\r\n })\r\n } else if (rendered) {\r\n setVisible(false)\r\n // remove from DOM after transition duration\r\n const timeout = setTimeout(() => setRendered(false), 200)\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered])\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n // calculate coordinates synchronously before paint so the dialog doesn't\r\n // jump from {0,0} when it first renders. using useLayoutEffect ensures the\r\n // position is available when visible transitions start.\r\n useLayoutEffect(() => {\r\n // only position when the modal is actually rendered & opening\r\n if (!isOpen || !rendered) return\r\n const el = modalRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const maxX = Math.max(0, innerWidth - rect.width)\r\n const maxY = Math.max(0, innerHeight - rect.height)\r\n const centerX = (innerWidth - rect.width) / 2\r\n const centerY = (innerHeight - rect.height) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n // clamp to viewport\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n // compute desired position\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n // clamp to viewport so it can't be dragged fully offscreen\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = modalRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n // ensure we re-enable selection when drag ends\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n // final clamp to ensure modal stays visible if window size changed\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\"modal\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n ref={modalRef}\r\n style={{left:`${pos.x}px`, top:`${pos.y}px`, transformOrigin: origin}}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Drawer({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'left',\r\n transitionDuration = '0.45s',\r\n theme = 'light' // support light/dark themes\r\n}){\r\n const drawerRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n // determine orientation (horizontal/vertical) and simple side for animation\r\n function detectOrientation(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left') || pos.includes('right')) return 'horizontal'\r\n if(pos.includes('top') || pos.includes('bottom')) return 'vertical'\r\n }\r\n // fall back to horizontal for coordinate objects\r\n return 'horizontal'\r\n }\r\n function detectSide(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left')) return 'left'\r\n if(pos.includes('right')) return 'right'\r\n if(pos.includes('top')) return 'top'\r\n if(pos.includes('bottom')) return 'bottom'\r\n }\r\n return 'left'\r\n }\r\n const orientation = detectOrientation(initialPosition)\r\n const side = detectSide(initialPosition)\r\n const [shrink, setShrink] = useState(null)\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right': return '100% 50%'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left': return '0 50%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n function toMs(duration){\r\n if (typeof duration !== 'string') return 450\r\n const trimmed = duration.trim()\r\n if (trimmed.endsWith('ms')) {\r\n const val = Number(trimmed.slice(0, -2))\r\n return Number.isFinite(val) ? val : 450\r\n }\r\n if (trimmed.endsWith('s')) {\r\n const val = Number(trimmed.slice(0, -1))\r\n return Number.isFinite(val) ? Math.round(val * 1000) : 450\r\n }\r\n return 450\r\n }\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n setShrink(null)\r\n requestAnimationFrame(() => setVisible(true))\r\n } else if (rendered) {\r\n setVisible(false)\r\n const timeout = setTimeout(\r\n () => setRendered(false),\r\n toMs(transitionDuration)\r\n )\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered, transitionDuration])\r\n\r\n useEffect(() => {\r\n if (isOpen) setShrink(null)\r\n }, [isOpen, children, orientation])\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || !rendered) return\r\n const el = drawerRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const effectiveWidth = orientation === 'horizontal' && shrink === true\r\n ? Math.round(innerWidth * 0.3)\r\n : rect.width\r\n const effectiveHeight = orientation === 'vertical' && shrink === true\r\n ? Math.round(innerHeight * 0.3)\r\n : rect.height\r\n const maxX = Math.max(0, innerWidth - effectiveWidth)\r\n const maxY = Math.max(0, innerHeight - effectiveHeight)\r\n const centerX = (innerWidth - effectiveWidth) / 2\r\n const centerY = (innerHeight - effectiveHeight) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'left':\r\n x = 0; y = 0; break\r\n case 'right':\r\n x = maxX; y = 0; break\r\n case 'top':\r\n x = 0; y = 0; break\r\n case 'bottom':\r\n x = 0; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered, orientation, shrink])\r\n\r\n // shrink measurement – check dimensions after render\r\n useLayoutEffect(() => {\r\n if (!rendered || !drawerRef.current) return\r\n if (!isOpen) return\r\n if (shrink !== null) return\r\n const el = drawerRef.current\r\n const { innerWidth, innerHeight } = window\r\n if (orientation === 'horizontal') {\r\n setShrink(el.scrollWidth < innerWidth * 0.3)\r\n } else {\r\n setShrink(el.scrollHeight < innerHeight * 0.3)\r\n }\r\n }, [rendered, visible, children, orientation, shrink])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = drawerRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay drawer-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\r\n `drawer ${orientation} side-${side}` + (visible ? \" visible\" : \"\")\r\n }\r\n data-theme={theme}\r\n ref={drawerRef}\r\n style={{\r\n left:`${pos.x}px`,\r\n top:`${pos.y}px`,\r\n transformOrigin: origin,\r\n '--drawer-transition': transitionDuration,\r\n ...(orientation === 'horizontal' ? {height: '100%'} : {width: '100%'}),\r\n ...(shrink === true\r\n ? (orientation === 'horizontal'\r\n ? {width: '30vw'}\r\n : {height: '30vh'})\r\n : {}),\r\n }}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["Modal","isOpen","onClose","title","children","initialPosition","theme","modalRef","useRef","headerRef","pos","setPos","useState","x","y","origin","setOrigin","computeOrigin","left","top","draggingRef","offsetRef","rendered","setRendered","visible","setVisible","useEffect","requestAnimationFrame","timeout","setTimeout","clearTimeout","handleEsc","e","key","window","addEventListener","removeEventListener","useLayoutEffect","el","current","innerWidth","innerHeight","rect","getBoundingClientRect","maxX","Math","max","width","maxY","height","centerX","centerY","min","onMove","touches","preventDefault","clientX","clientY","desiredX","desiredY","clampedX","clampedY","onUp","passive","startDrag","document","body","style","userSelect","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","transformOrigin","onTouchStart","onClick","Drawer","transitionDuration","drawerRef","detectOrientation","includes","detectSide","orientation","side","shrink","setShrink","toMs","duration","trimmed","trim","endsWith","val","Number","slice","isFinite","round","effectiveWidth","effectiveHeight","scrollWidth","scrollHeight"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/Modal.jsx","../src/components/Drawer.jsx"],"sourcesContent":["import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'center',\r\n theme = 'light' // new prop: 'light' or 'dark'\r\n}){\r\n const modalRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n // explicit coords – treat as pixels from top-left of modal\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n // transition helpers -> keep component rendered during fade-out\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n // when isOpen changes, trigger fade in / fade out\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n // next frame to allow initial render before adding class\r\n requestAnimationFrame(() => {\r\n setVisible(true)\r\n })\r\n } else if (rendered) {\r\n setVisible(false)\r\n // remove from DOM after transition duration\r\n const timeout = setTimeout(() => setRendered(false), 200)\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen])\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n // calculate coordinates synchronously before paint so the dialog doesn't\r\n // jump from {0,0} when it first renders. using useLayoutEffect ensures the\r\n // position is available when visible transitions start.\r\n useLayoutEffect(() => {\r\n // only position when the modal is actually rendered & opening\r\n if (!isOpen || !rendered) return\r\n const el = modalRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const maxX = Math.max(0, innerWidth - rect.width)\r\n const maxY = Math.max(0, innerHeight - rect.height)\r\n const centerX = (innerWidth - rect.width) / 2\r\n const centerY = (innerHeight - rect.height) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n // clamp to viewport\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n // compute desired position\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n // clamp to viewport so it can't be dragged fully offscreen\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = modalRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n // ensure we re-enable selection when drag ends\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n // final clamp to ensure modal stays visible if window size changed\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\"modal\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n ref={modalRef}\r\n style={{left:`${pos.x}px`, top:`${pos.y}px`, transformOrigin: origin}}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Drawer({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'left',\r\n transitionDuration = '0.45s',\r\n theme = 'light' // support light/dark themes\r\n}){\r\n const drawerRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n // determine orientation (horizontal/vertical) and simple side for animation\r\n function detectOrientation(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left') || pos.includes('right')) return 'horizontal'\r\n if(pos.includes('top') || pos.includes('bottom')) return 'vertical'\r\n }\r\n // fall back to horizontal for coordinate objects\r\n return 'horizontal'\r\n }\r\n function detectSide(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left')) return 'left'\r\n if(pos.includes('right')) return 'right'\r\n if(pos.includes('top')) return 'top'\r\n if(pos.includes('bottom')) return 'bottom'\r\n }\r\n return 'left'\r\n }\r\n const orientation = detectOrientation(initialPosition)\r\n const side = detectSide(initialPosition)\r\n const [shrink, setShrink] = useState(null)\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right': return '100% 50%'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left': return '0 50%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n function toMs(duration){\r\n if (typeof duration !== 'string') return 450\r\n const trimmed = duration.trim()\r\n if (trimmed.endsWith('ms')) {\r\n const val = Number(trimmed.slice(0, -2))\r\n return Number.isFinite(val) ? val : 450\r\n }\r\n if (trimmed.endsWith('s')) {\r\n const val = Number(trimmed.slice(0, -1))\r\n return Number.isFinite(val) ? Math.round(val * 1000) : 450\r\n }\r\n return 450\r\n }\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n setShrink(null)\r\n requestAnimationFrame(() => setVisible(true))\r\n } else if (rendered) {\r\n setVisible(false)\r\n const timeout = setTimeout(\r\n () => setRendered(false),\r\n toMs(transitionDuration)\r\n )\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, transitionDuration])\r\n\r\n useEffect(() => {\r\n if (isOpen) setShrink(null)\r\n }, [isOpen, children, orientation])\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || !rendered) return\r\n const el = drawerRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const effectiveWidth = orientation === 'horizontal' && shrink === true\r\n ? Math.round(innerWidth * 0.3)\r\n : rect.width\r\n const effectiveHeight = orientation === 'vertical' && shrink === true\r\n ? Math.round(innerHeight * 0.3)\r\n : rect.height\r\n const maxX = Math.max(0, innerWidth - effectiveWidth)\r\n const maxY = Math.max(0, innerHeight - effectiveHeight)\r\n const centerX = (innerWidth - effectiveWidth) / 2\r\n const centerY = (innerHeight - effectiveHeight) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'left':\r\n x = 0; y = 0; break\r\n case 'right':\r\n x = maxX; y = 0; break\r\n case 'top':\r\n x = 0; y = 0; break\r\n case 'bottom':\r\n x = 0; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered, orientation, shrink])\r\n\r\n // shrink measurement – check dimensions after render\r\n useLayoutEffect(() => {\r\n if (!rendered || !drawerRef.current) return\r\n if (!isOpen) return\r\n if (shrink !== null) return\r\n const el = drawerRef.current\r\n const { innerWidth, innerHeight } = window\r\n if (orientation === 'horizontal') {\r\n setShrink(el.scrollWidth < innerWidth * 0.3)\r\n } else {\r\n setShrink(el.scrollHeight < innerHeight * 0.3)\r\n }\r\n }, [rendered, visible, children, orientation, shrink])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = drawerRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay drawer-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\r\n `drawer ${orientation} side-${side}` + (visible ? \" visible\" : \"\")\r\n }\r\n data-theme={theme}\r\n ref={drawerRef}\r\n style={{\r\n left:`${pos.x}px`,\r\n top:`${pos.y}px`,\r\n transformOrigin: origin,\r\n '--drawer-transition': transitionDuration,\r\n ...(orientation === 'horizontal' ? {height: '100%'} : {width: '100%'}),\r\n ...(shrink === true\r\n ? (orientation === 'horizontal'\r\n ? {width: '30vw'}\r\n : {height: '30vh'})\r\n : {}),\r\n }}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["Modal","isOpen","onClose","title","children","initialPosition","theme","modalRef","useRef","headerRef","pos","setPos","useState","x","y","origin","setOrigin","computeOrigin","left","top","draggingRef","offsetRef","rendered","setRendered","visible","setVisible","useEffect","requestAnimationFrame","timeout","setTimeout","clearTimeout","handleEsc","e","key","window","addEventListener","removeEventListener","useLayoutEffect","el","current","innerWidth","innerHeight","rect","getBoundingClientRect","maxX","Math","max","width","maxY","height","centerX","centerY","min","onMove","touches","preventDefault","clientX","clientY","desiredX","desiredY","clampedX","clampedY","onUp","passive","startDrag","document","body","style","userSelect","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","transformOrigin","onTouchStart","onClick","Drawer","transitionDuration","drawerRef","detectOrientation","includes","detectSide","orientation","side","shrink","setShrink","toMs","duration","trimmed","trim","endsWith","val","Number","slice","isFinite","round","effectiveWidth","effectiveHeight","scrollWidth","scrollHeight"],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/dist/index.css
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
:root{--overlay:rgba(0,0,0,.35);--overlay-strong:rgba(0,0,0,.6);--bg:#fff;--header-bg:#f5f5f5;--header-color:#000;--modal-z:60000}[data-theme=light]{--overlay:rgba(0,0,0,.35);--overlay-strong:rgba(0,0,0,.6);--bg:#fff;--header-bg:#f5f5f5;--header-color:#000}[data-theme=dark]{--overlay:rgba(0,0,0,.6);--overlay-strong:rgba(0,0,0,.85);--bg:#2c2c2c;--header-bg:#3a3a3a;--header-color:#f1f1f1}.app-root{margin:0 auto;max-width:900px}button{cursor:pointer}.modal-overlay{align-items:flex-start;display:flex;inset:0;justify-content:center;opacity:0;padding:40px;pointer-events:none;position:fixed;transition:opacity .2s ease;z-index:60000}.modal-overlay.visible{opacity:1;pointer-events:auto}.modal-overlay.drawer-overlay{background:var(--overlay-strong);padding:0}.modal{background:var(--bg);border-radius:2px;box-shadow:0 10px 30px rgba(0,0,0,.3);min-width:300px;opacity:0;overflow:hidden;position:absolute;transform:translateY(-20px) scale(.85) rotate(-4deg);transition:opacity .25s ease,transform .25s ease;z-index:60001}.modal.visible{opacity:1;transform:translateY(0) scale(1) rotate(0)}.drawer{background:var(--bg);border-radius:2px;box-shadow:0 10px 30px rgba(0,0,0,.3);max-height:100%;max-width:100%;min-width:300px;opacity:0;overflow:hidden;position:absolute;transform:translate(0);transition:opacity var(--drawer-transition,.45s) ease,transform var(--drawer-transition,.45s) ease;z-index:60001}.drawer.horizontal{height:100%}.drawer.vertical{width:100%}.drawer.horizontal.side-left{transform:translateX(-100%)}.drawer.horizontal.side-right{transform:translateX(100%)}.drawer.vertical.side-top{transform:translateY(-100%)}.drawer.vertical.side-bottom{transform:translateY(100%)}.drawer.visible{opacity:1}.drawer.visible.horizontal.side-left,.drawer.visible.horizontal.side-right{transform:translateX(0)}.drawer.visible.vertical.side-bottom,.drawer.visible.vertical.side-top{transform:translateY(0)}.modal-header{align-items:center;background:var(--header-bg);color:var(--header-color);cursor:grab;display:flex;justify-content:space-between;padding:10px 12px}.modal-title{font-weight:600}.modal-close{background:transparent;border:none;font-size:18px;padding:4px 8px}.modal-body{padding:12px}@media (max-width:480px){.modal{min-width:260px}}
|
|
2
|
-
/*# sourceMappingURL=index.css.map */
|
package/dist/dist/index.css.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["index.css"],"names":[],"mappings":"AACA,MAEE,yBAA2B,CAC3B,+BAAiC,CACjC,SAAa,CACb,mBAAoB,CACpB,mBAAoB,CACpB,eACF,CAGA,mBACE,yBAA2B,CAC3B,+BAAiC,CACjC,SAAa,CACb,mBAAoB,CACpB,mBACF,CAEA,kBACE,wBAA0B,CAC1B,gCAAkC,CAClC,YAAa,CACb,mBAAoB,CACpB,sBACF,CAEA,UAEE,aAAA,CADA,eAEF,CAEA,OACE,cACF,CAGA,eAKE,sBAAuB,CADvB,YAAa,CAFb,OAAQ,CAIR,sBAAuB,CAGvB,SAAU,CAFV,YAAa,CAMb,mBAAoB,CAZpB,cAAe,CASf,2BAA6B,CAF7B,aAMF,CAEA,uBACE,SAAU,CACV,mBACF,CAGA,8BAEE,gCAAiC,CADjC,SAEF,CAEA,OAGE,oBAAqB,CAErB,iBAAkB,CAClB,qCAA0C,CAF1C,eAAgB,CAMhB,SAAU,CAHV,eAAgB,CANhB,iBAAkB,CAUlB,oDAAsD,CACtD,gDAAoD,CAVpD,aAWF,CAEA,eACE,SAAU,CACV,0CACF,CAGA,QAGE,oBAAqB,CAErB,iBAAkB,CAClB,qCAA0C,CAG1C,eAAgB,CADhB,cAAe,CAJf,eAAgB,CAOhB,SAAU,CAJV,eAAgB,CANhB,iBAAkB,CAWlB,sBAAyB,CACzB,kGACgD,CAZhD,aAaF,CAGA,mBAAqB,WAAc,CACnC,iBAAmB,UAAa,CAGhC,6BAAgC,2BAA8B,CAC9D,8BAAgC,0BAA6B,CAC7D,0BAAgC,2BAA8B,CAC9D,6BAAgC,0BAA6B,CAE7D,gBACE,SACF,CAEA,2EAEE,uBACF,CAEA,uEAEE,uBACF,CAEA,cAEE,kBAAmB,CAGnB,2BAA4B,CAC5B,yBAA0B,CAC1B,WAAA,CANA,YAAa,CAEb,6BAA8B,CAC9B,iBAIF,CAEA,aACE,eACF,CAEA,aAEE,sBAAuB,CADvB,WAAY,CAEZ,cAAe,CACf,eACF,CAEA,YACE,YACF,CAEA,yBACE,OACE,eACF,CACF","file":"index.css","sourcesContent":["\r\n:root {\r\n /* sensible defaults so modal isn't transparent when used standalone */\r\n --overlay: rgba(0,0,0,0.35);\r\n --overlay-strong: rgba(0,0,0,0.6);\r\n --bg: #ffffff;\r\n --header-bg: #f5f5f5;\r\n --header-color: #000;\r\n --modal-z: 60000;\r\n}\r\n\r\n/* theme overrides (use data-theme to scope) */\r\n[data-theme='light'] {\r\n --overlay: rgba(0,0,0,0.35);\r\n --overlay-strong: rgba(0,0,0,0.6);\r\n --bg: #ffffff;\r\n --header-bg: #f5f5f5;\r\n --header-color: #000;\r\n}\r\n\r\n[data-theme='dark'] {\r\n --overlay: rgba(0,0,0,0.6);\r\n --overlay-strong: rgba(0,0,0,0.85);\r\n --bg: #2c2c2c;\r\n --header-bg: #3a3a3a;\r\n --header-color: #f1f1f1;\r\n}\r\n\r\n.app-root {\r\n max-width: 900px;\r\n margin: 0 auto\r\n}\r\n\r\nbutton {\r\n cursor: pointer\r\n}\r\n\r\n/* ensure modal overlay sits above other UI (other packages use very large z-index values) */\r\n.modal-overlay {\r\n position: fixed;\r\n inset: 0;\r\n /* background: var(--overlay); */\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: center;\r\n padding: 40px;\r\n z-index: 60000; /* raised from 999 */\r\n opacity: 0;\r\n transition: opacity 0.2s ease;\r\n\r\n /* when invisible we don't want it blocking clicks */\r\n pointer-events: none;\r\n}\r\n\r\n.modal-overlay.visible {\r\n opacity: 1;\r\n pointer-events: auto;\r\n}\r\n\r\n/* drawer-specific overlay adjustments */\r\n.modal-overlay.drawer-overlay {\r\n padding: 0; /* flush to edges for drawers */\r\n background: var(--overlay-strong);\r\n}\r\n\r\n.modal {\r\n position: absolute;\r\n z-index: 60001; /* keep modal above the overlay's stacking context children */\r\n background: var(--bg);\r\n min-width: 300px;\r\n border-radius: 2px;\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\r\n overflow: hidden;\r\n\r\n /* entry animation state */\r\n opacity: 0;\r\n transform: translateY(-20px) scale(0.85) rotate(-4deg);\r\n transition: opacity 0.25s ease, transform 0.25s ease;\r\n}\r\n\r\n.modal.visible {\r\n opacity: 1;\r\n transform: translateY(0) scale(1) rotate(0);\r\n}\r\n\r\n/* drawer uses a simple slide animation and adapts to the chosen edge */\r\n.drawer {\r\n position: absolute;\r\n z-index: 60001;\r\n background: var(--bg);\r\n min-width: 300px;\r\n border-radius: 2px;\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\r\n overflow: hidden;\r\n max-width: 100%;\r\n max-height: 100%;\r\n\r\n opacity: 0;\r\n transform: translate(0,0);\r\n transition: opacity var(--drawer-transition, 0.45s) ease,\r\n transform var(--drawer-transition, 0.45s) ease;\r\n}\r\n\r\n/* full height when coming from left/right, full width for top/bottom */\r\n.drawer.horizontal { height: 100%; }\r\n.drawer.vertical { width: 100%; }\r\n\r\n/* offscreen start positions by 100% of its own size */\r\n.drawer.horizontal.side-left { transform: translateX(-100%); }\r\n.drawer.horizontal.side-right { transform: translateX(100%); }\r\n.drawer.vertical.side-top { transform: translateY(-100%); }\r\n.drawer.vertical.side-bottom { transform: translateY(100%); }\r\n\r\n.drawer.visible {\r\n opacity: 1;\r\n}\r\n\r\n.drawer.visible.horizontal.side-left,\r\n.drawer.visible.horizontal.side-right {\r\n transform: translateX(0);\r\n}\r\n\r\n.drawer.visible.vertical.side-top,\r\n.drawer.visible.vertical.side-bottom {\r\n transform: translateY(0);\r\n}\r\n\r\n.modal-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 10px 12px;\r\n background: var(--header-bg);\r\n color: var(--header-color);\r\n cursor: grab\r\n}\r\n\r\n.modal-title {\r\n font-weight: 600\r\n}\r\n\r\n.modal-close {\r\n border: none;\r\n background: transparent;\r\n font-size: 18px;\r\n padding: 4px 8px\r\n}\r\n\r\n.modal-body {\r\n padding: 12px\r\n}\r\n\r\n@media (max-width:480px) {\r\n .modal {\r\n min-width: 260px\r\n }\r\n}"]}
|