├── .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 | [](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 |
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
--------------------------------------------------------------------------------