trotl-modal 1.0.10 → 1.0.12

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.
@@ -1,2 +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);min-width:300px;opacity:0;overflow:hidden;position:absolute;transform:translateY(-20px) scale(.85) rotate(-4deg);transition:opacity .25s ease,transform .25s ease;z-index:60001}.modal.visible{opacity:1;transform:translateY(0) scale(1) rotate(0)}.drawer{background:var(--bg);border-radius:2px;box-shadow:0 10px 30px rgba(0,0,0,.3);max-height:100%;max-width:100%;min-width:300px;opacity:0;overflow:hidden;position:absolute;transform:translate(0);transition:opacity var(--drawer-transition,.45s) ease,transform var(--drawer-transition,.45s) ease;z-index:60001}.drawer.horizontal{height:100%}.drawer.vertical{width:100%}.drawer.horizontal.side-left{transform:translateX(-100%)}.drawer.horizontal.side-right{transform:translateX(100%)}.drawer.vertical.side-top{transform:translateY(-100%)}.drawer.vertical.side-bottom{transform:translateY(100%)}.drawer.visible{opacity:1}.drawer.visible.horizontal.side-left,.drawer.visible.horizontal.side-right{transform:translateX(0)}.drawer.visible.vertical.side-bottom,.drawer.visible.vertical.side-top{transform:translateY(0)}.modal-header{align-items:center;background:var(--header-bg);color:var(--header-color);cursor:grab;display:flex;justify-content:space-between;padding:10px 12px}.modal-title{font-weight:600}.modal-close{background:transparent;border:none;font-size:18px;padding:4px 8px}.modal-body{padding:12px}@media (max-width:480px){.modal{min-width:260px}}
1
+ :root{--overlay:rgba(0,0,0,.35);--overlay-strong:rgba(0,0,0,.6);--bg:#fff;--header-bg:#f5f5f5;--header-color:#000;--modal-z:60000}[data-theme=light]{--overlay:rgba(0,0,0,.35);--overlay-strong:rgba(0,0,0,.6);--bg:#fff;--header-bg:#f5f5f5;--header-color:#000}[data-theme=dark]{--overlay:rgba(0,0,0,.6);--overlay-strong:rgba(0,0,0,.85);--bg:#2c2c2c;--header-bg:#3a3a3a;--header-color:#f1f1f1}.app-root{margin:0 auto;max-width:900px}button{cursor:pointer}.modal-overlay{align-items:flex-start;display:flex;inset:0;justify-content:center;opacity:0;padding:40px;pointer-events:none;position:fixed;transition:opacity .2s ease;z-index:60000}.modal-overlay.visible{opacity:1;pointer-events:auto}.modal-overlay.drawer-overlay{background:var(--overlay-strong);padding:0}.modal{background:var(--bg);border-radius:2px;box-shadow:0 10px 30px rgba(0,0,0,.3);min-width:300px;opacity:0;overflow:hidden;position:absolute;transform:translateY(-20px) scale(.85) rotate(-4deg);transition:opacity .25s ease,transform .25s ease;z-index:60001}.modal.visible{opacity:1;transform:translateY(0) scale(1) rotate(0)}.drawer{background:var(--bg);border-radius:2px;box-shadow:0 10px 30px rgba(0,0,0,.3);max-height:100%;max-width:100%;min-width:300px;opacity:0;overflow:hidden;position:absolute;transform:translate(0);transition:opacity var(--drawer-transition,.45s) ease,transform var(--drawer-transition,.45s) ease;z-index:60001}.drawer.horizontal{height:100%}.drawer.vertical{width:100%}.drawer.horizontal.side-left{transform:translateX(-100%)}.drawer.horizontal.side-right{transform:translateX(100%)}.drawer.vertical.side-top{transform:translateY(-100%)}.drawer.vertical.side-bottom{transform:translateY(100%)}.drawer.visible{opacity:1}.drawer.visible.horizontal.side-left,.drawer.visible.horizontal.side-right{transform:translateX(0)}.drawer.visible.vertical.side-bottom,.drawer.visible.vertical.side-top{transform:translateY(0)}.modal-header{align-items:center;background:var(--header-bg);color:var(--header-color);cursor:grab;display:flex;justify-content:space-between;padding:10px 12px}.modal-title{font-weight:600}.modal-close{background:transparent;border:none;font-size:18px;padding:4px 8px}.modal-body{padding:12px}@media (max-width:480px){.modal{min-width:260px}}
2
2
  /*# sourceMappingURL=index.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["index.css"],"names":[],"mappings":"AACA,MAEE,yBAA2B,CAC3B,+BAAiC,CACjC,SAAa,CACb,mBAAoB,CACpB,mBAAoB,CACpB,eACF,CAGA,mBACE,yBAA2B,CAC3B,+BAAiC,CACjC,SAAa,CACb,mBAAoB,CACpB,mBACF,CAEA,kBACE,wBAA0B,CAC1B,gCAAkC,CAClC,YAAa,CACb,mBAAoB,CACpB,sBACF,CAEA,UAEE,aAAA,CADA,eAEF,CAEA,OACE,cACF,CAGA,eAKE,sBAAuB,CAFvB,yBAA0B,CAC1B,YAAa,CAFb,OAAQ,CAIR,sBAAuB,CAGvB,SAAU,CAFV,YAAa,CAMb,mBAAoB,CAZpB,cAAe,CASf,2BAA6B,CAF7B,aAMF,CAEA,uBACE,SAAU,CACV,mBACF,CAGA,8BAEE,gCAAiC,CADjC,SAEF,CAEA,OAGE,oBAAqB,CAErB,iBAAkB,CAClB,qCAA0C,CAF1C,eAAgB,CAMhB,SAAU,CAHV,eAAgB,CANhB,iBAAkB,CAUlB,oDAAsD,CACtD,gDAAoD,CAVpD,aAWF,CAEA,eACE,SAAU,CACV,0CACF,CAGA,QAGE,oBAAqB,CAErB,iBAAkB,CAClB,qCAA0C,CAG1C,eAAgB,CADhB,cAAe,CAJf,eAAgB,CAOhB,SAAU,CAJV,eAAgB,CANhB,iBAAkB,CAWlB,sBAAyB,CACzB,kGACgD,CAZhD,aAaF,CAGA,mBAAqB,WAAc,CACnC,iBAAmB,UAAa,CAGhC,6BAAgC,2BAA8B,CAC9D,8BAAgC,0BAA6B,CAC7D,0BAAgC,2BAA8B,CAC9D,6BAAgC,0BAA6B,CAE7D,gBACE,SACF,CAEA,2EAEE,uBACF,CAEA,uEAEE,uBACF,CAEA,cAEE,kBAAmB,CAGnB,2BAA4B,CAC5B,yBAA0B,CAC1B,WAAA,CANA,YAAa,CAEb,6BAA8B,CAC9B,iBAIF,CAEA,aACE,eACF,CAEA,aAEE,sBAAuB,CADvB,WAAY,CAEZ,cAAe,CACf,eACF,CAEA,YACE,YACF,CAEA,yBACE,OACE,eACF,CACF","file":"index.css","sourcesContent":["\r\n:root {\r\n /* sensible defaults so modal isn't transparent when used standalone */\r\n --overlay: rgba(0,0,0,0.35);\r\n --overlay-strong: rgba(0,0,0,0.6);\r\n --bg: #ffffff;\r\n --header-bg: #f5f5f5;\r\n --header-color: #000;\r\n --modal-z: 60000;\r\n}\r\n\r\n/* theme overrides (use data-theme to scope) */\r\n[data-theme='light'] {\r\n --overlay: rgba(0,0,0,0.35);\r\n --overlay-strong: rgba(0,0,0,0.6);\r\n --bg: #ffffff;\r\n --header-bg: #f5f5f5;\r\n --header-color: #000;\r\n}\r\n\r\n[data-theme='dark'] {\r\n --overlay: rgba(0,0,0,0.6);\r\n --overlay-strong: rgba(0,0,0,0.85);\r\n --bg: #2c2c2c;\r\n --header-bg: #3a3a3a;\r\n --header-color: #f1f1f1;\r\n}\r\n\r\n.app-root {\r\n max-width: 900px;\r\n margin: 0 auto\r\n}\r\n\r\nbutton {\r\n cursor: pointer\r\n}\r\n\r\n/* ensure modal overlay sits above other UI (other packages use very large z-index values) */\r\n.modal-overlay {\r\n position: fixed;\r\n inset: 0;\r\n background: var(--overlay);\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: center;\r\n padding: 40px;\r\n z-index: 60000; /* raised from 999 */\r\n opacity: 0;\r\n transition: opacity 0.2s ease;\r\n\r\n /* when invisible we don't want it blocking clicks */\r\n pointer-events: none;\r\n}\r\n\r\n.modal-overlay.visible {\r\n opacity: 1;\r\n pointer-events: auto;\r\n}\r\n\r\n/* drawer-specific overlay adjustments */\r\n.modal-overlay.drawer-overlay {\r\n padding: 0; /* flush to edges for drawers */\r\n background: var(--overlay-strong);\r\n}\r\n\r\n.modal {\r\n position: absolute;\r\n z-index: 60001; /* keep modal above the overlay's stacking context children */\r\n background: var(--bg);\r\n min-width: 300px;\r\n border-radius: 2px;\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\r\n overflow: hidden;\r\n\r\n /* entry animation state */\r\n opacity: 0;\r\n transform: translateY(-20px) scale(0.85) rotate(-4deg);\r\n transition: opacity 0.25s ease, transform 0.25s ease;\r\n}\r\n\r\n.modal.visible {\r\n opacity: 1;\r\n transform: translateY(0) scale(1) rotate(0);\r\n}\r\n\r\n/* drawer uses a simple slide animation and adapts to the chosen edge */\r\n.drawer {\r\n position: absolute;\r\n z-index: 60001;\r\n background: var(--bg);\r\n min-width: 300px;\r\n border-radius: 2px;\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\r\n overflow: hidden;\r\n max-width: 100%;\r\n max-height: 100%;\r\n\r\n opacity: 0;\r\n transform: translate(0,0);\r\n transition: opacity var(--drawer-transition, 0.45s) ease,\r\n transform var(--drawer-transition, 0.45s) ease;\r\n}\r\n\r\n/* full height when coming from left/right, full width for top/bottom */\r\n.drawer.horizontal { height: 100%; }\r\n.drawer.vertical { width: 100%; }\r\n\r\n/* offscreen start positions by 100% of its own size */\r\n.drawer.horizontal.side-left { transform: translateX(-100%); }\r\n.drawer.horizontal.side-right { transform: translateX(100%); }\r\n.drawer.vertical.side-top { transform: translateY(-100%); }\r\n.drawer.vertical.side-bottom { transform: translateY(100%); }\r\n\r\n.drawer.visible {\r\n opacity: 1;\r\n}\r\n\r\n.drawer.visible.horizontal.side-left,\r\n.drawer.visible.horizontal.side-right {\r\n transform: translateX(0);\r\n}\r\n\r\n.drawer.visible.vertical.side-top,\r\n.drawer.visible.vertical.side-bottom {\r\n transform: translateY(0);\r\n}\r\n\r\n.modal-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 10px 12px;\r\n background: var(--header-bg);\r\n color: var(--header-color);\r\n cursor: grab\r\n}\r\n\r\n.modal-title {\r\n font-weight: 600\r\n}\r\n\r\n.modal-close {\r\n border: none;\r\n background: transparent;\r\n font-size: 18px;\r\n padding: 4px 8px\r\n}\r\n\r\n.modal-body {\r\n padding: 12px\r\n}\r\n\r\n@media (max-width:480px) {\r\n .modal {\r\n min-width: 260px\r\n }\r\n}"]}
1
+ {"version":3,"sources":["index.css"],"names":[],"mappings":"AACA,MAEE,yBAA2B,CAC3B,+BAAiC,CACjC,SAAa,CACb,mBAAoB,CACpB,mBAAoB,CACpB,eACF,CAGA,mBACE,yBAA2B,CAC3B,+BAAiC,CACjC,SAAa,CACb,mBAAoB,CACpB,mBACF,CAEA,kBACE,wBAA0B,CAC1B,gCAAkC,CAClC,YAAa,CACb,mBAAoB,CACpB,sBACF,CAEA,UAEE,aAAA,CADA,eAEF,CAEA,OACE,cACF,CAGA,eAKE,sBAAuB,CADvB,YAAa,CAFb,OAAQ,CAIR,sBAAuB,CAGvB,SAAU,CAFV,YAAa,CAMb,mBAAoB,CAZpB,cAAe,CASf,2BAA6B,CAF7B,aAMF,CAEA,uBACE,SAAU,CACV,mBACF,CAGA,8BAEE,gCAAiC,CADjC,SAEF,CAEA,OAGE,oBAAqB,CAErB,iBAAkB,CAClB,qCAA0C,CAF1C,eAAgB,CAMhB,SAAU,CAHV,eAAgB,CANhB,iBAAkB,CAUlB,oDAAsD,CACtD,gDAAoD,CAVpD,aAWF,CAEA,eACE,SAAU,CACV,0CACF,CAGA,QAGE,oBAAqB,CAErB,iBAAkB,CAClB,qCAA0C,CAG1C,eAAgB,CADhB,cAAe,CAJf,eAAgB,CAOhB,SAAU,CAJV,eAAgB,CANhB,iBAAkB,CAWlB,sBAAyB,CACzB,kGACgD,CAZhD,aAaF,CAGA,mBAAqB,WAAc,CACnC,iBAAmB,UAAa,CAGhC,6BAAgC,2BAA8B,CAC9D,8BAAgC,0BAA6B,CAC7D,0BAAgC,2BAA8B,CAC9D,6BAAgC,0BAA6B,CAE7D,gBACE,SACF,CAEA,2EAEE,uBACF,CAEA,uEAEE,uBACF,CAEA,cAEE,kBAAmB,CAGnB,2BAA4B,CAC5B,yBAA0B,CAC1B,WAAA,CANA,YAAa,CAEb,6BAA8B,CAC9B,iBAIF,CAEA,aACE,eACF,CAEA,aAEE,sBAAuB,CADvB,WAAY,CAEZ,cAAe,CACf,eACF,CAEA,YACE,YACF,CAEA,yBACE,OACE,eACF,CACF","file":"index.css","sourcesContent":["\r\n:root {\r\n /* sensible defaults so modal isn't transparent when used standalone */\r\n --overlay: rgba(0,0,0,0.35);\r\n --overlay-strong: rgba(0,0,0,0.6);\r\n --bg: #ffffff;\r\n --header-bg: #f5f5f5;\r\n --header-color: #000;\r\n --modal-z: 60000;\r\n}\r\n\r\n/* theme overrides (use data-theme to scope) */\r\n[data-theme='light'] {\r\n --overlay: rgba(0,0,0,0.35);\r\n --overlay-strong: rgba(0,0,0,0.6);\r\n --bg: #ffffff;\r\n --header-bg: #f5f5f5;\r\n --header-color: #000;\r\n}\r\n\r\n[data-theme='dark'] {\r\n --overlay: rgba(0,0,0,0.6);\r\n --overlay-strong: rgba(0,0,0,0.85);\r\n --bg: #2c2c2c;\r\n --header-bg: #3a3a3a;\r\n --header-color: #f1f1f1;\r\n}\r\n\r\n.app-root {\r\n max-width: 900px;\r\n margin: 0 auto\r\n}\r\n\r\nbutton {\r\n cursor: pointer\r\n}\r\n\r\n/* ensure modal overlay sits above other UI (other packages use very large z-index values) */\r\n.modal-overlay {\r\n position: fixed;\r\n inset: 0;\r\n /* background: var(--overlay); */\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: center;\r\n padding: 40px;\r\n z-index: 60000; /* raised from 999 */\r\n opacity: 0;\r\n transition: opacity 0.2s ease;\r\n\r\n /* when invisible we don't want it blocking clicks */\r\n pointer-events: none;\r\n}\r\n\r\n.modal-overlay.visible {\r\n opacity: 1;\r\n pointer-events: auto;\r\n}\r\n\r\n/* drawer-specific overlay adjustments */\r\n.modal-overlay.drawer-overlay {\r\n padding: 0; /* flush to edges for drawers */\r\n background: var(--overlay-strong);\r\n}\r\n\r\n.modal {\r\n position: absolute;\r\n z-index: 60001; /* keep modal above the overlay's stacking context children */\r\n background: var(--bg);\r\n min-width: 300px;\r\n border-radius: 2px;\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\r\n overflow: hidden;\r\n\r\n /* entry animation state */\r\n opacity: 0;\r\n transform: translateY(-20px) scale(0.85) rotate(-4deg);\r\n transition: opacity 0.25s ease, transform 0.25s ease;\r\n}\r\n\r\n.modal.visible {\r\n opacity: 1;\r\n transform: translateY(0) scale(1) rotate(0);\r\n}\r\n\r\n/* drawer uses a simple slide animation and adapts to the chosen edge */\r\n.drawer {\r\n position: absolute;\r\n z-index: 60001;\r\n background: var(--bg);\r\n min-width: 300px;\r\n border-radius: 2px;\r\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\r\n overflow: hidden;\r\n max-width: 100%;\r\n max-height: 100%;\r\n\r\n opacity: 0;\r\n transform: translate(0,0);\r\n transition: opacity var(--drawer-transition, 0.45s) ease,\r\n transform var(--drawer-transition, 0.45s) ease;\r\n}\r\n\r\n/* full height when coming from left/right, full width for top/bottom */\r\n.drawer.horizontal { height: 100%; }\r\n.drawer.vertical { width: 100%; }\r\n\r\n/* offscreen start positions by 100% of its own size */\r\n.drawer.horizontal.side-left { transform: translateX(-100%); }\r\n.drawer.horizontal.side-right { transform: translateX(100%); }\r\n.drawer.vertical.side-top { transform: translateY(-100%); }\r\n.drawer.vertical.side-bottom { transform: translateY(100%); }\r\n\r\n.drawer.visible {\r\n opacity: 1;\r\n}\r\n\r\n.drawer.visible.horizontal.side-left,\r\n.drawer.visible.horizontal.side-right {\r\n transform: translateX(0);\r\n}\r\n\r\n.drawer.visible.vertical.side-top,\r\n.drawer.visible.vertical.side-bottom {\r\n transform: translateY(0);\r\n}\r\n\r\n.modal-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 10px 12px;\r\n background: var(--header-bg);\r\n color: var(--header-color);\r\n cursor: grab\r\n}\r\n\r\n.modal-title {\r\n font-weight: 600\r\n}\r\n\r\n.modal-close {\r\n border: none;\r\n background: transparent;\r\n font-size: 18px;\r\n padding: 4px 8px\r\n}\r\n\r\n.modal-body {\r\n padding: 12px\r\n}\r\n\r\n@media (max-width:480px) {\r\n .modal {\r\n min-width: 260px\r\n }\r\n}"]}
package/dist/index.cjs.js CHANGED
@@ -73,6 +73,18 @@ function Modal({
73
73
  }
74
74
  }, [isOpen, rendered]);
75
75
 
76
+ // ESC key handler
77
+ React.useEffect(() => {
78
+ if (!isOpen) return;
79
+ function handleEsc(e) {
80
+ if (e.key === 'Escape') {
81
+ onClose();
82
+ }
83
+ }
84
+ window.addEventListener('keydown', handleEsc);
85
+ return () => window.removeEventListener('keydown', handleEsc);
86
+ }, [isOpen, onClose]);
87
+
76
88
  // calculate coordinates synchronously before paint so the dialog doesn't
77
89
  // jump from {0,0} when it first renders. using useLayoutEffect ensures the
78
90
  // position is available when visible transitions start.
@@ -348,6 +360,18 @@ function Drawer({
348
360
  }
349
361
  return 450;
350
362
  }
363
+
364
+ // ESC key handler
365
+ React.useEffect(() => {
366
+ if (!isOpen) return;
367
+ function handleEsc(e) {
368
+ if (e.key === 'Escape') {
369
+ onClose();
370
+ }
371
+ }
372
+ window.addEventListener('keydown', handleEsc);
373
+ return () => window.removeEventListener('keydown', handleEsc);
374
+ }, [isOpen, onClose]);
351
375
  React.useEffect(() => {
352
376
  if (isOpen) {
353
377
  setRendered(true);
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/components/Modal.jsx","../src/components/Drawer.jsx"],"sourcesContent":["import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'center',\r\n theme = 'light' // new prop: 'light' or 'dark'\r\n}){\r\n const modalRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n // explicit coords – treat as pixels from top-left of modal\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n // transition helpers -> keep component rendered during fade-out\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n // when isOpen changes, trigger fade in / fade out\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n // next frame to allow initial render before adding class\r\n requestAnimationFrame(() => {\r\n setVisible(true)\r\n })\r\n } else if (rendered) {\r\n setVisible(false)\r\n // remove from DOM after transition duration\r\n const timeout = setTimeout(() => setRendered(false), 200)\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered])\r\n\r\n // 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 useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n setShrink(null)\r\n requestAnimationFrame(() => setVisible(true))\r\n } else if (rendered) {\r\n setVisible(false)\r\n const timeout = setTimeout(\r\n () => setRendered(false),\r\n toMs(transitionDuration)\r\n )\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered, transitionDuration])\r\n\r\n useEffect(() => {\r\n if (isOpen) setShrink(null)\r\n }, [isOpen, children, orientation])\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || !rendered) return\r\n const el = drawerRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const effectiveWidth = orientation === 'horizontal' && shrink === true\r\n ? Math.round(innerWidth * 0.3)\r\n : rect.width\r\n const effectiveHeight = orientation === 'vertical' && shrink === true\r\n ? Math.round(innerHeight * 0.3)\r\n : rect.height\r\n const maxX = Math.max(0, innerWidth - effectiveWidth)\r\n const maxY = Math.max(0, innerHeight - effectiveHeight)\r\n const centerX = (innerWidth - effectiveWidth) / 2\r\n const centerY = (innerHeight - effectiveHeight) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'left':\r\n x = 0; y = 0; break\r\n case 'right':\r\n x = maxX; y = 0; break\r\n case 'top':\r\n x = 0; y = 0; break\r\n case 'bottom':\r\n x = 0; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered, orientation, shrink])\r\n\r\n // shrink measurement – check dimensions after render\r\n useLayoutEffect(() => {\r\n if (!rendered || !drawerRef.current) return\r\n if (!isOpen) return\r\n if (shrink !== null) return\r\n const el = drawerRef.current\r\n const { innerWidth, innerHeight } = window\r\n if (orientation === 'horizontal') {\r\n setShrink(el.scrollWidth < innerWidth * 0.3)\r\n } else {\r\n setShrink(el.scrollHeight < innerHeight * 0.3)\r\n }\r\n }, [rendered, visible, children, orientation, shrink])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = drawerRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay drawer-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\r\n `drawer ${orientation} side-${side}` + (visible ? \" visible\" : \"\")\r\n }\r\n data-theme={theme}\r\n ref={drawerRef}\r\n style={{\r\n left:`${pos.x}px`,\r\n top:`${pos.y}px`,\r\n transformOrigin: origin,\r\n '--drawer-transition': transitionDuration,\r\n ...(orientation === 'horizontal' ? {height: '100%'} : {width: '100%'}),\r\n ...(shrink === true\r\n ? (orientation === 'horizontal'\r\n ? {width: '30vw'}\r\n : {height: '30vh'})\r\n : {}),\r\n }}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["Modal","isOpen","onClose","title","children","initialPosition","theme","modalRef","useRef","headerRef","pos","setPos","useState","x","y","origin","setOrigin","computeOrigin","left","top","draggingRef","offsetRef","rendered","setRendered","visible","setVisible","useEffect","requestAnimationFrame","timeout","setTimeout","clearTimeout","useLayoutEffect","el","current","innerWidth","innerHeight","window","rect","getBoundingClientRect","maxX","Math","max","width","maxY","height","centerX","centerY","min","onMove","e","touches","preventDefault","clientX","clientY","desiredX","desiredY","clampedX","clampedY","onUp","addEventListener","passive","removeEventListener","startDrag","document","body","style","userSelect","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","transformOrigin","onTouchStart","onClick","Drawer","transitionDuration","drawerRef","detectOrientation","includes","detectSide","orientation","side","shrink","setShrink","toMs","duration","trimmed","trim","endsWith","val","Number","slice","isFinite","round","effectiveWidth","effectiveHeight","scrollWidth","scrollHeight"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/components/Modal.jsx","../src/components/Drawer.jsx"],"sourcesContent":["import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'center',\r\n theme = 'light' // new prop: 'light' or 'dark'\r\n}){\r\n const modalRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n // explicit coords – treat as pixels from top-left of modal\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n // transition helpers -> keep component rendered during fade-out\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n // when isOpen changes, trigger fade in / fade out\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n // next frame to allow initial render before adding class\r\n requestAnimationFrame(() => {\r\n setVisible(true)\r\n })\r\n } else if (rendered) {\r\n setVisible(false)\r\n // remove from DOM after transition duration\r\n const timeout = setTimeout(() => setRendered(false), 200)\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered])\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n // calculate coordinates synchronously before paint so the dialog doesn't\r\n // jump from {0,0} when it first renders. using useLayoutEffect ensures the\r\n // position is available when visible transitions start.\r\n useLayoutEffect(() => {\r\n // only position when the modal is actually rendered & opening\r\n if (!isOpen || !rendered) return\r\n const el = modalRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const maxX = Math.max(0, innerWidth - rect.width)\r\n const maxY = Math.max(0, innerHeight - rect.height)\r\n const centerX = (innerWidth - rect.width) / 2\r\n const centerY = (innerHeight - rect.height) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n // clamp to viewport\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n // compute desired position\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n // clamp to viewport so it can't be dragged fully offscreen\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = modalRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n // ensure we re-enable selection when drag ends\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n // final clamp to ensure modal stays visible if window size changed\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\"modal\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n ref={modalRef}\r\n style={{left:`${pos.x}px`, top:`${pos.y}px`, transformOrigin: origin}}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Drawer({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'left',\r\n transitionDuration = '0.45s',\r\n theme = 'light' // support light/dark themes\r\n}){\r\n const drawerRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n // determine orientation (horizontal/vertical) and simple side for animation\r\n function detectOrientation(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left') || pos.includes('right')) return 'horizontal'\r\n if(pos.includes('top') || pos.includes('bottom')) return 'vertical'\r\n }\r\n // fall back to horizontal for coordinate objects\r\n return 'horizontal'\r\n }\r\n function detectSide(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left')) return 'left'\r\n if(pos.includes('right')) return 'right'\r\n if(pos.includes('top')) return 'top'\r\n if(pos.includes('bottom')) return 'bottom'\r\n }\r\n return 'left'\r\n }\r\n const orientation = detectOrientation(initialPosition)\r\n const side = detectSide(initialPosition)\r\n const [shrink, setShrink] = useState(null)\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right': return '100% 50%'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left': return '0 50%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n function toMs(duration){\r\n if (typeof duration !== 'string') return 450\r\n const trimmed = duration.trim()\r\n if (trimmed.endsWith('ms')) {\r\n const val = Number(trimmed.slice(0, -2))\r\n return Number.isFinite(val) ? val : 450\r\n }\r\n if (trimmed.endsWith('s')) {\r\n const val = Number(trimmed.slice(0, -1))\r\n return Number.isFinite(val) ? Math.round(val * 1000) : 450\r\n }\r\n return 450\r\n }\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n setShrink(null)\r\n requestAnimationFrame(() => setVisible(true))\r\n } else if (rendered) {\r\n setVisible(false)\r\n const timeout = setTimeout(\r\n () => setRendered(false),\r\n toMs(transitionDuration)\r\n )\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered, transitionDuration])\r\n\r\n useEffect(() => {\r\n if (isOpen) setShrink(null)\r\n }, [isOpen, children, orientation])\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || !rendered) return\r\n const el = drawerRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const effectiveWidth = orientation === 'horizontal' && shrink === true\r\n ? Math.round(innerWidth * 0.3)\r\n : rect.width\r\n const effectiveHeight = orientation === 'vertical' && shrink === true\r\n ? Math.round(innerHeight * 0.3)\r\n : rect.height\r\n const maxX = Math.max(0, innerWidth - effectiveWidth)\r\n const maxY = Math.max(0, innerHeight - effectiveHeight)\r\n const centerX = (innerWidth - effectiveWidth) / 2\r\n const centerY = (innerHeight - effectiveHeight) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'left':\r\n x = 0; y = 0; break\r\n case 'right':\r\n x = maxX; y = 0; break\r\n case 'top':\r\n x = 0; y = 0; break\r\n case 'bottom':\r\n x = 0; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered, orientation, shrink])\r\n\r\n // shrink measurement – check dimensions after render\r\n useLayoutEffect(() => {\r\n if (!rendered || !drawerRef.current) return\r\n if (!isOpen) return\r\n if (shrink !== null) return\r\n const el = drawerRef.current\r\n const { innerWidth, innerHeight } = window\r\n if (orientation === 'horizontal') {\r\n setShrink(el.scrollWidth < innerWidth * 0.3)\r\n } else {\r\n setShrink(el.scrollHeight < innerHeight * 0.3)\r\n }\r\n }, [rendered, visible, children, orientation, shrink])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = drawerRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay drawer-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\r\n `drawer ${orientation} side-${side}` + (visible ? \" visible\" : \"\")\r\n }\r\n data-theme={theme}\r\n ref={drawerRef}\r\n style={{\r\n left:`${pos.x}px`,\r\n top:`${pos.y}px`,\r\n transformOrigin: origin,\r\n '--drawer-transition': transitionDuration,\r\n ...(orientation === 'horizontal' ? {height: '100%'} : {width: '100%'}),\r\n ...(shrink === true\r\n ? (orientation === 'horizontal'\r\n ? {width: '30vw'}\r\n : {height: '30vh'})\r\n : {}),\r\n }}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["Modal","isOpen","onClose","title","children","initialPosition","theme","modalRef","useRef","headerRef","pos","setPos","useState","x","y","origin","setOrigin","computeOrigin","left","top","draggingRef","offsetRef","rendered","setRendered","visible","setVisible","useEffect","requestAnimationFrame","timeout","setTimeout","clearTimeout","handleEsc","e","key","window","addEventListener","removeEventListener","useLayoutEffect","el","current","innerWidth","innerHeight","rect","getBoundingClientRect","maxX","Math","max","width","maxY","height","centerX","centerY","min","onMove","touches","preventDefault","clientX","clientY","desiredX","desiredY","clampedX","clampedY","onUp","passive","startDrag","document","body","style","userSelect","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","transformOrigin","onTouchStart","onClick","Drawer","transitionDuration","drawerRef","detectOrientation","includes","detectSide","orientation","side","shrink","setShrink","toMs","duration","trimmed","trim","endsWith","val","Number","slice","isFinite","round","effectiveWidth","effectiveHeight","scrollWidth","scrollHeight"],"mappings":"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"}
package/dist/index.css CHANGED
@@ -39,7 +39,7 @@ button {
39
39
  .modal-overlay {
40
40
  position: fixed;
41
41
  inset: 0;
42
- background: var(--overlay);
42
+ /* background: var(--overlay); */
43
43
  display: flex;
44
44
  align-items: flex-start;
45
45
  justify-content: center;
package/dist/index.esm.js CHANGED
@@ -69,6 +69,18 @@ function Modal({
69
69
  }
70
70
  }, [isOpen, rendered]);
71
71
 
72
+ // ESC key handler
73
+ useEffect(() => {
74
+ if (!isOpen) return;
75
+ function handleEsc(e) {
76
+ if (e.key === 'Escape') {
77
+ onClose();
78
+ }
79
+ }
80
+ window.addEventListener('keydown', handleEsc);
81
+ return () => window.removeEventListener('keydown', handleEsc);
82
+ }, [isOpen, onClose]);
83
+
72
84
  // calculate coordinates synchronously before paint so the dialog doesn't
73
85
  // jump from {0,0} when it first renders. using useLayoutEffect ensures the
74
86
  // position is available when visible transitions start.
@@ -344,6 +356,18 @@ function Drawer({
344
356
  }
345
357
  return 450;
346
358
  }
359
+
360
+ // ESC key handler
361
+ useEffect(() => {
362
+ if (!isOpen) return;
363
+ function handleEsc(e) {
364
+ if (e.key === 'Escape') {
365
+ onClose();
366
+ }
367
+ }
368
+ window.addEventListener('keydown', handleEsc);
369
+ return () => window.removeEventListener('keydown', handleEsc);
370
+ }, [isOpen, onClose]);
347
371
  useEffect(() => {
348
372
  if (isOpen) {
349
373
  setRendered(true);
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/components/Modal.jsx","../src/components/Drawer.jsx"],"sourcesContent":["import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'center',\r\n theme = 'light' // new prop: 'light' or 'dark'\r\n}){\r\n const modalRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n // explicit coords – treat as pixels from top-left of modal\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n // transition helpers -> keep component rendered during fade-out\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n // when isOpen changes, trigger fade in / fade out\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n // next frame to allow initial render before adding class\r\n requestAnimationFrame(() => {\r\n setVisible(true)\r\n })\r\n } else if (rendered) {\r\n setVisible(false)\r\n // remove from DOM after transition duration\r\n const timeout = setTimeout(() => setRendered(false), 200)\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered])\r\n\r\n // 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 useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n setShrink(null)\r\n requestAnimationFrame(() => setVisible(true))\r\n } else if (rendered) {\r\n setVisible(false)\r\n const timeout = setTimeout(\r\n () => setRendered(false),\r\n toMs(transitionDuration)\r\n )\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered, transitionDuration])\r\n\r\n useEffect(() => {\r\n if (isOpen) setShrink(null)\r\n }, [isOpen, children, orientation])\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || !rendered) return\r\n const el = drawerRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const effectiveWidth = orientation === 'horizontal' && shrink === true\r\n ? Math.round(innerWidth * 0.3)\r\n : rect.width\r\n const effectiveHeight = orientation === 'vertical' && shrink === true\r\n ? Math.round(innerHeight * 0.3)\r\n : rect.height\r\n const maxX = Math.max(0, innerWidth - effectiveWidth)\r\n const maxY = Math.max(0, innerHeight - effectiveHeight)\r\n const centerX = (innerWidth - effectiveWidth) / 2\r\n const centerY = (innerHeight - effectiveHeight) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'left':\r\n x = 0; y = 0; break\r\n case 'right':\r\n x = maxX; y = 0; break\r\n case 'top':\r\n x = 0; y = 0; break\r\n case 'bottom':\r\n x = 0; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered, orientation, shrink])\r\n\r\n // shrink measurement – check dimensions after render\r\n useLayoutEffect(() => {\r\n if (!rendered || !drawerRef.current) return\r\n if (!isOpen) return\r\n if (shrink !== null) return\r\n const el = drawerRef.current\r\n const { innerWidth, innerHeight } = window\r\n if (orientation === 'horizontal') {\r\n setShrink(el.scrollWidth < innerWidth * 0.3)\r\n } else {\r\n setShrink(el.scrollHeight < innerHeight * 0.3)\r\n }\r\n }, [rendered, visible, children, orientation, shrink])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = drawerRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay drawer-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\r\n `drawer ${orientation} side-${side}` + (visible ? \" visible\" : \"\")\r\n }\r\n data-theme={theme}\r\n ref={drawerRef}\r\n style={{\r\n left:`${pos.x}px`,\r\n top:`${pos.y}px`,\r\n transformOrigin: origin,\r\n '--drawer-transition': transitionDuration,\r\n ...(orientation === 'horizontal' ? {height: '100%'} : {width: '100%'}),\r\n ...(shrink === true\r\n ? (orientation === 'horizontal'\r\n ? {width: '30vw'}\r\n : {height: '30vh'})\r\n : {}),\r\n }}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["Modal","isOpen","onClose","title","children","initialPosition","theme","modalRef","useRef","headerRef","pos","setPos","useState","x","y","origin","setOrigin","computeOrigin","left","top","draggingRef","offsetRef","rendered","setRendered","visible","setVisible","useEffect","requestAnimationFrame","timeout","setTimeout","clearTimeout","useLayoutEffect","el","current","innerWidth","innerHeight","window","rect","getBoundingClientRect","maxX","Math","max","width","maxY","height","centerX","centerY","min","onMove","e","touches","preventDefault","clientX","clientY","desiredX","desiredY","clampedX","clampedY","onUp","addEventListener","passive","removeEventListener","startDrag","document","body","style","userSelect","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","transformOrigin","onTouchStart","onClick","Drawer","transitionDuration","drawerRef","detectOrientation","includes","detectSide","orientation","side","shrink","setShrink","toMs","duration","trimmed","trim","endsWith","val","Number","slice","isFinite","round","effectiveWidth","effectiveHeight","scrollWidth","scrollHeight"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/components/Modal.jsx","../src/components/Drawer.jsx"],"sourcesContent":["import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Modal({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'center',\r\n theme = 'light' // new prop: 'light' or 'dark'\r\n}){\r\n const modalRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n // explicit coords – treat as pixels from top-left of modal\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n // transition helpers -> keep component rendered during fade-out\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n // when isOpen changes, trigger fade in / fade out\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n // next frame to allow initial render before adding class\r\n requestAnimationFrame(() => {\r\n setVisible(true)\r\n })\r\n } else if (rendered) {\r\n setVisible(false)\r\n // remove from DOM after transition duration\r\n const timeout = setTimeout(() => setRendered(false), 200)\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered])\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n // calculate coordinates synchronously before paint so the dialog doesn't\r\n // jump from {0,0} when it first renders. using useLayoutEffect ensures the\r\n // position is available when visible transitions start.\r\n useLayoutEffect(() => {\r\n // only position when the modal is actually rendered & opening\r\n if (!isOpen || !rendered) return\r\n const el = modalRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const maxX = Math.max(0, innerWidth - rect.width)\r\n const maxY = Math.max(0, innerHeight - rect.height)\r\n const centerX = (innerWidth - rect.width) / 2\r\n const centerY = (innerHeight - rect.height) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n // clamp to viewport\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n // compute desired position\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n // clamp to viewport so it can't be dragged fully offscreen\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = modalRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n // ensure we re-enable selection when drag ends\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n // final clamp to ensure modal stays visible if window size changed\r\n const el = modalRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\"modal\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n ref={modalRef}\r\n style={{left:`${pos.x}px`, top:`${pos.y}px`, transformOrigin: origin}}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\r\n\r\nexport default function Drawer({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n initialPosition = 'left',\r\n transitionDuration = '0.45s',\r\n theme = 'light' // support light/dark themes\r\n}){\r\n const drawerRef = useRef(null)\r\n const headerRef = useRef(null)\r\n const [pos, setPos] = useState({x: 0, y: 0})\r\n const [origin, setOrigin] = useState('50% 50%')\r\n\r\n // determine orientation (horizontal/vertical) and simple side for animation\r\n function detectOrientation(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left') || pos.includes('right')) return 'horizontal'\r\n if(pos.includes('top') || pos.includes('bottom')) return 'vertical'\r\n }\r\n // fall back to horizontal for coordinate objects\r\n return 'horizontal'\r\n }\r\n function detectSide(pos){\r\n if(typeof pos === 'string'){\r\n if(pos.includes('left')) return 'left'\r\n if(pos.includes('right')) return 'right'\r\n if(pos.includes('top')) return 'top'\r\n if(pos.includes('bottom')) return 'bottom'\r\n }\r\n return 'left'\r\n }\r\n const orientation = detectOrientation(initialPosition)\r\n const side = detectSide(initialPosition)\r\n const [shrink, setShrink] = useState(null)\r\n\r\n function computeOrigin(pos){\r\n if(typeof pos === 'object'){\r\n const x = typeof pos.left === 'number' ? `${pos.left}px` : '0'\r\n const y = typeof pos.top === 'number' ? `${pos.top}px` : '0'\r\n return `${x} ${y}`\r\n }\r\n switch(pos){\r\n case 'top-left': return '0 0'\r\n case 'top-center': return '50% 0'\r\n case 'top-right': return '100% 0'\r\n case 'right': return '100% 50%'\r\n case 'right-center': return '100% 50%'\r\n case 'bottom-right': return '100% 100%'\r\n case 'bottom-center': return '50% 100%'\r\n case 'bottom-left': return '0 100%'\r\n case 'left': return '0 50%'\r\n case 'left-center': return '0 50%'\r\n case 'center':\r\n default: return '50% 50%'\r\n }\r\n }\r\n\r\n const draggingRef = useRef(false)\r\n const offsetRef = useRef({x:0,y:0})\r\n const [rendered, setRendered] = useState(isOpen)\r\n const [visible, setVisible] = useState(isOpen)\r\n\r\n function toMs(duration){\r\n if (typeof duration !== 'string') return 450\r\n const trimmed = duration.trim()\r\n if (trimmed.endsWith('ms')) {\r\n const val = Number(trimmed.slice(0, -2))\r\n return Number.isFinite(val) ? val : 450\r\n }\r\n if (trimmed.endsWith('s')) {\r\n const val = Number(trimmed.slice(0, -1))\r\n return Number.isFinite(val) ? Math.round(val * 1000) : 450\r\n }\r\n return 450\r\n }\r\n\r\n // ESC key handler\r\n useEffect(() => {\r\n if (!isOpen) return\r\n function handleEsc(e) {\r\n if (e.key === 'Escape') {\r\n onClose()\r\n }\r\n }\r\n window.addEventListener('keydown', handleEsc)\r\n return () => window.removeEventListener('keydown', handleEsc)\r\n }, [isOpen, onClose])\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setRendered(true)\r\n setShrink(null)\r\n requestAnimationFrame(() => setVisible(true))\r\n } else if (rendered) {\r\n setVisible(false)\r\n const timeout = setTimeout(\r\n () => setRendered(false),\r\n toMs(transitionDuration)\r\n )\r\n return () => clearTimeout(timeout)\r\n }\r\n }, [isOpen, rendered, transitionDuration])\r\n\r\n useEffect(() => {\r\n if (isOpen) setShrink(null)\r\n }, [isOpen, children, orientation])\r\n\r\n useLayoutEffect(() => {\r\n if (!isOpen || !rendered) return\r\n const el = drawerRef.current\r\n if (!el) return\r\n\r\n const { innerWidth, innerHeight } = window\r\n const rect = el.getBoundingClientRect()\r\n const effectiveWidth = orientation === 'horizontal' && shrink === true\r\n ? Math.round(innerWidth * 0.3)\r\n : rect.width\r\n const effectiveHeight = orientation === 'vertical' && shrink === true\r\n ? Math.round(innerHeight * 0.3)\r\n : rect.height\r\n const maxX = Math.max(0, innerWidth - effectiveWidth)\r\n const maxY = Math.max(0, innerHeight - effectiveHeight)\r\n const centerX = (innerWidth - effectiveWidth) / 2\r\n const centerY = (innerHeight - effectiveHeight) / 2\r\n\r\n let x = centerX\r\n let y = centerY\r\n\r\n if (typeof initialPosition === 'object') {\r\n if (typeof initialPosition.left === 'number') x = initialPosition.left\r\n if (typeof initialPosition.top === 'number') y = initialPosition.top\r\n } else {\r\n switch (initialPosition) {\r\n case 'left':\r\n x = 0; y = 0; break\r\n case 'right':\r\n x = maxX; y = 0; break\r\n case 'top':\r\n x = 0; y = 0; break\r\n case 'bottom':\r\n x = 0; y = maxY; break\r\n case 'top-left':\r\n x = 0; y = 0; break\r\n case 'top-right':\r\n x = maxX; y = 0; break\r\n case 'bottom-left':\r\n x = 0; y = maxY; break\r\n case 'bottom-right':\r\n x = maxX; y = maxY; break\r\n case 'top-center':\r\n x = centerX; y = 0; break\r\n case 'bottom-center':\r\n x = centerX; y = maxY; break\r\n case 'left-center':\r\n x = 0; y = centerY; break\r\n case 'right-center':\r\n x = maxX; y = centerY; break\r\n case 'center':\r\n default:\r\n x = centerX; y = centerY; break\r\n }\r\n }\r\n\r\n x = Math.min(Math.max(0, x), maxX)\r\n y = Math.min(Math.max(0, y), maxY)\r\n\r\n setPos({ x, y })\r\n setOrigin(computeOrigin(initialPosition))\r\n }, [isOpen, initialPosition, rendered, orientation, shrink])\r\n\r\n // shrink measurement – check dimensions after render\r\n useLayoutEffect(() => {\r\n if (!rendered || !drawerRef.current) return\r\n if (!isOpen) return\r\n if (shrink !== null) return\r\n const el = drawerRef.current\r\n const { innerWidth, innerHeight } = window\r\n if (orientation === 'horizontal') {\r\n setShrink(el.scrollWidth < innerWidth * 0.3)\r\n } else {\r\n setShrink(el.scrollHeight < innerHeight * 0.3)\r\n }\r\n }, [rendered, visible, children, orientation, shrink])\r\n\r\n useEffect(()=>{\r\n function onMove(e){\r\n if(!draggingRef.current) return\r\n if (e.touches) e.preventDefault()\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const desiredX = clientX - offsetRef.current.x\r\n const desiredY = clientY - offsetRef.current.y\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n const clampedX = Math.min(Math.max(0, desiredX), Math.max(0, maxX))\r\n const clampedY = Math.min(Math.max(0, desiredY), Math.max(0, maxY))\r\n setPos({x: clampedX, y: clampedY})\r\n } else {\r\n setPos({x: desiredX, y: desiredY})\r\n }\r\n }\r\n function onUp(){ draggingRef.current = false }\r\n window.addEventListener('mousemove', onMove)\r\n window.addEventListener('mouseup', onUp)\r\n window.addEventListener('touchmove', onMove, {passive:false})\r\n window.addEventListener('touchend', onUp)\r\n return ()=>{\r\n window.removeEventListener('mousemove', onMove)\r\n window.removeEventListener('mouseup', onUp)\r\n window.removeEventListener('touchmove', onMove)\r\n window.removeEventListener('touchend', onUp)\r\n }\r\n },[])\r\n\r\n function startDrag(e){\r\n e.preventDefault()\r\n draggingRef.current = true\r\n document.body.style.userSelect = 'none'\r\n const clientX = e.touches ? e.touches[0].clientX : e.clientX\r\n const clientY = e.touches ? e.touches[0].clientY : e.clientY\r\n const rect = drawerRef.current.getBoundingClientRect()\r\n offsetRef.current = {x: clientX - rect.left, y: clientY - rect.top}\r\n }\r\n\r\n useEffect(()=>{\r\n function onUpCleanup(){\r\n draggingRef.current = false\r\n document.body.style.userSelect = ''\r\n const el = drawerRef.current\r\n if(el){\r\n const rect = el.getBoundingClientRect()\r\n const maxX = window.innerWidth - rect.width\r\n const maxY = window.innerHeight - rect.height\r\n setPos(prev => ({\r\n x: Math.min(Math.max(0, prev.x), Math.max(0, maxX)),\r\n y: Math.min(Math.max(0, prev.y), Math.max(0, maxY))\r\n }))\r\n }\r\n }\r\n window.addEventListener('mouseup', onUpCleanup)\r\n window.addEventListener('touchend', onUpCleanup)\r\n return ()=>{\r\n window.removeEventListener('mouseup', onUpCleanup)\r\n window.removeEventListener('touchend', onUpCleanup)\r\n }\r\n },[])\r\n\r\n if (!rendered) return null\r\n\r\n return (\r\n <div\r\n className={\"modal-overlay drawer-overlay\" + (visible ? \" visible\" : \"\")}\r\n data-theme={theme}\r\n onMouseDown={(e) => { if (visible && e.target === e.currentTarget) onClose() }}>\r\n <div\r\n className={\r\n `drawer ${orientation} side-${side}` + (visible ? \" visible\" : \"\")\r\n }\r\n data-theme={theme}\r\n ref={drawerRef}\r\n style={{\r\n left:`${pos.x}px`,\r\n top:`${pos.y}px`,\r\n transformOrigin: origin,\r\n '--drawer-transition': transitionDuration,\r\n ...(orientation === 'horizontal' ? {height: '100%'} : {width: '100%'}),\r\n ...(shrink === true\r\n ? (orientation === 'horizontal'\r\n ? {width: '30vw'}\r\n : {height: '30vh'})\r\n : {}),\r\n }}>\r\n <div className=\"modal-header\" ref={headerRef} onMouseDown={startDrag} onTouchStart={startDrag}>\r\n <div className=\"modal-title\">{title}</div>\r\n <button className=\"modal-close\" onClick={onClose}>×</button>\r\n </div>\r\n <div className=\"modal-body\">{children}</div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["Modal","isOpen","onClose","title","children","initialPosition","theme","modalRef","useRef","headerRef","pos","setPos","useState","x","y","origin","setOrigin","computeOrigin","left","top","draggingRef","offsetRef","rendered","setRendered","visible","setVisible","useEffect","requestAnimationFrame","timeout","setTimeout","clearTimeout","handleEsc","e","key","window","addEventListener","removeEventListener","useLayoutEffect","el","current","innerWidth","innerHeight","rect","getBoundingClientRect","maxX","Math","max","width","maxY","height","centerX","centerY","min","onMove","touches","preventDefault","clientX","clientY","desiredX","desiredY","clampedX","clampedY","onUp","passive","startDrag","document","body","style","userSelect","onUpCleanup","prev","React","createElement","className","onMouseDown","target","currentTarget","ref","transformOrigin","onTouchStart","onClick","Drawer","transitionDuration","drawerRef","detectOrientation","includes","detectSide","orientation","side","shrink","setShrink","toMs","duration","trimmed","trim","endsWith","val","Number","slice","isFinite","round","effectiveWidth","effectiveHeight","scrollWidth","scrollHeight"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trotl-modal",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "Modal UI",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",