trotl-modal 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +33 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +31 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
3
5
|
var React = require('react');
|
|
4
6
|
|
|
5
7
|
function Modal({
|
|
@@ -145,5 +147,35 @@ function Modal({
|
|
|
145
147
|
}, children)));
|
|
146
148
|
}
|
|
147
149
|
|
|
148
|
-
|
|
150
|
+
function styleInject(css, ref) {
|
|
151
|
+
if ( ref === void 0 ) ref = {};
|
|
152
|
+
var insertAt = ref.insertAt;
|
|
153
|
+
|
|
154
|
+
if (typeof document === 'undefined') { return; }
|
|
155
|
+
|
|
156
|
+
var head = document.head || document.getElementsByTagName('head')[0];
|
|
157
|
+
var style = document.createElement('style');
|
|
158
|
+
style.type = 'text/css';
|
|
159
|
+
|
|
160
|
+
if (insertAt === 'top') {
|
|
161
|
+
if (head.firstChild) {
|
|
162
|
+
head.insertBefore(style, head.firstChild);
|
|
163
|
+
} else {
|
|
164
|
+
head.appendChild(style);
|
|
165
|
+
}
|
|
166
|
+
} else {
|
|
167
|
+
head.appendChild(style);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (style.styleSheet) {
|
|
171
|
+
style.styleSheet.cssText = css;
|
|
172
|
+
} else {
|
|
173
|
+
style.appendChild(document.createTextNode(css));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
var css_248z = ":root{--overlay:rgba(0,0,0,.45);--bg:#fff}*{box-sizing:border-box}body{font-family:Inter,system-ui,Arial,sans-serif;margin:24px}.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;padding:40px;position:fixed;z-index:999}.modal{background:var(--bg);border-radius:2px;box-shadow:0 10px 30px rgba(0,0,0,.3);min-width:300px;overflow:hidden;position:absolute}.modal-header{align-items:center;background:#f5f5f5;cursor:grab;display:flex;justify-content:space-between;padding:10px 12px}.modal-title{font-weight:600}.modal-close{background:transparent;border:none;font-size:18px;padding:4px 8px}.modal-body{padding:12px}@media (max-width:480px){.modal{min-width:260px}}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUNFLHlCQUE4QixDQUM5QixTQUNGLENBRUEsRUFDRSxxQkFDRixDQUVBLEtBQ0UsNENBQWdELENBQ2hELFdBQ0YsQ0FFQSxVQUVFLGFBQWEsQ0FEYixlQUVGLENBRUEsT0FDRSxjQUNGLENBRUEsZUFLRSxzQkFBdUIsQ0FGdkIseUJBQTBCLENBQzFCLFlBQWEsQ0FGYixPQUFRLENBSVIsc0JBQXVCLENBQ3ZCLFlBQWEsQ0FOYixjQUFlLENBT2YsV0FDRixDQUVBLE9BRUUsb0JBQXFCLENBRXJCLGlCQUFrQixDQUNsQixxQ0FBMEMsQ0FGMUMsZUFBZ0IsQ0FHaEIsZUFBZSxDQUxmLGlCQU1GLENBRUEsY0FFRSxrQkFBbUIsQ0FHbkIsa0JBQW1CLENBQ25CLFdBQVcsQ0FMWCxZQUFhLENBRWIsNkJBQThCLENBQzlCLGlCQUdGLENBRUEsYUFDRSxlQUNGLENBRUEsYUFFRSxzQkFBdUIsQ0FEdkIsV0FBWSxDQUVaLGNBQWUsQ0FDZixlQUNGLENBRUEsWUFDRSxZQUNGLENBRUEseUJBQ0UsT0FDRSxlQUNGLENBQ0YiLCJmaWxlIjoiaW5kZXguY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOnJvb3Qge1xyXG4gIC0tb3ZlcmxheTogcmdiYSgwLCAwLCAwLCAwLjQ1KTtcclxuICAtLWJnOiAjZmZmXHJcbn1cclxuXHJcbioge1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3hcclxufVxyXG5cclxuYm9keSB7XHJcbiAgZm9udC1mYW1pbHk6IEludGVyLCBzeXN0ZW0tdWksIEFyaWFsLCBzYW5zLXNlcmlmO1xyXG4gIG1hcmdpbjogMjRweFxyXG59XHJcblxyXG4uYXBwLXJvb3Qge1xyXG4gIG1heC13aWR0aDogOTAwcHg7XHJcbiAgbWFyZ2luOiAwIGF1dG9cclxufVxyXG5cclxuYnV0dG9uIHtcclxuICBjdXJzb3I6IHBvaW50ZXJcclxufVxyXG5cclxuLm1vZGFsLW92ZXJsYXkge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBpbnNldDogMDtcclxuICBiYWNrZ3JvdW5kOiB2YXIoLS1vdmVybGF5KTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIHBhZGRpbmc6IDQwcHg7XHJcbiAgei1pbmRleDogOTk5XHJcbn1cclxuXHJcbi5tb2RhbCB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGJhY2tncm91bmQ6IHZhcigtLWJnKTtcclxuICBtaW4td2lkdGg6IDMwMHB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMyk7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlblxyXG59XHJcblxyXG4ubW9kYWwtaGVhZGVyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIHBhZGRpbmc6IDEwcHggMTJweDtcclxuICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xyXG4gIGN1cnNvcjogZ3JhYlxyXG59XHJcblxyXG4ubW9kYWwtdGl0bGUge1xyXG4gIGZvbnQtd2VpZ2h0OiA2MDBcclxufVxyXG5cclxuLm1vZGFsLWNsb3NlIHtcclxuICBib3JkZXI6IG5vbmU7XHJcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgZm9udC1zaXplOiAxOHB4O1xyXG4gIHBhZGRpbmc6IDRweCA4cHhcclxufVxyXG5cclxuLm1vZGFsLWJvZHkge1xyXG4gIHBhZGRpbmc6IDEycHhcclxufVxyXG5cclxuQG1lZGlhIChtYXgtd2lkdGg6NDgwcHgpIHtcclxuICAubW9kYWwge1xyXG4gICAgbWluLXdpZHRoOiAyNjBweFxyXG4gIH1cclxufSJdfQ== */";
|
|
178
|
+
styleInject(css_248z);
|
|
179
|
+
|
|
180
|
+
exports.default = Modal;
|
|
149
181
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/components/Modal.jsx"],"sourcesContent":["import React, {useEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({isOpen, onClose, title, children}){\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 draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n\r\n useEffect(()=>{\r\n if(isOpen){\r\n // center modal initially\r\n const el = modalRef.current\r\n if(el){\r\n const {innerWidth, innerHeight} = window\r\n const rect = el.getBoundingClientRect()\r\n setPos({x: (innerWidth - rect.width)/2, y: (innerHeight - rect.height)/2})\r\n }\r\n }\r\n },[isOpen])\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(!isOpen) return null\r\n\r\n return (\r\n <div className=\"modal-overlay\" onMouseDown={(e)=>{ if(e.target === e.currentTarget) onClose() }}>\r\n <div className=\"modal\" ref={modalRef} style={{left:`${pos.x}px`, top:`${pos.y}px`}}>\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","modalRef","useRef","headerRef","pos","setPos","useState","x","y","draggingRef","offsetRef","useEffect","el","current","innerWidth","innerHeight","window","rect","getBoundingClientRect","width","height","onMove","e","touches","preventDefault","clientX","clientY","desiredX","desiredY","maxX","maxY","clampedX","Math","min","max","clampedY","onUp","addEventListener","passive","removeEventListener","startDrag","document","body","style","userSelect","left","top","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","onTouchStart","onClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/components/Modal.jsx","../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["import React, {useEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({isOpen, onClose, title, children}){\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 draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n\r\n useEffect(()=>{\r\n if(isOpen){\r\n // center modal initially\r\n const el = modalRef.current\r\n if(el){\r\n const {innerWidth, innerHeight} = window\r\n const rect = el.getBoundingClientRect()\r\n setPos({x: (innerWidth - rect.width)/2, y: (innerHeight - rect.height)/2})\r\n }\r\n }\r\n },[isOpen])\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(!isOpen) return null\r\n\r\n return (\r\n <div className=\"modal-overlay\" onMouseDown={(e)=>{ if(e.target === e.currentTarget) onClose() }}>\r\n <div className=\"modal\" ref={modalRef} style={{left:`${pos.x}px`, top:`${pos.y}px`}}>\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","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":["Modal","isOpen","onClose","title","children","modalRef","useRef","headerRef","pos","setPos","useState","x","y","draggingRef","offsetRef","useEffect","el","current","innerWidth","innerHeight","window","rect","getBoundingClientRect","width","height","onMove","e","touches","preventDefault","clientX","clientY","desiredX","desiredY","maxX","maxY","clampedX","Math","min","max","clampedY","onUp","addEventListener","passive","removeEventListener","startDrag","document","body","style","userSelect","left","top","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","onTouchStart","onClick"],"mappings":"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","x_google_ignoreList":[1]}
|
package/dist/index.esm.js
CHANGED
|
@@ -143,5 +143,35 @@ function Modal({
|
|
|
143
143
|
}, children)));
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
|
|
146
|
+
function styleInject(css, ref) {
|
|
147
|
+
if ( ref === void 0 ) ref = {};
|
|
148
|
+
var insertAt = ref.insertAt;
|
|
149
|
+
|
|
150
|
+
if (typeof document === 'undefined') { return; }
|
|
151
|
+
|
|
152
|
+
var head = document.head || document.getElementsByTagName('head')[0];
|
|
153
|
+
var style = document.createElement('style');
|
|
154
|
+
style.type = 'text/css';
|
|
155
|
+
|
|
156
|
+
if (insertAt === 'top') {
|
|
157
|
+
if (head.firstChild) {
|
|
158
|
+
head.insertBefore(style, head.firstChild);
|
|
159
|
+
} else {
|
|
160
|
+
head.appendChild(style);
|
|
161
|
+
}
|
|
162
|
+
} else {
|
|
163
|
+
head.appendChild(style);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (style.styleSheet) {
|
|
167
|
+
style.styleSheet.cssText = css;
|
|
168
|
+
} else {
|
|
169
|
+
style.appendChild(document.createTextNode(css));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
var css_248z = ":root{--overlay:rgba(0,0,0,.45);--bg:#fff}*{box-sizing:border-box}body{font-family:Inter,system-ui,Arial,sans-serif;margin:24px}.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;padding:40px;position:fixed;z-index:999}.modal{background:var(--bg);border-radius:2px;box-shadow:0 10px 30px rgba(0,0,0,.3);min-width:300px;overflow:hidden;position:absolute}.modal-header{align-items:center;background:#f5f5f5;cursor:grab;display:flex;justify-content:space-between;padding:10px 12px}.modal-title{font-weight:600}.modal-close{background:transparent;border:none;font-size:18px;padding:4px 8px}.modal-body{padding:12px}@media (max-width:480px){.modal{min-width:260px}}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUNFLHlCQUE4QixDQUM5QixTQUNGLENBRUEsRUFDRSxxQkFDRixDQUVBLEtBQ0UsNENBQWdELENBQ2hELFdBQ0YsQ0FFQSxVQUVFLGFBQWEsQ0FEYixlQUVGLENBRUEsT0FDRSxjQUNGLENBRUEsZUFLRSxzQkFBdUIsQ0FGdkIseUJBQTBCLENBQzFCLFlBQWEsQ0FGYixPQUFRLENBSVIsc0JBQXVCLENBQ3ZCLFlBQWEsQ0FOYixjQUFlLENBT2YsV0FDRixDQUVBLE9BRUUsb0JBQXFCLENBRXJCLGlCQUFrQixDQUNsQixxQ0FBMEMsQ0FGMUMsZUFBZ0IsQ0FHaEIsZUFBZSxDQUxmLGlCQU1GLENBRUEsY0FFRSxrQkFBbUIsQ0FHbkIsa0JBQW1CLENBQ25CLFdBQVcsQ0FMWCxZQUFhLENBRWIsNkJBQThCLENBQzlCLGlCQUdGLENBRUEsYUFDRSxlQUNGLENBRUEsYUFFRSxzQkFBdUIsQ0FEdkIsV0FBWSxDQUVaLGNBQWUsQ0FDZixlQUNGLENBRUEsWUFDRSxZQUNGLENBRUEseUJBQ0UsT0FDRSxlQUNGLENBQ0YiLCJmaWxlIjoiaW5kZXguY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOnJvb3Qge1xyXG4gIC0tb3ZlcmxheTogcmdiYSgwLCAwLCAwLCAwLjQ1KTtcclxuICAtLWJnOiAjZmZmXHJcbn1cclxuXHJcbioge1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3hcclxufVxyXG5cclxuYm9keSB7XHJcbiAgZm9udC1mYW1pbHk6IEludGVyLCBzeXN0ZW0tdWksIEFyaWFsLCBzYW5zLXNlcmlmO1xyXG4gIG1hcmdpbjogMjRweFxyXG59XHJcblxyXG4uYXBwLXJvb3Qge1xyXG4gIG1heC13aWR0aDogOTAwcHg7XHJcbiAgbWFyZ2luOiAwIGF1dG9cclxufVxyXG5cclxuYnV0dG9uIHtcclxuICBjdXJzb3I6IHBvaW50ZXJcclxufVxyXG5cclxuLm1vZGFsLW92ZXJsYXkge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBpbnNldDogMDtcclxuICBiYWNrZ3JvdW5kOiB2YXIoLS1vdmVybGF5KTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIHBhZGRpbmc6IDQwcHg7XHJcbiAgei1pbmRleDogOTk5XHJcbn1cclxuXHJcbi5tb2RhbCB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGJhY2tncm91bmQ6IHZhcigtLWJnKTtcclxuICBtaW4td2lkdGg6IDMwMHB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMyk7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlblxyXG59XHJcblxyXG4ubW9kYWwtaGVhZGVyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIHBhZGRpbmc6IDEwcHggMTJweDtcclxuICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xyXG4gIGN1cnNvcjogZ3JhYlxyXG59XHJcblxyXG4ubW9kYWwtdGl0bGUge1xyXG4gIGZvbnQtd2VpZ2h0OiA2MDBcclxufVxyXG5cclxuLm1vZGFsLWNsb3NlIHtcclxuICBib3JkZXI6IG5vbmU7XHJcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgZm9udC1zaXplOiAxOHB4O1xyXG4gIHBhZGRpbmc6IDRweCA4cHhcclxufVxyXG5cclxuLm1vZGFsLWJvZHkge1xyXG4gIHBhZGRpbmc6IDEycHhcclxufVxyXG5cclxuQG1lZGlhIChtYXgtd2lkdGg6NDgwcHgpIHtcclxuICAubW9kYWwge1xyXG4gICAgbWluLXdpZHRoOiAyNjBweFxyXG4gIH1cclxufSJdfQ== */";
|
|
174
|
+
styleInject(css_248z);
|
|
175
|
+
|
|
176
|
+
export { Modal as default };
|
|
147
177
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/components/Modal.jsx"],"sourcesContent":["import React, {useEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({isOpen, onClose, title, children}){\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 draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n\r\n useEffect(()=>{\r\n if(isOpen){\r\n // center modal initially\r\n const el = modalRef.current\r\n if(el){\r\n const {innerWidth, innerHeight} = window\r\n const rect = el.getBoundingClientRect()\r\n setPos({x: (innerWidth - rect.width)/2, y: (innerHeight - rect.height)/2})\r\n }\r\n }\r\n },[isOpen])\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(!isOpen) return null\r\n\r\n return (\r\n <div className=\"modal-overlay\" onMouseDown={(e)=>{ if(e.target === e.currentTarget) onClose() }}>\r\n <div className=\"modal\" ref={modalRef} style={{left:`${pos.x}px`, top:`${pos.y}px`}}>\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","modalRef","useRef","headerRef","pos","setPos","useState","x","y","draggingRef","offsetRef","useEffect","el","current","innerWidth","innerHeight","window","rect","getBoundingClientRect","width","height","onMove","e","touches","preventDefault","clientX","clientY","desiredX","desiredY","maxX","maxY","clampedX","Math","min","max","clampedY","onUp","addEventListener","passive","removeEventListener","startDrag","document","body","style","userSelect","left","top","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","onTouchStart","onClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/Modal.jsx","../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["import React, {useEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({isOpen, onClose, title, children}){\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 draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n\r\n useEffect(()=>{\r\n if(isOpen){\r\n // center modal initially\r\n const el = modalRef.current\r\n if(el){\r\n const {innerWidth, innerHeight} = window\r\n const rect = el.getBoundingClientRect()\r\n setPos({x: (innerWidth - rect.width)/2, y: (innerHeight - rect.height)/2})\r\n }\r\n }\r\n },[isOpen])\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(!isOpen) return null\r\n\r\n return (\r\n <div className=\"modal-overlay\" onMouseDown={(e)=>{ if(e.target === e.currentTarget) onClose() }}>\r\n <div className=\"modal\" ref={modalRef} style={{left:`${pos.x}px`, top:`${pos.y}px`}}>\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","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":["Modal","isOpen","onClose","title","children","modalRef","useRef","headerRef","pos","setPos","useState","x","y","draggingRef","offsetRef","useEffect","el","current","innerWidth","innerHeight","window","rect","getBoundingClientRect","width","height","onMove","e","touches","preventDefault","clientX","clientY","desiredX","desiredY","maxX","maxY","clampedX","Math","min","max","clampedY","onUp","addEventListener","passive","removeEventListener","startDrag","document","body","style","userSelect","left","top","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","onTouchStart","onClick"],"mappings":"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","x_google_ignoreList":[1]}
|