├── .gitignore ├── README.md ├── license ├── package-lock.json ├── package.json ├── resizable.js ├── resizable.min.js ├── resizable.min.js.map ├── test ├── index.css ├── index.html └── index.js └── todo.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled source # 2 | ################### 3 | *.com 4 | *.class 5 | *.dll 6 | *.exe 7 | *.o 8 | *.so 9 | *.bin 10 | 11 | # Packages # 12 | ############ 13 | # it's better to unpack these files and commit the raw source 14 | # git has its own built in compression methods 15 | *.7z 16 | *.dmg 17 | *.gz 18 | *.iso 19 | *.jar 20 | *.rar 21 | *.tar 22 | *.zip 23 | 24 | # Logs and databases # 25 | ###################### 26 | *.log 27 | *.sql 28 | *.sqlite 29 | 30 | # OS generated files # 31 | ###################### 32 | .DS_Store 33 | .DS_Store? 34 | *._* 35 | .Spotlight-V100 36 | .Trashes 37 | Icon? 38 | ehthumbs.db 39 | Thumbs.db 40 | 41 | # My extension # 42 | ################ 43 | *.lock 44 | *.bak 45 | lsn 46 | *.dump 47 | *.beam 48 | *.[0-9] 49 | *._[0-9] 50 | *.ns 51 | Scripting_* 52 | docs 53 | *.pdf 54 | *.pak 55 | 56 | 57 | design 58 | instances 59 | *node_modules 60 | 61 | bundle* 62 | mocha* -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Resizable 2 | 3 | Resizable behaviour for elements. [Demo](https://dy.github.io/resizable). 4 | 5 | [![npm install resizable](https://nodei.co/npm/resizable.png?mini=true)](https://nodei.co/npm/resizable/) 6 | 7 | 8 | ```js 9 | import Resizable from 'resizable'; 10 | 11 | var resizable = new Resizable(document.querySelector('.my-element'), { 12 | within: 'parent', 13 | handles: 's, se, e', 14 | threshold: 10, 15 | draggable: false 16 | }); 17 | 18 | resizable.on('resize', function(){ 19 | //... 20 | }); 21 | ``` 22 | 23 | ## Options 24 | 25 | | Parameter | Default | Description | 26 | |---|:---:|---| 27 | | `handles` | * | List of handles to support. Valid handles: `s`, `se`, `e`, `ne`, `n`, `nw`, `w`, `sw`. May be specified as an object, array, or comma-separated string. | 28 | | `resize` | `undefined` | Resize event handler. | 29 | | `threshold` | `10` | A movement threshold required to start resize - whether array, number or function. | 30 | | `within` | `document` | Restrict movement within the container. Pass `'parent'` to take parent node. | 31 | | `draggable` | `false` | Make element [draggable](http://github.com/dfcreative/draggy) as well. Set an object to pass options to draggable. | 32 | | `css3` | `true` | Use `translate3d` for defining position. | 33 | 34 | \* Default handles are dependent on the styling of the given element. Inline 35 | elements will default to `s`, `se`, `e`, while elements that can support full 36 | resize will default to all handles being enabled. 37 | 38 | ## Events 39 | 40 | | Name | Description | 41 | |---|---| 42 | | `resizestart` | Element resize started. | 43 | | `resize` | Element resized. | 44 | | `resizeend` | Element resize ended. | 45 | 46 | ## License 47 | 48 | MIT 49 | 50 |

🕉

51 | -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Dmitry Ivanov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resizable", 3 | "version": "2.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "resizable", 9 | "version": "2.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "draggy": "^2.0.5", 13 | "emmy": "^7.1.1", 14 | "mucss": "^1.0.2" 15 | }, 16 | "devDependencies": { 17 | "esbuild": "^0.24.0", 18 | "hyperf": "^1.7.0", 19 | "tst": "^7.3.0" 20 | } 21 | }, 22 | "node_modules/@esbuild/aix-ppc64": { 23 | "version": "0.24.0", 24 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", 25 | "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", 26 | "cpu": [ 27 | "ppc64" 28 | ], 29 | "dev": true, 30 | "optional": true, 31 | "os": [ 32 | "aix" 33 | ], 34 | "engines": { 35 | "node": ">=18" 36 | } 37 | }, 38 | "node_modules/@esbuild/android-arm": { 39 | "version": "0.24.0", 40 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", 41 | "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", 42 | "cpu": [ 43 | "arm" 44 | ], 45 | "dev": true, 46 | "optional": true, 47 | "os": [ 48 | "android" 49 | ], 50 | "engines": { 51 | "node": ">=18" 52 | } 53 | }, 54 | "node_modules/@esbuild/android-arm64": { 55 | "version": "0.24.0", 56 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", 57 | "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", 58 | "cpu": [ 59 | "arm64" 60 | ], 61 | "dev": true, 62 | "optional": true, 63 | "os": [ 64 | "android" 65 | ], 66 | "engines": { 67 | "node": ">=18" 68 | } 69 | }, 70 | "node_modules/@esbuild/android-x64": { 71 | "version": "0.24.0", 72 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", 73 | "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", 74 | "cpu": [ 75 | "x64" 76 | ], 77 | "dev": true, 78 | "optional": true, 79 | "os": [ 80 | "android" 81 | ], 82 | "engines": { 83 | "node": ">=18" 84 | } 85 | }, 86 | "node_modules/@esbuild/darwin-arm64": { 87 | "version": "0.24.0", 88 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", 89 | "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", 90 | "cpu": [ 91 | "arm64" 92 | ], 93 | "dev": true, 94 | "optional": true, 95 | "os": [ 96 | "darwin" 97 | ], 98 | "engines": { 99 | "node": ">=18" 100 | } 101 | }, 102 | "node_modules/@esbuild/darwin-x64": { 103 | "version": "0.24.0", 104 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", 105 | "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", 106 | "cpu": [ 107 | "x64" 108 | ], 109 | "dev": true, 110 | "optional": true, 111 | "os": [ 112 | "darwin" 113 | ], 114 | "engines": { 115 | "node": ">=18" 116 | } 117 | }, 118 | "node_modules/@esbuild/freebsd-arm64": { 119 | "version": "0.24.0", 120 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", 121 | "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", 122 | "cpu": [ 123 | "arm64" 124 | ], 125 | "dev": true, 126 | "optional": true, 127 | "os": [ 128 | "freebsd" 129 | ], 130 | "engines": { 131 | "node": ">=18" 132 | } 133 | }, 134 | "node_modules/@esbuild/freebsd-x64": { 135 | "version": "0.24.0", 136 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", 137 | "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", 138 | "cpu": [ 139 | "x64" 140 | ], 141 | "dev": true, 142 | "optional": true, 143 | "os": [ 144 | "freebsd" 145 | ], 146 | "engines": { 147 | "node": ">=18" 148 | } 149 | }, 150 | "node_modules/@esbuild/linux-arm": { 151 | "version": "0.24.0", 152 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", 153 | "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", 154 | "cpu": [ 155 | "arm" 156 | ], 157 | "dev": true, 158 | "optional": true, 159 | "os": [ 160 | "linux" 161 | ], 162 | "engines": { 163 | "node": ">=18" 164 | } 165 | }, 166 | "node_modules/@esbuild/linux-arm64": { 167 | "version": "0.24.0", 168 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", 169 | "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", 170 | "cpu": [ 171 | "arm64" 172 | ], 173 | "dev": true, 174 | "optional": true, 175 | "os": [ 176 | "linux" 177 | ], 178 | "engines": { 179 | "node": ">=18" 180 | } 181 | }, 182 | "node_modules/@esbuild/linux-ia32": { 183 | "version": "0.24.0", 184 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", 185 | "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", 186 | "cpu": [ 187 | "ia32" 188 | ], 189 | "dev": true, 190 | "optional": true, 191 | "os": [ 192 | "linux" 193 | ], 194 | "engines": { 195 | "node": ">=18" 196 | } 197 | }, 198 | "node_modules/@esbuild/linux-loong64": { 199 | "version": "0.24.0", 200 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", 201 | "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", 202 | "cpu": [ 203 | "loong64" 204 | ], 205 | "dev": true, 206 | "optional": true, 207 | "os": [ 208 | "linux" 209 | ], 210 | "engines": { 211 | "node": ">=18" 212 | } 213 | }, 214 | "node_modules/@esbuild/linux-mips64el": { 215 | "version": "0.24.0", 216 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", 217 | "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", 218 | "cpu": [ 219 | "mips64el" 220 | ], 221 | "dev": true, 222 | "optional": true, 223 | "os": [ 224 | "linux" 225 | ], 226 | "engines": { 227 | "node": ">=18" 228 | } 229 | }, 230 | "node_modules/@esbuild/linux-ppc64": { 231 | "version": "0.24.0", 232 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", 233 | "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", 234 | "cpu": [ 235 | "ppc64" 236 | ], 237 | "dev": true, 238 | "optional": true, 239 | "os": [ 240 | "linux" 241 | ], 242 | "engines": { 243 | "node": ">=18" 244 | } 245 | }, 246 | "node_modules/@esbuild/linux-riscv64": { 247 | "version": "0.24.0", 248 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", 249 | "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", 250 | "cpu": [ 251 | "riscv64" 252 | ], 253 | "dev": true, 254 | "optional": true, 255 | "os": [ 256 | "linux" 257 | ], 258 | "engines": { 259 | "node": ">=18" 260 | } 261 | }, 262 | "node_modules/@esbuild/linux-s390x": { 263 | "version": "0.24.0", 264 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", 265 | "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", 266 | "cpu": [ 267 | "s390x" 268 | ], 269 | "dev": true, 270 | "optional": true, 271 | "os": [ 272 | "linux" 273 | ], 274 | "engines": { 275 | "node": ">=18" 276 | } 277 | }, 278 | "node_modules/@esbuild/linux-x64": { 279 | "version": "0.24.0", 280 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", 281 | "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", 282 | "cpu": [ 283 | "x64" 284 | ], 285 | "dev": true, 286 | "optional": true, 287 | "os": [ 288 | "linux" 289 | ], 290 | "engines": { 291 | "node": ">=18" 292 | } 293 | }, 294 | "node_modules/@esbuild/netbsd-x64": { 295 | "version": "0.24.0", 296 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", 297 | "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", 298 | "cpu": [ 299 | "x64" 300 | ], 301 | "dev": true, 302 | "optional": true, 303 | "os": [ 304 | "netbsd" 305 | ], 306 | "engines": { 307 | "node": ">=18" 308 | } 309 | }, 310 | "node_modules/@esbuild/openbsd-arm64": { 311 | "version": "0.24.0", 312 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", 313 | "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", 314 | "cpu": [ 315 | "arm64" 316 | ], 317 | "dev": true, 318 | "optional": true, 319 | "os": [ 320 | "openbsd" 321 | ], 322 | "engines": { 323 | "node": ">=18" 324 | } 325 | }, 326 | "node_modules/@esbuild/openbsd-x64": { 327 | "version": "0.24.0", 328 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", 329 | "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", 330 | "cpu": [ 331 | "x64" 332 | ], 333 | "dev": true, 334 | "optional": true, 335 | "os": [ 336 | "openbsd" 337 | ], 338 | "engines": { 339 | "node": ">=18" 340 | } 341 | }, 342 | "node_modules/@esbuild/sunos-x64": { 343 | "version": "0.24.0", 344 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", 345 | "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", 346 | "cpu": [ 347 | "x64" 348 | ], 349 | "dev": true, 350 | "optional": true, 351 | "os": [ 352 | "sunos" 353 | ], 354 | "engines": { 355 | "node": ">=18" 356 | } 357 | }, 358 | "node_modules/@esbuild/win32-arm64": { 359 | "version": "0.24.0", 360 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", 361 | "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", 362 | "cpu": [ 363 | "arm64" 364 | ], 365 | "dev": true, 366 | "optional": true, 367 | "os": [ 368 | "win32" 369 | ], 370 | "engines": { 371 | "node": ">=18" 372 | } 373 | }, 374 | "node_modules/@esbuild/win32-ia32": { 375 | "version": "0.24.0", 376 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", 377 | "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", 378 | "cpu": [ 379 | "ia32" 380 | ], 381 | "dev": true, 382 | "optional": true, 383 | "os": [ 384 | "win32" 385 | ], 386 | "engines": { 387 | "node": ">=18" 388 | } 389 | }, 390 | "node_modules/@esbuild/win32-x64": { 391 | "version": "0.24.0", 392 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", 393 | "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", 394 | "cpu": [ 395 | "x64" 396 | ], 397 | "dev": true, 398 | "optional": true, 399 | "os": [ 400 | "win32" 401 | ], 402 | "engines": { 403 | "node": ">=18" 404 | } 405 | }, 406 | "node_modules/@preact/signals-core": { 407 | "version": "1.8.0", 408 | "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.8.0.tgz", 409 | "integrity": "sha512-OBvUsRZqNmjzCZXWLxkZfhcgT+Fk8DDcT/8vD6a1xhDemodyy87UJRJfASMuSD8FaAIeGgGm85ydXhm7lr4fyA==", 410 | "dev": true, 411 | "funding": { 412 | "type": "opencollective", 413 | "url": "https://opencollective.com/preact" 414 | } 415 | }, 416 | "node_modules/define-state": { 417 | "version": "1.1.1", 418 | "resolved": "https://registry.npmjs.org/define-state/-/define-state-1.1.1.tgz", 419 | "integrity": "sha512-b9fG+bSqdgugDng/k2FRMlMd5C4OpvCowyyfQ8pB1T1Yz1o+PPFAyl1nWs0aKUlaa/YeNIMnIZri/9AamLKnRA==", 420 | "dependencies": { 421 | "st8": "^2.1.0" 422 | } 423 | }, 424 | "node_modules/draggy": { 425 | "version": "2.0.5", 426 | "resolved": "https://registry.npmjs.org/draggy/-/draggy-2.0.5.tgz", 427 | "integrity": "sha512-ls3QdII5Iqjp7PziiylxGjgtt/6DcvCXZrSt2qmuwVz5jdHTpbY/LLnklet6bGjrM8JWGg4+L0NODZEOO8OwDQ==", 428 | "dependencies": { 429 | "define-state": "^1.0.0", 430 | "emmy": "^7.1.1", 431 | "get-client-xy": "^1.0.1", 432 | "mucss": "^1.0", 433 | "mutype": "^0.3.9", 434 | "to-px": "^1.1.0" 435 | } 436 | }, 437 | "node_modules/element-props": { 438 | "version": "2.6.0", 439 | "resolved": "https://registry.npmjs.org/element-props/-/element-props-2.6.0.tgz", 440 | "integrity": "sha512-zOyQM8joBIAgJDq3FUBa3xZxKpGGD2AZuTj0d1xKJNjMo1n3OEuVaxQFV3jgk141k13/btcFWV+efSHDJpp5Ug==", 441 | "dev": true 442 | }, 443 | "node_modules/emmy": { 444 | "version": "7.1.1", 445 | "resolved": "https://registry.npmjs.org/emmy/-/emmy-7.1.1.tgz", 446 | "integrity": "sha512-UyybjWLa/FUXAWxe5vGhuwJ4W7Kn9V1Ou3m9UjPdFY+A3j0n7SGMl4+AJUtvS6j8ySra1mZVWjv4GzrpW1beZg==", 447 | "dependencies": { 448 | "icicle": "^0.1.3", 449 | "is-browser": "^2.1.0", 450 | "is-plain-obj": "^1.1.0", 451 | "weak-map": "^1.0.5" 452 | } 453 | }, 454 | "node_modules/esbuild": { 455 | "version": "0.24.0", 456 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", 457 | "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", 458 | "dev": true, 459 | "hasInstallScript": true, 460 | "bin": { 461 | "esbuild": "bin/esbuild" 462 | }, 463 | "engines": { 464 | "node": ">=18" 465 | }, 466 | "optionalDependencies": { 467 | "@esbuild/aix-ppc64": "0.24.0", 468 | "@esbuild/android-arm": "0.24.0", 469 | "@esbuild/android-arm64": "0.24.0", 470 | "@esbuild/android-x64": "0.24.0", 471 | "@esbuild/darwin-arm64": "0.24.0", 472 | "@esbuild/darwin-x64": "0.24.0", 473 | "@esbuild/freebsd-arm64": "0.24.0", 474 | "@esbuild/freebsd-x64": "0.24.0", 475 | "@esbuild/linux-arm": "0.24.0", 476 | "@esbuild/linux-arm64": "0.24.0", 477 | "@esbuild/linux-ia32": "0.24.0", 478 | "@esbuild/linux-loong64": "0.24.0", 479 | "@esbuild/linux-mips64el": "0.24.0", 480 | "@esbuild/linux-ppc64": "0.24.0", 481 | "@esbuild/linux-riscv64": "0.24.0", 482 | "@esbuild/linux-s390x": "0.24.0", 483 | "@esbuild/linux-x64": "0.24.0", 484 | "@esbuild/netbsd-x64": "0.24.0", 485 | "@esbuild/openbsd-arm64": "0.24.0", 486 | "@esbuild/openbsd-x64": "0.24.0", 487 | "@esbuild/sunos-x64": "0.24.0", 488 | "@esbuild/win32-arm64": "0.24.0", 489 | "@esbuild/win32-ia32": "0.24.0", 490 | "@esbuild/win32-x64": "0.24.0" 491 | } 492 | }, 493 | "node_modules/get-client-xy": { 494 | "version": "1.2.0", 495 | "resolved": "https://registry.npmjs.org/get-client-xy/-/get-client-xy-1.2.0.tgz", 496 | "integrity": "sha512-6g4Yk9r3ND+oua5Gm9V+vzD+iRrjn7ElUAe1wAr8sarTqnDoG+Qa4aRHNVYOS5NchGLom8mffrXRsP9Xqlv27w==" 497 | }, 498 | "node_modules/htm": { 499 | "version": "3.1.1", 500 | "resolved": "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz", 501 | "integrity": "sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==", 502 | "dev": true 503 | }, 504 | "node_modules/hyperf": { 505 | "version": "1.7.0", 506 | "resolved": "https://registry.npmjs.org/hyperf/-/hyperf-1.7.0.tgz", 507 | "integrity": "sha512-NUbhzGw84LFdn8ylBYTdNRjWPKzbUU0olUIMrMgcOyWIx6HMI+gMe20Eidw0JbK5cintiM3RwOovYSeoU11oYA==", 508 | "dev": true, 509 | "dependencies": { 510 | "element-props": "^2.6.0", 511 | "htm": "^3.1.1", 512 | "sube": "^2.2.1", 513 | "swapdom": "^1.1.1" 514 | } 515 | }, 516 | "node_modules/icicle": { 517 | "version": "0.1.3", 518 | "resolved": "https://registry.npmjs.org/icicle/-/icicle-0.1.3.tgz", 519 | "integrity": "sha512-TnypITKI14E0UAQMkFV8CXSSf5NdQOjPnNM9zXpz0fz7jywGVBfR7grJRP0WHNgPl72BMKaiJu0OahJIdO95pw==" 520 | }, 521 | "node_modules/is-browser": { 522 | "version": "2.1.0", 523 | "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", 524 | "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==" 525 | }, 526 | "node_modules/is-plain-obj": { 527 | "version": "1.1.0", 528 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 529 | "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", 530 | "engines": { 531 | "node": ">=0.10.0" 532 | } 533 | }, 534 | "node_modules/is-primitive": { 535 | "version": "3.0.1", 536 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", 537 | "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", 538 | "engines": { 539 | "node": ">=0.10.0" 540 | } 541 | }, 542 | "node_modules/mucss": { 543 | "version": "1.1.5", 544 | "resolved": "https://registry.npmjs.org/mucss/-/mucss-1.1.5.tgz", 545 | "integrity": "sha512-rB2Dvdp116N3SwYIM9/q1lNA+3NK8f48j9Oo19v5DonggWXbd3Se39NW4wQctgLNm1/LRPbTJWv6ixOmMfqJzw==", 546 | "deprecated": "Folks this is only a collection of snippets - just look at source and copy-paste to your project needed parts." 547 | }, 548 | "node_modules/mutype": { 549 | "version": "0.3.9", 550 | "resolved": "https://registry.npmjs.org/mutype/-/mutype-0.3.9.tgz", 551 | "integrity": "sha512-xT72r2GVIzWJF1zT8Oa9GlL1+QYmo0pfZwxT1hmsBWljP1D5I8t2NeLD+3QKM7uYhrMVxGF76MLfOSp3Vn3F8g==" 552 | }, 553 | "node_modules/parse-unit": { 554 | "version": "1.0.1", 555 | "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", 556 | "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==" 557 | }, 558 | "node_modules/st8": { 559 | "version": "2.1.0", 560 | "resolved": "https://registry.npmjs.org/st8/-/st8-2.1.0.tgz", 561 | "integrity": "sha512-qScSiuf6m66DALLJoM5NUtRM6/+cyPiqUHDgS278/NRaXYLiLmB3w1CQxVYzRdGLta81j2aJnv4iNUbwaePHiA==", 562 | "dependencies": { 563 | "is-primitive": "^3.0.1" 564 | } 565 | }, 566 | "node_modules/sube": { 567 | "version": "2.3.0", 568 | "resolved": "https://registry.npmjs.org/sube/-/sube-2.3.0.tgz", 569 | "integrity": "sha512-JlhKoqQLV1ni+eE+33stDVHXvoj3L+PV5+fL8TiifV45qz5Dc5CfcA6nkKSZ9+2D+s4s/qOgxiRkjW5QON3pBA==", 570 | "dev": true, 571 | "dependencies": { 572 | "@preact/signals-core": "^1.5.1" 573 | } 574 | }, 575 | "node_modules/swapdom": { 576 | "version": "1.2.1", 577 | "resolved": "https://registry.npmjs.org/swapdom/-/swapdom-1.2.1.tgz", 578 | "integrity": "sha512-pkH7uvR4a9HP6Z76DaP9aUwnYasC0NfVb0pjhOnELvxwVsgnlNRAIN5LBngFIay6t6/8wCoQ222zpP3ZJnqrJA==", 579 | "dev": true 580 | }, 581 | "node_modules/to-px": { 582 | "version": "1.1.0", 583 | "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.1.0.tgz", 584 | "integrity": "sha512-bfg3GLYrGoEzrGoE05TAL/Uw+H/qrf2ptr9V3W7U0lkjjyYnIfgxmVLUfhQ1hZpIQwin81uxhDjvUkDYsC0xWw==", 585 | "dependencies": { 586 | "parse-unit": "^1.0.1" 587 | } 588 | }, 589 | "node_modules/tst": { 590 | "version": "7.3.0", 591 | "resolved": "https://registry.npmjs.org/tst/-/tst-7.3.0.tgz", 592 | "integrity": "sha512-c0HQtijwZRlYImcd+mbdJiy4zNpq/YF/TbdUIU+sS8A2Psr29VlPVmD/U2AaNqjheIXDWC2lV7G0GCHRQciLkw==", 593 | "dev": true 594 | }, 595 | "node_modules/weak-map": { 596 | "version": "1.0.8", 597 | "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", 598 | "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" 599 | } 600 | } 601 | } 602 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resizable", 3 | "version": "2.0.0", 4 | "description": "Resizable behaviour for elements", 5 | "main": "resizable.js", 6 | "module": "resizable.js", 7 | "type": "module", 8 | "directories": { 9 | "test": "test" 10 | }, 11 | "scripts": { 12 | "watch": "esbuild resizable.js --bundle --outfile=resizable.min.js --watch --format=esm --sourcemap", 13 | "build": "esbuild resizable.js --bundle --outfile=resizable.min.js --minify --format=esm --sourcemap" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git://github.com/dy/resizable.git" 18 | }, 19 | "keywords": [ 20 | "resizable", 21 | "UI", 22 | "draggable", 23 | "draggy" 24 | ], 25 | "author": "Dmitry Iv ", 26 | "license": "MIT", 27 | "bugs": { 28 | "url": "https://github.com/dy/resizable/issues" 29 | }, 30 | "homepage": "https://github.com/dy/resizable", 31 | "devDependencies": { 32 | "esbuild": "^0.24.0", 33 | "hyperf": "^1.7.0", 34 | "tst": "^7.3.0" 35 | }, 36 | "dependencies": { 37 | "draggy": "^2.0.5", 38 | "emmy": "^7.1.1", 39 | "mucss": "^1.0.2" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /resizable.js: -------------------------------------------------------------------------------- 1 | import Draggable from 'draggy'; 2 | import emit from 'emmy/emit'; 3 | import on from 'emmy/on'; 4 | import off from 'emmy/off'; 5 | import css from 'mucss/css'; 6 | import paddings from 'mucss/padding'; 7 | import borders from 'mucss/border'; 8 | import margins from 'mucss/margin'; 9 | import offsets from 'mucss/offset'; 10 | 11 | 12 | var doc = document, root = doc.documentElement; 13 | 14 | 15 | /** 16 | * Make an element resizable. 17 | * 18 | * Note that we don’t need a container option 19 | * as arbitrary container is emulatable via fake resizable. 20 | * 21 | * @constructor 22 | */ 23 | function Resizable(el, options) { 24 | var self = this; 25 | 26 | if (!(self instanceof Resizable)) { 27 | return new Resizable(el, options); 28 | } 29 | 30 | self.element = el; 31 | 32 | Object.assign(self, options); 33 | 34 | //if element isn’t draggable yet - force it to be draggable, without movements 35 | if (self.draggable === true) { 36 | self.draggable = new Draggable(self.element, { 37 | within: self.within, 38 | css3: self.css3 39 | }); 40 | } else if (self.draggable) { 41 | self.draggable = new Draggable(self.element, self.draggable); 42 | self.draggable.css3 = self.css3; 43 | } else { 44 | self.draggable = new Draggable(self.element, { 45 | handle: null 46 | }); 47 | } 48 | 49 | self.createHandles(); 50 | 51 | //bind event, if any 52 | if (self.resize) { 53 | self.on('resize', self.resize); 54 | } 55 | } 56 | 57 | var proto = Resizable.prototype; 58 | 59 | 60 | /** Use css3 for draggable, if any */ 61 | proto.css3 = true; 62 | 63 | 64 | /** Make itself draggable to the row */ 65 | proto.draggable = false; 66 | 67 | // events 68 | proto.on = function (event, callback) { on(this, event, callback) } 69 | proto.off = function (event, callback) { off(this, event, callback) } 70 | 71 | 72 | /** Create handles according to options */ 73 | proto.createHandles = function () { 74 | var self = this; 75 | 76 | //init handles 77 | var handles; 78 | 79 | //parse value 80 | if (Array.isArray(self.handles)) { 81 | handles = {}; 82 | for (var i = self.handles.length; i--;) { 83 | handles[self.handles[i]] = null; 84 | } 85 | } 86 | else if (typeof self.handles === 'string') { 87 | handles = {}; 88 | var arr = self.handles.match(/([swne]+)/g); 89 | for (var i = arr.length; i--;) { 90 | handles[arr[i]] = null; 91 | } 92 | } 93 | else if (typeof self.handles === 'object' && self.handles.constructor === Object) { 94 | handles = self.handles; 95 | } 96 | //default set of handles depends on position. 97 | else { 98 | var position = getComputedStyle(self.element).position; 99 | var display = getComputedStyle(self.element).display; 100 | //if display is inline-like - provide only three handles 101 | //it is position: static or display: inline 102 | if (/inline/.test(display) || /static/.test(position)) { 103 | handles = { 104 | s: null, 105 | se: null, 106 | e: null 107 | }; 108 | 109 | //ensure position is not static 110 | css(self.element, 'position', 'relative'); 111 | } 112 | //else - all handles 113 | else { 114 | handles = { 115 | s: null, 116 | se: null, 117 | e: null, 118 | ne: null, 119 | n: null, 120 | nw: null, 121 | w: null, 122 | sw: null 123 | }; 124 | } 125 | } 126 | 127 | //create proper number of handles 128 | var handle; 129 | for (var direction in handles) { 130 | handles[direction] = self.createHandle(handles[direction], direction); 131 | } 132 | 133 | //save handles elements 134 | self.handles = handles; 135 | } 136 | 137 | 138 | /** Create handle for the direction */ 139 | proto.createHandle = function (handle, direction) { 140 | var self = this; 141 | 142 | var el = self.element; 143 | 144 | //make handle element 145 | if (!handle) { 146 | handle = document.createElement('div'); 147 | handle.classList.add('resizable-handle'); 148 | } 149 | 150 | //insert handle to the element 151 | self.element.appendChild(handle); 152 | 153 | //save direction 154 | handle.direction = direction; 155 | 156 | //detect self.within 157 | //FIXME: may be painful if resizable is created on detached element 158 | var within = self.within === 'parent' ? self.element.parentNode : self.within; 159 | 160 | //make handle draggable 161 | var draggy = new Draggable(handle, { 162 | within: within, 163 | //can’t use abs pos, as we engage it in styling 164 | // css3: false, 165 | threshold: self.threshold, 166 | axis: /^[ns]$/.test(direction) ? 'y' : /^[we]$/.test(direction) ? 'x' : 'both' 167 | }); 168 | 169 | draggy.on('dragstart', function (e) { 170 | self.m = margins(el); 171 | self.b = borders(el); 172 | self.p = paddings(el); 173 | 174 | //update draggalbe params 175 | self.draggable.update(e); 176 | 177 | //save initial dragging offsets 178 | var s = getComputedStyle(el); 179 | self.offsets = self.draggable.getCoords(); 180 | 181 | //recalc border-box 182 | if (getComputedStyle(el).boxSizing === 'border-box') { 183 | self.p.top = 0; 184 | self.p.bottom = 0; 185 | self.p.left = 0; 186 | self.p.right = 0; 187 | self.b.top = 0; 188 | self.b.bottom = 0; 189 | self.b.left = 0; 190 | self.b.right = 0; 191 | } 192 | 193 | //save initial size 194 | self.initSize = [el.offsetWidth - self.b.left - self.b.right - self.p.left - self.p.right, el.offsetHeight - self.b.top - self.b.bottom - self.p.top - self.p.bottom]; 195 | 196 | //save initial full size 197 | self.initSizeFull = [ 198 | el.offsetWidth, 199 | el.offsetHeight 200 | ]; 201 | 202 | //movement prev coords 203 | self.prevCoords = [0, 0]; 204 | 205 | //shift-caused offset 206 | self.shiftOffset = [0, 0]; 207 | 208 | //central initial coords 209 | self.center = [self.offsets[0] + self.initSize[0] / 2, self.offsets[1] + self.initSize[1] / 2]; 210 | 211 | //calc limits (max height/width from left/right) 212 | if (self.within) { 213 | var po = offsets(within); 214 | var o = offsets(el); 215 | self.maxSize = [ 216 | o.left - po.left + self.initSize[0], 217 | o.top - po.top + self.initSize[1], 218 | po.right - o.right + self.initSize[0], 219 | po.bottom - o.bottom + self.initSize[1] 220 | ]; 221 | } else { 222 | self.maxSize = [9999, 9999, 9999, 9999]; 223 | } 224 | 225 | //preset mouse cursor 226 | css(root, { 227 | 'cursor': direction + '-resize' 228 | }); 229 | 230 | //clear cursors 231 | for (var h in self.handles) { 232 | css(self.handles[h], 'cursor', null); 233 | } 234 | 235 | //trigger callbacks 236 | emit(self, 'resizestart'); 237 | emit(el, 'resizestart'); 238 | }); 239 | 240 | draggy.on('drag', function () { 241 | var coords = draggy.getCoords(); 242 | 243 | var prevSize = [ 244 | el.offsetWidth, 245 | el.offsetHeight 246 | ]; 247 | 248 | //change width/height properly 249 | if (draggy.shiftKey) { 250 | switch (direction) { 251 | case 'se': 252 | case 's': 253 | case 'e': 254 | break; 255 | case 'nw': 256 | coords[0] = -coords[0]; 257 | coords[1] = -coords[1]; 258 | break; 259 | case 'n': 260 | coords[1] = -coords[1]; 261 | break; 262 | case 'w': 263 | coords[0] = -coords[0]; 264 | break; 265 | case 'ne': 266 | coords[1] = -coords[1]; 267 | break; 268 | case 'sw': 269 | coords[0] = -coords[0]; 270 | break; 271 | }; 272 | 273 | //set placement is relative to initial center line 274 | css(el, { 275 | width: Math.min( 276 | self.initSize[0] + coords[0] * 2, 277 | self.maxSize[2] + coords[0], 278 | self.maxSize[0] + coords[0] 279 | ), 280 | height: Math.min( 281 | self.initSize[1] + coords[1] * 2, 282 | self.maxSize[3] + coords[1], 283 | self.maxSize[1] + coords[1] 284 | ) 285 | }); 286 | 287 | var difX = prevSize[0] - el.offsetWidth; 288 | var difY = prevSize[1] - el.offsetHeight; 289 | 290 | //update draggable limits 291 | self.draggable.updateLimits(); 292 | 293 | if (difX) { 294 | self.draggable.move(self.center[0] - self.initSize[0] / 2 - coords[0]); 295 | } 296 | 297 | if (difY) { 298 | self.draggable.move(null, self.center[1] - self.initSize[1] / 2 - coords[1]); 299 | } 300 | } 301 | else { 302 | switch (direction) { 303 | case 'se': 304 | css(el, { 305 | width: Math.min( 306 | self.initSize[0] + coords[0], 307 | self.maxSize[2] 308 | ), 309 | height: Math.min( 310 | self.initSize[1] + coords[1], 311 | self.maxSize[3] 312 | ) 313 | }); 314 | 315 | case 's': 316 | css(el, { 317 | height: Math.min( 318 | self.initSize[1] + coords[1], 319 | self.maxSize[3] 320 | ) 321 | }); 322 | 323 | case 'e': 324 | css(el, { 325 | width: Math.min( 326 | self.initSize[0] + coords[0], 327 | self.maxSize[2] 328 | ) 329 | }); 330 | case 'se': 331 | case 's': 332 | case 'e': 333 | self.draggable.updateLimits(); 334 | 335 | self.draggable.move( 336 | self.center[0] - self.initSize[0] / 2, 337 | self.center[1] - self.initSize[1] / 2 338 | ); 339 | 340 | break; 341 | 342 | case 'nw': 343 | css(el, { 344 | width: clamp(self.initSize[0] - coords[0], 0, self.maxSize[0]), 345 | height: clamp(self.initSize[1] - coords[1], 0, self.maxSize[1]) 346 | }); 347 | case 'n': 348 | css(el, { 349 | height: clamp(self.initSize[1] - coords[1], 0, self.maxSize[1]) 350 | }); 351 | case 'w': 352 | css(el, { 353 | width: clamp(self.initSize[0] - coords[0], 0, self.maxSize[0]) 354 | }); 355 | case 'nw': 356 | case 'n': 357 | case 'w': 358 | self.draggable.updateLimits(); 359 | 360 | //subtract t/l on changed size 361 | var deltaX = self.initSizeFull[0] - el.offsetWidth; 362 | var deltaY = self.initSizeFull[1] - el.offsetHeight; 363 | 364 | self.draggable.move(self.offsets[0] + deltaX, self.offsets[1] + deltaY); 365 | break; 366 | 367 | case 'ne': 368 | css(el, { 369 | width: clamp(self.initSize[0] + coords[0], 0, self.maxSize[2]), 370 | height: clamp(self.initSize[1] - coords[1], 0, self.maxSize[1]) 371 | }); 372 | 373 | self.draggable.updateLimits(); 374 | 375 | //subtract t/l on changed size 376 | var deltaY = self.initSizeFull[1] - el.offsetHeight; 377 | 378 | self.draggable.move(null, self.offsets[1] + deltaY); 379 | break; 380 | case 'sw': 381 | css(el, { 382 | width: clamp(self.initSize[0] - coords[0], 0, self.maxSize[0]), 383 | height: clamp(self.initSize[1] + coords[1], 0, self.maxSize[3]) 384 | }); 385 | 386 | self.draggable.updateLimits(); 387 | 388 | //subtract t/l on changed size 389 | var deltaX = self.initSizeFull[0] - el.offsetWidth; 390 | 391 | self.draggable.move(self.offsets[0] + deltaX); 392 | break; 393 | }; 394 | } 395 | 396 | //trigger callbacks 397 | emit(self, 'resize'); 398 | emit(el, 'resize'); 399 | 400 | draggy.setCoords(0, 0); 401 | }); 402 | 403 | draggy.on('dragend', function () { 404 | //clear cursor & pointer-events 405 | css(root, { 406 | 'cursor': null 407 | }); 408 | 409 | //get back cursors 410 | for (var h in self.handles) { 411 | css(self.handles[h], 'cursor', self.handles[h].direction + '-resize'); 412 | } 413 | 414 | //trigger callbacks 415 | emit(self, 'resizeend'); 416 | emit(el, 'resizeend'); 417 | }); 418 | 419 | //append styles 420 | css(handle, handleStyles[direction]); 421 | css(handle, 'cursor', direction + '-resize'); 422 | 423 | //append proper class 424 | handle.classList.add('resizable-handle-' + direction); 425 | 426 | return handle; 427 | }; 428 | 429 | 430 | /** deconstructor - removes any memory bindings */ 431 | proto.destroy = function () { 432 | //remove all handles 433 | for (var hName in this.handles) { 434 | this.element.removeChild(this.handles[hName]); 435 | Draggable.cache.get(this.handles[hName]).destroy(); 436 | } 437 | 438 | 439 | //remove references 440 | this.element = null; 441 | }; 442 | 443 | 444 | var w = 10; 445 | 446 | /** Threshold size */ 447 | proto.threshold = w; 448 | 449 | /** Styles for handles */ 450 | var handleStyles = { 451 | "e": { 452 | "left": "auto", 453 | "right": "-5px", 454 | "position": "absolute", 455 | "width": "10px", 456 | "top": "0px", 457 | "bottom": "0px" 458 | }, 459 | "w": { 460 | "right": "auto", 461 | "left": "-5px", 462 | "position": "absolute", 463 | "width": "10px", 464 | "top": "0px", 465 | "bottom": "0px" 466 | }, 467 | "s": { 468 | "top": "auto", 469 | "bottom": "-5px", 470 | "position": "absolute", 471 | "height": "10px", 472 | "left": "0px", 473 | "right": "0px" 474 | }, 475 | "n": { 476 | "bottom": "auto", 477 | "top": "-5px", 478 | "position": "absolute", 479 | "height": "10px", 480 | "left": "0px", 481 | "right": "0px" 482 | }, 483 | "nw": { 484 | "position": "absolute", 485 | "width": "10px", 486 | "height": "10px", 487 | "z-index": 1, 488 | "top": "-5px", 489 | "left": "-5px", 490 | "bottom": "auto", 491 | "right": "auto" 492 | }, 493 | "ne": { 494 | "position": "absolute", 495 | "width": "10px", 496 | "height": "10px", 497 | "z-index": 1, 498 | "top": "-5px", 499 | "right": "-5px", 500 | "bottom": "auto", 501 | "left": "auto" 502 | }, 503 | "sw": { 504 | "position": "absolute", 505 | "width": "10px", 506 | "height": "10px", 507 | "z-index": 1, 508 | "bottom": "-5px", 509 | "left": "-5px", 510 | "top": "auto", 511 | "right": "auto" 512 | }, 513 | "se": { 514 | "position": "absolute", 515 | "width": "10px", 516 | "height": "10px", 517 | "z-index": 1, 518 | "bottom": "-5px", 519 | "right": "-5px", 520 | "top": "auto", 521 | "left": "auto" 522 | } 523 | } 524 | 525 | function clamp(value, min, max) { 526 | return Math.max(min, Math.min(value, max)); 527 | } 528 | 529 | export default Resizable 530 | -------------------------------------------------------------------------------- /resizable.min.js: -------------------------------------------------------------------------------- 1 | var Me=Object.create;var xt=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty;var u=(i,t)=>()=>(t||i((t={exports:{}}).exports,t),t.exports);var He=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Te(t))!ke.call(i,r)&&r!==e&&xt(i,r,{get:()=>t[r],enumerable:!(s=Ce(t,r))||s.enumerable});return i};var m=(i,t,e)=>(e=i!=null?Me(Le(i)):{},He(t||!i||!i.__esModule?xt(e,"default",{value:i,enumerable:!0}):e,i));var C=u((ai,bt)=>{bt.exports=function i(t,e,s,r){if(!(this instanceof i))return new i(t,e,s,r);this.left=t||0,this.top=e||0,this.right=s||0,this.bottom=r||0,this.width=Math.abs(this.right-this.left),this.height=Math.abs(this.bottom-this.top)}});var yt=u(it=>{it.x=function(){return window.innerHeight>document.documentElement.clientHeight};it.y=function(){return window.innerWidth>document.documentElement.clientWidth}});var zt=u((li,St)=>{var T=document.createElement("div"),L=T.style;L.width="100px";L.height="100px";L.overflow="scroll";L.position="absolute";L.top="-9999px";document.documentElement.appendChild(T);St.exports=T.offsetWidth-T.clientWidth;document.documentElement.removeChild(T)});var Et=u((fi,_t)=>{_t.exports=function(i){var t=i;if(i===window)return!0;if(i===document)return!1;for(;t;){if(getComputedStyle(t).position==="fixed")return!0;t=t.offsetParent}return!1}});var Ot=u((ui,Xt)=>{Xt.exports=document.createElement("div")});var Mt=u((di,rt)=>{var st=getComputedStyle(document.documentElement,"");st?(X=(Array.prototype.slice.call(st).join("").match(/-(moz|webkit|ms)-/)||st.OLink===""&&["","o"])[1],Yt="WebKit|Moz|MS|O".match(new RegExp("("+X+")","i"))[1],rt.exports={dom:Yt,lowercase:X,css:"-"+X+"-",js:X[0].toUpperCase()+X.substr(1)}):rt.exports={dom:"",lowercase:"",css:"",js:""};var X,Yt});var nt=u((ci,kt)=>{var Ct=Ot().style,Tt=Mt().lowercase;kt.exports=function(i,t){if(!(!i||!t)){var e,s;if(typeof t=="string"){if(e=t,arguments.length<3)return i.style[Lt(e)];s=arguments[2]||"",t={},t[e]=s}for(e in t)typeof t[e]=="number"&&/left|right|bottom|top|width|height/i.test(e)&&(t[e]+="px"),s=t[e]||"",i.style[Lt(e)]=s}};function Lt(i){var t=i[0].toUpperCase()+i.slice(1);return Ct[i]!==void 0?i:Ct[Tt+t]!==void 0?Tt+t:""}});var k=u((pi,Ht)=>{Ht.exports=function(i){return i+="",parseFloat(i.slice(0,-2))||0}});var qt=u((mi,It)=>{var Ie=nt(),qe=k();It.exports=function(i){var t=Ie(i,"transform"),e=/translate(?:3d)?\s*\(([^\)]*)\)/.exec(t);if(!e)return[0,0];var s=e[1].split(/\s*,\s*/);return s.map(function(r){return qe(r)})}});var at=u((vi,At)=>{var z=window,F=document,ot=C(),A=yt(),W=zt(),Fe=Et(),gi=qt();At.exports=Ft;function Ft(i){if(!i)throw Error("Bad argument");var t,e;if(i===z)return e=ot(z.pageXOffset,z.pageYOffset),e.width=z.innerWidth-(A.y()?W:0),e.height=z.innerHeight-(A.x()?W:0),e.right=e.left+e.width,e.bottom=e.top+e.height,e;if(i===F){var s=Ft(F.documentElement);return s.bottom=Math.max(window.innerHeight,s.bottom),s.right=Math.max(window.innerWidth,s.right),s.height=Math.max(window.innerHeight,s.height),s.width=Math.max(window.innerHeight,s.width),A.y(F.documentElement)&&(s.right-=W),A.x(F.documentElement)&&(s.bottom-=W),s}try{t=i.getBoundingClientRect()}catch{t=ot(i.clientLeft,i.clientTop)}var r=Fe(i),o=r?0:z.pageXOffset,n=r?0:z.pageYOffset;return e=ot(t.left+o,t.top+n,t.left+o+i.offsetWidth,t.top+n+i.offsetHeight),e}});var P=u((wi,Wt)=>{Wt.exports={freeze:Ae,unfreeze:We,isFrozen:Re};var R=new WeakMap;function Ae(i,t){var e=R.get(i);return e&&e[t]?!1:(e||(e={},R.set(i,e)),e[t]=!0,!0)}function We(i,t){var e=R.get(i);return!e||!e[t]?!1:(e[t]=null,!0)}function Re(i,t){var e=R.get(i);return e&&e[t]}});var D=u((xi,Rt)=>{var K=new WeakMap;function Pe(i,t,e){var s=K.get(i),r;if(!t){if(r=s||{},e&&e.length){var o={};for(var t in r)o[t]=r[t].filter(function(a){return ht(a,e)});r=o}return r}return!s||!s[t]?[]:(r=s[t],e&&e.length&&(r=r.filter(function(n){return ht(n,e)})),r)}function Ke(i,t,e,s){var r=K.get(i);if(!r||!r[t])return!1;var o=r[t];if(s&&s.length&&!ht(e,s))return!1;for(var n=0;n=0)return!0}Rt.exports={get:Pe,remove:Ke,add:De}});var N=u((bi,Kt)=>{"use strict";Kt.exports=O;var Pt=P(),B=D();function O(i,t,e){if(!i)return i;var s,r;if(e===void 0){var o=[].slice.call(arguments,1),n=i.removeAll||i.removeAllListeners;if(n&&n.apply(i,o),!t){s=B.get(i);for(t in s)O(i,t);return i}if(typeof t=="function"){e=t,t=null,s=B.get(i);for(t in s)s[t].indexOf(e)>=0&&O(i,t,e);return i}return t=""+t,t.split(/\s+/).forEach(function(l){var c=l.split(".");if(l=c.shift(),s=B.get(i,l,c),l){var d={};d[l]=s,s=d}for(var v in s)[].slice.call(s[v]).forEach(function(S){O(i,v,S)})}),i}Array.isArray(t)||(t=(t+"").split(/\s+/));var a=i.removeEventListener||i.removeListener||i.detachEvent||i.off;if(t.forEach(function(l){var c=l.split(".");if(l=c.shift(),a)if(Pt.freeze(i,"off"+l))a.call(i,l,e),Pt.unfreeze(i,"off"+l);else return i;B.remove(i,l,e,c)}),e.__wrapFn){var f=e.__wrapFn;e.__wrapFn=null,O(i,t,f)}if(e.__origFn){var f=e.__origFn;e.__origFn=null,O(i,t,f)}return i}});var lt=u((yi,Bt)=>{"use strict";var Dt=P(),Be=D(),Ne=N();Bt.exports=$e;function $e(i,t,e,s={}){if(!i)return i;if(typeof i=="string"||s.target){for(;e.__wrapFn;)e=e.__wrapFn;var r=i;i=s.target||document,e.__wrapFn=Ue.bind({target:i,selector:r,cb:e}),e.__wrapFn.__origFn=e,e=e.__wrapFn}Array.isArray(t)||(t=(t+"").split(/\s+/));var o=i.addEventListener||i.addListener||i.attachEvent||i.on;return t.forEach(function(n){var a=n.split(".");if(n=a.shift(),o)if(Dt.freeze(i,"on"+n))o.call(i,n,e),Dt.unfreeze(i,"on"+n);else return i;Be.add(i,n,e,a)}),function(){Ne(i,t,e)}}function Ue(i){var t=this.cb,e=this.selector,s=this.target,r=i.target;r!==s&&(Array.isArray(e)||(e=[e]),e.some(function(o){var n;if(typeof o!="string"){if(!o.contains(r))return!1;n=o}else n=r.closest&&r.closest(o);return n&&s!==n&&s.contains(n)?(i.delegateTarget=n,!0):!1})&&t.apply(r,arguments))}});var dt=u((Si,Ut)=>{var Nt=P(),Ve=D();Ut.exports=function(i,t,e,s){if(i){var r=arguments;return typeof t=="string"?(r=[].slice.call(arguments,2),t.split(/\s+/).forEach(function(o){$t.apply(this,[i,o].concat(r))}),i):$t.apply(this,r)}};var ft=typeof jQuery>"u"?void 0:jQuery,ut=typeof document>"u"?void 0:document,je=typeof window>"u"?void 0:window;function $t(i,t,e,s){var r,o=t;ut&&(i instanceof Node||i===je)?(ut&&t instanceof Event?o=t:(o=ut.createEvent("CustomEvent"),o.initCustomEvent(t,s,!0,e)),r=i.dispatchEvent):ft&&i instanceof ft?(o=ft.Event(t,e),o.detail=e,r=s?targte.trigger:i.triggerHandler):r=i.dispatchEvent||i.emit||i.trigger||i.fire||i.raise;var n=[].slice.call(arguments,2);if(r&&Nt.freeze(i,"emit"+t))return r.apply(i,[o].concat(n)),Nt.unfreeze(i,"emit"+t),i;var a=o.split(".");o=a.shift();for(var f=Ve.get(i,o,a),l=f.slice(),c=0;c{$.exports.on=lt();$.exports.off=N();$.exports.emit=dt()});var Gt=u((_i,Zt)=>{function jt(i,t){return i.touches?arguments.length>1?ct(i.touches,t).clientY:i.targetTouches[0].clientY:i.clientY}function Qt(i,t){return i.touches?arguments.length>t?ct(i.touches,t).clientX:i.targetTouches[0].clientX:i.clientX}function U(i,t){return[Qt.apply(this,arguments),jt.apply(this,arguments)]}function ct(i,t){for(var e=0;e{"use strict";Jt.exports=function(t){return typeof t=="object"?t===null:typeof t!="function"}});var ie=u((Xi,ee)=>{"use strict";var Qe=te();w.OTHERWISE="_";w.ENTER="enter";w.EXIT="exit";function w(i,t){if(i instanceof w)return i;if(!(this instanceof w))return new w(i);this.states=i||{},this.context=t||this,this.inited=!1}w.prototype.set=function(i){var t=this.state,e=this.states,s=w.ENTER,r=w.EXIT,o=w.OTHERWISE,n=e[t]!==void 0?t:o,a=e[n],f,l=r+n;if(this.inited){if(a&&!this[l]){if(this[l]=!0,f=a[r]&&a[r].call?a[r].call(this.context):a[1]&&a[1].call?a[1].call(this.context):a[r],f===!1)return this[l]=!1,!1;if(f!==void 0&&f!==i)return this.set(f),this[l]=!1,!1;if(this[l]=!1,this.state!==t)return}if(i===t)return!1}else this.inited=!0;this.state=i;var c=e.hasOwnProperty(i)?i:o,d=e[c],v,S=s+c;if(!this[S]){if(this[S]=!0,d?d.call?v=d.call(this.context):Array.isArray(d)?v=d[0]&&d[0].call?d[0].call(this.context,this):d[0]:d.hasOwnProperty(s)?v=d[s].call?d[s].call(this.context):d[s]:Qe(d)&&(v=d):v=d,v===!1)return this.set(t),this[S]=!1,!1;if(v!==void 0&&v!==i)return this.set(v),this[S]=!1,!1;this[S]=!1}return this.context};w.prototype.get=function(){return this.state};ee.exports=w});var re=u((Oi,se)=>{se.exports=Ze;var pt=ie();pt.ENTER="before";pt.EXIT="after";function Ze(i,t,e,s){s?i[t]=function(){return arguments.length?r.set(arguments[0]):r.get()}:Object.defineProperty(i,t,{set:function(o){return r.set(o)},get:function(){return r.get()}});var r=new pt(e,i);return i}});var oe=u((Yi,ne)=>{ne.exports=function(t,e){e||(e=[0,""]),t=String(t);var s=parseFloat(t,10);return e[0]=s,e[1]=t.match(/[\d.\-\+]*\s*(.*)/)[1]||"",e}});var fe=u((Mi,le)=>{"use strict";var ae=oe();le.exports=gt;var H=he("in",document.body);function mt(i,t){var e=ae(getComputedStyle(i).getPropertyValue(t));return e[0]*gt(e[1],i)}function he(i,t){var e=document.createElement("div");e.style.height="128"+i,t.appendChild(e);var s=mt(e,"height")/128;return t.removeChild(e),s}function gt(i,t){if(!i)return null;switch(t=t||document.body,i=(i+""||"px").trim().toLowerCase(),(t===window||t===document)&&(t=document.body),i){case"%":return t.clientHeight/100;case"ch":case"ex":return he(i,t);case"em":return mt(t,"font-size");case"rem":return mt(document.body,"font-size");case"vw":return window.innerWidth/100;case"vh":return window.innerHeight/100;case"vmin":return Math.min(window.innerWidth,window.innerHeight)/100;case"vmax":return Math.max(window.innerWidth,window.innerHeight)/100;case"in":return H;case"cm":return H/2.54;case"mm":return H/25.4;case"pt":return H/72;case"pc":return H/6;case"px":return 1}var e=ae(i);if(!isNaN(e[0])&&e[1]){var s=gt(e[1],t);return typeof s=="number"?e[0]*s:null}return null}});var ge=u((Ti,me)=>{var pe=C(),G=k();me.exports=function(i){if(i===window)return pe();if(!(i instanceof Element))throw Error("Argument is not an element");var t=window.getComputedStyle(i);return pe(G(t.paddingLeft),G(t.paddingTop),G(t.paddingRight),G(t.paddingBottom))}});var xe=u((Li,we)=>{var ve=C(),J=k();we.exports=function(i){if(i===window)return ve();if(!(i instanceof Element))throw Error("Argument is not an element");var t=window.getComputedStyle(i);return ve(J(t.borderLeftWidth),J(t.borderTopWidth),J(t.borderRightWidth),J(t.borderBottomWidth))}});var Se=u((ki,ye)=>{var tt=k(),be=C();ye.exports=function(i){if(i===window)return be();if(!(i instanceof Element))throw Error("Argument is not an element");var t=window.getComputedStyle(i);return be(tt(t.marginLeft),tt(t.marginTop),tt(t.marginRight),tt(t.marginBottom))}});var I=m(at(),1),h=m(Vt(),1),x=m(Gt(),1),ce=m(re(),1),q=m(fe(),1),_=window,g=document,ue=g.documentElement,V=0,vt=class i{static cache=new WeakMap;css3=!0;axis=null;constructor(t,e){var s=i.cache.get(t);if(s)return s.state="reset",Object.assign(s,e),s.update(),s;this.id=Math.random().toString(36).substring(2,15),this._ns=".draggy_"+this.id,this.element=t,i.cache.set(t,this),(0,ce.default)(this,"state",i.state),this.currentHandles=[],Object.assign(this,e),this.handle===void 0&&(this.handle=this.element),this.droppable&&((0,h.on)(this,"dragstart",()=>{this.dropTargets=Z(this.droppable)}),(0,h.on)(this,"drag",()=>{if(this.dropTargets){var r=(0,I.default)(this.element);this.dropTargets.forEach(o=>{var n=(0,I.default)(o);Je(r,n,this.droppableTolerance)?(this.droppableClass&&o.classList.add(this.droppableClass),this.dropTarget||(this.dropTarget=o,(0,h.emit)(this,"dragover",o),(0,h.emit)(o,"dragover",this))):(this.dropTarget&&((0,h.emit)(this,"dragout",o),(0,h.emit)(o,"dragout",this),this.dropTarget=null),this.droppableClass&&o.classList.remove(this.droppableClass))})}}),(0,h.on)(this,"dragend",()=>{this.dropTarget&&((0,h.emit)(this.dropTarget,"drop",this),(0,h.emit)(this,"drop",this.dropTarget),this.dropTarget.classList.remove(this.droppableClass),this.dropTarget=null)})),this.update(),this.state="idle"}on(t,e){return(0,h.on)(this,t,e)}off(t,e){return(0,h.off)(this,t,e)}static state={_:{before:function(){this.element.classList.add("draggy-idle"),(0,h.emit)(this.element,"idle",null,!0),(0,h.emit)(this,"idle"),this.ctrlKey=!1,this.shiftKey=!1,this.metaKey=!1,this.altKey=!1,this.movementX=0,this.movementY=0,this.deltaX=0,this.deltaY=0,(0,h.on)(g,"mousedown"+this._ns+" touchstart"+this._ns,t=>{t.draggies&&(t.draggies.indexOf(this)<0||t.target.name===void 0&&(this.setTouch(t),this.update(t),this.state="threshold"))})},after:function(){this.element.classList.remove("draggy-idle"),(0,h.off)(g,this._ns),this.release&&(this._trackingInterval=setInterval(t=>{var e=Date.now(),s=e-this.timestamp,r=this.prevX-this.frame[0],o=this.prevY-this.frame[1];this.frame[0]=this.prevX,this.frame[1]=this.prevY;var n=Math.sqrt(r*r+o*o),a=Math.min(this.velocity*n/(1+s),this.maxSpeed);return this.speed=.8*a+.2*this.speed,this.angle=Math.atan2(o,r),(0,h.emit)(this,"track"),this},this.framerate))}},threshold:{before:function(){if(Ge(this.threshold)){this.state="drag";return}this.element.classList.add("draggy-threshold"),(0,h.emit)(this,"threshold"),(0,h.emit)(this.element,"threshold"),(0,h.on)(g,"touchmove"+this._ns+" mousemove"+this._ns,t=>{t.preventDefault();var e=(0,x.x)(t,this.touchIdx),s=(0,x.y)(t,this.touchIdx),r=this.prevMouseX-e,o=this.prevMouseY-s;(rthis.threshold[2]||othis.threshold[3])&&(this.update(t),this.state="drag")}),(0,h.on)(g,"mouseup"+this._ns+" touchend"+this._ns,t=>{t.preventDefault(),V=0,this.touchIdx=null,this.state="idle"})},after:function(){this.element.classList.remove("draggy-threshold"),(0,h.off)(g,this._ns)}},drag:{before:function(){de.disable(ue),this.element.classList.add("draggy-drag"),(0,h.emit)(this,"dragstart"),(0,h.emit)(this.element,"dragstart",null,!0),(0,h.emit)(this,"drag"),(0,h.emit)(this.element,"drag",null,!0),(0,h.on)(g,"touchend"+this._ns+" mouseup"+this._ns+" mouseleave"+this._ns,t=>{t.preventDefault(),V=0,this.touchIdx=null,this.speed>1?this.state="release":this.state="idle"}),(0,h.on)(g,"touchmove"+this._ns+" mousemove"+this._ns,t=>{this.drag(t)})},after:function(){de.enable(ue),this.element.classList.remove("draggy-drag"),(0,h.emit)(this,"dragend"),(0,h.emit)(this.element,"dragend",null,!0),(0,h.off)(g,this._ns),clearInterval(this._trackingInterval)}},release:{before:function(){this.element.classList.add("draggy-release"),clearTimeout(this._animateTimeout),this.element.style.transition=this.releaseDuration+"ms ease-out "+(this.css3?"transform":"position"),this._animateTimeout=setTimeout(()=>{this.state="idle"},this.releaseDuration),this.move(this.prevX+this.speed*Math.cos(this.angle),this.prevY+this.speed*Math.sin(this.angle)),this.speed=0,(0,h.emit)(this,"track")},after:function(){this.element.classList.remove("draggy-release"),this.element.style.transition=null}},reset:function(){return this.currentHandles.forEach(t=>{(0,h.off)(t,this._ns)}),clearTimeout(this._animateTimeout),(0,h.off)(g,this._ns),(0,h.off)(this.element,this._ns),"_"}};drag(t){t.preventDefault();var e=(0,x.x)(t,this.touchIdx),s=(0,x.y)(t,this.touchIdx),r=e-this.prevMouseX,o=s-this.prevMouseY,n=e,a=s;this._isFixed||(n+=_.pageXOffset,a+=_.pageYOffset),(t.ctrlKey||t.metaKey)&&(this.sniperOffsetX+=r*this.sniperSlowdown,this.sniperOffsetY+=o*this.sniperSlowdown),this.ctrlKey=t.ctrlKey,this.shiftKey=t.shiftKey,this.metaKey=t.metaKey,this.altKey=t.altKey;var f=n-this.initOffsetX-this.innerOffsetX-this.sniperOffsetX,l=a-this.initOffsetY-this.innerOffsetY-this.sniperOffsetY;this.move(f,l),this.prevMouseX=e,this.prevMouseY=s,(0,h.emit)(this,"drag"),(0,h.emit)(this.element,"drag",null,!0)}setTouch(t){if(!t.touches||this.touchIdx!==null)return this;this.touchIdx=V,V++}touchIdx=null;update(t){this._isFixed=ii(this.element),this.css3||(this.element.style.position="absolute"),this.currentHandles.forEach(n=>{(0,h.off)(n,this._ns)});var e=Z(this.cancel);this.currentHandles=Z(this.handle),this.currentHandles.forEach(n=>{(0,h.on)(n,"mousedown"+this._ns+" touchstart"+this._ns,a=>{a.draggies||(a.draggies=[]),!a.draggies.some(f=>this.element.contains(f.element))&&(e.some(f=>f.contains(a.target))||a.draggies.push(this))})}),this.updateLimits(),this.innerOffsetX=this.pin[0],this.innerOffsetY=this.pin[1];var s=this.element.getBoundingClientRect();if(t)this.prevMouseX=(0,x.x)(t,this.touchIdx),this.prevMouseY=(0,x.y)(t,this.touchIdx),this.innerOffsetX=-s.left+(0,x.x)(t,this.touchIdx),this.innerOffsetY=-s.top+(0,x.y)(t,this.touchIdx);else{var r=(this.pin[0]+this.pin[2])*.5,o=(this.pin[1]+this.pin[3])*.5;this.prevMouseX=s.left+r,this.prevMouseY=s.top+o,this.innerOffsetX=r,this.innerOffsetY=o}this.speed=0,this.amplitude=0,this.angle=0,this.timestamp=+new Date,this.frame=[this.prevX,this.prevY],this.sniperOffsetX=0,this.sniperOffsetY=0}updateLimits(){var t=this.getCoords();this.prevX=t[0],this.prevY=t[1],this.initX=t[0],this.initY=t[1];var e=(0,I.default)(this.element);this.initOffsetX=e.left-this.prevX,this.initOffsetY=e.top-this.prevY,this.offsets=e;var s=this.within;(this.within==="parent"||this.within===!0)&&(s=this.element.parentNode),s=s||g;var r=(0,I.default)(s);s===_&&this._isFixed&&(r.top-=_.pageYOffset,r.left-=_.pageXOffset,r.bottom-=_.pageYOffset,r.right-=_.pageXOffset),this.withinOffsets=r,this.overflowX=this.pin.width-r.width,this.overflowY=this.pin.height-r.height,this.limits={left:r.left-this.initOffsetX-this.pin[0]-(this.overflowX<0?0:this.overflowX),top:r.top-this.initOffsetY-this.pin[1]-(this.overflowY<0?0:this.overflowY),right:this.overflowX>0?0:r.right-this.initOffsetX-this.pin[2],bottom:this.overflowY>0?0:r.bottom-this.initOffsetY-this.pin[3]}}updateInfo(t,e){this.deltaX=t-this.prevX,this.deltaY=e-this.prevY,this.prevX=t,this.prevY=e,this.movementX=t-this.initX,this.movementY=e-this.initY}getCoords(){return this.css3?ei(this.element).slice(0,2)||[0,0]:[(0,q.default)(this.element.style.left),(0,q.default)(this.element.style.top)]}setCoords(t,e){this.css3?(t==null&&(t=this.prevX),e==null&&(e=this.prevY),t=Q(t,this.precision),e=Q(e,this.precision),this.element.style.transform=`translate3d(${t}px, ${e}px, 0)`,this.updateInfo(t,e)):(t==null&&(t=this.prevX),e==null&&(e=this.prevY),t=Q(t,this.precision),e=Q(e,this.precision),this.element.style.left=t,this.element.style.top=e,this.updateInfo(t,e))}within=g;handle;set pin(t){Array.isArray(t)?t.length===2?this._pin=[t[0],t[1],t[0],t[1]]:t.length===4&&(this._pin=t):typeof t=="number"?this._pin=[t,t,t,t]:this._pin=t,this._pin.width=this._pin[2]-this._pin[0],this._pin.height=this._pin[3]-this._pin[1]}get pin(){if(this._pin)return this._pin;var t=[0,0,this.offsets.width,this.offsets.height];return t.width=this.offsets.width,t.height=this.offsets.height,t}set threshold(t){typeof t=="number"?this._threshold=[-t*.5,-t*.5,t*.5,t*.5]:t.length===2?this._threshold=[-t[0]*.5,-t[1]*.5,t[0]*.5,t[1]*.5]:t.length===4?this._threshold=t:typeof t=="function"?this._threshold=t():this._threshold=[0,0,0,0]}get threshold(){return this._threshold||[0,0,0,0]}release=!1;releaseDuration=500;velocity=1e3;maxSpeed=250;framerate=50;precision=1;droppable=null;droppableTolerance=.5;droppableClass=null;sniper=!0;sniperSlowdown=.85;move(t,e){if(this.axis==="x"){t==null&&(t=this.prevX),e==null&&(e=this.prevY);var s=this.limits;if(this.repeat){var r=s.right-s.left,o=-this.initOffsetX+this.withinOffsets.left-this.pin[0]-Math.max(0,this.overflowX);t=Y(t-o,r)+o}else t=j(t,s.left,s.right);this.setCoords(t)}else if(this.axis==="y"){t==null&&(t=this.prevX),e==null&&(e=this.prevY);var s=this.limits;if(this.repeat){var n=s.bottom-s.top,a=-this.initOffsetY+this.withinOffsets.top-this.pin[1]-Math.max(0,this.overflowY);e=Y(e-a,n)+a}else e=j(e,s.top,s.bottom);this.setCoords(null,e)}else{t==null&&(t=this.prevX),e==null&&(e=this.prevY);var s=this.limits;if(this.repeat){var r=s.right-s.left,n=s.bottom-s.top,o=-this.initOffsetX+this.withinOffsets.left-this.pin[0]-Math.max(0,this.overflowX),a=-this.initOffsetY+this.withinOffsets.top-this.pin[1]-Math.max(0,this.overflowY);this.repeat==="x"?t=Y(t-o,r)+o:(this.repeat==="y"||(t=Y(t-o,r)+o),e=Y(e-a,n)+a)}t=j(t,s.left,s.right),e=j(e,s.top,s.bottom),this.setCoords(t,e)}}repeat=!1;destroy(){this.currentHandles.forEach(t=>{(0,h.off)(t,this._ns)}),this.state="destroy",clearTimeout(this._animateTimeout),(0,h.off)(g,this._ns),(0,h.off)(this.element,this._ns),this.element=null,this.within=null}};function Ge(i){if(!i[0]&&!i[1]&&!i[2]&&!i[3])return!0}function Z(i){return Array.isArray(i)?i.map(Z).reduce(function(t,e){return t.concat(e)},[]):i instanceof HTMLElement?[i]:[].slice.call(document.querySelectorAll(i))}function Je(i,t,e=0){let s=Math.max(0,Math.min(i.right,t.right)-Math.max(i.left,t.left)),r=Math.max(0,Math.min(i.bottom,t.bottom)-Math.max(i.top,t.top)),o=s*r,n=(i.right-i.left)*(i.bottom-i.top),a=(t.right-t.left)*(t.bottom-t.top),f=Math.min(n,a);return o>=e*f}function Y(i,t,e){if(e===void 0&&(e=t,t=0),t>e){var s=e;e=t,t=s}var r=e-t;return i=(i+t)%r-t,ie&&(i-=r),i}function j(i,t,e){return Math.max(t,Math.min(i,e))}function Q(i,t){return t===0?i:t?(t=parseFloat(t),i=Math.round(i/t)*t,parseFloat(i.toFixed(ti(t)))):Math.round(i)}function ti(i){var t=i+"",e=t.indexOf(".")+1;return e?t.length-e:0}var de={disable(i){i.style.userSelect="none",i.style.userDrag="none",i.style.touchCallout="none",i.setAttribute("unselectable","on"),i.addEventListener("selectstart",t=>t.preventDefault())},enable(i){i.style.userSelect=null,i.style.userDrag=null,i.style.touchCallout=null,i.removeAttribute("unselectable"),i.removeEventListener("selectstart",t=>t.preventDefault())}};function ei(i){var t=i.style.transform,e=/translate(?:3d)?\s*\(([^\)]*)\)/.exec(t);if(!e)return[0,0];var s=e[1].split(/\s*,\s*/);return[(0,q.default)(s[0]),(0,q.default)(s[1])]}function ii(i){var t=i;if(i===window)return!0;if(i===document)return!1;for(;t;){if(getComputedStyle(t).position==="fixed")return!0;t=t.offsetParent}return!1}var M=vt;var E=m(dt(),1),_e=m(lt(),1),Ee=m(N(),1),p=m(nt(),1),Xe=m(ge(),1),Oe=m(xe(),1),Ye=m(Se(),1),wt=m(at(),1),si=document,ze=si.documentElement;function et(i,t){var e=this;if(!(e instanceof et))return new et(i,t);e.element=i,Object.assign(e,t),e.draggable===!0?e.draggable=new M(e.element,{within:e.within,css3:e.css3}):e.draggable?(e.draggable=new M(e.element,e.draggable),e.draggable.css3=e.css3):e.draggable=new M(e.element,{handle:null}),e.createHandles(),e.resize&&e.on("resize",e.resize)}var y=et.prototype;y.css3=!0;y.draggable=!1;y.on=function(i,t){(0,_e.default)(this,i,t)};y.off=function(i,t){(0,Ee.default)(this,i,t)};y.createHandles=function(){var i=this,t;if(Array.isArray(i.handles)){t={};for(var e=i.handles.length;e--;)t[i.handles[e]]=null}else if(typeof i.handles=="string"){t={};for(var s=i.handles.match(/([swne]+)/g),e=s.length;e--;)t[s[e]]=null}else if(typeof i.handles=="object"&&i.handles.constructor===Object)t=i.handles;else{var r=getComputedStyle(i.element).position,o=getComputedStyle(i.element).display;/inline/.test(o)||/static/.test(r)?(t={s:null,se:null,e:null},(0,p.default)(i.element,"position","relative")):t={s:null,se:null,e:null,ne:null,n:null,nw:null,w:null,sw:null}}var n;for(var a in t)t[a]=i.createHandle(t[a],a);i.handles=t};y.createHandle=function(i,t){var e=this,s=e.element;i||(i=document.createElement("div"),i.classList.add("resizable-handle")),e.element.appendChild(i),i.direction=t;var r=e.within==="parent"?e.element.parentNode:e.within,o=new M(i,{within:r,threshold:e.threshold,axis:/^[ns]$/.test(t)?"y":/^[we]$/.test(t)?"x":"both"});return o.on("dragstart",function(n){e.m=(0,Ye.default)(s),e.b=(0,Oe.default)(s),e.p=(0,Xe.default)(s),e.draggable.update(n);var a=getComputedStyle(s);if(e.offsets=e.draggable.getCoords(),getComputedStyle(s).boxSizing==="border-box"&&(e.p.top=0,e.p.bottom=0,e.p.left=0,e.p.right=0,e.b.top=0,e.b.bottom=0,e.b.left=0,e.b.right=0),e.initSize=[s.offsetWidth-e.b.left-e.b.right-e.p.left-e.p.right,s.offsetHeight-e.b.top-e.b.bottom-e.p.top-e.p.bottom],e.initSizeFull=[s.offsetWidth,s.offsetHeight],e.prevCoords=[0,0],e.shiftOffset=[0,0],e.center=[e.offsets[0]+e.initSize[0]/2,e.offsets[1]+e.initSize[1]/2],e.within){var f=(0,wt.default)(r),l=(0,wt.default)(s);e.maxSize=[l.left-f.left+e.initSize[0],l.top-f.top+e.initSize[1],f.right-l.right+e.initSize[0],f.bottom-l.bottom+e.initSize[1]]}else e.maxSize=[9999,9999,9999,9999];(0,p.default)(ze,{cursor:t+"-resize"});for(var c in e.handles)(0,p.default)(e.handles[c],"cursor",null);(0,E.default)(e,"resizestart"),(0,E.default)(s,"resizestart")}),o.on("drag",function(){var n=o.getCoords(),a=[s.offsetWidth,s.offsetHeight];if(o.shiftKey){switch(t){case"se":case"s":case"e":break;case"nw":n[0]=-n[0],n[1]=-n[1];break;case"n":n[1]=-n[1];break;case"w":n[0]=-n[0];break;case"ne":n[1]=-n[1];break;case"sw":n[0]=-n[0];break}(0,p.default)(s,{width:Math.min(e.initSize[0]+n[0]*2,e.maxSize[2]+n[0],e.maxSize[0]+n[0]),height:Math.min(e.initSize[1]+n[1]*2,e.maxSize[3]+n[1],e.maxSize[1]+n[1])});var f=a[0]-s.offsetWidth,l=a[1]-s.offsetHeight;e.draggable.updateLimits(),f&&e.draggable.move(e.center[0]-e.initSize[0]/2-n[0]),l&&e.draggable.move(null,e.center[1]-e.initSize[1]/2-n[1])}else switch(t){case"se":(0,p.default)(s,{width:Math.min(e.initSize[0]+n[0],e.maxSize[2]),height:Math.min(e.initSize[1]+n[1],e.maxSize[3])});case"s":(0,p.default)(s,{height:Math.min(e.initSize[1]+n[1],e.maxSize[3])});case"e":(0,p.default)(s,{width:Math.min(e.initSize[0]+n[0],e.maxSize[2])});case"se":case"s":case"e":e.draggable.updateLimits(),e.draggable.move(e.center[0]-e.initSize[0]/2,e.center[1]-e.initSize[1]/2);break;case"nw":(0,p.default)(s,{width:b(e.initSize[0]-n[0],0,e.maxSize[0]),height:b(e.initSize[1]-n[1],0,e.maxSize[1])});case"n":(0,p.default)(s,{height:b(e.initSize[1]-n[1],0,e.maxSize[1])});case"w":(0,p.default)(s,{width:b(e.initSize[0]-n[0],0,e.maxSize[0])});case"nw":case"n":case"w":e.draggable.updateLimits();var d=e.initSizeFull[0]-s.offsetWidth,c=e.initSizeFull[1]-s.offsetHeight;e.draggable.move(e.offsets[0]+d,e.offsets[1]+c);break;case"ne":(0,p.default)(s,{width:b(e.initSize[0]+n[0],0,e.maxSize[2]),height:b(e.initSize[1]-n[1],0,e.maxSize[1])}),e.draggable.updateLimits();var c=e.initSizeFull[1]-s.offsetHeight;e.draggable.move(null,e.offsets[1]+c);break;case"sw":(0,p.default)(s,{width:b(e.initSize[0]-n[0],0,e.maxSize[0]),height:b(e.initSize[1]+n[1],0,e.maxSize[3])}),e.draggable.updateLimits();var d=e.initSizeFull[0]-s.offsetWidth;e.draggable.move(e.offsets[0]+d);break}(0,E.default)(e,"resize"),(0,E.default)(s,"resize"),o.setCoords(0,0)}),o.on("dragend",function(){(0,p.default)(ze,{cursor:null});for(var n in e.handles)(0,p.default)(e.handles[n],"cursor",e.handles[n].direction+"-resize");(0,E.default)(e,"resizeend"),(0,E.default)(s,"resizeend")}),(0,p.default)(i,ni[t]),(0,p.default)(i,"cursor",t+"-resize"),i.classList.add("resizable-handle-"+t),i};y.destroy=function(){for(var i in this.handles)this.element.removeChild(this.handles[i]),M.cache.get(this.handles[i]).destroy();this.element=null};var ri=10;y.threshold=ri;var ni={e:{left:"auto",right:"-5px",position:"absolute",width:"10px",top:"0px",bottom:"0px"},w:{right:"auto",left:"-5px",position:"absolute",width:"10px",top:"0px",bottom:"0px"},s:{top:"auto",bottom:"-5px",position:"absolute",height:"10px",left:"0px",right:"0px"},n:{bottom:"auto",top:"-5px",position:"absolute",height:"10px",left:"0px",right:"0px"},nw:{position:"absolute",width:"10px",height:"10px","z-index":1,top:"-5px",left:"-5px",bottom:"auto",right:"auto"},ne:{position:"absolute",width:"10px",height:"10px","z-index":1,top:"-5px",right:"-5px",bottom:"auto",left:"auto"},sw:{position:"absolute",width:"10px",height:"10px","z-index":1,bottom:"-5px",left:"-5px",top:"auto",right:"auto"},se:{position:"absolute",width:"10px",height:"10px","z-index":1,bottom:"-5px",right:"-5px",top:"auto",left:"auto"}};function b(i,t,e){return Math.max(t,Math.min(i,e))}var Ii=et;export{Ii as default}; 2 | /*! Bundled license information: 3 | 4 | is-primitive/index.js: 5 | (*! 6 | * is-primitive 7 | * 8 | * Copyright (c) 2014-present, Jon Schlinkert. 9 | * Released under the MIT License. 10 | *) 11 | */ 12 | //# sourceMappingURL=resizable.min.js.map 13 | -------------------------------------------------------------------------------- /resizable.min.js.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "sources": ["node_modules/mucss/rect.js", "node_modules/mucss/has-scroll.js", "node_modules/mucss/scrollbar.js", "node_modules/mucss/is-fixed.js", "node_modules/mucss/fake-element.js", "node_modules/mucss/prefix.js", "node_modules/mucss/css.js", "node_modules/mucss/parse-value.js", "node_modules/mucss/translate.js", "node_modules/mucss/offset.js", "node_modules/icicle/index.js", "node_modules/emmy/listeners.js", "node_modules/emmy/off.js", "node_modules/emmy/on.js", "node_modules/emmy/emit.js", "node_modules/emmy/index.js", "node_modules/get-client-xy/index.js", "node_modules/is-primitive/index.js", "node_modules/st8/index.js", "node_modules/define-state/index.js", "node_modules/parse-unit/index.js", "node_modules/to-px/browser.js", "node_modules/mucss/padding.js", "node_modules/mucss/border.js", "node_modules/mucss/margin.js", "node_modules/draggy/draggy.js", "resizable.js"], 4 | "sourcesContent": ["/**\r\n * Simple rect constructor.\r\n * It is just faster and smaller than constructing an object.\r\n *\r\n * @module mucss/rect\r\n *\r\n * @param {number} l left\r\n * @param {number} t top\r\n * @param {number} r right\r\n * @param {number} b bottom\r\n *\r\n * @return {Rect} A rectangle object\r\n */\r\nmodule.exports = function Rect (l,t,r,b) {\r\n\tif (!(this instanceof Rect)) return new Rect(l,t,r,b);\r\n\r\n\tthis.left=l||0;\r\n\tthis.top=t||0;\r\n\tthis.right=r||0;\r\n\tthis.bottom=b||0;\r\n\tthis.width=Math.abs(this.right - this.left);\r\n\tthis.height=Math.abs(this.bottom - this.top);\r\n};", "/**\r\n * Window scrollbar detector.\r\n *\r\n * @module mucss/has-scroll\r\n */\r\n\r\n//TODO: detect any element scroll, not only the window\r\nexports.x = function () {\r\n\treturn window.innerHeight > document.documentElement.clientHeight;\r\n};\r\nexports.y = function () {\r\n\treturn window.innerWidth > document.documentElement.clientWidth;\r\n};", "/**\r\n * Calculate scrollbar width.\r\n *\r\n * @module mucss/scrollbar\r\n */\r\n\r\n// Create the measurement node\r\nvar scrollDiv = document.createElement(\"div\");\r\n\r\nvar style = scrollDiv.style;\r\n\r\nstyle.width = '100px';\r\nstyle.height = '100px';\r\nstyle.overflow = 'scroll';\r\nstyle.position = 'absolute';\r\nstyle.top = '-9999px';\r\n\r\ndocument.documentElement.appendChild(scrollDiv);\r\n\r\n// the scrollbar width\r\nmodule.exports = scrollDiv.offsetWidth - scrollDiv.clientWidth;\r\n\r\n// Delete fake DIV\r\ndocument.documentElement.removeChild(scrollDiv);", "/**\r\n * Detect whether element is placed to fixed container or is fixed itself.\r\n *\r\n * @module mucss/is-fixed\r\n *\r\n * @param {(Element|Object)} el Element to detect fixedness.\r\n *\r\n * @return {boolean} Whether element is nested.\r\n */\r\nmodule.exports = function (el) {\r\n\tvar parentEl = el;\r\n\r\n\t//window is fixed, btw\r\n\tif (el === window) return true;\r\n\r\n\t//unlike the doc\r\n\tif (el === document) return false;\r\n\r\n\twhile (parentEl) {\r\n\t\tif (getComputedStyle(parentEl).position === 'fixed') return true;\r\n\t\tparentEl = parentEl.offsetParent;\r\n\t}\r\n\treturn false;\r\n};", "/** Just a fake element to test styles\r\n * @module mucss/fake-element\r\n */\r\n\r\nmodule.exports = document.createElement('div');", "/**\r\n * Vendor prefixes\r\n * Method of http://davidwalsh.name/vendor-prefix\r\n * @module mucss/prefix\r\n */\r\n\r\nvar styles = getComputedStyle(document.documentElement, '');\r\n\r\nif (!styles) {\r\n\tmodule.exports = {\r\n\t\tdom: '', lowercase: '', css: '', js: ''\r\n\t};\r\n}\r\n\r\nelse {\r\n\tvar pre = (Array.prototype.slice.call(styles)\r\n\t\t.join('')\r\n\t\t.match(/-(moz|webkit|ms)-/) || (styles.OLink === '' && ['', 'o'])\r\n\t)[1];\r\n\r\n\tvar dom = ('WebKit|Moz|MS|O').match(new RegExp('(' + pre + ')', 'i'))[1];\r\n\r\n\tmodule.exports = {\r\n\t\tdom: dom,\r\n\t\tlowercase: pre,\r\n\t\tcss: '-' + pre + '-',\r\n\t\tjs: pre[0].toUpperCase() + pre.substr(1)\r\n\t};\r\n}\r\n", "/**\r\n * Get or set element\u2019s style, prefix-agnostic.\r\n *\r\n * @module mucss/css\r\n */\r\nvar fakeStyle = require('./fake-element').style;\r\nvar prefix = require('./prefix').lowercase;\r\n\r\n\r\n/**\r\n * Apply styles to an element.\r\n *\r\n * @param {Element} el An element to apply styles.\r\n * @param {Object|string} obj Set of style rules or string to get style rule.\r\n */\r\nmodule.exports = function(el, obj){\r\n\tif (!el || !obj) return;\r\n\r\n\tvar name, value;\r\n\r\n\t//return value, if string passed\r\n\tif (typeof obj === 'string') {\r\n\t\tname = obj;\r\n\r\n\t\t//return value, if no value passed\r\n\t\tif (arguments.length < 3) {\r\n\t\t\treturn el.style[prefixize(name)];\r\n\t\t}\r\n\r\n\t\t//set style, if value passed\r\n\t\tvalue = arguments[2] || '';\r\n\t\tobj = {};\r\n\t\tobj[name] = value;\r\n\t}\r\n\r\n\tfor (name in obj){\r\n\t\t//convert numbers to px\r\n\t\tif (typeof obj[name] === 'number' && /left|right|bottom|top|width|height/i.test(name)) obj[name] += 'px';\r\n\r\n\t\tvalue = obj[name] || '';\r\n\r\n\t\tel.style[prefixize(name)] = value;\r\n\t}\r\n};\r\n\r\n\r\n/**\r\n * Return prefixized prop name, if needed.\r\n *\r\n * @param {string} name A property name.\r\n * @return {string} Prefixed property name.\r\n */\r\nfunction prefixize(name){\r\n\tvar uName = name[0].toUpperCase() + name.slice(1);\r\n\tif (fakeStyle[name] !== undefined) return name;\r\n\tif (fakeStyle[prefix + uName] !== undefined) return prefix + uName;\r\n\treturn '';\r\n}\r\n", "/**\r\n * Returns parsed css value.\r\n *\r\n * @module mucss/parse-value\r\n *\r\n * @param {string} str A string containing css units value\r\n *\r\n * @return {number} Parsed number value\r\n */\r\nmodule.exports = function (str){\r\n\tstr += '';\r\n\treturn parseFloat(str.slice(0,-2)) || 0;\r\n};\r\n\r\n//FIXME: add parsing units", "/**\r\n * Parse translate3d\r\n *\r\n * @module mucss/translate\r\n */\r\n\r\nvar css = require('./css');\r\nvar parseValue = require('./parse-value');\r\n\r\nmodule.exports = function (el) {\r\n\tvar translateStr = css(el, 'transform');\r\n\r\n\t//find translate token, retrieve comma-enclosed values\r\n\t//translate3d(1px, 2px, 2) \u2192 1px, 2px, 2\r\n\t//FIXME: handle nested calcs\r\n\tvar match = /translate(?:3d)?\\s*\\(([^\\)]*)\\)/.exec(translateStr);\r\n\r\n\tif (!match) return [0, 0];\r\n\tvar values = match[1].split(/\\s*,\\s*/);\r\n\r\n\t//parse values\r\n\t//FIXME: nested values are not necessarily pixels\r\n\treturn values.map(function (value) {\r\n\t\treturn parseValue(value);\r\n\t});\r\n};", "/**\r\n * Calculate absolute offsets of an element, relative to the document.\r\n *\r\n * @module mucss/offsets\r\n *\r\n */\r\nvar win = window;\r\nvar doc = document;\r\nvar Rect = require('./rect');\r\nvar hasScroll = require('./has-scroll');\r\nvar scrollbar = require('./scrollbar');\r\nvar isFixedEl = require('./is-fixed');\r\nvar getTranslate = require('./translate');\r\n\r\n\r\n/**\r\n * Return absolute offsets of any target passed\r\n *\r\n * @param {Element|window} el A target. Pass window to calculate viewport offsets\r\n * @return {Object} Offsets object with trbl.\r\n */\r\nmodule.exports = offsets;\r\n\r\nfunction offsets (el) {\r\n\tif (!el) throw Error('Bad argument');\r\n\r\n\t//calc client rect\r\n\tvar cRect, result;\r\n\r\n\t//return vp offsets\r\n\tif (el === win) {\r\n\t\tresult = Rect(\r\n\t\t\twin.pageXOffset,\r\n\t\t\twin.pageYOffset\r\n\t\t);\r\n\r\n\t\tresult.width = win.innerWidth - (hasScroll.y() ? scrollbar : 0),\r\n\t\tresult.height = win.innerHeight - (hasScroll.x() ? scrollbar : 0)\r\n\t\tresult.right = result.left + result.width;\r\n\t\tresult.bottom = result.top + result.height;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t//return absolute offsets if document requested\r\n\telse if (el === doc) {\r\n\t\tvar res = offsets(doc.documentElement);\r\n\t\tres.bottom = Math.max(window.innerHeight, res.bottom);\r\n\t\tres.right = Math.max(window.innerWidth, res.right);\r\n\t\tres.height = Math.max(window.innerHeight, res.height);\r\n\t\tres.width = Math.max(window.innerHeight, res.width);\r\n\t\tif (hasScroll.y(doc.documentElement)) res.right -= scrollbar;\r\n\t\tif (hasScroll.x(doc.documentElement)) res.bottom -= scrollbar;\r\n\t\treturn res;\r\n\t}\r\n\r\n\t//FIXME: why not every element has getBoundingClientRect method?\r\n\ttry {\r\n\t\tcRect = el.getBoundingClientRect();\r\n\t} catch (e) {\r\n\t\tcRect = Rect(\r\n\t\t\tel.clientLeft,\r\n\t\t\tel.clientTop\r\n\t\t);\r\n\t}\r\n\r\n\t//whether element is or is in fixed\r\n\tvar isFixed = isFixedEl(el);\r\n\tvar xOffset = isFixed ? 0 : win.pageXOffset;\r\n\tvar yOffset = isFixed ? 0 : win.pageYOffset;\r\n\r\n\tresult = Rect(\r\n\t\tcRect.left + xOffset,\r\n\t\tcRect.top + yOffset,\r\n\t\tcRect.left + xOffset + el.offsetWidth,\r\n\t\tcRect.top + yOffset + el.offsetHeight\r\n\t);\r\n\r\n\treturn result;\r\n};", "/**\r\n * @module Icicle\r\n */\r\nmodule.exports = {\r\n\tfreeze: lock,\r\n\tunfreeze: unlock,\r\n\tisFrozen: isLocked\r\n};\r\n\r\n\r\n/** Set of targets */\r\nvar lockCache = new WeakMap;\r\n\r\n\r\n/**\r\n * Set flag on target with the name passed\r\n *\r\n * @return {bool} Whether lock succeeded\r\n */\r\nfunction lock(target, name){\r\n\tvar locks = lockCache.get(target);\r\n\tif (locks && locks[name]) return false;\r\n\r\n\t//create lock set for a target, if none\r\n\tif (!locks) {\r\n\t\tlocks = {};\r\n\t\tlockCache.set(target, locks);\r\n\t}\r\n\r\n\t//set a new lock\r\n\tlocks[name] = true;\r\n\r\n\t//return success\r\n\treturn true;\r\n}\r\n\r\n\r\n/**\r\n * Unset flag on the target with the name passed.\r\n *\r\n * Note that if to return new value from the lock/unlock,\r\n * then unlock will always return false and lock will always return true,\r\n * which is useless for the user, though maybe intuitive.\r\n *\r\n * @param {*} target Any object\r\n * @param {string} name A flag name\r\n *\r\n * @return {bool} Whether unlock failed.\r\n */\r\nfunction unlock(target, name){\r\n\tvar locks = lockCache.get(target);\r\n\tif (!locks || !locks[name]) return false;\r\n\r\n\tlocks[name] = null;\r\n\r\n\treturn true;\r\n}\r\n\r\n\r\n/**\r\n * Return whether flag is set\r\n *\r\n * @param {*} target Any object to associate lock with\r\n * @param {string} name A flag name\r\n *\r\n * @return {Boolean} Whether locked or not\r\n */\r\nfunction isLocked(target, name){\r\n\tvar locks = lockCache.get(target);\r\n\treturn (locks && locks[name]);\r\n}", "/**\n * A storage for per-target callbacks.\n * WeakMap is the most safe solution.\n *\n * @module emmy/listeners\n */\n\n// target: {evt: callbacks}\nvar LISTENERS = new WeakMap()\n\n/**\n * Get listeners for the target/evt (optionally).\n *\n * @param {object} target a target object\n * @param {string}? evt an evt name, if undefined - return object with events\n *\n * @return {(object|array)} List/set of listeners\n */\nfunction get(target, evt, tags) {\n\tvar cbs = LISTENERS.get(target);\n\tvar result;\n\n\tif (!evt) {\n\t\tresult = cbs || {};\n\n\t\t// filter cbs by tags\n\t\tif (tags && tags.length) {\n\t\t\tvar filteredResult = {};\n\t\t\tfor (var evt in result) {\n\t\t\t\tfilteredResult[evt] = result[evt].filter(function (cb) {\n\t\t\t\t\treturn hasTags(cb, tags);\n\t\t\t\t});\n\t\t\t}\n\t\t\tresult = filteredResult;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tif (!cbs || !cbs[evt]) {\n\t\treturn [];\n\t}\n\n\tresult = cbs[evt];\n\n\t// if there are evt namespaces specified - filter callbacks\n\tif (tags && tags.length) {\n\t\tresult = result.filter(function (cb) {\n\t\t\treturn hasTags(cb, tags);\n\t\t});\n\t}\n\n\treturn result;\n}\n\n\n/**\n * Remove listener, if any\n */\nfunction remove(target, evt, cb, tags) {\n\t// get callbacks for the evt\n\tvar evtCallbacks = LISTENERS.get(target);\n\tif (!evtCallbacks || !evtCallbacks[evt]) return false;\n\n\tvar callbacks = evtCallbacks[evt];\n\n\t// if tags are passed - make sure callback has some tags before removing\n\tif (tags && tags.length && !hasTags(cb, tags)) return false;\n\n\t// remove specific handler\n\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t// once method has original callback in .cb\n\t\tif (callbacks[i] === cb) {\n\t\t\tcallbacks.splice(i, 1);\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n\n/**\n * Add a new listener\n */\nfunction add(target, evt, cb, tags) {\n\tif (!cb) return;\n\n\tvar targetCallbacks = LISTENERS.get(target);\n\n\t// ensure set of callbacks for the target exists\n\tif (!targetCallbacks) {\n\t\ttargetCallbacks = {}\n\t\tLISTENERS.set(target, targetCallbacks)\n\t}\n\n\t// save a new callback\n\t(targetCallbacks[evt] = targetCallbacks[evt] || []).push(cb);\n\n\t// save ns for a callback, if any\n\tif (tags && tags.length) {\n\t\tcb._ns = tags;\n\t}\n};\n\n\n/** Detect whether an cb has at least one tag from the list */\nfunction hasTags(cb, tags) {\n\tif (!cb._ns) return false\n\n\t// if cb is tagged with a ns and includes one of the ns passed - keep it\n\tfor (var i = tags.length; i--;) {\n\t\tif (cb._ns.indexOf(tags[i]) >= 0) return true;\n\t}\n}\n\n\nmodule.exports = {\n\tget: get, remove: remove, add: add\n};\n", "/**\n * @module emmy/off\n */\n'use strict'\n\nmodule.exports = off;\n\nvar icicle = require('icicle');\nvar listeners = require('./listeners');\n\n/**\n * Remove listener[s] from the target\n *\n * @param {[type]} evt [description]\n * @param {Function} fn [description]\n *\n * @return {[type]} [description]\n */\nfunction off(target, evt, fn) {\n\tif (!target) return target;\n\n\tvar callbacks, i;\n\n\t// unbind all listeners if no fn specified\n\tif (fn === undefined) {\n\t\tvar args = [].slice.call(arguments, 1);\n\n\t\t// try to use target removeAll method, if any\n\t\tvar allOff = target.removeAll || target.removeAllListeners;\n\n\t\t// call target removeAll\n\t\tif (allOff) {\n\t\t\tallOff.apply(target, args);\n\t\t}\n\n\t\t// then forget own callbacks, if any\n\n\t\t// unbind all evts\n\t\tif (!evt) {\n\t\t\tcallbacks = listeners.get(target);\n\t\t\tfor (evt in callbacks) {\n\t\t\t\toff(target, evt);\n\t\t\t}\n\t\t\treturn target\n\t\t}\n\n\t\t// unbind passed callback from all listeners\n\t\tif (typeof evt === 'function') {\n\t\t\tfn = evt\n\t\t\tevt = null\n\t\t\tcallbacks = listeners.get(target);\n\t\t\tfor (evt in callbacks) {\n\t\t\t\tif (callbacks[evt].indexOf(fn) >= 0) {\n\t\t\t\t\toff(target, evt, fn)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn target\n\t\t}\n\n\t\t// unbind all callbacks for an evt\n\t\tevt = '' + evt;\n\n\t\t// invoke method for each space-separated event from a list\n\t\tevt.split(/\\s+/).forEach(function (evt) {\n\t\t\tvar evtParts = evt.split('.');\n\t\t\tevt = evtParts.shift();\n\t\t\tcallbacks = listeners.get(target, evt, evtParts);\n\n\t\t\t// returned array of callbacks (as event is defined)\n\t\t\tif (evt) {\n\t\t\t\tvar obj = {};\n\t\t\t\tobj[evt] = callbacks;\n\t\t\t\tcallbacks = obj;\n\t\t\t}\n\n\t\t\t// for each group of callbacks - unbind all\n\t\t\tfor (var evtName in callbacks) {\n\t\t\t\t[].slice.call(callbacks[evtName]).forEach(function (cb) {\n\t\t\t\t\toff(target, evtName, cb);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn target;\n\t}\n\n\tif (!Array.isArray(evt)) evt = (evt + '').split(/\\s+/)\n\n\t// target events (string notation to advanced_optimizations)\n\tvar offMethod = target.removeEventListener || target.removeListener || target.detachEvent || target.off;\n\n\t// invoke method for each space-separated event from a list\n\tevt.forEach(function (evt) {\n\t\tvar evtParts = evt.split('.');\n\t\tevt = evtParts.shift();\n\n\t\t// use target `off`, if possible\n\t\tif (offMethod) {\n\t\t\t// avoid self-recursion from the outside\n\t\t\tif (icicle.freeze(target, 'off' + evt)) {\n\t\t\t\toffMethod.call(target, evt, fn);\n\t\t\t\ticicle.unfreeze(target, 'off' + evt);\n\t\t\t}\n\n\t\t\t// if it\u2019s frozen - ignore call\n\t\t\telse {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\n\t\t// forget callback\n\t\tlisteners.remove(target, evt, fn, evtParts);\n\t});\n\n\tif (fn.__wrapFn) {\n\t\tvar cb = fn.__wrapFn;\n\t\tfn.__wrapFn = null;\n\t\toff(target, evt, cb)\n\t}\n\tif (fn.__origFn) {\n\t\tvar cb = fn.__origFn;\n\t\tfn.__origFn = null;\n\t\toff(target, evt, cb)\n\t}\n\n\treturn target;\n}\n", "/**\n * @module emmy/on\n */\n'use strict'\n\nvar icicle = require('icicle');\nvar listeners = require('./listeners');\nvar off = require('./off')\n\nmodule.exports = on;\n\n\n/**\n * Bind fn to a target.\n *\n * @param {*} targte A single target to bind evt\n * @param {string} evt An event name\n * @param {Function} fn A callback\n * @param {Function}? condition An optional filtering fn for a callback\n * which accepts an event and returns callback\n *\n * @return {object} A target\n */\nfunction on(target, evt, cb, o = {}) {\n\tif (!target) return target;\n\n\t// wrap delegate\n\tif (typeof target === 'string' || o.target) {\n\t\twhile (cb.__wrapFn) cb = cb.__wrapFn;\n\n\t\tvar selector = target\n\t\ttarget = o.target || document\n\t\tcb.__wrapFn = delegate.bind({ target: target, selector: selector, cb: cb });\n\t\tcb.__wrapFn.__origFn = cb;\n\t\tcb = cb.__wrapFn;\n\t}\n\n\tif (!Array.isArray(evt)) evt = (evt + '').split(/\\s+/)\n\n\t// get target `on` method, if any\n\t// prefer native method name\n\tvar onMethod = target.addEventListener || target.addListener || target.attachEvent || target.on;\n\n\t// invoke method for each space-separated event from a list\n\tevt.forEach(function (evt) {\n\t\tvar evtParts = evt.split('.');\n\t\tevt = evtParts.shift();\n\n\t\t// use target event system, if possible\n\t\tif (onMethod) {\n\t\t\t// avoid self-recursions\n\t\t\t// if it is frozen - ignore call\n\t\t\t// FIXME: do better by comparing with self\n\t\t\tif (icicle.freeze(target, 'on' + evt)) {\n\t\t\t\tonMethod.call(target, evt, cb);\n\t\t\t\ticicle.unfreeze(target, 'on' + evt);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\n\t\t// save the callback\n\t\tlisteners.add(target, evt, cb, evtParts);\n\t});\n\n\treturn function () { off(target, evt, cb) };\n}\n\nfunction delegate(e) {\n\tvar cb = this.cb;\n\tvar selector = this.selector;\n\tvar container = this.target;\n\n\tvar srcEl = e.target;\n\n\t//deny self instantly\n\tif (srcEl === container) {\n\t\treturn;\n\t}\n\n\t//wrap to detect list of selectors\n\tif (!Array.isArray(selector)) {\n\t\tselector = [selector];\n\t}\n\n\tif (selector.some(function (selector) {\n\t\tvar delegateTarget;\n\t\tif (typeof selector != 'string') {\n\t\t\tif (!selector.contains(srcEl)) return false;\n\t\t\tdelegateTarget = selector;\n\t\t}\n\t\t//find at least one element in-between delegate target and event source\n\t\telse {\n\t\t\tdelegateTarget = srcEl.closest && srcEl.closest(selector);\n\t\t}\n\n\t\tif (delegateTarget && container !== delegateTarget && container.contains(delegateTarget)) {\n\t\t\t//save source of event\n\t\t\te.delegateTarget = delegateTarget;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t})) {\n\t\tcb.apply(srcEl, arguments)\n\t}\n}\n", "/**\n * @module emmy/emit\n */\nvar icicle = require('icicle');\nvar listeners = require('./listeners');\n\n\n/**\n * A simple wrapper to handle stringy/plain events\n */\nmodule.exports = function (target, evt, a, b){\n\tif (!target) return;\n\n\tvar args = arguments;\n\n\t// event string\n\tif (typeof evt === 'string') {\n\t\targs = [].slice.call(arguments, 2);\n\t\tevt.split(/\\s+/).forEach(function(evt){\n\t\t\temit.apply(this, [target, evt].concat(args));\n\t\t});\n\n\t\treturn target\n\t}\n\n\t// Event instance\n\treturn emit.apply(this, args);\n};\n\n\n/** detect env */\nvar $ = typeof jQuery === 'undefined' ? undefined : jQuery;\nvar doc = typeof document === 'undefined' ? undefined : document;\nvar win = typeof window === 'undefined' ? undefined : window;\n\n\n/**\n * Emit an event, optionally with data or bubbling\n * Accept only single elements/events\n *\n * @param {string} eventName An event name, e. g. 'click'\n * @param {*} data Any data to pass to event.details (DOM) or event.data (elsewhere)\n * @param {bool} bubbles Whether to trigger bubbling event (DOM)\n *\n *\n * @return {target} a target\n */\nfunction emit(target, eventName, data, bubbles){\n\tvar emitMethod, evt = eventName;\n\n\t//Create proper event for DOM objects\n\tif (doc && ((target instanceof Node) || target === win)) {\n\t\t//NOTE: this doesnot bubble on off-DOM elements\n\n\t\tif (doc && eventName instanceof Event) {\n\t\t\tevt = eventName;\n\t\t} else {\n\t\t\t//IE9-compliant constructor\n\t\t\tevt = doc.createEvent('CustomEvent');\n\t\t\tevt.initCustomEvent(eventName, bubbles, true, data);\n\n\t\t\t//a modern constructor would be:\n\t\t\t// var evt = new CustomEvent(eventName, { detail: data, bubbles: bubbles })\n\t\t}\n\n\t\temitMethod = target.dispatchEvent;\n\t}\n\n\t//create event for jQuery object\n\telse if ($ && target instanceof $) {\n\t\t//TODO: decide how to pass data\n\t\tevt = $.Event( eventName, data );\n\t\tevt.detail = data;\n\n\t\t//FIXME: reference case where triggerHandler needed (something with multiple calls)\n\t\temitMethod = bubbles ? targte.trigger : target.triggerHandler;\n\t}\n\n\t//detect target events\n\telse {\n\t\t//emit - default\n\t\t//trigger - jquery\n\t\t//dispatchEvent - DOM\n\t\t//raise - node-state\n\t\t//fire - ???\n\t\temitMethod = target.dispatchEvent || target.emit || target.trigger || target.fire || target.raise;\n\t}\n\n\tvar args = [].slice.call(arguments, 2);\n\n\t//use locks to avoid self-recursion on objects wrapping this method\n\tif (emitMethod) {\n\t\tif (icicle.freeze(target, 'emit' + eventName)) {\n\t\t\t//use target event system, if possible\n\t\t\temitMethod.apply(target, [evt].concat(args));\n\t\t\ticicle.unfreeze(target, 'emit' + eventName);\n\n\t\t\treturn target;\n\t\t}\n\n\t\t//if event was frozen - probably it is emitter instance\n\t\t//so perform normal callback\n\t}\n\n\t// invoke method for each space-separated event from a list\n\tvar evtParts = evt.split('.');\n\tevt = evtParts.shift();\n\n\t//fall back to default event system\n\tvar evtCallbacks = listeners.get(target, evt, evtParts);\n\n\t//copy callbacks to fire because list can be changed by some callback (like `off`)\n\tvar fireList = evtCallbacks.slice();\n\tfor (var i = 0; i < fireList.length; i++ ) {\n\t\tfireList[i] && fireList[i].apply(target, args);\n\t}\n\n\treturn target;\n}\n", "module.exports.on = require('./on')\nmodule.exports.off = require('./off')\nmodule.exports.emit = require('./emit')\n", "/**\r\n * Get clientY/clientY from an event.\r\n * If index is passed, treat it as index of global touches, not the targetTouches.\r\n * Global touches include target touches.\r\n *\r\n * @module get-client-xy\r\n *\r\n * @param {Event} e Event raised, like mousemove\r\n *\r\n * @return {number} Coordinate relative to the screen\r\n */\r\nfunction getClientY (e, idx) {\r\n\t// touch event\r\n\tif (e.touches) {\r\n\t\tif (arguments.length > 1) {\r\n\t\t\treturn findTouch(e.touches, idx).clientY\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn e.targetTouches[0].clientY;\r\n\t\t}\r\n\t}\r\n\r\n\t// mouse event\r\n\treturn e.clientY;\r\n}\r\nfunction getClientX (e, idx) {\r\n\t// touch event\r\n\tif (e.touches) {\r\n\t\tif (arguments.length > idx) {\r\n\t\t\treturn findTouch(e.touches, idx).clientX;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn e.targetTouches[0].clientX;\r\n\t\t}\r\n\t}\r\n\r\n\t// mouse event\r\n\treturn e.clientX;\r\n}\r\n\r\nfunction getClientXY (e, idx) {\r\n\treturn [getClientX.apply(this, arguments), getClientY.apply(this, arguments)];\r\n}\r\n\r\nfunction findTouch (touchList, idx) {\r\n\tfor (var i = 0; i < touchList.length; i++) {\r\n\t\tif (touchList[i].identifier === idx) {\r\n\t\t\treturn touchList[i];\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\ngetClientXY.x = getClientX;\r\ngetClientXY.y = getClientY;\r\ngetClientXY.findTouch = findTouch;\r\n\r\nmodule.exports = getClientXY;", "/*!\n * is-primitive \n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isPrimitive(val) {\n if (typeof val === 'object') {\n return val === null;\n }\n return typeof val !== 'function';\n};\n", "/**\r\n * @module st8\r\n *\r\n * Micro state machine.\r\n */\r\n'use strict'\r\n\r\n\r\nvar isPrimitive = require('is-primitive')\r\n\r\n\r\n// API constants\r\nState.OTHERWISE = '_'\r\nState.ENTER = 'enter'\r\nState.EXIT = 'exit'\r\n\r\n\r\n/**\r\n * Create a new state controller based on states passed\r\n *\r\n * @constructor\r\n *\r\n * @param {object} settings Initial states\r\n */\r\n\r\nfunction State(states, context){\r\n\t//ignore existing state\r\n\tif (states instanceof State) return states;\r\n\r\n\t//ensure new state instance is created\r\n\tif (!(this instanceof State)) return new State(states);\r\n\r\n\t//save states object\r\n\tthis.states = states || {};\r\n\r\n\t//save context\r\n\tthis.context = context || this;\r\n\r\n\t//initedFlag\r\n\tthis.inited = false;\r\n}\r\n\r\n\r\n/**\r\n * Go to a state\r\n *\r\n * @param {*} value Any new state to enter\r\n */\r\n\r\nState.prototype.set = function (value) {\r\n\tvar prevValue = this.state, states = this.states;\r\n\tvar ENTER = State.ENTER, EXIT = State.EXIT, OTHERWISE = State.OTHERWISE\r\n\t// console.group('set', value, prevValue);\r\n\r\n\t//leave old state\r\n\tvar oldStateName = states[prevValue] !== undefined ? prevValue : OTHERWISE\r\n\tvar oldState = states[oldStateName];\r\n\r\n\tvar leaveResult, leaveFlag = EXIT + oldStateName;\r\n\tif (this.inited) {\r\n\t\tif (oldState) {\r\n\t\t\tif (!this[leaveFlag]) {\r\n\t\t\t\tthis[leaveFlag] = true;\r\n\r\n\t\t\t\t//if oldState has after method - call it\r\n\t\t\t\tleaveResult = oldState[EXIT] && oldState[EXIT].call ?\r\n\t\t\t\t\t\toldState[EXIT].call(this.context) :\r\n\t\t\t\t\toldState[1] && oldState[1].call ?\r\n\t\t\t\t\t\toldState[1].call(this.context) : oldState[EXIT]\r\n\r\n\t\t\t\t//ignore changing if leave result is falsy\r\n\t\t\t\tif (leaveResult === false) {\r\n\t\t\t\t\tthis[leaveFlag] = false;\r\n\t\t\t\t\t// console.groupEnd();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//redirect, if returned anything\r\n\t\t\t\telse if (leaveResult !== undefined && leaveResult !== value) {\r\n\t\t\t\t\tthis.set(leaveResult);\r\n\t\t\t\t\tthis[leaveFlag] = false;\r\n\t\t\t\t\t// console.groupEnd();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis[leaveFlag] = false;\r\n\r\n\t\t\t\t//ignore redirect\r\n\t\t\t\tif (this.state !== prevValue) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//ignore not changed value\r\n\t\tif (value === prevValue) return false;\r\n\t}\r\n\telse {\r\n\t\tthis.inited = true;\r\n\t}\r\n\r\n\t//set current value\r\n\tthis.state = value;\r\n\r\n\r\n\t//try to enter new state\r\n\tvar newStateName = states.hasOwnProperty(value) ? value : OTHERWISE\r\n\tvar newState = states[newStateName];\r\n\tvar enterResult;\r\n\tvar enterFlag = ENTER + newStateName;\r\n\r\n\tif (!this[enterFlag]) {\r\n\t\tthis[enterFlag] = true;\r\n\r\n\t\tif (newState) {\r\n\t\t\t// enter pure function\r\n\t\t\tif (newState.call) {\r\n\t\t\t\tenterResult = newState.call(this.context)\r\n\t\t\t}\r\n\t\t\t// enter array\r\n\t\t\telse if (Array.isArray(newState)) {\r\n\t\t\t\tenterResult = (newState[0] && newState[0].call) ? newState[0].call(this.context, this) : newState[0]\r\n\t\t\t}\r\n\t\t\t// enter object with enter method\r\n\t\t\telse if (newState.hasOwnProperty(ENTER)) {\r\n\t\t\t\tenterResult = newState[ENTER].call ? newState[ENTER].call(this.context) : newState[ENTER];\r\n\t\t\t}\r\n\t\t\telse if (isPrimitive(newState)) {\r\n\t\t\t\tenterResult = newState\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tenterResult = newState\r\n\t\t}\r\n\r\n\t\t//ignore entering falsy state\r\n\t\tif (enterResult === false) {\r\n\t\t\tthis.set(prevValue);\r\n\t\t\tthis[enterFlag] = false;\r\n\t\t\t// console.groupEnd();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t//redirect if returned anything but current state\r\n\t\telse if (enterResult !== undefined && enterResult !== value) {\r\n\t\t\tthis.set(enterResult);\r\n\t\t\tthis[enterFlag] = false;\r\n\t\t\t// console.groupEnd();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis[enterFlag] = false;\r\n\t}\r\n\r\n\t// console.groupEnd();\r\n\r\n\t//return context to chain calls\r\n\treturn this.context;\r\n};\r\n\r\n\r\n/** Get current state */\r\n\r\nState.prototype.get = function(){\r\n\treturn this.state;\r\n};\r\n\r\nmodule.exports = State;\r\n", "/**\r\n * Define stateful property on an object\r\n */\r\nmodule.exports = defineState;\r\n\r\nvar State = require('st8');\r\n\tState.ENTER = 'before'\r\n\tState.EXIT = 'after'\r\n\r\n/**\r\n * Define stateful property on a target\r\n *\r\n * @param {object} target Any object\r\n * @param {string} property Property name\r\n * @param {object} descriptor State descriptor\r\n *\r\n * @return {object} target\r\n */\r\nfunction defineState (target, property, descriptor, isFn) {\r\n\t//define accessor on a target\r\n\tif (isFn) {\r\n\t\ttarget[property] = function () {\r\n\t\t\tif (arguments.length) {\r\n\t\t\t\treturn state.set(arguments[0]);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn state.get();\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\t//define setter/getter on a target\r\n\telse {\r\n\t\tObject.defineProperty(target, property, {\r\n\t\t\tset: function (value) {\r\n\t\t\t\treturn state.set(value);\r\n\t\t\t},\r\n\t\t\tget: function () {\r\n\t\t\t\treturn state.get();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//define state controller\r\n\tvar state = new State(descriptor, target);\r\n\r\n\treturn target;\r\n}\r\n", "module.exports = function parseUnit(str, out) {\n if (!out)\n out = [ 0, '' ]\n\n str = String(str)\n var num = parseFloat(str, 10)\n out[0] = num\n out[1] = str.match(/[\\d.\\-\\+]*\\s*(.*)/)[1] || ''\n return out\n}", "'use strict'\n\nvar parseUnit = require('parse-unit')\n\nmodule.exports = toPX\n\nvar PIXELS_PER_INCH = getSizeBrutal('in', document.body) // 96\n\n\nfunction getPropertyInPX(element, prop) {\n var parts = parseUnit(getComputedStyle(element).getPropertyValue(prop))\n return parts[0] * toPX(parts[1], element)\n}\n\n//This brutal hack is needed\nfunction getSizeBrutal(unit, element) {\n var testDIV = document.createElement('div')\n testDIV.style['height'] = '128' + unit\n element.appendChild(testDIV)\n var size = getPropertyInPX(testDIV, 'height') / 128\n element.removeChild(testDIV)\n return size\n}\n\nfunction toPX(str, element) {\n if (!str) return null\n\n element = element || document.body\n str = (str + '' || 'px').trim().toLowerCase()\n if(element === window || element === document) {\n element = document.body\n }\n\n switch(str) {\n case '%': //Ambiguous, not sure if we should use width or height\n return element.clientHeight / 100.0\n case 'ch':\n case 'ex':\n return getSizeBrutal(str, element)\n case 'em':\n return getPropertyInPX(element, 'font-size')\n case 'rem':\n return getPropertyInPX(document.body, 'font-size')\n case 'vw':\n return window.innerWidth/100\n case 'vh':\n return window.innerHeight/100\n case 'vmin':\n return Math.min(window.innerWidth, window.innerHeight) / 100\n case 'vmax':\n return Math.max(window.innerWidth, window.innerHeight) / 100\n case 'in':\n return PIXELS_PER_INCH\n case 'cm':\n return PIXELS_PER_INCH / 2.54\n case 'mm':\n return PIXELS_PER_INCH / 25.4\n case 'pt':\n return PIXELS_PER_INCH / 72\n case 'pc':\n return PIXELS_PER_INCH / 6\n case 'px':\n return 1\n }\n\n // detect number of units\n var parts = parseUnit(str)\n if (!isNaN(parts[0]) && parts[1]) {\n var px = toPX(parts[1], element)\n return typeof px === 'number' ? parts[0] * px : null\n }\n\n return null\n}\n", "/**\r\n * Caclulate paddings of an element.\r\n * @module mucss/paddings\r\n */\r\n\r\n\r\nvar Rect = require('./rect');\r\nvar parse = require('./parse-value');\r\n\r\n\r\n/**\r\n * Return paddings of an element.\r\n *\r\n * @param {Element} el An element to calc paddings.\r\n * @return {Object} Paddings object `{top:n, bottom:n, left:n, right:n}`.\r\n */\r\nmodule.exports = function(el){\r\n\tif (el === window) return Rect();\r\n\r\n\tif (!(el instanceof Element)) throw Error('Argument is not an element');\r\n\r\n\tvar style = window.getComputedStyle(el);\r\n\r\n\treturn Rect(\r\n\t\tparse(style.paddingLeft),\r\n\t\tparse(style.paddingTop),\r\n\t\tparse(style.paddingRight),\r\n\t\tparse(style.paddingBottom)\r\n\t);\r\n};", "/**\r\n * Parse element\u2019s borders\r\n *\r\n * @module mucss/borders\r\n */\r\n\r\nvar Rect = require('./rect');\r\nvar parse = require('./parse-value');\r\n\r\n/**\r\n * Return border widths of an element\r\n */\r\nmodule.exports = function(el){\r\n\tif (el === window) return Rect();\r\n\r\n\tif (!(el instanceof Element)) throw Error('Argument is not an element');\r\n\r\n\tvar style = window.getComputedStyle(el);\r\n\r\n\treturn Rect(\r\n\t\tparse(style.borderLeftWidth),\r\n\t\tparse(style.borderTopWidth),\r\n\t\tparse(style.borderRightWidth),\r\n\t\tparse(style.borderBottomWidth)\r\n\t);\r\n};", "/**\r\n * Get margins of an element.\r\n * @module mucss/margins\r\n */\r\n\r\nvar parse = require('./parse-value');\r\nvar Rect = require('./rect');\r\n\r\n/**\r\n * Return margins of an element.\r\n *\r\n * @param {Element} el An element which to calc margins.\r\n * @return {Object} Paddings object `{top:n, bottom:n, left:n, right:n}`.\r\n */\r\nmodule.exports = function(el){\r\n\tif (el === window) return Rect();\r\n\r\n\tif (!(el instanceof Element)) throw Error('Argument is not an element');\r\n\r\n\tvar style = window.getComputedStyle(el);\r\n\r\n\treturn Rect(\r\n\t\tparse(style.marginLeft),\r\n\t\tparse(style.marginTop),\r\n\t\tparse(style.marginRight),\r\n\t\tparse(style.marginBottom)\r\n\t);\r\n};\r\n", "import offsets from 'mucss/offset'\nimport { on, off, emit } from 'emmy';\nimport { x as getClientX, y as getClientY } from 'get-client-xy';\nimport defineState from 'define-state';\nimport px from 'to-px';\n\n\nconst win = window, doc = document, root = doc.documentElement;\n\n/** Current number of draggable touches */\nlet touches = 0;\n\n/**\n * Make an element draggable.\n *\n * @constructor\n *\n * @param {HTMLElement} target An element whether in/out of DOM\n * @param {Object} options An draggable options\n *\n * @return {HTMLElement} Target element\n */\nclass Draggable {\n\t/**\n\t * Draggable instances associated with elements.\n\t *\n\t * Storing them on elements is\n\t * - leak-prone,\n\t * - pollutes element\u2019s namespace,\n\t * - requires some artificial key to store,\n\t * - unable to retrieve controller easily.\n\t *\n\t * That is why weakmap.\n\t */\n\tstatic cache = new WeakMap;\n\n\n\t//enable css3 by default\n\tcss3 = true;\n\n\t//both axes by default\n\taxis = null;\n\n\n\tconstructor(target, options) {\n\t\t//ignore existing instance\n\t\tvar instance = Draggable.cache.get(target);\n\t\tif (instance) {\n\t\t\tinstance.state = 'reset';\n\n\t\t\t//take over options\n\t\t\tObject.assign(instance, options);\n\n\t\t\tinstance.update();\n\n\t\t\treturn instance;\n\t\t}\n\n\t\telse {\n\t\t\t//get unique id for instance\n\t\t\t//needed to track event binders\n\t\t\tthis.id = Math.random().toString(36).substring(2, 15)\n\t\t\tthis._ns = '.draggy_' + this.id;\n\n\t\t\t//save element passed\n\t\t\tthis.element = target;\n\n\t\t\tDraggable.cache.set(target, this);\n\t\t}\n\n\t\t//define state behaviour\n\t\tdefineState(this, 'state', Draggable.state);\n\n\t\t//preset handles\n\t\tthis.currentHandles = [];\n\n\t\t//take over options\n\t\tObject.assign(this, options);\n\n\t\t//define handle\n\t\tif (this.handle === undefined) {\n\t\t\tthis.handle = this.element;\n\t\t}\n\n\t\t//setup droppable\n\t\tif (this.droppable) {\n\t\t\ton(this, 'dragstart', () => {\n\t\t\t\tthis.dropTargets = q(this.droppable);\n\t\t\t});\n\n\t\t\ton(this, 'drag', () => {\n\t\t\t\tif (!this.dropTargets) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar rect = offsets(this.element);\n\n\t\t\t\tthis.dropTargets.forEach((dropTarget) => {\n\t\t\t\t\tvar targetRect = offsets(dropTarget);\n\n\t\t\t\t\tif (intersect(rect, targetRect, this.droppableTolerance)) {\n\t\t\t\t\t\tif (this.droppableClass) {\n\t\t\t\t\t\t\tdropTarget.classList.add(this.droppableClass);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!this.dropTarget) {\n\t\t\t\t\t\t\tthis.dropTarget = dropTarget;\n\n\t\t\t\t\t\t\temit(this, 'dragover', dropTarget);\n\t\t\t\t\t\t\temit(dropTarget, 'dragover', this);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (this.dropTarget) {\n\t\t\t\t\t\t\temit(this, 'dragout', dropTarget);\n\t\t\t\t\t\t\temit(dropTarget, 'dragout', this);\n\n\t\t\t\t\t\t\tthis.dropTarget = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.droppableClass) {\n\t\t\t\t\t\t\tdropTarget.classList.remove(this.droppableClass);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\ton(this, 'dragend', () => {\n\t\t\t\t//emit drop, if any\n\t\t\t\tif (this.dropTarget) {\n\t\t\t\t\temit(this.dropTarget, 'drop', this);\n\t\t\t\t\temit(this, 'drop', this.dropTarget);\n\t\t\t\t\tthis.dropTarget.classList.remove(this.droppableClass);\n\t\t\t\t\tthis.dropTarget = null;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t//try to calc out basic limits\n\t\tthis.update();\n\n\t\t//go to initial state\n\t\tthis.state = 'idle';\n\t}\n\n\t// Emitter API\n\ton(eventName, callback) {\n\t\treturn on(this, eventName, callback);\n\t}\n\n\toff(eventName, callback) {\n\t\treturn off(this, eventName, callback);\n\t}\n\n\t// draggable states\n\tstatic state = {\n\t\t//idle\n\t\t_: {\n\t\t\tbefore: function () {\n\t\t\t\tthis.element.classList.add('draggy-idle');\n\n\t\t\t\t//emit drag evts on element\n\t\t\t\temit(this.element, 'idle', null, true);\n\t\t\t\temit(this, 'idle');\n\n\t\t\t\t//reset keys\n\t\t\t\tthis.ctrlKey = false;\n\t\t\t\tthis.shiftKey = false;\n\t\t\t\tthis.metaKey = false;\n\t\t\t\tthis.altKey = false;\n\n\t\t\t\t//reset movement params\n\t\t\t\tthis.movementX = 0;\n\t\t\t\tthis.movementY = 0;\n\t\t\t\tthis.deltaX = 0;\n\t\t\t\tthis.deltaY = 0;\n\n\t\t\t\ton(doc, 'mousedown' + this._ns + ' touchstart' + this._ns, (e) => {\n\t\t\t\t\t//ignore non-draggy events\n\t\t\t\t\tif (!e.draggies) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//ignore dragstart for not registered draggies\n\t\t\t\t\tif (e.draggies.indexOf(this) < 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//if target is focused - ignore drag\n\t\t\t\t\t//FIXME: detect focused by whitelist of tags, name supposition may be wrong (idk, form elements have names, so likely to be focused by click)\n\t\t\t\t\tif (e.target.name !== undefined) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//multitouch has multiple starts\n\t\t\t\t\tthis.setTouch(e);\n\n\t\t\t\t\t//update movement params\n\t\t\t\t\tthis.update(e);\n\n\t\t\t\t\t//go to threshold state\n\t\t\t\t\tthis.state = 'threshold';\n\t\t\t\t});\n\t\t\t},\n\t\t\tafter: function () {\n\t\t\t\tthis.element.classList.remove('draggy-idle');\n\n\t\t\t\toff(doc, this._ns);\n\n\t\t\t\t//set up tracking\n\t\t\t\tif (this.release) {\n\t\t\t\t\tthis._trackingInterval = setInterval((e) => {\n\t\t\t\t\t\tvar now = Date.now();\n\t\t\t\t\t\tvar elapsed = now - this.timestamp;\n\n\t\t\t\t\t\t//get delta movement since the last track\n\t\t\t\t\t\tvar dX = this.prevX - this.frame[0];\n\t\t\t\t\t\tvar dY = this.prevY - this.frame[1];\n\t\t\t\t\t\tthis.frame[0] = this.prevX;\n\t\t\t\t\t\tthis.frame[1] = this.prevY;\n\n\t\t\t\t\t\tvar delta = Math.sqrt(dX * dX + dY * dY);\n\n\t\t\t\t\t\t//get speed as average of prev and current (prevent div by zero)\n\t\t\t\t\t\tvar v = Math.min(this.velocity * delta / (1 + elapsed), this.maxSpeed);\n\t\t\t\t\t\tthis.speed = 0.8 * v + 0.2 * this.speed;\n\n\t\t\t\t\t\t//get new angle as a last diff\n\t\t\t\t\t\t//NOTE: vector average isn\u2019t the same as speed scalar average\n\t\t\t\t\t\tthis.angle = Math.atan2(dY, dX);\n\n\t\t\t\t\t\temit(this, 'track');\n\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}, this.framerate);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tthreshold: {\n\t\t\tbefore: function () {\n\t\t\t\t//ignore threshold state, if threshold is none\n\t\t\t\tif (isZeroArray(this.threshold)) {\n\t\t\t\t\tthis.state = 'drag';\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.element.classList.add('draggy-threshold');\n\n\t\t\t\t//emit drag evts on element\n\t\t\t\temit(this, 'threshold');\n\t\t\t\temit(this.element, 'threshold');\n\n\t\t\t\t//listen to doc movement\n\t\t\t\ton(doc, 'touchmove' + this._ns + ' mousemove' + this._ns, (e) => {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t//compare movement to the threshold\n\t\t\t\t\tvar clientX = getClientX(e, this.touchIdx);\n\t\t\t\t\tvar clientY = getClientY(e, this.touchIdx);\n\t\t\t\t\tvar difX = this.prevMouseX - clientX;\n\t\t\t\t\tvar difY = this.prevMouseY - clientY;\n\n\t\t\t\t\tif (difX < this.threshold[0] || difX > this.threshold[2] || difY < this.threshold[1] || difY > this.threshold[3]) {\n\t\t\t\t\t\tthis.update(e);\n\t\t\t\t\t\tthis.state = 'drag';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ton(doc, 'mouseup' + this._ns + ' touchend' + this._ns + '', (e) => {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t//forget touches\n\t\t\t\t\ttouches = 0;\n\t\t\t\t\tthis.touchIdx = null;\n\n\n\t\t\t\t\tthis.state = 'idle';\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tafter: function () {\n\t\t\t\tthis.element.classList.remove('draggy-threshold');\n\t\t\t\toff(doc, this._ns);\n\t\t\t}\n\t\t},\n\n\t\tdrag: {\n\t\t\tbefore: function () {\n\t\t\t\t//reduce dragging clutter\n\t\t\t\tselection.disable(root);\n\n\t\t\t\tthis.element.classList.add('draggy-drag');\n\n\t\t\t\t//emit drag evts on element\n\t\t\t\temit(this, 'dragstart');\n\t\t\t\temit(this.element, 'dragstart', null, true);\n\n\t\t\t\t//emit drag events on this\n\t\t\t\temit(this, 'drag');\n\t\t\t\temit(this.element, 'drag', null, true);\n\n\t\t\t\t//stop drag on leave\n\t\t\t\ton(doc, 'touchend' + this._ns + ' mouseup' + this._ns + ' mouseleave' + this._ns, (e) => {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t//forget touches - dragend is called once\n\t\t\t\t\ttouches = 0;\n\t\t\t\t\tthis.touchIdx = null;\n\n\n\t\t\t\t\t//manage release movement\n\t\t\t\t\tif (this.speed > 1) {\n\t\t\t\t\t\tthis.state = 'release';\n\t\t\t\t\t}\n\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.state = 'idle';\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//move via transform\n\t\t\t\ton(doc, 'touchmove' + this._ns + ' mousemove' + this._ns, (e) => {\n\t\t\t\t\tthis.drag(e);\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tafter: function () {\n\t\t\t\t//enable document interactivity\n\t\t\t\tselection.enable(root);\n\n\t\t\t\tthis.element.classList.remove('draggy-drag');\n\n\t\t\t\t//emit dragend on element, this\n\t\t\t\temit(this, 'dragend');\n\t\t\t\temit(this.element, 'dragend', null, true);\n\n\t\t\t\t//unbind drag events\n\t\t\t\toff(doc, this._ns);\n\n\t\t\t\tclearInterval(this._trackingInterval);\n\t\t\t}\n\t\t},\n\n\t\trelease: {\n\t\t\tbefore: function () {\n\t\t\t\tthis.element.classList.add('draggy-release');\n\n\t\t\t\t//enter animation mode\n\t\t\t\tclearTimeout(this._animateTimeout);\n\n\t\t\t\t//set proper transition\n\t\t\t\tthis.element.style.transition = (this.releaseDuration) + 'ms ease-out ' + (this.css3 ? 'transform' : 'position');\n\n\t\t\t\t//plan leaving anim mode\n\t\t\t\tthis._animateTimeout = setTimeout(() => {\n\t\t\t\t\tthis.state = 'idle';\n\t\t\t\t}, this.releaseDuration);\n\n\n\t\t\t\t//calc target point & animate to it\n\t\t\t\tthis.move(\n\t\t\t\t\tthis.prevX + this.speed * Math.cos(this.angle),\n\t\t\t\t\tthis.prevY + this.speed * Math.sin(this.angle)\n\t\t\t\t);\n\n\t\t\t\tthis.speed = 0;\n\t\t\t\temit(this, 'track');\n\t\t\t},\n\n\t\t\tafter: function () {\n\t\t\t\tthis.element.classList.remove('draggy-release');\n\t\t\t\tthis.element.style.transition = null;\n\t\t\t}\n\t\t},\n\n\t\treset: function () {\n\t\t\tthis.currentHandles.forEach((handle) => {\n\t\t\t\toff(handle, this._ns);\n\t\t\t});\n\n\t\t\tclearTimeout(this._animateTimeout);\n\n\t\t\toff(doc, this._ns);\n\t\t\toff(this.element, this._ns);\n\n\t\t\treturn '_';\n\t\t}\n\t}\n\n\t// drag handler. needed to provide drag movement emulation via API\n\tdrag(e) {\n\t\te.preventDefault();\n\n\t\tvar mouseX = getClientX(e, this.touchIdx),\n\t\t\tmouseY = getClientY(e, this.touchIdx);\n\n\t\t//calc mouse movement diff\n\t\tvar diffMouseX = mouseX - this.prevMouseX,\n\t\t\tdiffMouseY = mouseY - this.prevMouseY;\n\n\t\t//absolute mouse coordinate\n\t\tvar mouseAbsX = mouseX,\n\t\t\tmouseAbsY = mouseY;\n\n\t\t//if we are not fixed, our absolute position is relative to the doc\n\t\tif (!this._isFixed) {\n\t\t\tmouseAbsX += win.pageXOffset;\n\t\t\tmouseAbsY += win.pageYOffset;\n\t\t}\n\n\t\t//calc sniper offset, if any\n\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\tthis.sniperOffsetX += diffMouseX * this.sniperSlowdown;\n\t\t\tthis.sniperOffsetY += diffMouseY * this.sniperSlowdown;\n\t\t}\n\n\t\t//save refs to the meta keys\n\t\tthis.ctrlKey = e.ctrlKey;\n\t\tthis.shiftKey = e.shiftKey;\n\t\tthis.metaKey = e.metaKey;\n\t\tthis.altKey = e.altKey;\n\n\t\t//calc movement x and y\n\t\t//take absolute placing as it is the only reliable way (2x proved)\n\t\tvar x = (mouseAbsX - this.initOffsetX) - this.innerOffsetX - this.sniperOffsetX,\n\t\t\ty = (mouseAbsY - this.initOffsetY) - this.innerOffsetY - this.sniperOffsetY;\n\n\t\t//move element\n\t\tthis.move(x, y);\n\n\t\t//save prevClientXY for calculating diff\n\t\tthis.prevMouseX = mouseX;\n\t\tthis.prevMouseY = mouseY;\n\n\t\t//emit drag\n\t\temit(this, 'drag');\n\t\temit(this.element, 'drag', null, true);\n\t}\n\n\t// manage touches\n\tsetTouch(e) {\n\t\tif (!e.touches || this.touchIdx !== null) return this;\n\n\t\t//current touch index\n\t\tthis.touchIdx = touches;\n\t\ttouches++;\n\t}\n\n\t// index to fetch touch number from event\n\ttouchIdx = null;\n\n\t// update movement limits. refresh this.withinOffsets and this.limits.\n\tupdate(e) {\n\t\tthis._isFixed = isFixed(this.element);\n\n\t\t//enforce abs position\n\t\tif (!this.css3) {\n\t\t\tthis.element.style.position = 'absolute';\n\t\t}\n\n\t\t//update handles\n\t\tthis.currentHandles.forEach((handle) => {\n\t\t\toff(handle, this._ns);\n\t\t});\n\n\t\tvar cancelEls = q(this.cancel);\n\n\t\tthis.currentHandles = q(this.handle);\n\n\t\tthis.currentHandles.forEach((handle) => {\n\t\t\ton(handle, 'mousedown' + this._ns + ' touchstart' + this._ns, (e) => {\n\t\t\t\t//mark event as belonging to the draggy\n\t\t\t\tif (!e.draggies) {\n\t\t\t\t\te.draggies = [];\n\t\t\t\t}\n\n\t\t\t\t//ignore draggies containing other draggies\n\t\t\t\tif (e.draggies.some((draggy) => {\n\t\t\t\t\treturn this.element.contains(draggy.element);\n\t\t\t\t})) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//ignore events happened within cancelEls\n\t\t\t\tif (cancelEls.some((cancelEl) => {\n\t\t\t\t\treturn cancelEl.contains(e.target);\n\t\t\t\t})) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//register draggy\n\t\t\t\te.draggies.push(this);\n\t\t\t});\n\t\t});\n\n\t\t//update limits\n\t\tthis.updateLimits();\n\n\t\t//preset inner offsets\n\t\tthis.innerOffsetX = this.pin[0];\n\t\tthis.innerOffsetY = this.pin[1];\n\n\t\tvar thisClientRect = this.element.getBoundingClientRect();\n\n\t\t//if event passed - update acc to event\n\t\tif (e) {\n\t\t\t//take last mouse position from the event\n\t\t\tthis.prevMouseX = getClientX(e, this.touchIdx);\n\t\t\tthis.prevMouseY = getClientY(e, this.touchIdx);\n\n\t\t\t//if mouse is within the element - take offset normally as rel displacement\n\t\t\tthis.innerOffsetX = -thisClientRect.left + getClientX(e, this.touchIdx);\n\t\t\tthis.innerOffsetY = -thisClientRect.top + getClientY(e, this.touchIdx);\n\t\t}\n\t\t//if no event - suppose pin-centered event\n\t\telse {\n\t\t\t//take mouse position & inner offset as center of pin\n\t\t\tvar pinX = (this.pin[0] + this.pin[2]) * 0.5;\n\t\t\tvar pinY = (this.pin[1] + this.pin[3]) * 0.5;\n\t\t\tthis.prevMouseX = thisClientRect.left + pinX;\n\t\t\tthis.prevMouseY = thisClientRect.top + pinY;\n\t\t\tthis.innerOffsetX = pinX;\n\t\t\tthis.innerOffsetY = pinY;\n\t\t}\n\n\t\t//set initial kinetic props\n\t\tthis.speed = 0;\n\t\tthis.amplitude = 0;\n\t\tthis.angle = 0;\n\t\tthis.timestamp = +new Date();\n\t\tthis.frame = [this.prevX, this.prevY];\n\n\t\t//set sniper offset\n\t\tthis.sniperOffsetX = 0;\n\t\tthis.sniperOffsetY = 0;\n\t};\n\n\t// update limits only from current position\n\tupdateLimits() {\n\t\t//initial translation offsets\n\t\tvar initXY = this.getCoords();\n\n\t\t//calc initial coords\n\t\tthis.prevX = initXY[0];\n\t\tthis.prevY = initXY[1];\n\t\tthis.initX = initXY[0];\n\t\tthis.initY = initXY[1];\n\n\t\t//container rect might be outside the vp, so calc absolute offsets\n\t\t//zero-position offsets, with translation(0,0)\n\t\tvar curOffsets = offsets(this.element);\n\n\t\tthis.initOffsetX = curOffsets.left - this.prevX;\n\t\tthis.initOffsetY = curOffsets.top - this.prevY;\n\t\tthis.offsets = curOffsets;\n\n\t\t//handle parent case\n\t\tvar within = this.within;\n\t\tif (this.within === 'parent' || this.within === true) {\n\t\t\twithin = this.element.parentNode;\n\t\t}\n\t\twithin = within || doc;\n\n\t\t//absolute offsets of a container\n\t\tvar withinOffsets = offsets(within);\n\n\t\tif (within === win && this._isFixed) {\n\t\t\twithinOffsets.top -= win.pageYOffset;\n\t\t\twithinOffsets.left -= win.pageXOffset;\n\t\t\twithinOffsets.bottom -= win.pageYOffset;\n\t\t\twithinOffsets.right -= win.pageXOffset;\n\t\t}\n\t\tthis.withinOffsets = withinOffsets;\n\n\t\t//calculate movement limits - pin width might be wider than constraints\n\t\tthis.overflowX = this.pin.width - withinOffsets.width;\n\t\tthis.overflowY = this.pin.height - withinOffsets.height;\n\n\t\tthis.limits = {\n\t\t\tleft: withinOffsets.left - this.initOffsetX - this.pin[0] - (this.overflowX < 0 ? 0 : this.overflowX),\n\t\t\ttop: withinOffsets.top - this.initOffsetY - this.pin[1] - (this.overflowY < 0 ? 0 : this.overflowY),\n\t\t\tright: this.overflowX > 0 ? 0 : withinOffsets.right - this.initOffsetX - this.pin[2],\n\t\t\tbottom: (this.overflowY > 0 ? 0 : withinOffsets.bottom - this.initOffsetY - this.pin[3])\n\t\t};\n\t};\n\n\t// update info regarding of movement\n\tupdateInfo(x, y) {\n\t\t//provide delta from prev state\n\t\tthis.deltaX = x - this.prevX;\n\t\tthis.deltaY = y - this.prevY;\n\n\t\t//save prev coords to use as a start point next time\n\t\tthis.prevX = x;\n\t\tthis.prevY = y;\n\n\t\t//provide movement delta from initial state\n\t\tthis.movementX = x - this.initX;\n\t\tthis.movementY = y - this.initY;\n\t}\n\n\t// way of placement:\n\t// - css3 === false (slower but more precise and cross-browser)\n\t// - css3 === true (faster but may cause blurs on linux systems)\n\tgetCoords() {\n\t\tif (!this.css3) {\n\t\t\t// return [this.element.offsetLeft, this.element.offsetTop];\n\t\t\treturn [px(this.element.style.left), px(this.element.style.top)];\n\t\t}\n\t\telse {\n\t\t\treturn getTranslate(this.element).slice(0, 2) || [0, 0];\n\t\t}\n\t};\n\tsetCoords(x, y) {\n\t\tif (this.css3) {\n\t\t\tif (x == null) x = this.prevX;\n\t\t\tif (y == null) y = this.prevY;\n\n\t\t\tx = round(x, this.precision);\n\t\t\ty = round(y, this.precision);\n\n\t\t\tthis.element.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n\n\t\t\tthis.updateInfo(x, y);\n\t\t}\n\t\telse {\n\t\t\tif (x == null) x = this.prevX;\n\t\t\tif (y == null) y = this.prevY;\n\n\t\t\tx = round(x, this.precision);\n\t\t\ty = round(y, this.precision);\n\n\t\t\tthis.element.style.left = x;\n\t\t\tthis.element.style.top = y;\n\n\t\t\t//update movement info\n\t\t\tthis.updateInfo(x, y);\n\t\t}\n\t}\n\n\t/**\n\t * Restricting container\n\t * @type {Element|object}\n\t * @default document.documentElement\n\t */\n\twithin = doc;\n\n\t/** Handle to drag */\n\thandle;\n\n\t/**\n\t * Which area of draggable should not be outside the restriction area.\n\t * @type {(Array|number)}\n\t * @default [0,0,this.element.offsetWidth, this.element.offsetHeight]\n\t */\n\tset pin(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 2) {\n\t\t\t\tthis._pin = [value[0], value[1], value[0], value[1]];\n\t\t\t} else if (value.length === 4) {\n\t\t\t\tthis._pin = value;\n\t\t\t}\n\t\t}\n\n\t\telse if (typeof value === 'number') {\n\t\t\tthis._pin = [value, value, value, value];\n\t\t}\n\n\t\telse {\n\t\t\tthis._pin = value;\n\t\t}\n\n\t\t//calc pin params\n\t\tthis._pin.width = this._pin[2] - this._pin[0];\n\t\tthis._pin.height = this._pin[3] - this._pin[1];\n\t}\n\n\tget pin() {\n\t\tif (this._pin) return this._pin;\n\n\t\t//returning autocalculated pin, if private pin is none\n\t\tvar pin = [0, 0, this.offsets.width, this.offsets.height];\n\t\tpin.width = this.offsets.width;\n\t\tpin.height = this.offsets.height;\n\t\treturn pin;\n\t}\n\n\t// Avoid initial mousemove\n\tset threshold(val) {\n\t\tif (typeof val === 'number') {\n\t\t\tthis._threshold = [-val * 0.5, -val * 0.5, val * 0.5, val * 0.5];\n\t\t} else if (val.length === 2) {\n\t\t\t//Array(w,h)\n\t\t\tthis._threshold = [-val[0] * 0.5, -val[1] * 0.5, val[0] * 0.5, val[1] * 0.5];\n\t\t} else if (val.length === 4) {\n\t\t\t//Array(x1,y1,x2,y2)\n\t\t\tthis._threshold = val;\n\t\t} else if (typeof (val) === 'function') {\n\t\t\t//custom val funciton\n\t\t\tthis._threshold = val();\n\t\t} else {\n\t\t\tthis._threshold = [0, 0, 0, 0];\n\t\t}\n\t}\n\n\tget threshold() {\n\t\treturn this._threshold || [0, 0, 0, 0];\n\t}\n\n\t// Movement release params\n\trelease = false;\n\treleaseDuration = 500;\n\tvelocity = 1000;\n\tmaxSpeed = 250;\n\tframerate = 50;\n\n\t// To what extent round position\n\tprecision = 1;\n\n\t// Droppable params\n\tdroppable = null;\n\tdroppableTolerance = 0.5;\n\tdroppableClass = null;\n\n\t// Slow down movement by pressing ctrl/cmd\n\tsniper = true;\n\n\t// How much to slow sniper drag\n\tsniperSlowdown = .85;\n\n\t// Restrict movement by axis\n\tmove(x, y) {\n\t\tif (this.axis === 'x') {\n\t\t\tif (x == null) x = this.prevX;\n\t\t\tif (y == null) y = this.prevY;\n\n\t\t\tvar limits = this.limits;\n\n\t\t\tif (this.repeat) {\n\t\t\t\tvar w = (limits.right - limits.left);\n\t\t\t\tvar oX = - this.initOffsetX + this.withinOffsets.left - this.pin[0] - Math.max(0, this.overflowX);\n\t\t\t\tx = loop(x - oX, w) + oX;\n\t\t\t} else {\n\t\t\t\tx = clamp(x, limits.left, limits.right);\n\t\t\t}\n\n\t\t\tthis.setCoords(x);\n\t\t}\n\t\telse if (this.axis === 'y') {\n\t\t\tif (x == null) x = this.prevX;\n\t\t\tif (y == null) y = this.prevY;\n\n\t\t\tvar limits = this.limits;\n\n\t\t\tif (this.repeat) {\n\t\t\t\tvar h = (limits.bottom - limits.top);\n\t\t\t\tvar oY = - this.initOffsetY + this.withinOffsets.top - this.pin[1] - Math.max(0, this.overflowY);\n\t\t\t\ty = loop(y - oY, h) + oY;\n\t\t\t} else {\n\t\t\t\ty = clamp(y, limits.top, limits.bottom);\n\t\t\t}\n\n\t\t\tthis.setCoords(null, y);\n\t\t}\n\t\telse {\n\t\t\tif (x == null) x = this.prevX;\n\t\t\tif (y == null) y = this.prevY;\n\n\t\t\tvar limits = this.limits;\n\n\t\t\tif (this.repeat) {\n\t\t\t\tvar w = (limits.right - limits.left);\n\t\t\t\tvar h = (limits.bottom - limits.top);\n\t\t\t\tvar oX = - this.initOffsetX + this.withinOffsets.left - this.pin[0] - Math.max(0, this.overflowX);\n\t\t\t\tvar oY = - this.initOffsetY + this.withinOffsets.top - this.pin[1] - Math.max(0, this.overflowY);\n\t\t\t\tif (this.repeat === 'x') {\n\t\t\t\t\tx = loop(x - oX, w) + oX;\n\t\t\t\t}\n\t\t\t\telse if (this.repeat === 'y') {\n\t\t\t\t\ty = loop(y - oY, h) + oY;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tx = loop(x - oX, w) + oX;\n\t\t\t\t\ty = loop(y - oY, h) + oY;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tx = clamp(x, limits.left, limits.right);\n\t\t\ty = clamp(y, limits.top, limits.bottom);\n\n\t\t\tthis.setCoords(x, y);\n\t\t}\n\t}\n\n\t// Repeat movement by one of axises\n\trepeat = false;\n\n\t// Clean all memory-related things\n\tdestroy() {\n\t\tthis.currentHandles.forEach((handle) => {\n\t\t\toff(handle, this._ns);\n\t\t});\n\n\t\tthis.state = 'destroy';\n\n\t\tclearTimeout(this._animateTimeout);\n\n\t\toff(doc, this._ns);\n\t\toff(this.element, this._ns);\n\n\n\t\tthis.element = null;\n\t\tthis.within = null;\n\t};\n}\n\n\n// helpers\n// Check whether arr is filled with zeros\nfunction isZeroArray(arr) {\n\tif (!arr[0] && !arr[1] && !arr[2] && !arr[3]) return true;\n}\n\n// query els\nfunction q(str) {\n\tif (Array.isArray(str)) {\n\t\treturn str.map(q).reduce(function (prev, curr) { return prev.concat(curr); }, []);\n\t}\n\telse if (str instanceof HTMLElement) {\n\t\treturn [str];\n\t}\n\telse {\n\t\treturn [].slice.call(document.querySelectorAll(str));\n\t}\n}\n\n// rect intersection function with tolerance\nfunction intersect(rect1, rect2, tolerance = 0) {\n\tconst overlapX = Math.max(0, Math.min(rect1.right, rect2.right) - Math.max(rect1.left, rect2.left));\n\tconst overlapY = Math.max(0, Math.min(rect1.bottom, rect2.bottom) - Math.max(rect1.top, rect2.top));\n\tconst overlapArea = overlapX * overlapY;\n\n\tconst rect1Area = (rect1.right - rect1.left) * (rect1.bottom - rect1.top);\n\tconst rect2Area = (rect2.right - rect2.left) * (rect2.bottom - rect2.top);\n\tconst smallerArea = Math.min(rect1Area, rect2Area);\n\n\treturn overlapArea >= tolerance * smallerArea;\n}\n\n// maths\nfunction loop(value, left, right) {\n\t//detect single-arg case, like mod-loop or fmod\n\tif (right === undefined) {\n\t\tright = left;\n\t\tleft = 0;\n\t}\n\n\t//swap frame order\n\tif (left > right) {\n\t\tvar tmp = right;\n\t\tright = left;\n\t\tleft = tmp;\n\t}\n\n\tvar frame = right - left;\n\n\tvalue = ((value + left) % frame) - left;\n\tif (value < left) value += frame;\n\tif (value > right) value -= frame;\n\n\treturn value;\n};\n\nfunction clamp(value, min, max) {\n\treturn Math.max(min, Math.min(value, max));\n}\n\nfunction round(value, step) {\n\tif (step === 0) return value;\n\tif (!step) return Math.round(value);\n\tstep = parseFloat(step);\n\tvalue = Math.round(value / step) * step;\n\treturn parseFloat(value.toFixed(precision(step)));\n}\n\nfunction precision(n) {\n\tvar s = n + '',\n\t\td = s.indexOf('.') + 1;\n\n\treturn !d ? 0 : s.length - d;\n}\n\nconst selection = {\n\tdisable(el) {\n\t\tel.style.userSelect = 'none';\n\t\tel.style.userDrag = 'none';\n\t\tel.style.touchCallout = 'none';\n\t\tel.setAttribute('unselectable', 'on');\n\t\tel.addEventListener('selectstart', e => e.preventDefault());\n\t},\n\n\tenable(el) {\n\t\tel.style.userSelect = null;\n\t\tel.style.userDrag = null;\n\t\tel.style.touchCallout = null;\n\t\tel.removeAttribute('unselectable');\n\t\tel.removeEventListener('selectstart', e => e.preventDefault());\n\t}\n}\nfunction getTranslate(el) {\n\tvar translateStr = el.style.transform;\n\n\t//find translate token, retrieve comma-enclosed values\n\t//translate3d(1px, 2px, 2) \u2192 1px, 2px, 2\n\t//FIXME: handle nested calcs\n\tvar match = /translate(?:3d)?\\s*\\(([^\\)]*)\\)/.exec(translateStr);\n\n\tif (!match) return [0, 0];\n\tvar values = match[1].split(/\\s*,\\s*/);\n\n\t//parse values\n\t//FIXME: nested values are not necessarily pixels\n\treturn [px(values[0]), px(values[1])];\n}\n\nfunction isFixed(el) {\n\tvar parentEl = el;\n\n\t//window is fixed, btw\n\tif (el === window) return true;\n\n\t//unlike the doc\n\tif (el === document) return false;\n\n\twhile (parentEl) {\n\t\tif (getComputedStyle(parentEl).position === 'fixed') return true;\n\t\tparentEl = parentEl.offsetParent;\n\t}\n\treturn false;\n}\n\n\nexport default Draggable;\n", "import Draggable from 'draggy';\nimport emit from 'emmy/emit';\nimport on from 'emmy/on';\nimport off from 'emmy/off';\nimport css from 'mucss/css';\nimport paddings from 'mucss/padding';\nimport borders from 'mucss/border';\nimport margins from 'mucss/margin';\nimport offsets from 'mucss/offset';\n\n\nvar doc = document, root = doc.documentElement;\n\n\n/**\n * Make an element resizable.\n *\n * Note that we don\u2019t need a container option\n * as arbitrary container is emulatable via fake resizable.\n *\n * @constructor\n */\nfunction Resizable(el, options) {\n\tvar self = this;\n\n\tif (!(self instanceof Resizable)) {\n\t\treturn new Resizable(el, options);\n\t}\n\n\tself.element = el;\n\n\tObject.assign(self, options);\n\n\t//if element isn\u2019t draggable yet - force it to be draggable, without movements\n\tif (self.draggable === true) {\n\t\tself.draggable = new Draggable(self.element, {\n\t\t\twithin: self.within,\n\t\t\tcss3: self.css3\n\t\t});\n\t} else if (self.draggable) {\n\t\tself.draggable = new Draggable(self.element, self.draggable);\n\t\tself.draggable.css3 = self.css3;\n\t} else {\n\t\tself.draggable = new Draggable(self.element, {\n\t\t\thandle: null\n\t\t});\n\t}\n\n\tself.createHandles();\n\n\t//bind event, if any\n\tif (self.resize) {\n\t\tself.on('resize', self.resize);\n\t}\n}\n\nvar proto = Resizable.prototype;\n\n\n/** Use css3 for draggable, if any */\nproto.css3 = true;\n\n\n/** Make itself draggable to the row */\nproto.draggable = false;\n\n// events\nproto.on = function (event, callback) { on(this, event, callback) }\nproto.off = function (event, callback) { off(this, event, callback) }\n\n\n/** Create handles according to options */\nproto.createHandles = function () {\n\tvar self = this;\n\n\t//init handles\n\tvar handles;\n\n\t//parse value\n\tif (Array.isArray(self.handles)) {\n\t\thandles = {};\n\t\tfor (var i = self.handles.length; i--;) {\n\t\t\thandles[self.handles[i]] = null;\n\t\t}\n\t}\n\telse if (typeof self.handles === 'string') {\n\t\thandles = {};\n\t\tvar arr = self.handles.match(/([swne]+)/g);\n\t\tfor (var i = arr.length; i--;) {\n\t\t\thandles[arr[i]] = null;\n\t\t}\n\t}\n\telse if (typeof self.handles === 'object' && self.handles.constructor === Object) {\n\t\thandles = self.handles;\n\t}\n\t//default set of handles depends on position.\n\telse {\n\t\tvar position = getComputedStyle(self.element).position;\n\t\tvar display = getComputedStyle(self.element).display;\n\t\t//if display is inline-like - provide only three handles\n\t\t//it is position: static or display: inline\n\t\tif (/inline/.test(display) || /static/.test(position)) {\n\t\t\thandles = {\n\t\t\t\ts: null,\n\t\t\t\tse: null,\n\t\t\t\te: null\n\t\t\t};\n\n\t\t\t//ensure position is not static\n\t\t\tcss(self.element, 'position', 'relative');\n\t\t}\n\t\t//else - all handles\n\t\telse {\n\t\t\thandles = {\n\t\t\t\ts: null,\n\t\t\t\tse: null,\n\t\t\t\te: null,\n\t\t\t\tne: null,\n\t\t\t\tn: null,\n\t\t\t\tnw: null,\n\t\t\t\tw: null,\n\t\t\t\tsw: null\n\t\t\t};\n\t\t}\n\t}\n\n\t//create proper number of handles\n\tvar handle;\n\tfor (var direction in handles) {\n\t\thandles[direction] = self.createHandle(handles[direction], direction);\n\t}\n\n\t//save handles elements\n\tself.handles = handles;\n}\n\n\n/** Create handle for the direction */\nproto.createHandle = function (handle, direction) {\n\tvar self = this;\n\n\tvar el = self.element;\n\n\t//make handle element\n\tif (!handle) {\n\t\thandle = document.createElement('div');\n\t\thandle.classList.add('resizable-handle');\n\t}\n\n\t//insert handle to the element\n\tself.element.appendChild(handle);\n\n\t//save direction\n\thandle.direction = direction;\n\n\t//detect self.within\n\t//FIXME: may be painful if resizable is created on detached element\n\tvar within = self.within === 'parent' ? self.element.parentNode : self.within;\n\n\t//make handle draggable\n\tvar draggy = new Draggable(handle, {\n\t\twithin: within,\n\t\t//can\u2019t use abs pos, as we engage it in styling\n\t\t// css3: false,\n\t\tthreshold: self.threshold,\n\t\taxis: /^[ns]$/.test(direction) ? 'y' : /^[we]$/.test(direction) ? 'x' : 'both'\n\t});\n\n\tdraggy.on('dragstart', function (e) {\n\t\tself.m = margins(el);\n\t\tself.b = borders(el);\n\t\tself.p = paddings(el);\n\n\t\t//update draggalbe params\n\t\tself.draggable.update(e);\n\n\t\t//save initial dragging offsets\n\t\tvar s = getComputedStyle(el);\n\t\tself.offsets = self.draggable.getCoords();\n\n\t\t//recalc border-box\n\t\tif (getComputedStyle(el).boxSizing === 'border-box') {\n\t\t\tself.p.top = 0;\n\t\t\tself.p.bottom = 0;\n\t\t\tself.p.left = 0;\n\t\t\tself.p.right = 0;\n\t\t\tself.b.top = 0;\n\t\t\tself.b.bottom = 0;\n\t\t\tself.b.left = 0;\n\t\t\tself.b.right = 0;\n\t\t}\n\n\t\t//save initial size\n\t\tself.initSize = [el.offsetWidth - self.b.left - self.b.right - self.p.left - self.p.right, el.offsetHeight - self.b.top - self.b.bottom - self.p.top - self.p.bottom];\n\n\t\t//save initial full size\n\t\tself.initSizeFull = [\n\t\t\tel.offsetWidth,\n\t\t\tel.offsetHeight\n\t\t];\n\n\t\t//movement prev coords\n\t\tself.prevCoords = [0, 0];\n\n\t\t//shift-caused offset\n\t\tself.shiftOffset = [0, 0];\n\n\t\t//central initial coords\n\t\tself.center = [self.offsets[0] + self.initSize[0] / 2, self.offsets[1] + self.initSize[1] / 2];\n\n\t\t//calc limits (max height/width from left/right)\n\t\tif (self.within) {\n\t\t\tvar po = offsets(within);\n\t\t\tvar o = offsets(el);\n\t\t\tself.maxSize = [\n\t\t\t\to.left - po.left + self.initSize[0],\n\t\t\t\to.top - po.top + self.initSize[1],\n\t\t\t\tpo.right - o.right + self.initSize[0],\n\t\t\t\tpo.bottom - o.bottom + self.initSize[1]\n\t\t\t];\n\t\t} else {\n\t\t\tself.maxSize = [9999, 9999, 9999, 9999];\n\t\t}\n\n\t\t//preset mouse cursor\n\t\tcss(root, {\n\t\t\t'cursor': direction + '-resize'\n\t\t});\n\n\t\t//clear cursors\n\t\tfor (var h in self.handles) {\n\t\t\tcss(self.handles[h], 'cursor', null);\n\t\t}\n\n\t\t//trigger callbacks\n\t\temit(self, 'resizestart');\n\t\temit(el, 'resizestart');\n\t});\n\n\tdraggy.on('drag', function () {\n\t\tvar coords = draggy.getCoords();\n\n\t\tvar prevSize = [\n\t\t\tel.offsetWidth,\n\t\t\tel.offsetHeight\n\t\t];\n\n\t\t//change width/height properly\n\t\tif (draggy.shiftKey) {\n\t\t\tswitch (direction) {\n\t\t\t\tcase 'se':\n\t\t\t\tcase 's':\n\t\t\t\tcase 'e':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'nw':\n\t\t\t\t\tcoords[0] = -coords[0];\n\t\t\t\t\tcoords[1] = -coords[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'n':\n\t\t\t\t\tcoords[1] = -coords[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'w':\n\t\t\t\t\tcoords[0] = -coords[0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ne':\n\t\t\t\t\tcoords[1] = -coords[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'sw':\n\t\t\t\t\tcoords[0] = -coords[0];\n\t\t\t\t\tbreak;\n\t\t\t};\n\n\t\t\t//set placement is relative to initial center line\n\t\t\tcss(el, {\n\t\t\t\twidth: Math.min(\n\t\t\t\t\tself.initSize[0] + coords[0] * 2,\n\t\t\t\t\tself.maxSize[2] + coords[0],\n\t\t\t\t\tself.maxSize[0] + coords[0]\n\t\t\t\t),\n\t\t\t\theight: Math.min(\n\t\t\t\t\tself.initSize[1] + coords[1] * 2,\n\t\t\t\t\tself.maxSize[3] + coords[1],\n\t\t\t\t\tself.maxSize[1] + coords[1]\n\t\t\t\t)\n\t\t\t});\n\n\t\t\tvar difX = prevSize[0] - el.offsetWidth;\n\t\t\tvar difY = prevSize[1] - el.offsetHeight;\n\n\t\t\t//update draggable limits\n\t\t\tself.draggable.updateLimits();\n\n\t\t\tif (difX) {\n\t\t\t\tself.draggable.move(self.center[0] - self.initSize[0] / 2 - coords[0]);\n\t\t\t}\n\n\t\t\tif (difY) {\n\t\t\t\tself.draggable.move(null, self.center[1] - self.initSize[1] / 2 - coords[1]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tswitch (direction) {\n\t\t\t\tcase 'se':\n\t\t\t\t\tcss(el, {\n\t\t\t\t\t\twidth: Math.min(\n\t\t\t\t\t\t\tself.initSize[0] + coords[0],\n\t\t\t\t\t\t\tself.maxSize[2]\n\t\t\t\t\t\t),\n\t\t\t\t\t\theight: Math.min(\n\t\t\t\t\t\t\tself.initSize[1] + coords[1],\n\t\t\t\t\t\t\tself.maxSize[3]\n\t\t\t\t\t\t)\n\t\t\t\t\t});\n\n\t\t\t\tcase 's':\n\t\t\t\t\tcss(el, {\n\t\t\t\t\t\theight: Math.min(\n\t\t\t\t\t\t\tself.initSize[1] + coords[1],\n\t\t\t\t\t\t\tself.maxSize[3]\n\t\t\t\t\t\t)\n\t\t\t\t\t});\n\n\t\t\t\tcase 'e':\n\t\t\t\t\tcss(el, {\n\t\t\t\t\t\twidth: Math.min(\n\t\t\t\t\t\t\tself.initSize[0] + coords[0],\n\t\t\t\t\t\t\tself.maxSize[2]\n\t\t\t\t\t\t)\n\t\t\t\t\t});\n\t\t\t\tcase 'se':\n\t\t\t\tcase 's':\n\t\t\t\tcase 'e':\n\t\t\t\t\tself.draggable.updateLimits();\n\n\t\t\t\t\tself.draggable.move(\n\t\t\t\t\t\tself.center[0] - self.initSize[0] / 2,\n\t\t\t\t\t\tself.center[1] - self.initSize[1] / 2\n\t\t\t\t\t);\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'nw':\n\t\t\t\t\tcss(el, {\n\t\t\t\t\t\twidth: clamp(self.initSize[0] - coords[0], 0, self.maxSize[0]),\n\t\t\t\t\t\theight: clamp(self.initSize[1] - coords[1], 0, self.maxSize[1])\n\t\t\t\t\t});\n\t\t\t\tcase 'n':\n\t\t\t\t\tcss(el, {\n\t\t\t\t\t\theight: clamp(self.initSize[1] - coords[1], 0, self.maxSize[1])\n\t\t\t\t\t});\n\t\t\t\tcase 'w':\n\t\t\t\t\tcss(el, {\n\t\t\t\t\t\twidth: clamp(self.initSize[0] - coords[0], 0, self.maxSize[0])\n\t\t\t\t\t});\n\t\t\t\tcase 'nw':\n\t\t\t\tcase 'n':\n\t\t\t\tcase 'w':\n\t\t\t\t\tself.draggable.updateLimits();\n\n\t\t\t\t\t//subtract t/l on changed size\n\t\t\t\t\tvar deltaX = self.initSizeFull[0] - el.offsetWidth;\n\t\t\t\t\tvar deltaY = self.initSizeFull[1] - el.offsetHeight;\n\n\t\t\t\t\tself.draggable.move(self.offsets[0] + deltaX, self.offsets[1] + deltaY);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ne':\n\t\t\t\t\tcss(el, {\n\t\t\t\t\t\twidth: clamp(self.initSize[0] + coords[0], 0, self.maxSize[2]),\n\t\t\t\t\t\theight: clamp(self.initSize[1] - coords[1], 0, self.maxSize[1])\n\t\t\t\t\t});\n\n\t\t\t\t\tself.draggable.updateLimits();\n\n\t\t\t\t\t//subtract t/l on changed size\n\t\t\t\t\tvar deltaY = self.initSizeFull[1] - el.offsetHeight;\n\n\t\t\t\t\tself.draggable.move(null, self.offsets[1] + deltaY);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'sw':\n\t\t\t\t\tcss(el, {\n\t\t\t\t\t\twidth: clamp(self.initSize[0] - coords[0], 0, self.maxSize[0]),\n\t\t\t\t\t\theight: clamp(self.initSize[1] + coords[1], 0, self.maxSize[3])\n\t\t\t\t\t});\n\n\t\t\t\t\tself.draggable.updateLimits();\n\n\t\t\t\t\t//subtract t/l on changed size\n\t\t\t\t\tvar deltaX = self.initSizeFull[0] - el.offsetWidth;\n\n\t\t\t\t\tself.draggable.move(self.offsets[0] + deltaX);\n\t\t\t\t\tbreak;\n\t\t\t};\n\t\t}\n\n\t\t//trigger callbacks\n\t\temit(self, 'resize');\n\t\temit(el, 'resize');\n\n\t\tdraggy.setCoords(0, 0);\n\t});\n\n\tdraggy.on('dragend', function () {\n\t\t//clear cursor & pointer-events\n\t\tcss(root, {\n\t\t\t'cursor': null\n\t\t});\n\n\t\t//get back cursors\n\t\tfor (var h in self.handles) {\n\t\t\tcss(self.handles[h], 'cursor', self.handles[h].direction + '-resize');\n\t\t}\n\n\t\t//trigger callbacks\n\t\temit(self, 'resizeend');\n\t\temit(el, 'resizeend');\n\t});\n\n\t//append styles\n\tcss(handle, handleStyles[direction]);\n\tcss(handle, 'cursor', direction + '-resize');\n\n\t//append proper class\n\thandle.classList.add('resizable-handle-' + direction);\n\n\treturn handle;\n};\n\n\n/** deconstructor - removes any memory bindings */\nproto.destroy = function () {\n\t//remove all handles\n\tfor (var hName in this.handles) {\n\t\tthis.element.removeChild(this.handles[hName]);\n\t\tDraggable.cache.get(this.handles[hName]).destroy();\n\t}\n\n\n\t//remove references\n\tthis.element = null;\n};\n\n\nvar w = 10;\n\n/** Threshold size */\nproto.threshold = w;\n\n/** Styles for handles */\nvar handleStyles = {\n\t\"e\": {\n\t\t\"left\": \"auto\",\n\t\t\"right\": \"-5px\",\n\t\t\"position\": \"absolute\",\n\t\t\"width\": \"10px\",\n\t\t\"top\": \"0px\",\n\t\t\"bottom\": \"0px\"\n\t},\n\t\"w\": {\n\t\t\"right\": \"auto\",\n\t\t\"left\": \"-5px\",\n\t\t\"position\": \"absolute\",\n\t\t\"width\": \"10px\",\n\t\t\"top\": \"0px\",\n\t\t\"bottom\": \"0px\"\n\t},\n\t\"s\": {\n\t\t\"top\": \"auto\",\n\t\t\"bottom\": \"-5px\",\n\t\t\"position\": \"absolute\",\n\t\t\"height\": \"10px\",\n\t\t\"left\": \"0px\",\n\t\t\"right\": \"0px\"\n\t},\n\t\"n\": {\n\t\t\"bottom\": \"auto\",\n\t\t\"top\": \"-5px\",\n\t\t\"position\": \"absolute\",\n\t\t\"height\": \"10px\",\n\t\t\"left\": \"0px\",\n\t\t\"right\": \"0px\"\n\t},\n\t\"nw\": {\n\t\t\"position\": \"absolute\",\n\t\t\"width\": \"10px\",\n\t\t\"height\": \"10px\",\n\t\t\"z-index\": 1,\n\t\t\"top\": \"-5px\",\n\t\t\"left\": \"-5px\",\n\t\t\"bottom\": \"auto\",\n\t\t\"right\": \"auto\"\n\t},\n\t\"ne\": {\n\t\t\"position\": \"absolute\",\n\t\t\"width\": \"10px\",\n\t\t\"height\": \"10px\",\n\t\t\"z-index\": 1,\n\t\t\"top\": \"-5px\",\n\t\t\"right\": \"-5px\",\n\t\t\"bottom\": \"auto\",\n\t\t\"left\": \"auto\"\n\t},\n\t\"sw\": {\n\t\t\"position\": \"absolute\",\n\t\t\"width\": \"10px\",\n\t\t\"height\": \"10px\",\n\t\t\"z-index\": 1,\n\t\t\"bottom\": \"-5px\",\n\t\t\"left\": \"-5px\",\n\t\t\"top\": \"auto\",\n\t\t\"right\": \"auto\"\n\t},\n\t\"se\": {\n\t\t\"position\": \"absolute\",\n\t\t\"width\": \"10px\",\n\t\t\"height\": \"10px\",\n\t\t\"z-index\": 1,\n\t\t\"bottom\": \"-5px\",\n\t\t\"right\": \"-5px\",\n\t\t\"top\": \"auto\",\n\t\t\"left\": \"auto\"\n\t}\n}\n\nfunction clamp(value, min, max) {\n\treturn Math.max(min, Math.min(value, max));\n}\n\nexport default Resizable\n"], 5 | "mappings": "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", 6 | "names": ["require_rect", "__commonJSMin", "exports", "module", "Rect", "l", "t", "r", "b", "require_has_scroll", "__commonJSMin", "exports", "require_scrollbar", "__commonJSMin", "exports", "module", "scrollDiv", "style", "require_is_fixed", "__commonJSMin", "exports", "module", "el", "parentEl", "require_fake_element", "__commonJSMin", "exports", "module", "require_prefix", "__commonJSMin", "exports", "module", "styles", "pre", "dom", "require_css", "__commonJSMin", "exports", "module", "fakeStyle", "prefix", "el", "obj", "name", "value", "prefixize", "uName", "require_parse_value", "__commonJSMin", "exports", "module", "str", "require_translate", "__commonJSMin", "exports", "module", "css", "parseValue", "el", "translateStr", "match", "values", "value", "require_offset", "__commonJSMin", "exports", "module", "win", "doc", "Rect", "hasScroll", "scrollbar", "isFixedEl", "getTranslate", "offsets", "el", "cRect", "result", "res", "isFixed", "xOffset", "yOffset", "require_icicle", "__commonJSMin", "exports", "module", "lock", "unlock", "isLocked", "lockCache", "target", "name", "locks", "require_listeners", "__commonJSMin", "exports", "module", "LISTENERS", "get", "target", "evt", "tags", "cbs", "result", "filteredResult", "cb", "hasTags", "remove", "evtCallbacks", "callbacks", "i", "add", "targetCallbacks", "require_off", "__commonJSMin", "exports", "module", "off", "icicle", "listeners", "target", "evt", "fn", "callbacks", "i", "args", "allOff", "evtParts", "obj", "evtName", "cb", "offMethod", "require_on", "__commonJSMin", "exports", "module", "icicle", "listeners", "off", "on", "target", "evt", "cb", "o", "selector", "delegate", "onMethod", "evtParts", "e", "container", "srcEl", "delegateTarget", "require_emit", "__commonJSMin", "exports", "module", "icicle", "listeners", "target", "evt", "a", "b", "args", "emit", "$", "doc", "win", "eventName", "data", "bubbles", "emitMethod", "evtParts", "evtCallbacks", "fireList", "i", "require_emmy", "__commonJSMin", "exports", "module", "require_get_client_xy", "__commonJSMin", "exports", "module", "getClientY", "e", "idx", "findTouch", "getClientX", "getClientXY", "touchList", "i", "require_is_primitive", "__commonJSMin", "exports", "module", "val", "require_st8", "__commonJSMin", "exports", "module", "isPrimitive", "State", "states", "context", "value", "prevValue", "ENTER", "EXIT", "OTHERWISE", "oldStateName", "oldState", "leaveResult", "leaveFlag", "newStateName", "newState", "enterResult", "enterFlag", "require_define_state", "__commonJSMin", "exports", "module", "defineState", "State", "target", "property", "descriptor", "isFn", "state", "value", "require_parse_unit", "__commonJSMin", "exports", "module", "str", "out", "num", "require_browser", "__commonJSMin", "exports", "module", "parseUnit", "toPX", "PIXELS_PER_INCH", "getSizeBrutal", "getPropertyInPX", "element", "prop", "parts", "unit", "testDIV", "size", "str", "px", "require_padding", "__commonJSMin", "exports", "module", "Rect", "parse", "el", "style", "require_border", "__commonJSMin", "exports", "module", "Rect", "parse", "el", "style", "require_margin", "__commonJSMin", "exports", "module", "parse", "Rect", "el", "style", "import_offset", "import_emmy", "import_get_client_xy", "import_define_state", "import_to_px", "win", "doc", "root", "touches", "Draggable", "_Draggable", "target", "options", "instance", "defineState", "q", "rect", "offsets", "dropTarget", "targetRect", "intersect", "eventName", "callback", "e", "now", "elapsed", "dX", "dY", "delta", "v", "isZeroArray", "clientX", "getClientX", "clientY", "getClientY", "difX", "difY", "selection", "handle", "mouseX", "mouseY", "diffMouseX", "diffMouseY", "mouseAbsX", "mouseAbsY", "x", "y", "isFixed", "cancelEls", "draggy", "cancelEl", "thisClientRect", "pinX", "pinY", "initXY", "curOffsets", "within", "withinOffsets", "getTranslate", "px", "round", "value", "pin", "val", "limits", "w", "oX", "loop", "clamp", "h", "oY", "arr", "str", "prev", "curr", "rect1", "rect2", "tolerance", "overlapX", "overlapY", "overlapArea", "rect1Area", "rect2Area", "smallerArea", "left", "right", "tmp", "frame", "min", "max", "step", "precision", "n", "s", "d", "el", "translateStr", "match", "values", "parentEl", "draggy_default", "import_emit", "import_on", "import_off", "import_css", "import_padding", "import_border", "import_margin", "import_offset", "doc", "root", "Resizable", "el", "options", "self", "draggy_default", "proto", "event", "callback", "on", "off", "handles", "i", "arr", "position", "display", "css", "handle", "direction", "within", "draggy", "e", "margins", "borders", "paddings", "s", "po", "offsets", "o", "h", "emit", "coords", "prevSize", "difX", "difY", "clamp", "deltaX", "deltaY", "handleStyles", "hName", "w", "value", "min", "max", "resizable_default"] 7 | } 8 | -------------------------------------------------------------------------------- /test/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | /*box-sizing: border-box;*/ 3 | } 4 | 5 | body { 6 | position: relative; 7 | outline: 2px solid red; 8 | min-height: 500px; 9 | height: 500px; 10 | } 11 | 12 | .resizable { 13 | float: left; 14 | width: 40px; 15 | height: 40px; 16 | background: url("data:image/svg+xml;utf8,"); 17 | border: 2px dashed rgba(120, 125, 130, 1); 18 | /*padding: 10px; 19 | margin: 15px;*/ 20 | ; 21 | } 22 | 23 | .resizable-handle { 24 | background: rgba(10, 20, 30, 0.1); 25 | } 26 | 27 | .resizable:hover .resizable-handle { 28 | background: rgba(10, 20, 30, 0.3); 29 | } 30 | 31 | .spacer { 32 | width: 10%; 33 | margin: 10px; 34 | padding: 10px; 35 | background: rgba(210, 255, 220, .5); 36 | float: left; 37 | } 38 | 39 | .container { 40 | background: rgba(200, 200, 200, .2); 41 | width: 20%; 42 | height: 200px; 43 | line-height: 200px; 44 | position: relative; 45 | float: right; 46 | padding: 20px; 47 | margin: 30px; 48 | } 49 | 50 | .container .resizable { 51 | line-height: 20px; 52 | } 53 | 54 | .list { 55 | position: relative; 56 | top: 20px; 57 | left: 100px; 58 | clear: both; 59 | line-height: 40px; 60 | width: 200px; 61 | background: rgba(100, 200, 255, .3); 62 | } 63 | 64 | .list .resizable { 65 | float: none; 66 | width: 20%; 67 | height: 40px; 68 | display: inline-block; 69 | vertical-align: top; 70 | line-height: 20px; 71 | } 72 | 73 | #mocha { 74 | margin: 0 !important; 75 | padding: 0; 76 | position: fixed; 77 | bottom: 15px; 78 | left: 0; 79 | width: 70%; 80 | } 81 | 82 | #mocha-stats { 83 | top: auto !important; 84 | bottom: 15px; 85 | } 86 | 87 | .heighty { 88 | height: 100%; 89 | } 90 | -------------------------------------------------------------------------------- /test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | import Resizable from 'resizable' 2 | import Draggable from 'draggy' 3 | import h from 'hyperf' 4 | import test from 'tst' 5 | 6 | var doc = document, body = doc.body; 7 | 8 | 9 | test.skip('Box-sizing', function () { 10 | // var resEls = document.querySelectorAll('.resizable'); 11 | // for (var i = 0, l = resEls.length, resEl; i < l; i++){ 12 | // resEl = resEls[i]; 13 | // if (!resEl.resizable) { 14 | // var res = new Resizable(resEl, { 15 | // resize: function(){ 16 | // console.log('resize') 17 | // } 18 | // }); 19 | // var dr = new Draggy(resEl, { 20 | // within: null//'..' 21 | // }); 22 | // } else { 23 | // resEl.resizable.destroy(); 24 | // resEl.draggy.destroy(); 25 | // } 26 | // } 27 | }); 28 | 29 | test('Inline resize', function () { 30 | var caseEls = h`<> 31 |
Spacy content
32 |
Inline resize
33 |
Spacy content
34 | `; 35 | var el = caseEls.querySelector('.resizable'); 36 | 37 | body.appendChild(caseEls); 38 | 39 | var draggable = new Draggable(el, { 40 | 41 | }); 42 | 43 | var resizable = new Resizable(el, { 44 | 45 | }); 46 | }); 47 | 48 | test('Position:absolute resize', function () { 49 | var el = h` 50 |
Absolute resize
51 | `; 52 | body.appendChild(el); 53 | 54 | var resizable = new Resizable(el, { 55 | handles: 'e', 56 | draggable: true 57 | }); 58 | var draggable = new Draggable(el, { 59 | 60 | }); 61 | 62 | }); 63 | 64 | test('Min/max size', function () { 65 | var el = h` 66 |
Min/max size
67 | `; 68 | body.appendChild(el); 69 | 70 | var draggable = new Draggable(el, { 71 | 72 | }); 73 | 74 | var resizable = new Resizable(el, { 75 | 76 | }); 77 | }); 78 | 79 | test('Within', function () { 80 | var el = h` 81 |
Bound resize
90 | `; 91 | var container = h` 92 |
93 | Restricting container 94 |
95 | `; 96 | container.appendChild(el); 97 | body.appendChild(container); 98 | 99 | var resizable = new Resizable(el, { 100 | within: 'parent', 101 | draggable: true 102 | }); 103 | }); 104 | 105 | test('Outside', function () { 106 | var container = h` 107 |
108 |
Outside
109 |
110 | `; 111 | var el = container.querySelector('.resizable'); 112 | body.appendChild(container); 113 | 114 | var draggable = new Draggable(el, { 115 | 116 | }); 117 | 118 | var resizable = new Resizable(el, { 119 | 120 | }); 121 | }); 122 | 123 | test('Destroy', function () { 124 | var el = h` 125 |
Min/max size
126 | `; 127 | body.appendChild(el); 128 | 129 | var resizableInstance = new Resizable(el, { 130 | within: 'parent', 131 | handles: 'e', 132 | threshold: 1, 133 | draggable: false 134 | }); 135 | 136 | resizableInstance.destroy(); 137 | }); 138 | 139 | test('height: 100perc', function () { 140 | var el = h` 141 |
heighty
142 | `; 143 | body.appendChild(el); 144 | 145 | new Resizable(el, { 146 | draggable: false, 147 | within: body 148 | }); 149 | }); 150 | -------------------------------------------------------------------------------- /todo.md: -------------------------------------------------------------------------------- 1 | * doesn’t work properly along with draggy on connector-lines 2 | * `within` border conditions are bad (no pin tracking) 3 | * RAFfify --------------------------------------------------------------------------------