trotl-modal 1.0.15 → 1.0.16
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/dist/index.css +2 -0
- package/dist/dist/index.css.map +1 -0
- package/dist/index.cjs.js +18 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.css +176 -2
- package/dist/index.esm.js +18 -2
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/dist/index.css.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
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);max-height:90vh;max-width:90vw;min-width:300px;opacity:0;overflow:hidden;overflow:auto;position:absolute;resize:both;transform:translateY(-20px) scale(.85) rotate(-4deg);transition:opacity .25s ease,transform .25s ease;z-index:60001}.modal.overflowing:after{bottom:8px;color:var(--header-color);content:"↘";cursor:se-resize;font-size:.75rem;pointer-events:none;position:absolute;right:8px}.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{max-height:80vh;overflow:auto;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,CAO1C,eAAgB,CADhB,cAAe,CARf,eAAgB,CAahB,SAAU,CAVV,eAAgB,CAIhB,aAAc,CAGd,iBAAkB,CAJlB,WAAY,CAQZ,oDAAsD,CACtD,gDAAoD,CAjBpD,aAkBF,CACA,yBAIE,UAAW,CAEX,yBAA0B,CAL1B,WAAY,CAMZ,gBAAiB,CAFjB,gBAAkB,CAGlB,mBAAoB,CANpB,iBAAkB,CAClB,SAMF,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,YAEE,eAAsB,CACtB,aAAA,CAFA,YAGF,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 /* make window resizable when content overflows */\r\n resize: both;\r\n overflow: auto;\r\n max-width: 90vw;\r\n max-height: 90vh;\r\n position: absolute; /* ensure positioning for ::after indicator */\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.modal.overflowing::after {\r\n content: '↘';\r\n position: absolute;\r\n right: 8px;\r\n bottom: 8px;\r\n font-size: 0.75rem;\r\n color: var(--header-color);\r\n cursor: se-resize;\r\n pointer-events: none;\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 max-height: calc(80vh);\r\n overflow: auto\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.cjs.js
CHANGED
|
@@ -53,6 +53,8 @@ function Modal({
|
|
|
53
53
|
x: 0,
|
|
54
54
|
y: 0
|
|
55
55
|
});
|
|
56
|
+
const bodyRef = React.useRef(null);
|
|
57
|
+
const [overflowing, setOverflowing] = React.useState(false);
|
|
56
58
|
// transition helpers -> keep component rendered during fade-out
|
|
57
59
|
const [rendered, setRendered] = React.useState(isOpen);
|
|
58
60
|
const [visible, setVisible] = React.useState(isOpen);
|
|
@@ -239,6 +241,19 @@ function Modal({
|
|
|
239
241
|
window.removeEventListener('touchend', onUpCleanup);
|
|
240
242
|
};
|
|
241
243
|
}, []);
|
|
244
|
+
|
|
245
|
+
// overflow detection for resize hint
|
|
246
|
+
React.useEffect(() => {
|
|
247
|
+
function checkOverflow() {
|
|
248
|
+
const el = bodyRef.current;
|
|
249
|
+
if (el) {
|
|
250
|
+
setOverflowing(el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
checkOverflow();
|
|
254
|
+
window.addEventListener('resize', checkOverflow);
|
|
255
|
+
return () => window.removeEventListener('resize', checkOverflow);
|
|
256
|
+
}, [children]);
|
|
242
257
|
if (!rendered) return null;
|
|
243
258
|
return /*#__PURE__*/React.createElement("div", {
|
|
244
259
|
className: "modal-overlay" + (visible ? " visible" : ""),
|
|
@@ -247,7 +262,7 @@ function Modal({
|
|
|
247
262
|
if (visible && e.target === e.currentTarget) onClose();
|
|
248
263
|
}
|
|
249
264
|
}, /*#__PURE__*/React.createElement("div", {
|
|
250
|
-
className: "modal" + (visible ? " visible" : ""),
|
|
265
|
+
className: "modal" + (visible ? " visible" : "") + (overflowing ? " overflowing" : ""),
|
|
251
266
|
"data-theme": theme,
|
|
252
267
|
ref: modalRef,
|
|
253
268
|
style: {
|
|
@@ -266,7 +281,8 @@ function Modal({
|
|
|
266
281
|
className: "modal-close",
|
|
267
282
|
onClick: onClose
|
|
268
283
|
}, "\xD7")), /*#__PURE__*/React.createElement("div", {
|
|
269
|
-
className: "modal-body"
|
|
284
|
+
className: "modal-body",
|
|
285
|
+
ref: bodyRef
|
|
270
286
|
}, children)));
|
|
271
287
|
}
|
|
272
288
|
|
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])\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, 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 const bodyRef = useRef(null)\r\n const [overflowing, setOverflowing] = useState(false)\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 // overflow detection for resize hint\r\n useEffect(() => {\r\n function checkOverflow() {\r\n const el = bodyRef.current\r\n if (el) {\r\n setOverflowing(\r\n el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth\r\n )\r\n }\r\n }\r\n checkOverflow()\r\n window.addEventListener('resize', checkOverflow)\r\n return () => window.removeEventListener('resize', checkOverflow)\r\n }, [children])\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\" : \"\") + (overflowing ? \" overflowing\" : \"\")}\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\" ref={bodyRef}>{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, 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","bodyRef","overflowing","setOverflowing","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","checkOverflow","scrollHeight","clientHeight","scrollWidth","clientWidth","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"],"mappings":"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"}
|
package/dist/index.css
CHANGED
|
@@ -1,2 +1,176 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
|
|
2
|
+
:root {
|
|
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
|
+
/* make window resizable when content overflows */
|
|
76
|
+
resize: both;
|
|
77
|
+
overflow: auto;
|
|
78
|
+
max-width: 90vw;
|
|
79
|
+
max-height: 90vh;
|
|
80
|
+
position: absolute; /* ensure positioning for ::after indicator */
|
|
81
|
+
|
|
82
|
+
/* entry animation state */
|
|
83
|
+
opacity: 0;
|
|
84
|
+
transform: translateY(-20px) scale(0.85) rotate(-4deg);
|
|
85
|
+
transition: opacity 0.25s ease, transform 0.25s ease;
|
|
86
|
+
}
|
|
87
|
+
.modal.overflowing::after {
|
|
88
|
+
content: '↘';
|
|
89
|
+
position: absolute;
|
|
90
|
+
right: 8px;
|
|
91
|
+
bottom: 8px;
|
|
92
|
+
font-size: 0.75rem;
|
|
93
|
+
color: var(--header-color);
|
|
94
|
+
cursor: se-resize;
|
|
95
|
+
pointer-events: none;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.modal.visible {
|
|
99
|
+
opacity: 1;
|
|
100
|
+
transform: translateY(0) scale(1) rotate(0);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* drawer uses a simple slide animation and adapts to the chosen edge */
|
|
104
|
+
.drawer {
|
|
105
|
+
position: absolute;
|
|
106
|
+
z-index: 60001;
|
|
107
|
+
background: var(--bg);
|
|
108
|
+
min-width: 300px;
|
|
109
|
+
border-radius: 2px;
|
|
110
|
+
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
|
|
111
|
+
overflow: hidden;
|
|
112
|
+
max-width: 100%;
|
|
113
|
+
max-height: 100%;
|
|
114
|
+
|
|
115
|
+
opacity: 0;
|
|
116
|
+
transform: translate(0,0);
|
|
117
|
+
transition: opacity var(--drawer-transition, 0.45s) ease,
|
|
118
|
+
transform var(--drawer-transition, 0.45s) ease;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* full height when coming from left/right, full width for top/bottom */
|
|
122
|
+
.drawer.horizontal { height: 100%; }
|
|
123
|
+
.drawer.vertical { width: 100%; }
|
|
124
|
+
|
|
125
|
+
/* offscreen start positions by 100% of its own size */
|
|
126
|
+
.drawer.horizontal.side-left { transform: translateX(-100%); }
|
|
127
|
+
.drawer.horizontal.side-right { transform: translateX(100%); }
|
|
128
|
+
.drawer.vertical.side-top { transform: translateY(-100%); }
|
|
129
|
+
.drawer.vertical.side-bottom { transform: translateY(100%); }
|
|
130
|
+
|
|
131
|
+
.drawer.visible {
|
|
132
|
+
opacity: 1;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.drawer.visible.horizontal.side-left,
|
|
136
|
+
.drawer.visible.horizontal.side-right {
|
|
137
|
+
transform: translateX(0);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.drawer.visible.vertical.side-top,
|
|
141
|
+
.drawer.visible.vertical.side-bottom {
|
|
142
|
+
transform: translateY(0);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.modal-header {
|
|
146
|
+
display: flex;
|
|
147
|
+
align-items: center;
|
|
148
|
+
justify-content: space-between;
|
|
149
|
+
padding: 10px 12px;
|
|
150
|
+
background: var(--header-bg);
|
|
151
|
+
color: var(--header-color);
|
|
152
|
+
cursor: grab
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.modal-title {
|
|
156
|
+
font-weight: 600
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.modal-close {
|
|
160
|
+
border: none;
|
|
161
|
+
background: transparent;
|
|
162
|
+
font-size: 18px;
|
|
163
|
+
padding: 4px 8px
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.modal-body {
|
|
167
|
+
padding: 12px;
|
|
168
|
+
max-height: calc(80vh);
|
|
169
|
+
overflow: auto
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
@media (max-width:480px) {
|
|
173
|
+
.modal {
|
|
174
|
+
min-width: 260px
|
|
175
|
+
}
|
|
176
|
+
}
|
package/dist/index.esm.js
CHANGED
|
@@ -49,6 +49,8 @@ function Modal({
|
|
|
49
49
|
x: 0,
|
|
50
50
|
y: 0
|
|
51
51
|
});
|
|
52
|
+
const bodyRef = useRef(null);
|
|
53
|
+
const [overflowing, setOverflowing] = useState(false);
|
|
52
54
|
// transition helpers -> keep component rendered during fade-out
|
|
53
55
|
const [rendered, setRendered] = useState(isOpen);
|
|
54
56
|
const [visible, setVisible] = useState(isOpen);
|
|
@@ -235,6 +237,19 @@ function Modal({
|
|
|
235
237
|
window.removeEventListener('touchend', onUpCleanup);
|
|
236
238
|
};
|
|
237
239
|
}, []);
|
|
240
|
+
|
|
241
|
+
// overflow detection for resize hint
|
|
242
|
+
useEffect(() => {
|
|
243
|
+
function checkOverflow() {
|
|
244
|
+
const el = bodyRef.current;
|
|
245
|
+
if (el) {
|
|
246
|
+
setOverflowing(el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
checkOverflow();
|
|
250
|
+
window.addEventListener('resize', checkOverflow);
|
|
251
|
+
return () => window.removeEventListener('resize', checkOverflow);
|
|
252
|
+
}, [children]);
|
|
238
253
|
if (!rendered) return null;
|
|
239
254
|
return /*#__PURE__*/React.createElement("div", {
|
|
240
255
|
className: "modal-overlay" + (visible ? " visible" : ""),
|
|
@@ -243,7 +258,7 @@ function Modal({
|
|
|
243
258
|
if (visible && e.target === e.currentTarget) onClose();
|
|
244
259
|
}
|
|
245
260
|
}, /*#__PURE__*/React.createElement("div", {
|
|
246
|
-
className: "modal" + (visible ? " visible" : ""),
|
|
261
|
+
className: "modal" + (visible ? " visible" : "") + (overflowing ? " overflowing" : ""),
|
|
247
262
|
"data-theme": theme,
|
|
248
263
|
ref: modalRef,
|
|
249
264
|
style: {
|
|
@@ -262,7 +277,8 @@ function Modal({
|
|
|
262
277
|
className: "modal-close",
|
|
263
278
|
onClick: onClose
|
|
264
279
|
}, "\xD7")), /*#__PURE__*/React.createElement("div", {
|
|
265
|
-
className: "modal-body"
|
|
280
|
+
className: "modal-body",
|
|
281
|
+
ref: bodyRef
|
|
266
282
|
}, children)));
|
|
267
283
|
}
|
|
268
284
|
|
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])\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, 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 const bodyRef = useRef(null)\r\n const [overflowing, setOverflowing] = useState(false)\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 // overflow detection for resize hint\r\n useEffect(() => {\r\n function checkOverflow() {\r\n const el = bodyRef.current\r\n if (el) {\r\n setOverflowing(\r\n el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth\r\n )\r\n }\r\n }\r\n checkOverflow()\r\n window.addEventListener('resize', checkOverflow)\r\n return () => window.removeEventListener('resize', checkOverflow)\r\n }, [children])\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\" : \"\") + (overflowing ? \" overflowing\" : \"\")}\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\" ref={bodyRef}>{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, 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","bodyRef","overflowing","setOverflowing","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","checkOverflow","scrollHeight","clientHeight","scrollWidth","clientWidth","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"],"mappings":"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"}
|
package/package.json
CHANGED
package/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,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}"]}
|