@window-splitter/vue 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +5 -5
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +113 -101
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/big.js@6.2.1/node_modules/big.js/big.mjs","../../state/dist/esm/raf.js","../../state/dist/esm/index.js","../../interface/dist/esm/interface.js","../../interface/dist/esm/move.js","../src/Panel.vue","../src/PanelGroup.vue","../src/PanelResizer.vue"],"sourcesContent":["/*\r\n * big.js v6.2.1\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2022 Michael Mclaughlin\r\n * https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\nvar DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n /*\r\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n * primitive number without a loss of precision.\r\n */\r\n STRICT = false, // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n if (typeof n !== 'string') {\r\n if (Big.strict === true && typeof n !== 'bigint') {\r\n throw TypeError(INVALID + 'value');\r\n }\r\n\r\n // Minus zero?\r\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n }\r\n\r\n parse(x, n);\r\n }\r\n\r\n // Retain a reference to this Big constructor.\r\n // Shadow Big.prototype.constructor which points to Object.\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.strict = STRICT;\r\n Big.roundDown = 0;\r\n Big.roundHalfUp = 1;\r\n Big.roundHalfEven = 2;\r\n Big.roundUp = 3;\r\n\r\n return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n var e, i, nl;\r\n\r\n if (!NUMERIC.test(n)) {\r\n throw Error(INVALID + 'number');\r\n }\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n var xc = x.c;\r\n\r\n if (rm === UNDEFINED) rm = x.constructor.RM;\r\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n if (sd < 1) {\r\n more =\r\n rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n rm === 1 && xc[0] >= 5 ||\r\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n );\r\n\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = x.e - sd + 1;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else if (sd < xc.length) {\r\n\r\n // xc[sd] is the digit after the digit that may be rounded up.\r\n more =\r\n rm === 1 && xc[sd] >= 5 ||\r\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n rm === 3 && (more || !!xc[0]);\r\n\r\n // Remove any digits after the required precision.\r\n xc.length = sd;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[--sd] > 9;) {\r\n xc[sd] = 0;\r\n if (sd === 0) {\r\n ++x.e;\r\n xc.unshift(1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (sd = xc.length; !xc[--sd];) xc.pop();\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n var e = x.e,\r\n s = x.c.join(''),\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (doExponential) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) {\r\n for (e -= n; e--;) s += '0';\r\n } else if (e < n) {\r\n s = s.slice(0, e) + '.' + s.slice(e);\r\n }\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n\r\n // Divisor is zero?\r\n if (!b[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) {\r\n y.s = k;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n p = dp + (q.e = x.e - y.e) + 1; // precision of the result\r\n\r\n q.s = k;\r\n k = p < 0 ? 0 : p;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n p--;\r\n }\r\n\r\n // Round?\r\n if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (yc[0]) {\r\n y.s = -b;\r\n } else if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = 1;\r\n }\r\n return y;\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n var e, k, t,\r\n x = this,\r\n Big = x.constructor;\r\n\r\n y = new Big(y);\r\n\r\n // Signs differ?\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (!yc[0]) {\r\n if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = x.s;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (e = xe - ye) {\r\n if (e > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n e = -e;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; e--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n e = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (k) {\r\n xc.unshift(k);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor('1'),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n throw Error(INVALID + 'exponent');\r\n }\r\n\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big('0.5');\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) {\r\n throw Error(NAME + 'No square root');\r\n }\r\n\r\n // Estimate.\r\n s = Math.sqrt(x + '');\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s + '');\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) {\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = b;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), ++dp, rm);\r\n for (; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n // x.e may have changed if the value is rounded up.\r\n for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON = P.toString = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitve number.\r\n */\r\nP.toNumber = function () {\r\n var n = Number(stringify(this, true, true));\r\n if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n throw Error(NAME + 'Imprecise conversion');\r\n }\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var x = this,\r\n Big = x.constructor,\r\n n = x.c[0];\r\n\r\n if (sd !== UNDEFINED) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n x = round(new Big(x), sd, rm);\r\n for (; x.c.length < sd;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n if (Big.strict === true) {\r\n throw Error(NAME + 'valueOf disallowed');\r\n }\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction eachSafely(values, each) {\n values.forEach((value) => {\n try {\n each(value);\n }\n catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n });\n}\n/** The number of pending tasks */\nlet pendingCount = 0;\nfunction makeQueue() {\n let next = new Set();\n let current = next;\n return {\n add(fn) {\n pendingCount += current == next && !next.has(fn) ? 1 : 0;\n next.add(fn);\n },\n delete(fn) {\n pendingCount -= current == next && next.has(fn) ? 1 : 0;\n return next.delete(fn);\n },\n flush(arg) {\n if (current.size) {\n next = new Set();\n pendingCount -= current.size;\n eachSafely(current, (fn) => fn(arg) && next.add(fn));\n pendingCount += next.size;\n current = next;\n }\n },\n };\n}\nconst updateQueue = makeQueue();\nconst nativeRaf = typeof window != \"undefined\" ? window.requestAnimationFrame : () => { };\n/**\n * Schedule an update for next frame.\n * Your function can return `true` to repeat next frame.\n */\nexport const raf = (fn) => schedule(fn, updateQueue);\nraf.now =\n typeof performance != \"undefined\" ? () => performance.now() : Date.now;\nraf.batchedUpdates = (fn) => fn();\n/** The most recent timestamp. */\nlet ts = -1;\nfunction schedule(fn, queue) {\n queue.add(fn);\n start();\n}\nfunction start() {\n if (ts < 0) {\n ts = 0;\n nativeRaf(loop);\n }\n}\nfunction stop() {\n ts = -1;\n}\nfunction loop() {\n if (~ts) {\n nativeRaf(loop);\n raf.batchedUpdates(update);\n }\n}\nfunction update() {\n const prevTs = ts;\n ts = raf.now();\n if (!pendingCount) {\n stop();\n return;\n }\n updateQueue.flush(prevTs ? Math.min(64, ts - prevTs) : 16.667);\n}\n//# sourceMappingURL=raf.js.map","import Big from \"big.js\";\nimport { raf } from \"./raf.js\";\n// #region Constants\n/** The default amount a user can `dragOvershoot` before the panel collapses */\nconst COLLAPSE_THRESHOLD = 50;\nexport function makePercentUnit(value) {\n return { type: \"percent\", value: new Big(value) };\n}\nexport function makePixelUnit(value) {\n return { type: \"pixel\", value: new Big(value) };\n}\nfunction getCollapseAnimation(panel) {\n let easeFn = collapseAnimations.linear;\n let duration = 300;\n if (panel.collapseAnimation) {\n if (typeof panel.collapseAnimation === \"string\") {\n easeFn = collapseAnimations[panel.collapseAnimation];\n }\n else {\n duration = panel.collapseAnimation.duration;\n easeFn =\n typeof panel.collapseAnimation.easing === \"function\"\n ? panel.collapseAnimation.easing\n : collapseAnimations[panel.collapseAnimation.easing];\n }\n }\n return { ease: easeFn, duration };\n}\n/** Copied from https://github.com/d3/d3-ease */\nconst collapseAnimations = {\n \"ease-in-out\": function quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n },\n bounce: function backInOut(t) {\n const s = 1.70158;\n return (((t *= 2) < 1\n ? t * t * ((s + 1) * t - s)\n : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2);\n },\n linear: function linear(t) {\n return +t;\n },\n};\n// #endregion\n// #region Helpers\nexport function getCursor(context) {\n if (context.orientation === \"horizontal\") {\n if (context.dragOvershoot.gt(0)) {\n return \"w-resize\";\n }\n else if (context.dragOvershoot.lt(0)) {\n return \"e-resize\";\n }\n else {\n return \"ew-resize\";\n }\n }\n else {\n if (context.dragOvershoot.gt(0)) {\n return \"n-resize\";\n }\n else if (context.dragOvershoot.lt(0)) {\n return \"s-resize\";\n }\n else {\n return \"ns-resize\";\n }\n }\n}\nexport function prepareSnapshot(snapshot) {\n // convert from old format\n if (\"context\" in snapshot) {\n snapshot = snapshot.context;\n }\n if (!(\"items\" in snapshot)) {\n return;\n }\n snapshot.dragOvershoot = new Big(snapshot.dragOvershoot || 0);\n for (const item of snapshot.items) {\n if (isPanelData(item)) {\n item.currentValue.value = new Big(item.currentValue.value);\n item.collapsedSize.value = new Big(item.collapsedSize.value);\n item.min.value = new Big(item.min.value);\n if (item.default) {\n item.default.value = new Big(item.default.value);\n }\n if (item.max && item.max !== \"1fr\") {\n item.max.value = new Big(item.max.value);\n }\n }\n else {\n item.size.value = new Big(item.size.value);\n }\n }\n return snapshot;\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction invariant(condition, message) {\n if (condition)\n return;\n throw new Error(message);\n}\n/** Assert that the provided event is one of the accepted types */\nfunction isEvent(event, eventType) {\n invariant(eventType.includes(event.type), `Invalid event type: ${eventType}. Expected: ${eventType.join(\" | \")}`);\n}\n/** Determine if an item is a panel */\nexport function isPanelData(value) {\n return Boolean(value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"panel\");\n}\n/** Determine if an item is a panel handle */\nexport function isPanelHandle(value) {\n return Boolean(value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"handle\");\n}\nexport function initializePanel(item) {\n const onResize = () => {\n let lastCall = null;\n // Memo-ize so we only call the callback once per size\n return ((size) => {\n if (!lastCall ||\n (lastCall.pixel === size.pixel &&\n lastCall.percentage === size.percentage)) {\n lastCall = size;\n return;\n }\n lastCall = size;\n item.onResize?.current?.(size);\n });\n };\n const data = {\n type: \"panel\",\n min: parseUnit(item.min || \"0px\"),\n max: item.max ? parseUnit(item.max) : \"1fr\",\n collapsed: item.collapsible\n ? (item.collapsed ?? item.defaultCollapsed ?? false)\n : undefined,\n collapsible: item.collapsible,\n collapsedSize: parseUnit(item.collapsedSize ?? \"0px\"),\n onCollapseChange: item.onCollapseChange,\n onResize: { current: onResize() },\n collapseIsControlled: typeof item.collapsed !== \"undefined\",\n sizeBeforeCollapse: undefined,\n id: item.id,\n collapseAnimation: item.collapseAnimation,\n default: item.default ? parseUnit(item.default) : undefined,\n isStaticAtRest: item.isStaticAtRest,\n };\n return { ...data, currentValue: makePixelUnit(-1) };\n}\nfunction eq(a, b) {\n return a.type === b.type && a.value.eq(b.value);\n}\nexport function haveConstraintsChangedForPanel(a, b) {\n if (!b) {\n return true;\n }\n if (!eq(a.min, b.min)) {\n return true;\n }\n if ((a.max === \"1fr\" && b.max !== \"1fr\") ||\n (a.max !== \"1fr\" && b.max === \"1fr\") ||\n (a.max !== \"1fr\" && b.max !== \"1fr\" && !eq(a.max, b.max))) {\n return true;\n }\n if ((a.default && !b.default) ||\n (!a.default && b.default) ||\n (a.default && b.default && !eq(a.default, b.default))) {\n return true;\n }\n if (!eq(a.collapsedSize, b.collapsedSize)) {\n return true;\n }\n if (a.isStaticAtRest !== b.isStaticAtRest) {\n return true;\n }\n if ((a.collapseAnimation && !b.collapseAnimation) ||\n (!a.collapseAnimation && b.collapseAnimation) ||\n (typeof a.collapseAnimation === \"string\" &&\n typeof b.collapseAnimation === \"string\" &&\n a.collapseAnimation !== b.collapseAnimation) ||\n (typeof a.collapseAnimation === \"object\" &&\n typeof b.collapseAnimation === \"object\" &&\n (a.collapseAnimation.duration !== b.collapseAnimation.duration ||\n a.collapseAnimation.easing !== b.collapseAnimation.easing))) {\n return true;\n }\n if (a.collapsible !== b.collapsible) {\n return true;\n }\n return false;\n}\nexport function haveConstraintsChangedForPanelHandle(a, b) {\n if (!b) {\n return true;\n }\n if (!eq(a.size, b.size)) {\n return true;\n }\n return false;\n}\nexport function initializePanelHandleData(item) {\n return {\n type: \"handle\",\n ...item,\n size: typeof item.size === \"string\"\n ? parseUnit(item.size)\n : item.size,\n };\n}\n/** Parse a `Unit` string or `clamp` value */\nexport function parseUnit(unit) {\n if (unit === \"1fr\") {\n unit = \"100%\";\n }\n if (unit.endsWith(\"px\")) {\n return makePixelUnit(parseFloat(unit));\n }\n if (unit.endsWith(\"%\")) {\n return makePercentUnit(parseFloat(unit) / 100);\n }\n throw new Error(`Invalid unit: ${unit}`);\n}\n/** Convert a `Unit` to a percentage of the group size */\nexport function getUnitPercentageValue(groupsSize, unit) {\n if (unit.type === \"pixel\") {\n return groupsSize === 0 ? 0 : unit.value.div(groupsSize).toNumber();\n }\n return unit.value.toNumber();\n}\nexport function getGroupSize(context) {\n return context.orientation === \"horizontal\"\n ? context.size.width\n : context.size.height;\n}\n/** Get the size of a panel in pixels */\nfunction getUnitPixelValue(context, unit) {\n const parsed = unit === \"1fr\" ? parseUnit(unit) : unit;\n return parsed.type === \"pixel\"\n ? parsed.value\n : parsed.value.mul(getGroupSize(context));\n}\n/** Clamp a new `currentValue` given the panel's constraints. */\nfunction clampUnit(context, item, value) {\n const min = getUnitPixelValue(context, item.min);\n const max = getUnitPixelValue(context, item.max);\n if (value.gte(min) && value.lte(max)) {\n return value;\n }\n return value.lt(min) ? min : max;\n}\n/** Get a panel with a particular ID. */\nexport function getPanelWithId(context, panelId) {\n const item = context.items.find((i) => i.id === panelId);\n if (item && isPanelData(item)) {\n return item;\n }\n throw new Error(`Expected panel with id: ${panelId}`);\n}\n/** Get a panel with a particular ID. */\nfunction getPanelHandleIndex(context, handleId) {\n const item = context.items.findIndex((i) => i.id === handleId);\n if (item !== -1 && isPanelHandle(context.items[item])) {\n return item;\n }\n throw new Error(`Expected panel handle with id: ${handleId}`);\n}\n/**\n * Get the panel that's collapsible next to a resize handle.\n * Will first check the left panel then the right.\n */\nexport function getCollapsiblePanelForHandleId(context, handleId) {\n if (!context.items.length) {\n throw new Error(\"No items in group\");\n }\n const handleIndex = getPanelHandleIndex(context, handleId);\n const panelBefore = context.items[handleIndex - 1];\n const panelAfter = context.items[handleIndex + 1];\n if (panelBefore && isPanelData(panelBefore) && panelBefore.collapsible) {\n return panelBefore;\n }\n if (panelAfter && isPanelData(panelAfter) && panelAfter.collapsible) {\n return panelAfter;\n }\n throw new Error(`No collapsible panel found for handle: ${handleId}`);\n}\n/**\n * Get the handle closest to the target panel.\n * This is used to simulate collapse/expand\n */\nfunction getHandleForPanelId(context, panelId) {\n const panelIndex = context.items.findIndex((item) => item.id === panelId);\n // When in controlled collapse mode we defer to the controlled state to know if we need to update.\n // The confirmation comes along as an expand/collapse event.\n // The default behavior is to find the closes handle and use that to collapse, if we're dragging some other\n // handle though we want to use that instead. This will results in a smoother visual experience.\n if (context.activeDragHandleId) {\n const handleIndex = getPanelHandleIndex(context, context.activeDragHandleId);\n const item = context.items[handleIndex];\n if (item && isPanelHandle(item)) {\n return {\n item,\n direction: handleIndex > panelIndex ? 1 : -1,\n };\n }\n }\n invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);\n let item = context.items[panelIndex + 1];\n if (item && isPanelHandle(item)) {\n return { item, direction: 1 };\n }\n item = context.items[panelIndex - 1];\n if (item && isPanelHandle(item)) {\n return { item, direction: -1 };\n }\n throw new Error(`Cant find handle for panel: ${panelId}`);\n}\nfunction getHandleForPanelIdWithAvailableSpace(context, panelId) {\n const panelIndex = context.items.findIndex((item) => item.id === panelId);\n invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);\n let item = context.items[panelIndex + 1];\n if (item &&\n isPanelHandle(item) &&\n findPanelWithSpace(context, context.items, panelIndex + 1, 1, \"add\")) {\n return { item, direction: 1 };\n }\n item = context.items[panelIndex - 1];\n if (item &&\n isPanelHandle(item) &&\n findPanelWithSpace(context, context.items, panelIndex - 1, -1, \"add\")) {\n return { item, direction: -1 };\n }\n return getHandleForPanelId(context, panelId);\n}\n/** Given the specified order props and default order of the items, order the items */\nfunction sortWithOrder(items) {\n const defaultPlacement = {};\n const takenPlacements = items\n .map((i) => i.order)\n .filter((i) => i !== undefined);\n let defaultOrder = 0;\n // Generate default orders for items that don't have it\n for (const item of items) {\n if (item.order === undefined) {\n while (takenPlacements.includes(defaultOrder) ||\n Object.values(defaultPlacement).includes(defaultOrder)) {\n defaultOrder++;\n }\n defaultPlacement[item.id] = defaultOrder;\n }\n }\n const withoutOrder = items.filter((i) => i.order === undefined);\n const sortedWithOrder = items\n .filter((i) => i.order !== undefined)\n .sort((a, b) => a.order - b.order);\n for (const item of sortedWithOrder) {\n // insert item at order index\n withoutOrder.splice(item.order, 0, item);\n }\n return withoutOrder;\n}\n/** Check if the panel has space available to add to */\nfunction panelHasSpace(context, item, adjustment) {\n invariant(item.currentValue.type === \"pixel\", `panelHasSpace only works with number values: ${item.id} ${item.currentValue}`);\n if (item.collapsible) {\n return !item.collapsed;\n }\n if (adjustment === \"add\") {\n return (item.currentValue.value.gte(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lt(getUnitPixelValue(context, item.max)));\n }\n return item.currentValue.value.gt(getUnitPixelValue(context, item.min));\n}\n/** Search in a `direction` for a panel that still has space to expand. */\nfunction findPanelWithSpace(context, items, start, direction, adjustment, disregardCollapseBuffer) {\n const slice = direction === -1 ? items.slice(0, start + 1).reverse() : items.slice(start);\n for (const panel of slice) {\n if (!isPanelData(panel)) {\n continue;\n }\n const targetPanel = disregardCollapseBuffer\n ? createUnrestrainedPanel(context, panel)\n : panel;\n if (panelHasSpace(context, targetPanel, adjustment)) {\n return panel;\n }\n }\n}\n/** Add up all the static values in the layout */\nfunction getStaticWidth(context) {\n let width = new Big(0);\n for (const item of context.items) {\n if (isPanelHandle(item)) {\n width = width.add(item.size.value);\n }\n else if (item.collapsed && item.currentValue.type === \"pixel\") {\n width = width.add(item.currentValue.value);\n }\n else if (item.isStaticAtRest) {\n width = width.add(item.currentValue.value);\n }\n }\n return width;\n}\nexport function formatUnit(unit) {\n if (unit.type === \"pixel\") {\n return `${unit.value.toNumber()}px`;\n }\n return `${unit.value.mul(100).toNumber()}%`;\n}\nexport function getPanelGroupPixelSizes(context) {\n return prepareItems(context).map((i) => isPanelData(i)\n ? i.currentValue.value.toNumber()\n : getUnitPixelValue(context, i.size).toNumber());\n}\nexport function getPanelPixelSize(context, panelId) {\n const p = getPanelWithId({ ...context, items: prepareItems(context) }, panelId);\n return p.currentValue.value.toNumber();\n}\nexport function getPanelGroupPercentageSizes(context) {\n const clamped = commitLayout({\n ...context,\n items: prepareItems(context),\n });\n return clamped.map((i) => {\n if (isPanelHandle(i)) {\n return getUnitPercentageValue(getGroupSize(context), i.size);\n }\n return getUnitPercentageValue(getGroupSize(context), i.currentValue);\n });\n}\nexport function getPanelPercentageSize(context, panelId) {\n const items = prepareItems(context);\n const p = getPanelWithId({ ...context, items }, panelId);\n return getUnitPercentageValue(getGroupSize(context), p.currentValue);\n}\n/** Build the grid template from the item values. */\nexport function buildTemplate(context) {\n const staticWidth = getStaticWidth(context);\n let hasSeenFillPanel = false;\n return context.items\n .map((item) => {\n if (item.type === \"panel\") {\n const min = formatUnit(item.min);\n if (item.currentValue.type === \"pixel\" &&\n item.currentValue.value.toNumber() !== -1) {\n if (item.isStaticAtRest) {\n const max = item.max === \"1fr\" ? \"100%\" : formatUnit(item.max);\n return `clamp(${min}, ${formatUnit(item.currentValue)}, ${max})`;\n }\n return formatUnit(item.currentValue);\n }\n else if (item.currentValue.type === \"percent\") {\n if (!hasSeenFillPanel &&\n (item.max === \"1fr\" ||\n (item.max.type === \"percent\" && item.max.value.eq(100)))) {\n hasSeenFillPanel = true;\n return `minmax(${min}, 1fr)`;\n }\n const max = item.max === \"1fr\" ? \"100%\" : formatUnit(item.max);\n return `minmax(${min}, min(calc(${item.currentValue.value} * (100% - ${staticWidth}px)), ${max}))`;\n }\n else if (item.collapsible && item.collapsed) {\n return formatUnit(item.collapsedSize);\n }\n else if (item.default) {\n const siblingHasFill = context.items.some((i) => isPanelData(i) &&\n i.id !== item.id &&\n !i.collapsed &&\n (i.max === \"1fr\" ||\n (i.max.type === \"percent\" && i.max.value.eq(100))));\n // If a sibling has a fill, this item doesn't need to expand\n // So we can just use the default value\n if (siblingHasFill) {\n return formatUnit(item.default);\n }\n // Use 1fr so that panel fills ths space if needed\n const max = item.max === \"1fr\" ? \"1fr\" : formatUnit(item.max);\n return `minmax(${formatUnit(item.default)}, ${max})`;\n }\n else {\n const max = item.max === \"1fr\" ? \"1fr\" : formatUnit(item.max);\n return `minmax(${min}, ${max})`;\n }\n }\n return formatUnit(item.size);\n })\n .join(\" \");\n}\nfunction addDeDuplicatedItems(items, newItem) {\n const currentItemIndex = items.findIndex((item) => item.id === newItem.id ||\n (typeof item.order === \"number\" && item.order === newItem.order));\n let restItems = items;\n if (currentItemIndex !== -1) {\n restItems = items.filter((_, index) => index !== currentItemIndex);\n }\n return sortWithOrder([...restItems, newItem]);\n}\nfunction createUnrestrainedPanel(_, data) {\n return {\n ...data,\n min: makePixelUnit(-100000),\n max: makePixelUnit(100000),\n };\n}\n// #endregion\n// #region Update Logic\n/**\n * This is the main meat of the layout logic.\n * It's responsible for figuring out how to distribute the space\n * amongst the panels.\n *\n * It's built around applying small deltas to panels relative to their\n * the resize handles.\n *\n * As much as possible we try to rely on the browser to do the layout.\n * During the initial layout we rely on CSS grid and a group might be\n * defined like this:\n *\n * ```css\n * grid-template-columns: minmax(100px, 1fr) 1px minmax(100px, 300px);\n * ```\n *\n * Without any resizing this is nice and simple and the components don't do much.\n *\n * Once the user starts resizing the layout will be more complex.\n *\n * It's broken down into 3 phases:\n *\n * 1. `prepareItems` - The size of the group has been measure and we\n * can convert all the panel sizes into pixels. Converting into pixels\n * makes doing the math for the updates easier.\n *\n * ```css\n * grid-template-columns: 500px 1px 300px;\n * ```\n *\n * 2. `updateLayout` - This is where the actual updates are applied.\n * This is where the user's drag interactions are applied. We also\n * use this to collapse/expand panels by simulating a drag interaction.\n *\n * ```css\n * grid-template-columns: 490px 1px 310px;\n * ```\n *\n * 3. `commitLayout` - Once the updates have been applied we convert the\n * updated sizes back into a format that allows for easy resizing without\n * lots of updates.\n *\n * ```css\n * grid-template-columns: minmax(100px, min(calc(0.06117 * (100% - 1px)), 100%)) 1px minmax(100px, min(calc(0.0387 * (100% - 1px)), 300px));\n * ```\n *\n * When another update loop is triggered the above template will be converted back to pixels.\n */\n/** Converts the items to pixels */\nexport function prepareItems(context) {\n const staticWidth = getStaticWidth(context);\n const newItems = [];\n for (const item of context.items) {\n if (!item || !isPanelData(item)) {\n newItems.push({ ...item });\n continue;\n }\n if (item.lastKnownSize) {\n const lastSize = makePixelUnit(context.orientation === \"horizontal\"\n ? item.lastKnownSize.width\n : item.lastKnownSize.height);\n newItems.push({ ...item, currentValue: lastSize });\n continue;\n }\n if (item.currentValue.type === \"pixel\") {\n newItems.push({ ...item });\n continue;\n }\n const pixel = new Big(getGroupSize(context))\n .minus(staticWidth)\n .mul(item.currentValue.value);\n newItems.push({\n ...item,\n currentValue: makePixelUnit(pixel.toNumber()),\n });\n }\n return newItems;\n}\n/** On every mouse move we distribute the space added */\nfunction updateLayout(context, dragEvent) {\n const handleIndex = getPanelHandleIndex(context, dragEvent.handleId);\n const handle = context.items[handleIndex];\n const newItems = [...context.items];\n let moveAmount = context.orientation === \"horizontal\"\n ? dragEvent.value.deltaX\n : dragEvent.value.deltaY;\n if (dragEvent.value.shiftKey) {\n moveAmount *= context.shiftAmount ?? 15;\n }\n if (moveAmount === 0) {\n return {};\n }\n const moveDirection = moveAmount / Math.abs(moveAmount);\n // Go forward into the shrinking panels to find a panel that still has space.\n const panelBefore = findPanelWithSpace(context, newItems, handleIndex + moveDirection, moveDirection, \"subtract\", dragEvent.disregardCollapseBuffer);\n // No panel with space, just record the drag overshoot\n if (!panelBefore) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n invariant(isPanelData(panelBefore), `Expected panel before: ${handle.id}`);\n /** The panel that gets bigger */\n const panelAfter = dragEvent.type === \"collapsePanel\"\n ? // If we have the panel id just use that\n newItems.find((item) => item.id === dragEvent.panelId &&\n panelBefore.id !== dragEvent.panelId) ||\n // otherwise fallback to the next panel with space\n findPanelWithSpace(context, newItems, handleIndex - moveDirection, moveDirection * -1, \"add\", dragEvent.disregardCollapseBuffer) ||\n newItems[handleIndex - moveDirection]\n : newItems[handleIndex - moveDirection];\n invariant(panelAfter && isPanelData(panelAfter), `Expected panel after: ${handle.id}`);\n if (panelAfter.currentValue.value.eq(getUnitPixelValue(context, panelAfter.max))) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n const newDragOvershoot = context.dragOvershoot.add(moveAmount);\n // Don't let the panel expand until the threshold is reached\n if (!dragEvent.disregardCollapseBuffer && !dragEvent.controlled) {\n const isInLeftBuffer = newDragOvershoot.lt(0) && moveDirection > 0;\n const isInLeftOvershoot = newDragOvershoot.gt(0) && moveDirection > 0;\n const isInRightBuffer = newDragOvershoot.gt(0) && moveDirection < 0;\n const isInRightOvershoot = newDragOvershoot.lt(0) && moveDirection < 0;\n const potentialNewValue = panelAfter.currentValue.value.add(new Big(newDragOvershoot).mul(isInRightBuffer ? moveDirection : 1));\n const min = getUnitPixelValue(context, panelAfter.min);\n const isInDragBugger = newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n // Let the panel expand at it's min size\n !panelAfter.currentValue.value\n .add(newDragOvershoot.abs())\n .gte(panelAfter.min.value) &&\n panelAfter.collapsible &&\n panelAfter.collapsed &&\n (isInLeftOvershoot || isInRightOvershoot);\n if (potentialNewValue.lte(min) &&\n (newDragOvershoot.eq(0) ||\n isInRightBuffer ||\n isInLeftBuffer ||\n isInDragBugger)) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n // Don't let the panel collapse until the threshold is reached\n if (!dragEvent.disregardCollapseBuffer &&\n !dragEvent.controlled &&\n panelBefore.collapsible &&\n panelBefore.currentValue.value.eq(getUnitPixelValue(context, panelBefore.min))) {\n const potentialNewValue = panelBefore.currentValue.value.sub(newDragOvershoot.abs());\n if (newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n potentialNewValue.gt(getUnitPixelValue(context, panelBefore.collapsedSize))) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n // Apply the move amount to the panel before the slider\n const unrestrainedPanelBefore = createUnrestrainedPanel(context, panelBefore);\n const panelBeforePreviousValue = panelBefore.currentValue.value;\n const panelBeforeNewValueRaw = panelBefore.currentValue.value.minus(new Big(moveAmount).mul(moveDirection));\n let panelBeforeNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelBefore, panelBeforeNewValueRaw)\n : clampUnit(context, panelBefore, panelBeforeNewValueRaw);\n // Also apply the move amount the panel after the slider\n const unrestrainedPanelAfter = createUnrestrainedPanel(context, panelAfter);\n const panelAfterPreviousValue = panelAfter.currentValue.value;\n const applied = panelBeforePreviousValue.minus(panelBeforeNewValue);\n const panelAfterNewValueRaw = panelAfter.currentValue.value.add(applied);\n let panelAfterNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelAfter, panelAfterNewValueRaw)\n : clampUnit(context, panelAfter, panelAfterNewValueRaw);\n if (dragEvent.disregardCollapseBuffer) {\n if (panelAfter.collapsible && panelAfter.collapsed) {\n panelAfter.collapsed = false;\n }\n }\n // If the panel was collapsed, expand it\n // We need to re-apply the move amount since the the expansion of the\n // collapsed panel disregards that.\n else if (panelAfter.collapsible && panelAfter.collapsed) {\n if (panelAfter.onCollapseChange?.current &&\n panelAfter.collapseIsControlled &&\n !dragEvent.controlled &&\n !dragEvent.isVirtual) {\n panelAfter.onCollapseChange.current(false);\n return { dragOvershoot: newDragOvershoot };\n }\n // Calculate the amount \"extra\" after the minSize the panel should grow\n const extra = \n // Take the size it was at\n getUnitPixelValue(context, panelAfter.collapsedSize)\n // Add in the full overshoot so the cursor is near the slider\n .add(context.dragOvershoot.abs())\n // Subtract the min size of the panel\n .sub(panelAfterNewValue\n // Then re-add the move amount\n .add(Math.abs(moveAmount)));\n if (extra.gt(0)) {\n panelAfterNewValue = panelAfterNewValue.add(extra);\n }\n panelBeforeNewValue = panelBeforeNewValue\n // Subtract the delta of the after panel's size\n .minus(panelAfterNewValue\n .minus(panelAfterPreviousValue)\n // And then re-apply the movement value\n .minus(Math.abs(moveAmount)));\n if (panelBeforeNewValue.lt(panelBefore.min.value) &&\n !panelBefore.collapsible) {\n // TODO this should probably distribute the space between the panels?\n return { dragOvershoot: newDragOvershoot };\n }\n panelAfter.collapsed = false;\n if (panelAfter.onCollapseChange?.current &&\n !panelAfter.collapseIsControlled &&\n !dragEvent.controlled &&\n !dragEvent.isVirtual) {\n panelAfter.onCollapseChange.current(false);\n }\n }\n const panelBeforeIsAboutToCollapse = panelBefore.currentValue.value.eq(getUnitPixelValue(context, panelBefore.min));\n // If the panel was expanded and now is at it's min size, collapse it\n if (!dragEvent.disregardCollapseBuffer &&\n panelBefore.collapsible &&\n panelBeforeIsAboutToCollapse) {\n if (panelBefore.onCollapseChange?.current &&\n panelBefore.collapseIsControlled &&\n !dragEvent.controlled &&\n !dragEvent.isVirtual) {\n panelBefore.onCollapseChange.current(true);\n return { dragOvershoot: newDragOvershoot };\n }\n // Make it collapsed\n panelBefore.collapsed = true;\n panelBeforeNewValue = getUnitPixelValue(context, panelBefore.collapsedSize);\n // Add the extra space created to the before panel\n panelAfterNewValue = panelAfter.currentValue.value.add(panelBeforePreviousValue.minus(panelBeforeNewValue));\n if (panelBefore.onCollapseChange?.current &&\n !panelBefore.collapseIsControlled &&\n !dragEvent.controlled &&\n !dragEvent.isVirtual) {\n panelBefore.onCollapseChange.current(true);\n }\n }\n panelBefore.currentValue = { type: \"pixel\", value: panelBeforeNewValue };\n panelAfter.currentValue = { type: \"pixel\", value: panelAfterNewValue };\n const leftoverSpace = new Big(getGroupSize(context)).minus(newItems.reduce((acc, b) => acc.add(isPanelData(b) ? b.currentValue.value : b.size.value), new Big(0)));\n if (!leftoverSpace.eq(0)) {\n panelBefore.currentValue.value = clampUnit(context, panelBefore, panelBefore.currentValue.value.add(leftoverSpace));\n }\n return { items: newItems };\n}\n/** Converts the items to percentages */\nfunction commitLayout(context) {\n const newItems = [...context.items];\n // First set all the static width\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\") {\n return;\n }\n if (item.collapsed) {\n newItems[index] = {\n ...item,\n currentValue: item.collapsedSize,\n };\n }\n });\n const staticWidth = getStaticWidth({ ...context, items: newItems });\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\" || item.collapsed || item.isStaticAtRest) {\n return;\n }\n newItems[index] = {\n ...item,\n currentValue: {\n type: \"percent\",\n value: item.currentValue.value.div(new Big(getGroupSize(context)).sub(staticWidth)),\n },\n };\n });\n return newItems;\n}\nexport function dragHandlePayload({ delta, orientation = \"horizontal\", shiftKey = false, }) {\n return {\n type: \"move\",\n pointerType: \"keyboard\",\n shiftKey,\n ctrlKey: false,\n altKey: false,\n metaKey: false,\n deltaX: orientation === \"horizontal\" ? delta : 0,\n deltaY: orientation === \"horizontal\" ? 0 : delta,\n };\n}\n/** Iteratively applies a large delta value simulating a user's drag */\nfunction iterativelyUpdateLayout({ context, handleId, delta, direction, controlled, disregardCollapseBuffer, isVirtual, panelId, }) {\n let newContext = context;\n for (let i = 0; i < delta.abs().toNumber(); i++) {\n newContext = updateLayout({\n ...context,\n ...newContext,\n }, {\n handleId,\n type: \"collapsePanel\",\n controlled,\n disregardCollapseBuffer,\n isVirtual,\n panelId,\n value: dragHandlePayload({\n delta: direction,\n orientation: context.orientation,\n }),\n });\n }\n return newContext;\n}\nfunction applyDeltaInBothDirections(context, newItems, itemIndex, delta) {\n let hasTriedBothDirections = false;\n let direction = 1;\n let deltaLeft = new Big(delta);\n // Starting from where the items was removed add space to the panels around it.\n // This is only needed for conditional rendering.\n while (deltaLeft.toNumber() !== 0) {\n const targetPanel = findPanelWithSpace(context, newItems, itemIndex + direction, direction, delta.gt(0) ? \"add\" : \"subtract\");\n if (!targetPanel) {\n if (hasTriedBothDirections) {\n break;\n }\n else {\n direction = direction === 1 ? -1 : 1;\n hasTriedBothDirections = true;\n continue;\n }\n }\n const oldValue = targetPanel.currentValue.value;\n const newValue = clampUnit(context, targetPanel, oldValue.add(deltaLeft));\n targetPanel.currentValue.value = newValue;\n deltaLeft = deltaLeft.sub(newValue.sub(oldValue));\n direction = direction === 1 ? -1 : 1;\n }\n}\n/**\n * A layout might overflow at small screen sizes.\n * This function tries to fix that by:\n *\n * 1. It will try to collapse a panel if it can.\n */\nfunction handleOverflow(context) {\n // If we haven't measured yet we can't do anything\n if (context.items.some((i) => isPanelData(i) && i.currentValue.value.eq(-1))) {\n return context;\n }\n const groupSize = new Big(getGroupSize(context));\n const nonStaticWidth = groupSize.sub(getStaticWidth(context).toNumber());\n const pixelItems = context.items.map((i) => {\n if (isPanelHandle(i))\n return i.size.value;\n if (i.collapsed)\n return getUnitPixelValue(context, i.currentValue);\n const pixel = (i.currentValue.type === \"pixel\" && i.currentValue.value) ||\n i.currentValue.value.mul(nonStaticWidth);\n return clampUnit(context, i, pixel);\n });\n const totalSize = pixelItems.reduce((acc, i) => acc.add(i), new Big(0));\n const overflow = totalSize.abs().sub(groupSize);\n if (overflow.eq(0) || groupSize.eq(0)) {\n return context;\n }\n let newContext = { ...context, items: prepareItems(context) };\n const collapsiblePanel = newContext.items.find((i) => Boolean(isPanelData(i) && i.collapsible));\n if (collapsiblePanel) {\n const collapsiblePanelIndex = newContext.items.findIndex((i) => i.id === collapsiblePanel.id);\n const handleId = getHandleForPanelId(newContext, collapsiblePanel.id);\n const sizeChange = collapsiblePanel.currentValue.value.sub(getUnitPixelValue(newContext, collapsiblePanel.collapsedSize));\n // Try to collapse the panel\n newContext = {\n ...newContext,\n ...iterativelyUpdateLayout({\n handleId: handleId.item.id,\n delta: sizeChange,\n direction: (handleId.direction * -1),\n panelId: collapsiblePanel.id,\n context: {\n ...newContext,\n // act like its the old size so the space is distributed correctly\n size: { width: totalSize.toNumber(), height: totalSize.toNumber() },\n },\n }),\n };\n // Then remove all the overflow\n applyDeltaInBothDirections(newContext, newContext.items, collapsiblePanelIndex, overflow.neg());\n }\n return { ...newContext, items: commitLayout(newContext) };\n}\nfunction clearLastKnownSize(items) {\n return items.map((i) => ({ ...i, lastKnownSize: undefined }));\n}\nfunction setCookie(name, jsonData) {\n document.cookie = `${name}=${encodeURIComponent(`${jsonData}`)};path=/;max-age=31536000`;\n}\nfunction getDeltaForEvent(context, event) {\n const panel = getPanelWithId(context, event.panelId);\n if (event.type === \"expandPanel\") {\n return new Big(panel.sizeBeforeCollapse ?? getUnitPixelValue(context, panel.min)).minus(panel.currentValue.value);\n }\n const collapsedSize = getUnitPixelValue(context, panel.collapsedSize);\n return panel.currentValue.value.minus(collapsedSize);\n}\nfunction animationActor(context, event, send, abortController) {\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelIdWithAvailableSpace(context, event.panelId);\n let direction = new Big(handle.direction);\n const fullDelta = getDeltaForEvent(context, event);\n const contextCopy = { ...context, items: prepareItems(context) };\n const finalLayout = iterativelyUpdateLayout({\n context: contextCopy,\n panelId: event.panelId,\n handleId: handle.item.id,\n delta: fullDelta,\n direction: handle.direction,\n isVirtual: true,\n });\n return new Promise((resolve, reject) => {\n abortController.signal.addEventListener(\"abort\", () => {\n reject(new Error(\"Operation was canceled\"));\n });\n if (event.type === \"collapsePanel\") {\n panel.sizeBeforeCollapse = panel.currentValue.value.toNumber();\n direction = direction.mul(new Big(-1));\n }\n const fps = 60;\n const { duration, ease } = getCollapseAnimation(panel);\n const totalFrames = Math.ceil(panel.collapseAnimation ? duration / (1000 / fps) : 1);\n let frame = 0;\n let appliedDelta = new Big(0);\n function renderFrame() {\n const progress = ++frame / totalFrames;\n const e = new Big(panel.collapseAnimation ? ease(progress) : 1);\n const delta = e.mul(fullDelta).sub(appliedDelta).mul(direction);\n send({\n type: \"applyDelta\",\n handleId: handle.item.id,\n delta: delta.toNumber(),\n panelId: panel.id,\n });\n appliedDelta = appliedDelta.add(delta\n .abs()\n .mul((delta.gt(0) && direction.lt(0)) || (delta.lt(0) && direction.gt(0))\n ? -1\n : 1));\n if (e.eq(1)) {\n // If we're controlled expanding to a value that breaks the layout we might get negative values\n // In this case we need to use a valid layout like `iterativelyUpdateLayout`'s return value\n // Ideally we figure out some way to not do this but disregardCollapseBuffer is needed for animations\n if (context.items.find((i) => isPanelData(i) &&\n i.currentValue.value.round(undefined, Big.roundHalfEven).lt(0))) {\n assign(context, finalLayout);\n }\n const action = event.type === \"expandPanel\" ? \"expand\" : \"collapse\";\n resolve({ panelId: panel.id, action, resolve: event.resolve });\n return false;\n }\n return true;\n }\n raf(renderFrame);\n });\n}\nfunction assign(target, source) {\n for (const key in source) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n target[key] = source[key];\n }\n}\nlet groupId = 0;\nexport function groupMachine(input, onUpdate) {\n const abortController = new AbortController();\n const state = {\n current: \"idle\",\n };\n let locked = false;\n const context = {\n size: input.size || { width: 0, height: 0 },\n items: input.items || [],\n orientation: input.orientation || \"horizontal\",\n dragOvershoot: new Big(0),\n groupId: input.groupId || `group-${groupId++}`,\n autosaveStrategy: input.autosaveStrategy,\n shiftAmount: input.shiftAmount ?? 15,\n };\n const actions = {\n prepare: () => {\n context.items = prepareItems(context);\n },\n clearLastKnownSize: () => {\n context.items = clearLastKnownSize(context.items);\n },\n commit: () => {\n context.dragOvershoot = new Big(0);\n context.items = commitLayout(context);\n },\n onResize: () => {\n for (const item of context.items) {\n if (isPanelData(item)) {\n const pixel = item.lastKnownSize\n ? new Big(context.orientation === \"horizontal\"\n ? item.lastKnownSize.width\n : item.lastKnownSize.height)\n : clampUnit(context, item, getUnitPixelValue(context, item.currentValue));\n const groupSize = getGroupSize(context);\n item.onResize?.current?.({\n pixel: pixel.toNumber(),\n percentage: groupSize > 0 ? pixel.div(getGroupSize(context)).toNumber() : -1,\n });\n }\n }\n },\n onAutosave: () => {\n if (!context.autosaveStrategy || typeof window === \"undefined\") {\n return;\n }\n const snapshot = { ...context };\n snapshot.items = clearLastKnownSize(context.items);\n snapshot.activeDragHandleId = context.activeDragHandleId;\n const data = JSON.stringify(snapshot);\n if (context.autosaveStrategy === \"localStorage\") {\n localStorage.setItem(context.groupId, data);\n }\n else {\n setCookie(context.groupId, data);\n }\n },\n removeItem: (id) => {\n const itemIndex = context.items.findIndex((item) => item.id === id);\n const item = context.items[itemIndex];\n if (!item) {\n return;\n }\n const newItems = context.items.filter((i) => i.id !== id);\n const removedSize = isPanelData(item)\n ? item.currentValue.value\n : item.size.value;\n applyDeltaInBothDirections(context, newItems, itemIndex, removedSize);\n context.items = newItems;\n },\n notifyCollapseToggle: (event) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n panel.onCollapseChange?.current?.(!panel.collapsed);\n },\n runCollapseToggle: (event) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const handle = getHandleForPanelId(context, event.panelId);\n // When collapsing a panel it will be in the opposite direction\n // that handle assumes\n const delta = event.type === \"collapsePanel\"\n ? handle.direction * -1\n : handle.direction;\n const newContext = updateLayout(context, {\n panelId: event.panelId,\n handleId: handle.item.id,\n type: \"dragHandle\",\n controlled: event.controlled,\n value: dragHandlePayload({\n delta: delta,\n orientation: context.orientation,\n }),\n });\n assign(context, newContext);\n },\n onAnimationEnd: (output) => {\n invariant(output, \"Expected output from animation actor\");\n const panel = getPanelWithId(context, output.panelId);\n panel.collapsed = output.action === \"collapse\";\n if (panel.collapsed) {\n panel.currentValue = panel.collapsedSize;\n }\n if (!panel.collapseIsControlled) {\n panel.onCollapseChange?.current?.(panel.collapsed);\n }\n actions.commit();\n },\n };\n actions.onAutosave();\n const guards = {\n shouldNotifyCollapseToggle: (event) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return !event.controlled && panel.collapseIsControlled === true;\n },\n shouldCollapseToggle: (event) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return panel.collapseIsControlled === true;\n },\n cannotExpandPanel: (event) => {\n isEvent(event, [\"expandPanel\"]);\n const pixelItems = prepareItems(context);\n let interimContext = { ...context, items: pixelItems };\n const delta = getDeltaForEvent(context, event);\n const handle = getHandleForPanelIdWithAvailableSpace(interimContext, event.panelId);\n interimContext = {\n ...interimContext,\n ...iterativelyUpdateLayout({\n context: interimContext,\n panelId: event.panelId,\n handleId: handle.item.id,\n controlled: event.controlled,\n delta: delta,\n direction: handle.direction,\n isVirtual: true,\n }),\n };\n const updatedPanel = interimContext.items.find((i) => i.id === event.panelId);\n const totalSize = interimContext.items.reduce((acc, i) => acc.add(isPanelData(i) ? i.currentValue.value : i.size.value), new Big(0));\n const didExpand = updatedPanel &&\n isPanelData(updatedPanel) &&\n !updatedPanel.currentValue.value.eq(updatedPanel.collapsedSize.value);\n return totalSize.gt(getGroupSize(context)) || !didExpand;\n },\n };\n function transition(to) {\n // exit\n switch (state.current) {\n case \"dragging\":\n actions.commit();\n context.activeDragHandleId = undefined;\n break;\n }\n // enter\n switch (to) {\n case \"idle\":\n actions.onAutosave();\n break;\n case \"dragging\":\n actions.prepare();\n break;\n case \"togglingCollapse\":\n actions.prepare();\n actions.clearLastKnownSize();\n break;\n }\n state.current = to;\n onUpdate?.(context);\n }\n function send(event) {\n switch (event.type) {\n case \"lockGroup\":\n locked = true;\n break;\n case \"unlockGroup\":\n locked = false;\n break;\n }\n if (locked) {\n return;\n }\n switch (event.type) {\n case \"registerPanel\":\n context.items = addDeDuplicatedItems(context.items, {\n type: \"panel\",\n currentValue: makePixelUnit(-1),\n ...event.data,\n });\n break;\n case \"unregisterPanel\":\n actions.prepare();\n actions.removeItem(event.id);\n actions.clearLastKnownSize();\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n case \"registerPanelHandle\": {\n context.items = addDeDuplicatedItems(context.items, event.data);\n break;\n }\n case \"unregisterPanelHandle\":\n actions.prepare();\n actions.removeItem(event.id);\n actions.clearLastKnownSize();\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n case \"registerDynamicPanel\": {\n actions.prepare();\n let currentValue = makePixelUnit(0);\n if (event.data.collapsible &&\n event.data.collapsed &&\n event.data.collapsedSize) {\n currentValue = event.data.collapsedSize;\n }\n else if (event.data.default) {\n currentValue = event.data.default;\n }\n else {\n currentValue = event.data.min;\n }\n const newItems = addDeDuplicatedItems(context.items, {\n type: \"panel\",\n ...event.data,\n currentValue,\n });\n const itemIndex = newItems.findIndex((item) => item.id === event.data.id);\n const newContext = { ...context, items: newItems };\n const overflowDueToHandles = context.items\n .reduce((acc, i) => {\n if (isPanelHandle(i)) {\n return acc.add(getUnitPixelValue(context, i.size));\n }\n return acc.add(i.currentValue.value);\n }, new Big(0))\n .minus(getGroupSize(context));\n applyDeltaInBothDirections(newContext, newItems, itemIndex, currentValue.value.add(overflowDueToHandles).neg());\n context.items = newItems;\n actions.clearLastKnownSize();\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n }\n case \"rebindPanelCallbacks\":\n for (const item of context.items) {\n if (isPanelData(item) && item.id === event.data.id) {\n item.onCollapseChange = event.data.onCollapseChange;\n item.onResize = event.data.onResize;\n }\n }\n break;\n case \"updateConstraints\":\n actions.prepare();\n for (const item of context.items) {\n if (isPanelData(item) && item.id === event.data.id) {\n const panel = event.data;\n item.min = panel.min;\n item.max = panel.max;\n item.default = panel.default;\n item.collapsedSize = panel.collapsedSize;\n item.isStaticAtRest = panel.isStaticAtRest;\n item.collapseAnimation = panel.collapseAnimation;\n item.collapsible = panel.collapsible;\n }\n else if (isPanelHandle(item) && item.id === event.data.id) {\n const handle = event.data;\n item.size = handle.size;\n }\n }\n actions.clearLastKnownSize();\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n case \"setActualItemsSize\": {\n const withLastKnownSize = context.items.map((i) => {\n if (!isPanelData(i))\n return i;\n const lastKnownSize = event.childrenSizes[i.id] || i.lastKnownSize;\n return { ...i, lastKnownSize };\n });\n let totalSize = 0;\n let useLastKnownSize = false;\n for (const item of withLastKnownSize) {\n if (isPanelData(item)) {\n const size = item.lastKnownSize?.[context.orientation === \"horizontal\" ? \"width\" : \"height\"];\n // If any size is 0 don't handle overflow\n if (!size) {\n context.items = withLastKnownSize;\n useLastKnownSize = true;\n break;\n }\n totalSize += size;\n }\n else {\n totalSize += item.size.value.toNumber();\n }\n }\n if (useLastKnownSize) {\n context.items = withLastKnownSize;\n }\n else if (totalSize > getGroupSize(context) &&\n state.current !== \"dragging\") {\n context.items = handleOverflow({\n ...context,\n items: prepareItems({ ...context, items: withLastKnownSize }),\n }).items;\n }\n else {\n context.items = withLastKnownSize;\n }\n actions.onResize();\n break;\n }\n case \"setSize\": {\n context.size = event.size;\n actions.onResize();\n break;\n }\n case \"setOrientation\":\n context.orientation = event.orientation;\n actions.clearLastKnownSize();\n actions.onResize();\n break;\n default:\n break;\n }\n if (state.current === \"idle\") {\n switch (event.type) {\n case \"dragHandleStart\":\n transition(\"dragging\");\n context.activeDragHandleId = event.handleId;\n break;\n case \"setPanelPixelSize\": {\n actions.prepare();\n actions.clearLastKnownSize();\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n const current = panel.currentValue.value;\n const newSize = clampUnit(context, panel, getUnitPixelValue(context, parseUnit(event.size)));\n const isBigger = newSize > current;\n const delta = isBigger\n ? newSize.minus(current)\n : current.minus(newSize);\n panel.sizeBeforeCollapse = newSize.toNumber();\n Object.assign(context, iterativelyUpdateLayout({\n context,\n panelId: event.panelId,\n direction: (handle.direction * (isBigger ? 1 : -1)),\n handleId: handle.item.id,\n delta,\n }));\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n }\n case \"collapsePanel\":\n if (guards.shouldNotifyCollapseToggle(event)) {\n actions.notifyCollapseToggle(event);\n }\n else {\n const panel = getPanelWithId(context, event.panelId);\n if (!panel.collapsed) {\n transition(\"togglingCollapse\");\n abortController.abort();\n animationActor(context, event, send, abortController).then((output) => {\n actions.onAnimationEnd(output);\n transition(\"idle\");\n if (event.resolve) {\n requestAnimationFrame(event.resolve);\n }\n });\n }\n }\n break;\n case \"expandPanel\":\n if (guards.cannotExpandPanel(event)) {\n break;\n }\n else if (guards.shouldNotifyCollapseToggle(event)) {\n actions.notifyCollapseToggle(event);\n }\n else {\n const panel = getPanelWithId(context, event.panelId);\n if (panel.collapsed) {\n transition(\"togglingCollapse\");\n abortController.abort();\n animationActor(context, event, send, abortController).then((output) => {\n actions.onAnimationEnd(output);\n transition(\"idle\");\n if (event.resolve) {\n requestAnimationFrame(event.resolve);\n }\n });\n }\n }\n break;\n default:\n break;\n }\n }\n else if (state.current === \"dragging\") {\n switch (event.type) {\n case \"dragHandle\":\n actions.clearLastKnownSize();\n assign(context, updateLayout(context, event));\n actions.onResize();\n break;\n case \"dragHandleEnd\":\n transition(\"idle\");\n break;\n case \"expandPanel\":\n case \"collapsePanel\":\n if (guards.shouldCollapseToggle(event)) {\n actions.runCollapseToggle(event);\n }\n break;\n }\n }\n else if (state.current === \"togglingCollapse\") {\n switch (event.type) {\n case \"applyDelta\":\n assign(context, updateLayout(context, {\n panelId: event.panelId,\n handleId: event.handleId,\n type: \"collapsePanel\",\n disregardCollapseBuffer: true,\n value: dragHandlePayload({\n delta: event.delta,\n orientation: context.orientation,\n }),\n }));\n actions.onResize();\n break;\n }\n }\n onUpdate?.(context);\n }\n return [context, send, state];\n}\n// #endregion\n//# sourceMappingURL=index.js.map","import { getUnitPercentageValue, } from \"@window-splitter/state\";\nexport function getPanelDomAttributes({ groupId, id, collapsible, collapsed, }) {\n const attrs = {\n id: id,\n \"data-splitter-group-id\": groupId,\n \"data-splitter-type\": \"panel\",\n \"data-splitter-id\": id,\n };\n if (collapsible) {\n attrs[\"data-collapsed\"] = collapsed;\n }\n return attrs;\n}\nexport function getPanelResizerDomAttributes({ groupId, id, orientation, isDragging, activeDragHandleId, disabled, controlsId, min, max, currentValue, groupSize, }) {\n return {\n id: id,\n role: \"separator\",\n \"data-splitter-type\": \"handle\",\n \"data-splitter-id\": id,\n \"data-splitter-group-id\": groupId,\n \"data-handle-orientation\": orientation,\n \"data-state\": isDragging\n ? \"dragging\"\n : activeDragHandleId\n ? \"inactive\"\n : \"idle\",\n \"aria-label\": \"Resize Handle\",\n \"aria-disabled\": disabled,\n \"aria-controls\": controlsId,\n \"aria-valuemin\": min ? getUnitPercentageValue(groupSize, min) : undefined,\n \"aria-valuemax\": max === \"1fr\"\n ? 100\n : max\n ? getUnitPercentageValue(groupSize, max)\n : undefined,\n \"aria-valuenow\": currentValue\n ? getUnitPercentageValue(groupSize, currentValue)\n : undefined,\n };\n}\nexport function measureGroupChildren(groupId, cb) {\n const childrenObserver = new ResizeObserver((childrenEntries) => {\n const childrenSizes = {};\n for (const childEntry of childrenEntries) {\n const child = childEntry.target;\n const childId = child.getAttribute(\"data-splitter-id\");\n const childSize = childEntry.borderBoxSize[0];\n if (childId && childSize) {\n childrenSizes[childId] = {\n width: childSize.inlineSize,\n height: childSize.blockSize,\n };\n }\n }\n cb(childrenSizes);\n });\n const c = document.querySelectorAll(`[data-splitter-group-id=\"${groupId}\"]`);\n for (const child of c) {\n childrenObserver.observe(child);\n }\n return () => {\n childrenObserver.disconnect();\n };\n}\n//# sourceMappingURL=interface.js.map","// import {disableTextSelection, restoreTextSelection} from './textSelection';\n/**\n * Handles move interactions across mouse, touch, and keyboard, including dragging with\n * the mouse or touch, and using the arrow keys. Normalizes behavior across browsers and\n * platforms, and ignores emulated mouse events on touch devices.\n */\nexport function move(props) {\n const { onMoveStart, onMove: onMoveProp, onMoveEnd } = props;\n const state = { didMove: false, lastPosition: null, id: null };\n const onMove = (originalEvent, pointerType, deltaX, deltaY) => {\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n if (!state.didMove) {\n state.didMove = true;\n onMoveStart?.({\n type: \"movestart\",\n pointerType,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey,\n });\n }\n onMoveProp?.({\n type: \"move\",\n pointerType,\n deltaX: deltaX,\n deltaY: deltaY,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey,\n });\n };\n const end = (originalEvent, pointerType) => {\n // restoreTextSelection();\n if (state.didMove) {\n onMoveEnd?.({\n type: \"moveend\",\n pointerType,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey,\n });\n }\n };\n const moveProps = {};\n const start = () => {\n // disableTextSelection();\n state.didMove = false;\n };\n const onPointerMove = (e) => {\n if (e.pointerId === state.id) {\n const pointerType = (e.pointerType || \"mouse\");\n // Problems with PointerEvent#movementX/movementY:\n // 1. it is always 0 on macOS Safari.\n // 2. On Chrome Android, it's scaled by devicePixelRatio, but not on Chrome macOS\n onMove(e, pointerType, e.pageX - (state.lastPosition?.pageX ?? 0), e.pageY - (state.lastPosition?.pageY ?? 0));\n state.lastPosition = { pageX: e.pageX, pageY: e.pageY };\n }\n };\n const onPointerUp = (e) => {\n if (e.pointerId === state.id) {\n const pointerType = (e.pointerType || \"mouse\");\n end(e, pointerType);\n state.id = null;\n window.removeEventListener(\"pointermove\", onPointerMove, false);\n window.removeEventListener(\"pointerup\", onPointerUp, false);\n window.removeEventListener(\"pointercancel\", onPointerUp, false);\n }\n };\n moveProps.onPointerDown = (e) => {\n if (e.button === 0 && state.id == null) {\n start();\n e.stopPropagation();\n e.preventDefault();\n state.lastPosition = { pageX: e.pageX, pageY: e.pageY };\n state.id = e.pointerId;\n window.addEventListener(\"pointermove\", onPointerMove, false);\n window.addEventListener(\"pointerup\", onPointerUp, false);\n window.addEventListener(\"pointercancel\", onPointerUp, false);\n }\n };\n const triggerKeyboardMove = (e, deltaX, deltaY) => {\n start();\n onMove(e, \"keyboard\", deltaX, deltaY);\n end(e, \"keyboard\");\n };\n moveProps.onKeyDown = (e) => {\n switch (e.key) {\n case \"Left\":\n case \"ArrowLeft\":\n e.preventDefault();\n e.stopPropagation();\n triggerKeyboardMove(e, -1, 0);\n break;\n case \"Right\":\n case \"ArrowRight\":\n e.preventDefault();\n e.stopPropagation();\n triggerKeyboardMove(e, 1, 0);\n break;\n case \"Up\":\n case \"ArrowUp\":\n e.preventDefault();\n e.stopPropagation();\n triggerKeyboardMove(e, 0, -1);\n break;\n case \"Down\":\n case \"ArrowDown\":\n e.preventDefault();\n e.stopPropagation();\n triggerKeyboardMove(e, 0, 1);\n break;\n }\n };\n return { moveProps: moveProps };\n}\n//# sourceMappingURL=move.js.map","<script setup lang=\"ts\">\nimport {\n getPanelDomAttributes,\n PanelHandle,\n SharedPanelProps,\n} from \"@window-splitter/interface\";\nimport {\n getPanelPercentageSize,\n getPanelPixelSize,\n GroupMachineContextValue,\n haveConstraintsChangedForPanel,\n initializePanel,\n isPanelData,\n PanelData,\n SendFn,\n} from \"@window-splitter/state\";\nimport {\n computed,\n inject,\n onMounted,\n onUnmounted,\n Ref,\n useId,\n watchEffect,\n} from \"vue\";\n\n// eslint-disable-next-line vue/require-default-prop\ntype PanelProps = SharedPanelProps<boolean> & { id?: string };\n\nconst props = withDefaults(defineProps<PanelProps>(), { collapsed: undefined });\nconst {\n min: _min,\n max: _max,\n id,\n collapsible: _collapsible,\n collapsedSize: _collapsedSize,\n onCollapseChange: _onCollapseChange,\n collapseAnimation: _collapseAnimation,\n onResize: _onResize,\n defaultCollapsed,\n default: defaultSize,\n isStaticAtRest,\n collapsed: _collapsed,\n ...attrs\n} = props;\n\nconst panelId = id || useId();\nconst send = inject<SendFn>(\"send\");\nconst state = inject<Ref<GroupMachineContextValue>>(\"state\");\nconst isPrerender = inject<Ref<boolean>>(\"isPrerender\");\n\nconst initPanel = (): PanelData =>\n initializePanel({\n id: panelId,\n min: props.min,\n max: props.max,\n collapsible: props.collapsible,\n collapsed: props.collapsed,\n collapsedSize: props.collapsedSize,\n onCollapseChange: props.onCollapseChange\n ? { current: props.onCollapseChange }\n : undefined,\n collapseAnimation: props.collapseAnimation,\n onResize: props.onResize ? { current: props.onResize } : undefined,\n defaultCollapsed,\n default: defaultSize,\n isStaticAtRest,\n });\n\nconst panelData = computed(() => {\n const item = state?.value?.items.find((i) => i.id === panelId);\n if (!item || !isPanelData(item)) return undefined;\n return item;\n});\n\nlet dynamicPanelIsMounting = false;\n\nif (panelData.value) {\n send?.({\n type: \"rebindPanelCallbacks\",\n data: {\n id: panelId,\n onCollapseChange: props.onCollapseChange\n ? { current: props.onCollapseChange }\n : undefined,\n onResize: props.onResize ? { current: props.onResize } : undefined,\n },\n });\n} else {\n if (isPrerender?.value) {\n send?.({ type: \"registerPanel\", data: initPanel() });\n } else {\n dynamicPanelIsMounting = true;\n }\n}\n\nonMounted(() => {\n const groupId = state?.value?.groupId;\n if (!groupId || !dynamicPanelIsMounting) return;\n\n const groupElement = document.getElementById(groupId);\n if (!groupElement) return;\n\n const panelElement = document.getElementById(panelId);\n if (!panelElement) return;\n\n const order = Array.from(groupElement.children).indexOf(panelElement);\n if (typeof order !== \"number\") return;\n\n send?.({\n type: \"registerDynamicPanel\",\n data: { ...initPanel(), order },\n });\n dynamicPanelIsMounting = false;\n});\n\nconst contraintChanged = computed(\n () =>\n !dynamicPanelIsMounting &&\n haveConstraintsChangedForPanel(initPanel(), panelData.value),\n);\n\nwatchEffect(() => {\n if (!contraintChanged.value) return;\n send?.({ type: \"updateConstraints\", data: initPanel() });\n});\n\nonUnmounted(() => {\n requestAnimationFrame(() => send?.({ type: \"unregisterPanel\", id: panelId }));\n});\n\ndefineExpose<PanelHandle>({\n getId: () => panelId,\n collapse: async () => {\n if (!panelData.value?.collapsible) return;\n return await new Promise<void>((resolve) => {\n send?.({ type: \"collapsePanel\", panelId: panelId, controlled: true, resolve });\n });\n },\n isCollapsed: () =>\n Boolean(panelData.value?.collapsible && panelData.value?.collapsed),\n expand: async () => {\n if (!panelData.value?.collapsible) return;\n return await new Promise<void>((resolve) => {\n send?.({ type: \"expandPanel\", panelId: panelId, controlled: true, resolve });\n });\n },\n isExpanded: () =>\n Boolean(panelData.value?.collapsible && !panelData.value?.collapsed),\n getPixelSize: () => getPanelPixelSize(state!.value, panelId),\n getPercentageSize: () => getPanelPercentageSize(state!.value, panelId),\n setSize: (size) =>\n send?.({ type: \"setPanelPixelSize\", panelId: panelId, size }),\n});\n\nconst isControlledCollapse = computed(\n () => panelData.value?.collapseIsControlled,\n);\n\nwatchEffect(() => {\n // Subscribe to the collapsed prop (doesn't work in rAF)\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n props.collapsed;\n\n requestAnimationFrame(() => {\n if (!isControlledCollapse.value) return;\n if (props.collapsed) {\n send?.({ type: \"collapsePanel\", panelId: panelId, controlled: true });\n } else {\n send?.({ type: \"expandPanel\", panelId: panelId, controlled: true });\n }\n });\n});\n\nconst computedProps = computed(() => {\n const currentPanel = panelData.value;\n\n return {\n ...attrs,\n ...getPanelDomAttributes({\n groupId: state?.value?.groupId,\n id: panelId,\n collapsible: currentPanel?.collapsible,\n collapsed: currentPanel?.collapsed,\n }),\n style: {\n minWidth: 0,\n minHeight: 0,\n overflow: \"hidden\",\n },\n };\n});\n</script>\n\n<template>\n <div v-bind=\"computedProps\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n measureGroupChildren,\n PanelGroupHandle,\n SharedPanelGroupProps,\n} from \"@window-splitter/interface\";\nimport {\n buildTemplate,\n getPanelGroupPercentageSizes,\n getPanelGroupPixelSizes,\n groupMachine,\n GroupMachineContextValue,\n isPanelData,\n prepareItems,\n prepareSnapshot,\n} from \"@window-splitter/state\";\nimport {\n useId,\n provide,\n ref,\n computed,\n onMounted,\n watchEffect,\n onWatcherCleanup,\n} from \"vue\";\n\n// eslint-disable-next-line vue/require-default-prop\ntype PanelGroupProps = SharedPanelGroupProps & { id?: string };\n\nconst {\n orientation = \"horizontal\",\n autosaveStrategy = \"localStorage\",\n snapshot: snapshotProp,\n autosaveId,\n id,\n shiftAmount,\n ...attrs\n} = defineProps<PanelGroupProps>();\n\nlet snapshot = snapshotProp;\n\nif (\n !snapshot &&\n typeof window !== \"undefined\" &&\n autosaveId &&\n autosaveStrategy === \"localStorage\"\n) {\n const localSnapshot = localStorage.getItem(autosaveId);\n\n if (localSnapshot) {\n snapshot = JSON.parse(localSnapshot) as GroupMachineContextValue;\n }\n}\n\nconst isPrerender = ref(true);\nprovide(\"isPrerender\", isPrerender);\n\nconst groupId = autosaveId || id || useId();\nconst [initialState, send, machineState] = groupMachine(\n {\n orientation: orientation,\n groupId,\n autosaveStrategy: autosaveStrategy,\n shiftAmount,\n ...(snapshot ? prepareSnapshot(snapshot) : undefined),\n },\n (s) => {\n context.value = { ...s };\n },\n);\n\nonMounted(() => {\n isPrerender.value = false;\n});\n\nconst context = ref(initialState);\nconst gridStyle = computed(() => {\n const template = buildTemplate(context.value);\n return {\n height: \"100%\",\n display: \"grid\",\n gridTemplateColumns: orientation === \"horizontal\" ? template : undefined,\n gridTemplateRows: orientation === \"vertical\" ? template : undefined,\n };\n});\n\nprovide(\"send\", send);\nprovide(\"state\", context);\nprovide(\"id\", machineState);\n\nconst elementRef = ref<HTMLDivElement | null>(null);\n\nonMounted(() => {\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return;\n if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {\n send?.({ type: \"setSize\", size: entry.contentRect });\n }\n });\n\n if (elementRef.value) {\n observer.observe(elementRef.value);\n }\n\n return () => observer.disconnect();\n});\n\nconst childIds = computed(() =>\n context.value?.items.map((i) => i.id).join(\",\"),\n);\n\nonMounted(() => {\n watchEffect(() => {\n // re-render when the childIds change\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n childIds.value;\n\n const cleanup = measureGroupChildren(groupId, (childrenSizes) => {\n send({ type: \"setActualItemsSize\", childrenSizes });\n });\n\n onWatcherCleanup(cleanup);\n });\n});\n\nonMounted(() => {\n send({ type: \"unlockGroup\" });\n return () => send({ type: \"lockGroup\" });\n});\n\ndefineExpose<PanelGroupHandle>({\n getId: () => groupId,\n getPixelSizes: () => getPanelGroupPixelSizes(context.value),\n getPercentageSizes: () => getPanelGroupPercentageSizes(context.value),\n getTemplate: () =>\n buildTemplate({\n ...context.value,\n items: prepareItems(context.value),\n }),\n getState: () => (machineState.current === \"idle\" ? \"idle\" : \"dragging\"),\n setSizes: (updates) => {\n for (let index = 0; index < updates.length; index++) {\n const item = context.value?.items[index];\n const update = updates[index];\n\n if (item && isPanelData(item) && update) {\n send({\n type: \"setPanelPixelSize\",\n panelId: item.id,\n size: update,\n });\n }\n }\n },\n});\n</script>\n\n<template>\n <div\n v-bind=\"attrs\"\n :id=\"groupId\"\n ref=\"elementRef\"\n data-panel-group-wrapper\n :style=\"gridStyle\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n getPanelResizerDomAttributes,\n move,\n SharedPanelResizerProps,\n} from \"@window-splitter/interface\";\nimport {\n getCollapsiblePanelForHandleId,\n getCursor,\n getGroupSize,\n GroupMachineContextValue,\n haveConstraintsChangedForPanelHandle,\n initializePanelHandleData,\n isPanelData,\n isPanelHandle,\n PanelHandleData,\n SendFn,\n} from \"@window-splitter/state\";\nimport {\n computed,\n inject,\n onMounted,\n onUnmounted,\n Ref,\n useId,\n watchEffect,\n} from \"vue\";\n\n// eslint-disable-next-line vue/require-default-prop\ntype PanelResizerProps = SharedPanelResizerProps & { id?: string };\n\nconst {\n size = \"0px\",\n id: _id,\n onDragStart,\n onDrag,\n onDragEnd,\n disabled,\n ...attrs\n} = defineProps<PanelResizerProps>();\n\nconst defaultId = _id || useId();\nconst id = defaultId;\n\nconst send = inject<SendFn>(\"send\");\nconst state = inject<Ref<GroupMachineContextValue>>(\"state\");\nconst isPrerender = inject<Ref<boolean>>(\"isPrerender\");\n\nconst initHandle = () => initializePanelHandleData({ size, id });\nconst handleData = computed(() => {\n const item = state?.value?.items.find((i) => i.id === id);\n if (!item || !isPanelHandle(item)) return undefined;\n return item;\n});\n\nlet dynamicPanelHandleIsMounting = false;\n\nif (!handleData.value) {\n if (isPrerender?.value) {\n send?.({ type: \"registerPanelHandle\", data: initHandle() });\n } else {\n dynamicPanelHandleIsMounting = true;\n }\n}\n\nonMounted(() => {\n const groupId = state?.value?.groupId;\n if (!groupId || !dynamicPanelHandleIsMounting) return;\n\n const groupElement = document.getElementById(state?.value?.groupId);\n if (!groupElement) return;\n\n const handleEl = document.getElementById(id);\n if (!handleEl) return;\n\n const order = Array.from(groupElement.children).indexOf(handleEl);\n if (typeof order !== \"number\") return;\n\n send?.({\n type: \"registerPanelHandle\",\n data: { ...initHandle(), order },\n });\n dynamicPanelHandleIsMounting = false;\n});\n\nconst contraintChanged = computed(\n () =>\n !dynamicPanelHandleIsMounting &&\n haveConstraintsChangedForPanelHandle(initHandle(), handleData.value),\n);\n\nwatchEffect(() => {\n if (!contraintChanged.value) return;\n send?.({ type: \"updateConstraints\", data: initHandle() });\n});\n\nonUnmounted(() => {\n requestAnimationFrame(() => send?.({ type: \"unregisterPanelHandle\", id }));\n});\n\nconst { moveProps } = move({\n onMoveStart: () => {\n send?.({ type: \"dragHandleStart\", handleId: id });\n onDragStart?.();\n if (!state?.value) return;\n document.body.style.cursor = getCursor(state?.value) || \"auto\";\n },\n onMove: (e) => {\n send?.({ type: \"dragHandle\", handleId: id, value: e });\n onDrag?.();\n },\n onMoveEnd: () => {\n send?.({ type: \"dragHandleEnd\", handleId: id });\n onDragEnd?.();\n document.body.style.cursor = \"auto\";\n },\n});\n\nconst onKeyDown = (e: KeyboardEvent) => {\n if (!state?.value) return;\n\n try {\n const collapsiblePanel = getCollapsiblePanelForHandleId(state?.value, id);\n\n if (e.key === \"Enter\" && collapsiblePanel) {\n if (collapsiblePanel.collapsed) {\n send?.({ type: \"expandPanel\", panelId: collapsiblePanel.id });\n } else {\n send?.({ type: \"collapsePanel\", panelId: collapsiblePanel.id });\n }\n }\n } catch {\n //\n }\n};\n\nconst combinedProps = computed(() => {\n const handleIndex = state?.value?.items.findIndex((item) => item.id === id);\n\n if (!handleIndex) return { id };\n\n const handle = state?.value?.items[handleIndex] as PanelHandleData;\n const panelBeforeHandle = state?.value?.items[handleIndex - 1];\n\n if (!panelBeforeHandle || !isPanelData(panelBeforeHandle)) return { id };\n\n return {\n ...attrs,\n ...getPanelResizerDomAttributes({\n groupId: state?.value?.groupId,\n id,\n orientation: state?.value?.orientation || \"horizontal\",\n isDragging: state?.value?.activeDragHandleId === id,\n activeDragHandleId: state?.value?.activeDragHandleId,\n disabled: disabled,\n controlsId: panelBeforeHandle.id,\n min: panelBeforeHandle.min,\n max: panelBeforeHandle.max,\n currentValue: panelBeforeHandle.currentValue,\n groupSize: getGroupSize(state.value),\n }),\n onpointerdown: disabled ? undefined : moveProps.onPointerDown,\n onkeydown: disabled\n ? undefined\n : (e: KeyboardEvent) => {\n moveProps.onKeyDown(e);\n onKeyDown(e);\n },\n style: {\n cursor: state?.value ? getCursor(state.value) : undefined,\n width:\n state?.value?.orientation === \"horizontal\"\n ? `${handle?.size.value.toNumber()}px`\n : \"100%\",\n height:\n state?.value?.orientation === \"vertical\"\n ? `${handle?.size.value.toNumber()}px`\n : \"100%\",\n },\n };\n});\n</script>\n\n<template>\n <div v-bind=\"combinedProps\" :tabindex=\"disabled ? -1 : 0\">\n <slot />\n </div>\n</template>\n"],"names":["DP","RM","MAX_DP","MAX_POWER","NE","PE","STRICT","NAME","INVALID","INVALID_DP","INVALID_RM","DIV_BY_ZERO","P","UNDEFINED","NUMERIC","_Big_","Big","n","x","parse","e","i","nl","round","sd","rm","more","xc","stringify","doExponential","isNonzero","s","y","isneg","yc","j","k","l","a","b","dp","bl","bt","cmp","ri","bz","ai","al","r","rl","q","qc","qi","p","t","xlty","xe","ye","ygtx","one","c","half","eachSafely","values","each","value","pendingCount","makeQueue","next","current","fn","arg","updateQueue","nativeRaf","raf","schedule","ts","queue","start","loop","stop","update","prevTs","COLLAPSE_THRESHOLD","makePercentUnit","makePixelUnit","getCollapseAnimation","panel","easeFn","collapseAnimations","duration","getCursor","context","prepareSnapshot","snapshot","item","isPanelData","invariant","condition","message","isEvent","event","eventType","isPanelHandle","initializePanel","onResize","lastCall","size","_b","_a","parseUnit","eq","haveConstraintsChangedForPanel","haveConstraintsChangedForPanelHandle","initializePanelHandleData","unit","getUnitPercentageValue","groupsSize","getGroupSize","getUnitPixelValue","parsed","clampUnit","min","max","getPanelWithId","panelId","getPanelHandleIndex","handleId","getCollapsiblePanelForHandleId","handleIndex","panelBefore","panelAfter","getHandleForPanelId","panelIndex","getHandleForPanelIdWithAvailableSpace","findPanelWithSpace","sortWithOrder","items","defaultPlacement","takenPlacements","defaultOrder","withoutOrder","sortedWithOrder","panelHasSpace","adjustment","direction","disregardCollapseBuffer","slice","targetPanel","createUnrestrainedPanel","getStaticWidth","width","formatUnit","getPanelGroupPixelSizes","prepareItems","getPanelPixelSize","getPanelGroupPercentageSizes","commitLayout","getPanelPercentageSize","buildTemplate","staticWidth","hasSeenFillPanel","addDeDuplicatedItems","newItem","currentItemIndex","restItems","_","index","data","newItems","lastSize","pixel","updateLayout","dragEvent","handle","moveAmount","moveDirection","newDragOvershoot","isInLeftBuffer","isInLeftOvershoot","isInRightBuffer","isInRightOvershoot","potentialNewValue","isInDragBugger","unrestrainedPanelBefore","panelBeforePreviousValue","panelBeforeNewValueRaw","panelBeforeNewValue","unrestrainedPanelAfter","panelAfterPreviousValue","applied","panelAfterNewValueRaw","panelAfterNewValue","extra","panelBeforeIsAboutToCollapse","_c","_d","leftoverSpace","acc","dragHandlePayload","delta","orientation","shiftKey","iterativelyUpdateLayout","controlled","isVirtual","newContext","applyDeltaInBothDirections","itemIndex","hasTriedBothDirections","deltaLeft","oldValue","newValue","handleOverflow","groupSize","nonStaticWidth","totalSize","overflow","collapsiblePanel","collapsiblePanelIndex","sizeChange","clearLastKnownSize","setCookie","name","jsonData","getDeltaForEvent","collapsedSize","animationActor","send","abortController","fullDelta","contextCopy","finalLayout","resolve","reject","fps","ease","totalFrames","frame","appliedDelta","renderFrame","progress","assign","action","target","source","key","groupId","groupMachine","input","onUpdate","state","locked","actions","id","removedSize","output","guards","pixelItems","interimContext","updatedPanel","didExpand","transition","to","currentValue","overflowDueToHandles","withLastKnownSize","lastKnownSize","useLastKnownSize","newSize","isBigger","getPanelDomAttributes","collapsible","collapsed","attrs","getPanelResizerDomAttributes","isDragging","activeDragHandleId","disabled","controlsId","measureGroupChildren","cb","childrenObserver","childrenEntries","childrenSizes","childEntry","childId","childSize","child","move","props","onMoveStart","onMoveProp","onMoveEnd","onMove","originalEvent","pointerType","deltaX","deltaY","end","moveProps","onPointerMove","onPointerUp","triggerKeyboardMove","__props","_min","_max","_collapsible","_collapsedSize","_onCollapseChange","_collapseAnimation","_onResize","defaultCollapsed","defaultSize","isStaticAtRest","_collapsed","useId","inject","isPrerender","initPanel","panelData","computed","dynamicPanelIsMounting","onMounted","groupElement","panelElement","order","contraintChanged","watchEffect","onUnmounted","__expose","isControlledCollapse","computedProps","currentPanel","_createPropsRestProxy","localSnapshot","ref","provide","initialState","machineState","gridStyle","template","elementRef","observer","entry","childIds","cleanup","onWatcherCleanup","updates","initHandle","handleData","dynamicPanelHandleIsMounting","handleEl","onKeyDown","combinedProps","panelBeforeHandle","_e","_f","_g","_h","_i"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/big.js@6.2.1/node_modules/big.js/big.mjs","../../state/dist/esm/raf.js","../../state/dist/esm/index.js","../../interface/dist/esm/interface.js","../../interface/dist/esm/move.js","../src/Panel.vue","../src/PanelGroup.vue","../src/PanelResizer.vue"],"sourcesContent":["/*\r\n * big.js v6.2.1\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2022 Michael Mclaughlin\r\n * https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\nvar DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n /*\r\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n * primitive number without a loss of precision.\r\n */\r\n STRICT = false, // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n if (typeof n !== 'string') {\r\n if (Big.strict === true && typeof n !== 'bigint') {\r\n throw TypeError(INVALID + 'value');\r\n }\r\n\r\n // Minus zero?\r\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n }\r\n\r\n parse(x, n);\r\n }\r\n\r\n // Retain a reference to this Big constructor.\r\n // Shadow Big.prototype.constructor which points to Object.\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.strict = STRICT;\r\n Big.roundDown = 0;\r\n Big.roundHalfUp = 1;\r\n Big.roundHalfEven = 2;\r\n Big.roundUp = 3;\r\n\r\n return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n var e, i, nl;\r\n\r\n if (!NUMERIC.test(n)) {\r\n throw Error(INVALID + 'number');\r\n }\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n var xc = x.c;\r\n\r\n if (rm === UNDEFINED) rm = x.constructor.RM;\r\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n if (sd < 1) {\r\n more =\r\n rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n rm === 1 && xc[0] >= 5 ||\r\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n );\r\n\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = x.e - sd + 1;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else if (sd < xc.length) {\r\n\r\n // xc[sd] is the digit after the digit that may be rounded up.\r\n more =\r\n rm === 1 && xc[sd] >= 5 ||\r\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n rm === 3 && (more || !!xc[0]);\r\n\r\n // Remove any digits after the required precision.\r\n xc.length = sd;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[--sd] > 9;) {\r\n xc[sd] = 0;\r\n if (sd === 0) {\r\n ++x.e;\r\n xc.unshift(1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (sd = xc.length; !xc[--sd];) xc.pop();\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n var e = x.e,\r\n s = x.c.join(''),\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (doExponential) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) {\r\n for (e -= n; e--;) s += '0';\r\n } else if (e < n) {\r\n s = s.slice(0, e) + '.' + s.slice(e);\r\n }\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n\r\n // Divisor is zero?\r\n if (!b[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) {\r\n y.s = k;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n p = dp + (q.e = x.e - y.e) + 1; // precision of the result\r\n\r\n q.s = k;\r\n k = p < 0 ? 0 : p;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n p--;\r\n }\r\n\r\n // Round?\r\n if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (yc[0]) {\r\n y.s = -b;\r\n } else if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = 1;\r\n }\r\n return y;\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n var e, k, t,\r\n x = this,\r\n Big = x.constructor;\r\n\r\n y = new Big(y);\r\n\r\n // Signs differ?\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (!yc[0]) {\r\n if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = x.s;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (e = xe - ye) {\r\n if (e > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n e = -e;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; e--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n e = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (k) {\r\n xc.unshift(k);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor('1'),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n throw Error(INVALID + 'exponent');\r\n }\r\n\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big('0.5');\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) {\r\n throw Error(NAME + 'No square root');\r\n }\r\n\r\n // Estimate.\r\n s = Math.sqrt(x + '');\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s + '');\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) {\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = b;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), ++dp, rm);\r\n for (; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n // x.e may have changed if the value is rounded up.\r\n for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON = P.toString = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitve number.\r\n */\r\nP.toNumber = function () {\r\n var n = Number(stringify(this, true, true));\r\n if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n throw Error(NAME + 'Imprecise conversion');\r\n }\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var x = this,\r\n Big = x.constructor,\r\n n = x.c[0];\r\n\r\n if (sd !== UNDEFINED) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n x = round(new Big(x), sd, rm);\r\n for (; x.c.length < sd;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n if (Big.strict === true) {\r\n throw Error(NAME + 'valueOf disallowed');\r\n }\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction eachSafely(values, each) {\n values.forEach((value) => {\n try {\n each(value);\n }\n catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n });\n}\n/** The number of pending tasks */\nlet pendingCount = 0;\nfunction makeQueue() {\n let next = new Set();\n let current = next;\n return {\n add(fn) {\n pendingCount += current == next && !next.has(fn) ? 1 : 0;\n next.add(fn);\n },\n delete(fn) {\n pendingCount -= current == next && next.has(fn) ? 1 : 0;\n return next.delete(fn);\n },\n flush(arg) {\n if (current.size) {\n next = new Set();\n pendingCount -= current.size;\n eachSafely(current, (fn) => fn(arg) && next.add(fn));\n pendingCount += next.size;\n current = next;\n }\n },\n };\n}\nconst updateQueue = makeQueue();\nconst nativeRaf = typeof window != \"undefined\" ? window.requestAnimationFrame : () => { };\n/**\n * Schedule an update for next frame.\n * Your function can return `true` to repeat next frame.\n */\nexport const raf = (fn) => schedule(fn, updateQueue);\nraf.now =\n typeof performance != \"undefined\" ? () => performance.now() : Date.now;\nraf.batchedUpdates = (fn) => fn();\n/** The most recent timestamp. */\nlet ts = -1;\nfunction schedule(fn, queue) {\n queue.add(fn);\n start();\n}\nfunction start() {\n if (ts < 0) {\n ts = 0;\n nativeRaf(loop);\n }\n}\nfunction stop() {\n ts = -1;\n}\nfunction loop() {\n if (~ts) {\n nativeRaf(loop);\n raf.batchedUpdates(update);\n }\n}\nfunction update() {\n const prevTs = ts;\n ts = raf.now();\n if (!pendingCount) {\n stop();\n return;\n }\n updateQueue.flush(prevTs ? Math.min(64, ts - prevTs) : 16.667);\n}\n//# sourceMappingURL=raf.js.map","import Big from \"big.js\";\nimport { raf } from \"./raf.js\";\n// #region Constants\n/** The default amount a user can `dragOvershoot` before the panel collapses */\nconst COLLAPSE_THRESHOLD = 50;\nexport function makePercentUnit(value) {\n return { type: \"percent\", value: new Big(value) };\n}\nexport function makePixelUnit(value) {\n return { type: \"pixel\", value: new Big(value) };\n}\nfunction getCollapseAnimation(panel) {\n let easeFn = collapseAnimations.linear;\n let duration = 300;\n if (panel.collapseAnimation) {\n if (typeof panel.collapseAnimation === \"string\") {\n easeFn = collapseAnimations[panel.collapseAnimation];\n }\n else {\n duration = panel.collapseAnimation.duration;\n easeFn =\n typeof panel.collapseAnimation.easing === \"function\"\n ? panel.collapseAnimation.easing\n : collapseAnimations[panel.collapseAnimation.easing];\n }\n }\n return { ease: easeFn, duration };\n}\n/** Copied from https://github.com/d3/d3-ease */\nconst collapseAnimations = {\n \"ease-in-out\": function quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n },\n bounce: function backInOut(t) {\n const s = 1.70158;\n return (((t *= 2) < 1\n ? t * t * ((s + 1) * t - s)\n : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2);\n },\n linear: function linear(t) {\n return +t;\n },\n};\n// #endregion\n// #region Helpers\nexport function getCursor(context) {\n if (context.orientation === \"horizontal\") {\n if (context.dragOvershoot.gt(0)) {\n return \"w-resize\";\n }\n else if (context.dragOvershoot.lt(0)) {\n return \"e-resize\";\n }\n else {\n return \"ew-resize\";\n }\n }\n else {\n if (context.dragOvershoot.gt(0)) {\n return \"n-resize\";\n }\n else if (context.dragOvershoot.lt(0)) {\n return \"s-resize\";\n }\n else {\n return \"ns-resize\";\n }\n }\n}\nexport function prepareSnapshot(snapshot) {\n // convert from old format\n if (\"context\" in snapshot) {\n snapshot = snapshot.context;\n }\n if (!(\"items\" in snapshot)) {\n return;\n }\n snapshot.dragOvershoot = new Big(snapshot.dragOvershoot || 0);\n for (const item of snapshot.items) {\n if (isPanelData(item)) {\n item.currentValue.value = new Big(item.currentValue.value);\n item.collapsedSize.value = new Big(item.collapsedSize.value);\n item.min.value = new Big(item.min.value);\n if (item.default) {\n item.default.value = new Big(item.default.value);\n }\n if (item.max && item.max !== \"1fr\") {\n item.max.value = new Big(item.max.value);\n }\n }\n else {\n item.size.value = new Big(item.size.value);\n }\n }\n return snapshot;\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction invariant(condition, message) {\n if (condition)\n return;\n throw new Error(message);\n}\n/** Assert that the provided event is one of the accepted types */\nfunction isEvent(event, eventType) {\n invariant(eventType.includes(event.type), `Invalid event type: ${eventType}. Expected: ${eventType.join(\" | \")}`);\n}\n/** Determine if an item is a panel */\nexport function isPanelData(value) {\n return Boolean(value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"panel\");\n}\n/** Determine if an item is a panel handle */\nexport function isPanelHandle(value) {\n return Boolean(value &&\n typeof value === \"object\" &&\n \"type\" in value &&\n value.type === \"handle\");\n}\nexport function initializePanel(item) {\n const onResize = () => {\n let lastCall = null;\n // Memo-ize so we only call the callback once per size\n return ((size) => {\n if (!lastCall ||\n (lastCall.pixel === size.pixel &&\n lastCall.percentage === size.percentage)) {\n lastCall = size;\n return;\n }\n lastCall = size;\n item.onResize?.current?.(size);\n });\n };\n const data = {\n type: \"panel\",\n min: parseUnit(item.min || \"0px\"),\n max: item.max ? parseUnit(item.max) : \"1fr\",\n collapsed: item.collapsible\n ? (item.collapsed ?? item.defaultCollapsed ?? false)\n : undefined,\n collapsible: item.collapsible,\n collapsedSize: parseUnit(item.collapsedSize ?? \"0px\"),\n onCollapseChange: item.onCollapseChange,\n onResize: { current: onResize() },\n collapseIsControlled: typeof item.collapsed !== \"undefined\",\n sizeBeforeCollapse: undefined,\n id: item.id,\n collapseAnimation: item.collapseAnimation,\n default: item.default ? parseUnit(item.default) : undefined,\n isStaticAtRest: item.isStaticAtRest,\n };\n return { ...data, currentValue: makePixelUnit(-1) };\n}\nfunction eq(a, b) {\n return a.type === b.type && a.value.eq(b.value);\n}\nexport function haveConstraintsChangedForPanel(a, b) {\n if (!b) {\n return true;\n }\n if (!eq(a.min, b.min)) {\n return true;\n }\n if ((a.max === \"1fr\" && b.max !== \"1fr\") ||\n (a.max !== \"1fr\" && b.max === \"1fr\") ||\n (a.max !== \"1fr\" && b.max !== \"1fr\" && !eq(a.max, b.max))) {\n return true;\n }\n if ((a.default && !b.default) ||\n (!a.default && b.default) ||\n (a.default && b.default && !eq(a.default, b.default))) {\n return true;\n }\n if (!eq(a.collapsedSize, b.collapsedSize)) {\n return true;\n }\n if (a.isStaticAtRest !== b.isStaticAtRest) {\n return true;\n }\n if ((a.collapseAnimation && !b.collapseAnimation) ||\n (!a.collapseAnimation && b.collapseAnimation) ||\n (typeof a.collapseAnimation === \"string\" &&\n typeof b.collapseAnimation === \"string\" &&\n a.collapseAnimation !== b.collapseAnimation) ||\n (typeof a.collapseAnimation === \"object\" &&\n typeof b.collapseAnimation === \"object\" &&\n (a.collapseAnimation.duration !== b.collapseAnimation.duration ||\n a.collapseAnimation.easing !== b.collapseAnimation.easing))) {\n return true;\n }\n if (a.collapsible !== b.collapsible) {\n return true;\n }\n return false;\n}\nexport function haveConstraintsChangedForPanelHandle(a, b) {\n if (!b) {\n return true;\n }\n if (!eq(a.size, b.size)) {\n return true;\n }\n return false;\n}\nexport function initializePanelHandleData(item) {\n return {\n type: \"handle\",\n ...item,\n size: typeof item.size === \"string\"\n ? parseUnit(item.size)\n : item.size,\n };\n}\n/** Parse a `Unit` string or `clamp` value */\nexport function parseUnit(unit) {\n if (unit === \"1fr\") {\n unit = \"100%\";\n }\n if (unit.endsWith(\"px\")) {\n return makePixelUnit(parseFloat(unit));\n }\n if (unit.endsWith(\"%\")) {\n return makePercentUnit(parseFloat(unit) / 100);\n }\n throw new Error(`Invalid unit: ${unit}`);\n}\n/** Convert a `Unit` to a percentage of the group size */\nexport function getUnitPercentageValue(groupsSize, unit) {\n if (unit.type === \"pixel\") {\n return groupsSize === 0 ? 0 : unit.value.div(groupsSize).toNumber();\n }\n return unit.value.toNumber();\n}\nexport function getGroupSize(context) {\n return context.orientation === \"horizontal\"\n ? context.size.width\n : context.size.height;\n}\n/** Get the size of a panel in pixels */\nfunction getUnitPixelValue(context, unit) {\n const parsed = unit === \"1fr\" ? parseUnit(unit) : unit;\n return parsed.type === \"pixel\"\n ? parsed.value\n : parsed.value.mul(getGroupSize(context));\n}\n/** Clamp a new `currentValue` given the panel's constraints. */\nfunction clampUnit(context, item, value) {\n const min = getUnitPixelValue(context, item.min);\n const max = getUnitPixelValue(context, item.max);\n if (value.gte(min) && value.lte(max)) {\n return value;\n }\n return value.lt(min) ? min : max;\n}\n/** Get a panel with a particular ID. */\nexport function getPanelWithId(context, panelId) {\n const item = context.items.find((i) => i.id === panelId);\n if (item && isPanelData(item)) {\n return item;\n }\n throw new Error(`Expected panel with id: ${panelId}`);\n}\n/** Get a panel with a particular ID. */\nfunction getPanelHandleIndex(context, handleId) {\n const item = context.items.findIndex((i) => i.id === handleId);\n if (item !== -1 && isPanelHandle(context.items[item])) {\n return item;\n }\n throw new Error(`Expected panel handle with id: ${handleId}`);\n}\n/**\n * Get the panel that's collapsible next to a resize handle.\n * Will first check the left panel then the right.\n */\nexport function getCollapsiblePanelForHandleId(context, handleId) {\n if (!context.items.length) {\n throw new Error(\"No items in group\");\n }\n const handleIndex = getPanelHandleIndex(context, handleId);\n const panelBefore = context.items[handleIndex - 1];\n const panelAfter = context.items[handleIndex + 1];\n if (panelBefore && isPanelData(panelBefore) && panelBefore.collapsible) {\n return panelBefore;\n }\n if (panelAfter && isPanelData(panelAfter) && panelAfter.collapsible) {\n return panelAfter;\n }\n throw new Error(`No collapsible panel found for handle: ${handleId}`);\n}\n/**\n * Get the handle closest to the target panel.\n * This is used to simulate collapse/expand\n */\nfunction getHandleForPanelId(context, panelId) {\n const panelIndex = context.items.findIndex((item) => item.id === panelId);\n // When in controlled collapse mode we defer to the controlled state to know if we need to update.\n // The confirmation comes along as an expand/collapse event.\n // The default behavior is to find the closes handle and use that to collapse, if we're dragging some other\n // handle though we want to use that instead. This will results in a smoother visual experience.\n if (context.activeDragHandleId) {\n const handleIndex = getPanelHandleIndex(context, context.activeDragHandleId);\n const item = context.items[handleIndex];\n if (item && isPanelHandle(item)) {\n return {\n item,\n direction: handleIndex > panelIndex ? 1 : -1,\n };\n }\n }\n invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);\n let item = context.items[panelIndex + 1];\n if (item && isPanelHandle(item)) {\n return { item, direction: 1 };\n }\n item = context.items[panelIndex - 1];\n if (item && isPanelHandle(item)) {\n return { item, direction: -1 };\n }\n throw new Error(`Cant find handle for panel: ${panelId}`);\n}\nfunction getHandleForPanelIdWithAvailableSpace(context, panelId) {\n const panelIndex = context.items.findIndex((item) => item.id === panelId);\n invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);\n let item = context.items[panelIndex + 1];\n if (item &&\n isPanelHandle(item) &&\n findPanelWithSpace(context, context.items, panelIndex + 1, 1, \"add\")) {\n return { item, direction: 1 };\n }\n item = context.items[panelIndex - 1];\n if (item &&\n isPanelHandle(item) &&\n findPanelWithSpace(context, context.items, panelIndex - 1, -1, \"add\")) {\n return { item, direction: -1 };\n }\n return getHandleForPanelId(context, panelId);\n}\n/** Given the specified order props and default order of the items, order the items */\nfunction sortWithOrder(items) {\n const defaultPlacement = {};\n const takenPlacements = items\n .map((i) => i.order)\n .filter((i) => i !== undefined);\n let defaultOrder = 0;\n // Generate default orders for items that don't have it\n for (const item of items) {\n if (item.order === undefined) {\n while (takenPlacements.includes(defaultOrder) ||\n Object.values(defaultPlacement).includes(defaultOrder)) {\n defaultOrder++;\n }\n defaultPlacement[item.id] = defaultOrder;\n }\n }\n const withoutOrder = items.filter((i) => i.order === undefined);\n const sortedWithOrder = items\n .filter((i) => i.order !== undefined)\n .sort((a, b) => a.order - b.order);\n for (const item of sortedWithOrder) {\n // insert item at order index\n withoutOrder.splice(item.order, 0, item);\n }\n return withoutOrder;\n}\n/** Check if the panel has space available to add to */\nfunction panelHasSpace(context, item, adjustment) {\n invariant(item.currentValue.type === \"pixel\", `panelHasSpace only works with number values: ${item.id} ${item.currentValue}`);\n if (item.collapsible) {\n return !item.collapsed;\n }\n if (adjustment === \"add\") {\n return (item.currentValue.value.gte(getUnitPixelValue(context, item.min)) &&\n item.currentValue.value.lt(getUnitPixelValue(context, item.max)));\n }\n return item.currentValue.value.gt(getUnitPixelValue(context, item.min));\n}\n/** Search in a `direction` for a panel that still has space to expand. */\nfunction findPanelWithSpace(context, items, start, direction, adjustment, disregardCollapseBuffer) {\n const slice = direction === -1 ? items.slice(0, start + 1).reverse() : items.slice(start);\n for (const panel of slice) {\n if (!isPanelData(panel)) {\n continue;\n }\n const targetPanel = disregardCollapseBuffer\n ? createUnrestrainedPanel(context, panel)\n : panel;\n if (panelHasSpace(context, targetPanel, adjustment)) {\n return panel;\n }\n }\n}\n/** Add up all the static values in the layout */\nfunction getStaticWidth(context) {\n let width = new Big(0);\n for (const item of context.items) {\n if (isPanelHandle(item)) {\n width = width.add(item.size.value);\n }\n else if (item.collapsed && item.currentValue.type === \"pixel\") {\n width = width.add(item.currentValue.value);\n }\n else if (item.isStaticAtRest) {\n width = width.add(item.currentValue.value);\n }\n }\n return width;\n}\nexport function formatUnit(unit) {\n if (unit.type === \"pixel\") {\n return `${unit.value.toNumber()}px`;\n }\n return `${unit.value.mul(100).toNumber()}%`;\n}\nexport function getPanelGroupPixelSizes(context) {\n return prepareItems(context).map((i) => isPanelData(i)\n ? i.currentValue.value.toNumber()\n : getUnitPixelValue(context, i.size).toNumber());\n}\nexport function getPanelPixelSize(context, panelId) {\n const p = getPanelWithId({ ...context, items: prepareItems(context) }, panelId);\n return p.currentValue.value.toNumber();\n}\nexport function getPanelGroupPercentageSizes(context) {\n const clamped = commitLayout({\n ...context,\n items: prepareItems(context),\n });\n return clamped.map((i) => {\n if (isPanelHandle(i)) {\n return getUnitPercentageValue(getGroupSize(context), i.size);\n }\n return getUnitPercentageValue(getGroupSize(context), i.currentValue);\n });\n}\nexport function getPanelPercentageSize(context, panelId) {\n const items = prepareItems(context);\n const p = getPanelWithId({ ...context, items }, panelId);\n return getUnitPercentageValue(getGroupSize(context), p.currentValue);\n}\n/** Build the grid template from the item values. */\nexport function buildTemplate(context) {\n const staticWidth = getStaticWidth(context);\n let hasSeenFillPanel = false;\n return context.items\n .map((item) => {\n if (item.type === \"panel\") {\n const min = formatUnit(item.min);\n if (item.currentValue.type === \"pixel\" &&\n item.currentValue.value.toNumber() !== -1) {\n if (item.isStaticAtRest) {\n const max = item.max === \"1fr\" ? \"100%\" : formatUnit(item.max);\n return `clamp(${min}, ${formatUnit(item.currentValue)}, ${max})`;\n }\n return formatUnit(item.currentValue);\n }\n else if (item.currentValue.type === \"percent\") {\n if (!hasSeenFillPanel &&\n (item.max === \"1fr\" ||\n (item.max.type === \"percent\" && item.max.value.eq(100)))) {\n hasSeenFillPanel = true;\n return `minmax(${min}, 1fr)`;\n }\n const max = item.max === \"1fr\" ? \"100%\" : formatUnit(item.max);\n return `minmax(${min}, min(calc(${item.currentValue.value} * (100% - ${staticWidth}px)), ${max}))`;\n }\n else if (item.collapsible && item.collapsed) {\n return formatUnit(item.collapsedSize);\n }\n else if (item.default) {\n const siblingHasFill = context.items.some((i) => isPanelData(i) &&\n i.id !== item.id &&\n !i.collapsed &&\n (i.max === \"1fr\" ||\n (i.max.type === \"percent\" && i.max.value.eq(100))));\n // If a sibling has a fill, this item doesn't need to expand\n // So we can just use the default value\n if (siblingHasFill) {\n return formatUnit(item.default);\n }\n // Use 1fr so that panel fills ths space if needed\n const max = item.max === \"1fr\" ? \"1fr\" : formatUnit(item.max);\n return `minmax(${formatUnit(item.default)}, ${max})`;\n }\n else {\n const max = item.max === \"1fr\" ? \"1fr\" : formatUnit(item.max);\n return `minmax(${min}, ${max})`;\n }\n }\n return formatUnit(item.size);\n })\n .join(\" \");\n}\nfunction addDeDuplicatedItems(items, newItem) {\n const currentItemIndex = items.findIndex((item) => item.id === newItem.id ||\n (typeof item.order === \"number\" && item.order === newItem.order));\n let restItems = items;\n if (currentItemIndex !== -1) {\n restItems = items.filter((_, index) => index !== currentItemIndex);\n }\n return sortWithOrder([...restItems, newItem]);\n}\nfunction createUnrestrainedPanel(_, data) {\n return {\n ...data,\n min: makePixelUnit(-100000),\n max: makePixelUnit(100000),\n };\n}\n// #endregion\n// #region Update Logic\n/**\n * This is the main meat of the layout logic.\n * It's responsible for figuring out how to distribute the space\n * amongst the panels.\n *\n * It's built around applying small deltas to panels relative to their\n * the resize handles.\n *\n * As much as possible we try to rely on the browser to do the layout.\n * During the initial layout we rely on CSS grid and a group might be\n * defined like this:\n *\n * ```css\n * grid-template-columns: minmax(100px, 1fr) 1px minmax(100px, 300px);\n * ```\n *\n * Without any resizing this is nice and simple and the components don't do much.\n *\n * Once the user starts resizing the layout will be more complex.\n *\n * It's broken down into 3 phases:\n *\n * 1. `prepareItems` - The size of the group has been measure and we\n * can convert all the panel sizes into pixels. Converting into pixels\n * makes doing the math for the updates easier.\n *\n * ```css\n * grid-template-columns: 500px 1px 300px;\n * ```\n *\n * 2. `updateLayout` - This is where the actual updates are applied.\n * This is where the user's drag interactions are applied. We also\n * use this to collapse/expand panels by simulating a drag interaction.\n *\n * ```css\n * grid-template-columns: 490px 1px 310px;\n * ```\n *\n * 3. `commitLayout` - Once the updates have been applied we convert the\n * updated sizes back into a format that allows for easy resizing without\n * lots of updates.\n *\n * ```css\n * grid-template-columns: minmax(100px, min(calc(0.06117 * (100% - 1px)), 100%)) 1px minmax(100px, min(calc(0.0387 * (100% - 1px)), 300px));\n * ```\n *\n * When another update loop is triggered the above template will be converted back to pixels.\n */\n/** Converts the items to pixels */\nexport function prepareItems(context) {\n const staticWidth = getStaticWidth(context);\n const newItems = [];\n for (const item of context.items) {\n if (!item || !isPanelData(item)) {\n newItems.push({ ...item });\n continue;\n }\n if (item.lastKnownSize) {\n const lastSize = makePixelUnit(context.orientation === \"horizontal\"\n ? item.lastKnownSize.width\n : item.lastKnownSize.height);\n newItems.push({ ...item, currentValue: lastSize });\n continue;\n }\n if (item.currentValue.type === \"pixel\") {\n newItems.push({ ...item });\n continue;\n }\n const pixel = new Big(getGroupSize(context))\n .minus(staticWidth)\n .mul(item.currentValue.value);\n newItems.push({\n ...item,\n currentValue: makePixelUnit(pixel.toNumber()),\n });\n }\n return newItems;\n}\n/** On every mouse move we distribute the space added */\nfunction updateLayout(context, dragEvent) {\n const handleIndex = getPanelHandleIndex(context, dragEvent.handleId);\n const handle = context.items[handleIndex];\n const newItems = [...context.items];\n let moveAmount = context.orientation === \"horizontal\"\n ? dragEvent.value.deltaX\n : dragEvent.value.deltaY;\n if (dragEvent.value.shiftKey) {\n moveAmount *= context.shiftAmount ?? 15;\n }\n if (moveAmount === 0) {\n return {};\n }\n const moveDirection = moveAmount / Math.abs(moveAmount);\n // Go forward into the shrinking panels to find a panel that still has space.\n const panelBefore = findPanelWithSpace(context, newItems, handleIndex + moveDirection, moveDirection, \"subtract\", dragEvent.disregardCollapseBuffer);\n // No panel with space, just record the drag overshoot\n if (!panelBefore) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n invariant(isPanelData(panelBefore), `Expected panel before: ${handle.id}`);\n /** The panel that gets bigger */\n const panelAfter = dragEvent.type === \"collapsePanel\"\n ? // If we have the panel id just use that\n newItems.find((item) => item.id === dragEvent.panelId &&\n panelBefore.id !== dragEvent.panelId) ||\n // otherwise fallback to the next panel with space\n findPanelWithSpace(context, newItems, handleIndex - moveDirection, moveDirection * -1, \"add\", dragEvent.disregardCollapseBuffer) ||\n newItems[handleIndex - moveDirection]\n : newItems[handleIndex - moveDirection];\n invariant(panelAfter && isPanelData(panelAfter), `Expected panel after: ${handle.id}`);\n if (panelAfter.currentValue.value.eq(getUnitPixelValue(context, panelAfter.max))) {\n return {\n dragOvershoot: context.dragOvershoot.add(moveAmount),\n };\n }\n const newDragOvershoot = context.dragOvershoot.add(moveAmount);\n // Don't let the panel expand until the threshold is reached\n if (!dragEvent.disregardCollapseBuffer && !dragEvent.controlled) {\n const isInLeftBuffer = newDragOvershoot.lt(0) && moveDirection > 0;\n const isInLeftOvershoot = newDragOvershoot.gt(0) && moveDirection > 0;\n const isInRightBuffer = newDragOvershoot.gt(0) && moveDirection < 0;\n const isInRightOvershoot = newDragOvershoot.lt(0) && moveDirection < 0;\n const potentialNewValue = panelAfter.currentValue.value.add(new Big(newDragOvershoot).mul(isInRightBuffer ? moveDirection : 1));\n const min = getUnitPixelValue(context, panelAfter.min);\n const isInDragBugger = newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n // Let the panel expand at it's min size\n !panelAfter.currentValue.value\n .add(newDragOvershoot.abs())\n .gte(panelAfter.min.value) &&\n panelAfter.collapsible &&\n panelAfter.collapsed &&\n (isInLeftOvershoot || isInRightOvershoot);\n if (potentialNewValue.lte(min) &&\n (newDragOvershoot.eq(0) ||\n isInRightBuffer ||\n isInLeftBuffer ||\n isInDragBugger)) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n // Don't let the panel collapse until the threshold is reached\n if (!dragEvent.disregardCollapseBuffer &&\n !dragEvent.controlled &&\n panelBefore.collapsible &&\n panelBefore.currentValue.value.eq(getUnitPixelValue(context, panelBefore.min))) {\n const potentialNewValue = panelBefore.currentValue.value.sub(newDragOvershoot.abs());\n if (newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &&\n potentialNewValue.gt(getUnitPixelValue(context, panelBefore.collapsedSize))) {\n return { dragOvershoot: newDragOvershoot };\n }\n }\n // Apply the move amount to the panel before the slider\n const unrestrainedPanelBefore = createUnrestrainedPanel(context, panelBefore);\n const panelBeforePreviousValue = panelBefore.currentValue.value;\n const panelBeforeNewValueRaw = panelBefore.currentValue.value.minus(new Big(moveAmount).mul(moveDirection));\n let panelBeforeNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelBefore, panelBeforeNewValueRaw)\n : clampUnit(context, panelBefore, panelBeforeNewValueRaw);\n // Also apply the move amount the panel after the slider\n const unrestrainedPanelAfter = createUnrestrainedPanel(context, panelAfter);\n const panelAfterPreviousValue = panelAfter.currentValue.value;\n const applied = panelBeforePreviousValue.minus(panelBeforeNewValue);\n const panelAfterNewValueRaw = panelAfter.currentValue.value.add(applied);\n let panelAfterNewValue = dragEvent.disregardCollapseBuffer\n ? clampUnit(context, unrestrainedPanelAfter, panelAfterNewValueRaw)\n : clampUnit(context, panelAfter, panelAfterNewValueRaw);\n if (dragEvent.disregardCollapseBuffer) {\n if (panelAfter.collapsible && panelAfter.collapsed) {\n panelAfter.collapsed = false;\n }\n }\n // If the panel was collapsed, expand it\n // We need to re-apply the move amount since the the expansion of the\n // collapsed panel disregards that.\n else if (panelAfter.collapsible && panelAfter.collapsed) {\n if (panelAfter.onCollapseChange?.current &&\n panelAfter.collapseIsControlled &&\n !dragEvent.controlled &&\n !dragEvent.isVirtual) {\n panelAfter.onCollapseChange.current(false);\n return { dragOvershoot: newDragOvershoot };\n }\n // Calculate the amount \"extra\" after the minSize the panel should grow\n const extra = \n // Take the size it was at\n getUnitPixelValue(context, panelAfter.collapsedSize)\n // Add in the full overshoot so the cursor is near the slider\n .add(context.dragOvershoot.abs())\n // Subtract the min size of the panel\n .sub(panelAfterNewValue\n // Then re-add the move amount\n .add(Math.abs(moveAmount)));\n if (extra.gt(0)) {\n panelAfterNewValue = panelAfterNewValue.add(extra);\n }\n panelBeforeNewValue = panelBeforeNewValue\n // Subtract the delta of the after panel's size\n .minus(panelAfterNewValue\n .minus(panelAfterPreviousValue)\n // And then re-apply the movement value\n .minus(Math.abs(moveAmount)));\n if (panelBeforeNewValue.lt(panelBefore.min.value) &&\n !panelBefore.collapsible) {\n // TODO this should probably distribute the space between the panels?\n return { dragOvershoot: newDragOvershoot };\n }\n panelAfter.collapsed = false;\n if (panelAfter.onCollapseChange?.current &&\n !panelAfter.collapseIsControlled &&\n !dragEvent.controlled &&\n !dragEvent.isVirtual) {\n panelAfter.onCollapseChange.current(false);\n }\n }\n const panelBeforeIsAboutToCollapse = panelBefore.currentValue.value.eq(getUnitPixelValue(context, panelBefore.min));\n // If the panel was expanded and now is at it's min size, collapse it\n if (!dragEvent.disregardCollapseBuffer &&\n panelBefore.collapsible &&\n panelBeforeIsAboutToCollapse) {\n if (panelBefore.onCollapseChange?.current &&\n panelBefore.collapseIsControlled &&\n !dragEvent.controlled &&\n !dragEvent.isVirtual) {\n panelBefore.onCollapseChange.current(true);\n return { dragOvershoot: newDragOvershoot };\n }\n // Make it collapsed\n panelBefore.collapsed = true;\n panelBeforeNewValue = getUnitPixelValue(context, panelBefore.collapsedSize);\n // Add the extra space created to the before panel\n panelAfterNewValue = panelAfter.currentValue.value.add(panelBeforePreviousValue.minus(panelBeforeNewValue));\n if (panelBefore.onCollapseChange?.current &&\n !panelBefore.collapseIsControlled &&\n !dragEvent.controlled &&\n !dragEvent.isVirtual) {\n panelBefore.onCollapseChange.current(true);\n }\n }\n panelBefore.currentValue = { type: \"pixel\", value: panelBeforeNewValue };\n panelAfter.currentValue = { type: \"pixel\", value: panelAfterNewValue };\n const leftoverSpace = new Big(getGroupSize(context)).minus(newItems.reduce((acc, b) => acc.add(isPanelData(b) ? b.currentValue.value : b.size.value), new Big(0)));\n if (!leftoverSpace.eq(0)) {\n panelBefore.currentValue.value = clampUnit(context, panelBefore, panelBefore.currentValue.value.add(leftoverSpace));\n }\n return { items: newItems };\n}\n/** Converts the items to percentages */\nfunction commitLayout(context) {\n const newItems = [...context.items];\n // First set all the static width\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\") {\n return;\n }\n if (item.collapsed) {\n newItems[index] = {\n ...item,\n currentValue: item.collapsedSize,\n };\n }\n });\n const staticWidth = getStaticWidth({ ...context, items: newItems });\n newItems.forEach((item, index) => {\n if (item.type !== \"panel\" || item.collapsed || item.isStaticAtRest) {\n return;\n }\n newItems[index] = {\n ...item,\n currentValue: {\n type: \"percent\",\n value: item.currentValue.value.div(new Big(getGroupSize(context)).sub(staticWidth)),\n },\n };\n });\n return newItems;\n}\nexport function dragHandlePayload({ delta, orientation = \"horizontal\", shiftKey = false, }) {\n return {\n type: \"move\",\n pointerType: \"keyboard\",\n shiftKey,\n ctrlKey: false,\n altKey: false,\n metaKey: false,\n deltaX: orientation === \"horizontal\" ? delta : 0,\n deltaY: orientation === \"horizontal\" ? 0 : delta,\n };\n}\n/** Iteratively applies a large delta value simulating a user's drag */\nfunction iterativelyUpdateLayout({ context, handleId, delta, direction, controlled, disregardCollapseBuffer, isVirtual, panelId, }) {\n let newContext = context;\n for (let i = 0; i < delta.abs().toNumber(); i++) {\n newContext = updateLayout({\n ...context,\n ...newContext,\n }, {\n handleId,\n type: \"collapsePanel\",\n controlled,\n disregardCollapseBuffer,\n isVirtual,\n panelId,\n value: dragHandlePayload({\n delta: direction,\n orientation: context.orientation,\n }),\n });\n }\n return newContext;\n}\nfunction applyDeltaInBothDirections(context, newItems, itemIndex, delta) {\n let hasTriedBothDirections = false;\n let direction = 1;\n let deltaLeft = new Big(delta);\n // Starting from where the items was removed add space to the panels around it.\n // This is only needed for conditional rendering.\n while (deltaLeft.toNumber() !== 0) {\n const targetPanel = findPanelWithSpace(context, newItems, itemIndex + direction, direction, delta.gt(0) ? \"add\" : \"subtract\");\n if (!targetPanel) {\n if (hasTriedBothDirections) {\n break;\n }\n else {\n direction = direction === 1 ? -1 : 1;\n hasTriedBothDirections = true;\n continue;\n }\n }\n const oldValue = targetPanel.currentValue.value;\n const newValue = clampUnit(context, targetPanel, oldValue.add(deltaLeft));\n targetPanel.currentValue.value = newValue;\n deltaLeft = deltaLeft.sub(newValue.sub(oldValue));\n direction = direction === 1 ? -1 : 1;\n }\n}\n/**\n * A layout might overflow at small screen sizes.\n * This function tries to fix that by:\n *\n * 1. It will try to collapse a panel if it can.\n */\nfunction handleOverflow(context) {\n // If we haven't measured yet we can't do anything\n if (context.items.some((i) => isPanelData(i) && i.currentValue.value.eq(-1))) {\n return context;\n }\n const groupSize = new Big(getGroupSize(context));\n const nonStaticWidth = groupSize.sub(getStaticWidth(context).toNumber());\n const pixelItems = context.items.map((i) => {\n if (isPanelHandle(i))\n return i.size.value;\n if (i.collapsed)\n return getUnitPixelValue(context, i.currentValue);\n const pixel = (i.currentValue.type === \"pixel\" && i.currentValue.value) ||\n i.currentValue.value.mul(nonStaticWidth);\n return clampUnit(context, i, pixel);\n });\n const totalSize = pixelItems.reduce((acc, i) => acc.add(i), new Big(0));\n const overflow = totalSize.abs().sub(groupSize);\n if (overflow.eq(0) || groupSize.eq(0)) {\n return context;\n }\n let newContext = { ...context, items: prepareItems(context) };\n const collapsiblePanel = newContext.items.find((i) => Boolean(isPanelData(i) && i.collapsible));\n if (collapsiblePanel) {\n const collapsiblePanelIndex = newContext.items.findIndex((i) => i.id === collapsiblePanel.id);\n const handleId = getHandleForPanelId(newContext, collapsiblePanel.id);\n const sizeChange = collapsiblePanel.currentValue.value.sub(getUnitPixelValue(newContext, collapsiblePanel.collapsedSize));\n // Try to collapse the panel\n newContext = {\n ...newContext,\n ...iterativelyUpdateLayout({\n handleId: handleId.item.id,\n delta: sizeChange,\n direction: (handleId.direction * -1),\n panelId: collapsiblePanel.id,\n context: {\n ...newContext,\n // act like its the old size so the space is distributed correctly\n size: { width: totalSize.toNumber(), height: totalSize.toNumber() },\n },\n }),\n };\n // Then remove all the overflow\n applyDeltaInBothDirections(newContext, newContext.items, collapsiblePanelIndex, overflow.neg());\n }\n return { ...newContext, items: commitLayout(newContext) };\n}\nfunction clearLastKnownSize(items) {\n return items.map((i) => ({ ...i, lastKnownSize: undefined }));\n}\nfunction setCookie(name, jsonData) {\n document.cookie = `${name}=${encodeURIComponent(`${jsonData}`)};path=/;max-age=31536000`;\n}\nfunction getDeltaForEvent(context, event) {\n const panel = getPanelWithId(context, event.panelId);\n if (event.type === \"expandPanel\") {\n return new Big(panel.sizeBeforeCollapse ?? getUnitPixelValue(context, panel.min)).minus(panel.currentValue.value);\n }\n const collapsedSize = getUnitPixelValue(context, panel.collapsedSize);\n return panel.currentValue.value.minus(collapsedSize);\n}\nfunction animationActor(context, event, send, abortController) {\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelIdWithAvailableSpace(context, event.panelId);\n let direction = new Big(handle.direction);\n const fullDelta = getDeltaForEvent(context, event);\n const contextCopy = { ...context, items: prepareItems(context) };\n const finalLayout = iterativelyUpdateLayout({\n context: contextCopy,\n panelId: event.panelId,\n handleId: handle.item.id,\n delta: fullDelta,\n direction: handle.direction,\n isVirtual: true,\n });\n return new Promise((resolve, reject) => {\n abortController.signal.addEventListener(\"abort\", () => {\n reject(new Error(\"Operation was canceled\"));\n });\n if (event.type === \"collapsePanel\") {\n panel.sizeBeforeCollapse = panel.currentValue.value.toNumber();\n direction = direction.mul(new Big(-1));\n }\n const fps = 60;\n const { duration, ease } = getCollapseAnimation(panel);\n const totalFrames = Math.ceil(panel.collapseAnimation ? duration / (1000 / fps) : 1);\n let frame = 0;\n let appliedDelta = new Big(0);\n function renderFrame() {\n const progress = ++frame / totalFrames;\n const e = new Big(panel.collapseAnimation ? ease(progress) : 1);\n const delta = e.mul(fullDelta).sub(appliedDelta).mul(direction);\n send({\n type: \"applyDelta\",\n handleId: handle.item.id,\n delta: delta.toNumber(),\n panelId: panel.id,\n });\n appliedDelta = appliedDelta.add(delta\n .abs()\n .mul((delta.gt(0) && direction.lt(0)) || (delta.lt(0) && direction.gt(0))\n ? -1\n : 1));\n if (e.eq(1)) {\n // If we're controlled expanding to a value that breaks the layout we might get negative values\n // In this case we need to use a valid layout like `iterativelyUpdateLayout`'s return value\n // Ideally we figure out some way to not do this but disregardCollapseBuffer is needed for animations\n if (context.items.find((i) => isPanelData(i) &&\n i.currentValue.value.round(undefined, Big.roundHalfEven).lt(0))) {\n assign(context, finalLayout);\n }\n const action = event.type === \"expandPanel\" ? \"expand\" : \"collapse\";\n resolve({ panelId: panel.id, action, resolve: event.resolve });\n return false;\n }\n return true;\n }\n raf(renderFrame);\n });\n}\nfunction assign(target, source) {\n for (const key in source) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n target[key] = source[key];\n }\n}\nlet groupId = 0;\nexport function groupMachine(input, onUpdate) {\n const abortController = new AbortController();\n const state = {\n current: \"idle\",\n };\n let locked = false;\n const context = {\n size: input.size || { width: 0, height: 0 },\n items: input.items || [],\n orientation: input.orientation || \"horizontal\",\n dragOvershoot: new Big(0),\n groupId: input.groupId || `group-${groupId++}`,\n autosaveStrategy: input.autosaveStrategy,\n shiftAmount: input.shiftAmount ?? 15,\n };\n const actions = {\n prepare: () => {\n context.items = prepareItems(context);\n },\n clearLastKnownSize: () => {\n context.items = clearLastKnownSize(context.items);\n },\n commit: () => {\n context.dragOvershoot = new Big(0);\n context.items = commitLayout(context);\n },\n onResize: () => {\n for (const item of context.items) {\n if (isPanelData(item)) {\n const pixel = item.lastKnownSize\n ? new Big(context.orientation === \"horizontal\"\n ? item.lastKnownSize.width\n : item.lastKnownSize.height)\n : clampUnit(context, item, getUnitPixelValue(context, item.currentValue));\n const groupSize = getGroupSize(context);\n item.onResize?.current?.({\n pixel: pixel.toNumber(),\n percentage: groupSize > 0 ? pixel.div(getGroupSize(context)).toNumber() : -1,\n });\n }\n }\n },\n onAutosave: () => {\n if (!context.autosaveStrategy || typeof window === \"undefined\") {\n return;\n }\n const snapshot = { ...context };\n snapshot.items = clearLastKnownSize(context.items);\n snapshot.activeDragHandleId = context.activeDragHandleId;\n const data = JSON.stringify(snapshot);\n if (context.autosaveStrategy === \"localStorage\") {\n localStorage.setItem(context.groupId, data);\n }\n else {\n setCookie(context.groupId, data);\n }\n },\n removeItem: (id) => {\n const itemIndex = context.items.findIndex((item) => item.id === id);\n const item = context.items[itemIndex];\n if (!item) {\n return;\n }\n const newItems = context.items.filter((i) => i.id !== id);\n const removedSize = isPanelData(item)\n ? item.currentValue.value\n : item.size.value;\n applyDeltaInBothDirections(context, newItems, itemIndex, removedSize);\n context.items = newItems;\n },\n notifyCollapseToggle: (event) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n panel.onCollapseChange?.current?.(!panel.collapsed);\n },\n runCollapseToggle: (event) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const handle = getHandleForPanelId(context, event.panelId);\n // When collapsing a panel it will be in the opposite direction\n // that handle assumes\n const delta = event.type === \"collapsePanel\"\n ? handle.direction * -1\n : handle.direction;\n const newContext = updateLayout(context, {\n panelId: event.panelId,\n handleId: handle.item.id,\n type: \"dragHandle\",\n controlled: event.controlled,\n value: dragHandlePayload({\n delta: delta,\n orientation: context.orientation,\n }),\n });\n assign(context, newContext);\n },\n onAnimationEnd: (output) => {\n invariant(output, \"Expected output from animation actor\");\n const panel = getPanelWithId(context, output.panelId);\n panel.collapsed = output.action === \"collapse\";\n if (panel.collapsed) {\n panel.currentValue = panel.collapsedSize;\n }\n if (!panel.collapseIsControlled) {\n panel.onCollapseChange?.current?.(panel.collapsed);\n }\n actions.commit();\n },\n };\n actions.onAutosave();\n const guards = {\n shouldNotifyCollapseToggle: (event) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return !event.controlled && panel.collapseIsControlled === true;\n },\n shouldCollapseToggle: (event) => {\n isEvent(event, [\"collapsePanel\", \"expandPanel\"]);\n const panel = getPanelWithId(context, event.panelId);\n return panel.collapseIsControlled === true;\n },\n cannotExpandPanel: (event) => {\n isEvent(event, [\"expandPanel\"]);\n const pixelItems = prepareItems(context);\n let interimContext = { ...context, items: pixelItems };\n const delta = getDeltaForEvent(context, event);\n const handle = getHandleForPanelIdWithAvailableSpace(interimContext, event.panelId);\n interimContext = {\n ...interimContext,\n ...iterativelyUpdateLayout({\n context: interimContext,\n panelId: event.panelId,\n handleId: handle.item.id,\n controlled: event.controlled,\n delta: delta,\n direction: handle.direction,\n isVirtual: true,\n }),\n };\n const updatedPanel = interimContext.items.find((i) => i.id === event.panelId);\n const totalSize = interimContext.items.reduce((acc, i) => acc.add(isPanelData(i) ? i.currentValue.value : i.size.value), new Big(0));\n const didExpand = updatedPanel &&\n isPanelData(updatedPanel) &&\n !updatedPanel.currentValue.value.eq(updatedPanel.collapsedSize.value);\n return totalSize.gt(getGroupSize(context)) || !didExpand;\n },\n };\n function transition(to) {\n // exit\n switch (state.current) {\n case \"dragging\":\n actions.commit();\n context.activeDragHandleId = undefined;\n break;\n }\n // enter\n switch (to) {\n case \"idle\":\n actions.onAutosave();\n break;\n case \"dragging\":\n actions.prepare();\n break;\n case \"togglingCollapse\":\n actions.prepare();\n actions.clearLastKnownSize();\n break;\n }\n state.current = to;\n onUpdate?.(context);\n }\n function send(event) {\n switch (event.type) {\n case \"lockGroup\":\n locked = true;\n break;\n case \"unlockGroup\":\n locked = false;\n break;\n }\n if (locked) {\n return;\n }\n switch (event.type) {\n case \"updateItemIndex\":\n context.items = sortWithOrder(context.items.map((item) => item.id === event.itemId ? { ...item, order: event.index } : item));\n break;\n case \"registerPanel\":\n context.items = addDeDuplicatedItems(context.items, {\n type: \"panel\",\n currentValue: makePixelUnit(-1),\n ...event.data,\n });\n break;\n case \"unregisterPanel\":\n actions.prepare();\n actions.removeItem(event.id);\n actions.clearLastKnownSize();\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n case \"registerPanelHandle\": {\n context.items = addDeDuplicatedItems(context.items, event.data);\n break;\n }\n case \"unregisterPanelHandle\":\n actions.prepare();\n actions.removeItem(event.id);\n actions.clearLastKnownSize();\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n case \"registerDynamicPanel\": {\n actions.prepare();\n let currentValue = makePixelUnit(0);\n if (event.data.collapsible &&\n event.data.collapsed &&\n event.data.collapsedSize) {\n currentValue = {\n type: \"pixel\",\n value: getUnitPixelValue(context, event.data.collapsedSize),\n };\n }\n else if (event.data.default) {\n currentValue = {\n type: \"pixel\",\n value: getUnitPixelValue(context, event.data.default),\n };\n }\n else {\n currentValue = {\n type: \"pixel\",\n value: getUnitPixelValue(context, event.data.min),\n };\n }\n const newItems = addDeDuplicatedItems(context.items, {\n type: \"panel\",\n ...event.data,\n currentValue,\n });\n const itemIndex = newItems.findIndex((item) => item.id === event.data.id);\n const newContext = { ...context, items: newItems };\n const overflowDueToHandles = context.items\n .reduce((acc, i) => {\n if (isPanelHandle(i)) {\n return acc.add(getUnitPixelValue(context, i.size));\n }\n return acc.add(i.currentValue.value);\n }, new Big(0))\n .minus(getGroupSize(context));\n applyDeltaInBothDirections(newContext, newItems, itemIndex, currentValue.value.add(overflowDueToHandles).neg());\n context.items = newItems;\n actions.clearLastKnownSize();\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n }\n case \"rebindPanelCallbacks\":\n for (const item of context.items) {\n if (isPanelData(item) && item.id === event.data.id) {\n item.onCollapseChange = event.data.onCollapseChange;\n item.onResize = event.data.onResize;\n }\n }\n break;\n case \"updateConstraints\":\n actions.prepare();\n for (const item of context.items) {\n if (isPanelData(item) && item.id === event.data.id) {\n const panel = event.data;\n item.min = panel.min;\n item.max = panel.max;\n item.default = panel.default;\n item.collapsedSize = panel.collapsedSize;\n item.isStaticAtRest = panel.isStaticAtRest;\n item.collapseAnimation = panel.collapseAnimation;\n item.collapsible = panel.collapsible;\n }\n else if (isPanelHandle(item) && item.id === event.data.id) {\n const handle = event.data;\n item.size = handle.size;\n }\n }\n actions.clearLastKnownSize();\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n case \"setActualItemsSize\": {\n const withLastKnownSize = context.items.map((i) => {\n if (!isPanelData(i))\n return i;\n const lastKnownSize = event.childrenSizes[i.id] || i.lastKnownSize;\n return { ...i, lastKnownSize };\n });\n let totalSize = 0;\n let useLastKnownSize = false;\n for (const item of withLastKnownSize) {\n if (isPanelData(item)) {\n const size = item.lastKnownSize?.[context.orientation === \"horizontal\" ? \"width\" : \"height\"];\n // If any size is 0 don't handle overflow\n if (!size) {\n context.items = withLastKnownSize;\n useLastKnownSize = true;\n break;\n }\n totalSize += size;\n }\n else {\n totalSize += item.size.value.toNumber();\n }\n }\n if (useLastKnownSize) {\n context.items = withLastKnownSize;\n }\n else if (totalSize > getGroupSize(context) &&\n state.current !== \"dragging\") {\n context.items = handleOverflow({\n ...context,\n items: prepareItems({ ...context, items: withLastKnownSize }),\n }).items;\n }\n else {\n context.items = withLastKnownSize;\n }\n actions.onResize();\n break;\n }\n case \"setSize\": {\n context.size = event.size;\n actions.onResize();\n break;\n }\n case \"setOrientation\":\n context.orientation = event.orientation;\n actions.clearLastKnownSize();\n actions.onResize();\n break;\n default:\n break;\n }\n if (state.current === \"idle\") {\n switch (event.type) {\n case \"dragHandleStart\":\n transition(\"dragging\");\n context.activeDragHandleId = event.handleId;\n break;\n case \"setPanelPixelSize\": {\n actions.prepare();\n actions.clearLastKnownSize();\n const panel = getPanelWithId(context, event.panelId);\n const handle = getHandleForPanelId(context, event.panelId);\n const current = panel.currentValue.value;\n const newSize = clampUnit(context, panel, getUnitPixelValue(context, parseUnit(event.size)));\n const isBigger = newSize > current;\n const delta = isBigger\n ? newSize.minus(current)\n : current.minus(newSize);\n panel.sizeBeforeCollapse = newSize.toNumber();\n Object.assign(context, iterativelyUpdateLayout({\n context,\n panelId: event.panelId,\n direction: (handle.direction * (isBigger ? 1 : -1)),\n handleId: handle.item.id,\n delta,\n }));\n actions.commit();\n actions.onResize();\n actions.onAutosave();\n break;\n }\n case \"collapsePanel\":\n if (guards.shouldNotifyCollapseToggle(event)) {\n actions.notifyCollapseToggle(event);\n }\n else {\n const panel = getPanelWithId(context, event.panelId);\n if (!panel.collapsed) {\n transition(\"togglingCollapse\");\n abortController.abort();\n animationActor(context, event, send, abortController).then((output) => {\n actions.onAnimationEnd(output);\n transition(\"idle\");\n if (event.resolve) {\n requestAnimationFrame(event.resolve);\n }\n });\n }\n }\n break;\n case \"expandPanel\":\n if (guards.cannotExpandPanel(event)) {\n break;\n }\n else if (guards.shouldNotifyCollapseToggle(event)) {\n actions.notifyCollapseToggle(event);\n }\n else {\n const panel = getPanelWithId(context, event.panelId);\n if (panel.collapsed) {\n transition(\"togglingCollapse\");\n abortController.abort();\n animationActor(context, event, send, abortController).then((output) => {\n actions.onAnimationEnd(output);\n transition(\"idle\");\n if (event.resolve) {\n requestAnimationFrame(event.resolve);\n }\n });\n }\n }\n break;\n default:\n break;\n }\n }\n else if (state.current === \"dragging\") {\n switch (event.type) {\n case \"dragHandle\":\n actions.clearLastKnownSize();\n assign(context, updateLayout(context, event));\n actions.onResize();\n break;\n case \"dragHandleEnd\":\n transition(\"idle\");\n break;\n case \"expandPanel\":\n case \"collapsePanel\":\n if (guards.shouldCollapseToggle(event)) {\n actions.runCollapseToggle(event);\n }\n break;\n }\n }\n else if (state.current === \"togglingCollapse\") {\n switch (event.type) {\n case \"applyDelta\":\n assign(context, updateLayout(context, {\n panelId: event.panelId,\n handleId: event.handleId,\n type: \"collapsePanel\",\n disregardCollapseBuffer: true,\n value: dragHandlePayload({\n delta: event.delta,\n orientation: context.orientation,\n }),\n }));\n actions.onResize();\n break;\n }\n }\n onUpdate?.(context);\n }\n return [context, send, state];\n}\n// #endregion\n//# sourceMappingURL=index.js.map","import { getUnitPercentageValue, } from \"@window-splitter/state\";\nexport function getPanelDomAttributes({ groupId, id, collapsible, collapsed, }) {\n const attrs = {\n id: id,\n \"data-splitter-group-id\": groupId,\n \"data-splitter-type\": \"panel\",\n \"data-splitter-id\": id,\n };\n if (collapsible) {\n attrs[\"data-collapsed\"] = collapsed;\n }\n return attrs;\n}\nexport function getPanelResizerDomAttributes({ groupId, id, orientation, isDragging, activeDragHandleId, disabled, controlsId, min, max, currentValue, groupSize, }) {\n return {\n id: id,\n role: \"separator\",\n \"data-splitter-type\": \"handle\",\n \"data-splitter-id\": id,\n \"data-splitter-group-id\": groupId,\n \"data-handle-orientation\": orientation,\n \"data-state\": isDragging\n ? \"dragging\"\n : activeDragHandleId\n ? \"inactive\"\n : \"idle\",\n \"aria-label\": \"Resize Handle\",\n \"aria-disabled\": disabled,\n \"aria-controls\": controlsId,\n \"aria-valuemin\": min ? getUnitPercentageValue(groupSize, min) : undefined,\n \"aria-valuemax\": max === \"1fr\"\n ? 100\n : max\n ? getUnitPercentageValue(groupSize, max)\n : undefined,\n \"aria-valuenow\": currentValue\n ? getUnitPercentageValue(groupSize, currentValue)\n : undefined,\n };\n}\nexport function measureGroupChildren(groupId, cb) {\n const childrenObserver = new ResizeObserver((childrenEntries) => {\n const childrenSizes = {};\n for (const childEntry of childrenEntries) {\n const child = childEntry.target;\n const childId = child.getAttribute(\"data-splitter-id\");\n const childSize = childEntry.borderBoxSize[0];\n if (childId && childSize) {\n childrenSizes[childId] = {\n width: childSize.inlineSize,\n height: childSize.blockSize,\n };\n }\n }\n cb(childrenSizes);\n });\n const c = document.querySelectorAll(`[data-splitter-group-id=\"${groupId}\"]`);\n for (const child of c) {\n childrenObserver.observe(child);\n }\n return () => {\n childrenObserver.disconnect();\n };\n}\n//# sourceMappingURL=interface.js.map","// import {disableTextSelection, restoreTextSelection} from './textSelection';\n/**\n * Handles move interactions across mouse, touch, and keyboard, including dragging with\n * the mouse or touch, and using the arrow keys. Normalizes behavior across browsers and\n * platforms, and ignores emulated mouse events on touch devices.\n */\nexport function move(props) {\n const { onMoveStart, onMove: onMoveProp, onMoveEnd } = props;\n const state = { didMove: false, lastPosition: null, id: null };\n const onMove = (originalEvent, pointerType, deltaX, deltaY) => {\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n if (!state.didMove) {\n state.didMove = true;\n onMoveStart?.({\n type: \"movestart\",\n pointerType,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey,\n });\n }\n onMoveProp?.({\n type: \"move\",\n pointerType,\n deltaX: deltaX,\n deltaY: deltaY,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey,\n });\n };\n const end = (originalEvent, pointerType) => {\n // restoreTextSelection();\n if (state.didMove) {\n onMoveEnd?.({\n type: \"moveend\",\n pointerType,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey,\n });\n }\n };\n const moveProps = {};\n const start = () => {\n // disableTextSelection();\n state.didMove = false;\n };\n const onPointerMove = (e) => {\n if (e.pointerId === state.id) {\n const pointerType = (e.pointerType || \"mouse\");\n // Problems with PointerEvent#movementX/movementY:\n // 1. it is always 0 on macOS Safari.\n // 2. On Chrome Android, it's scaled by devicePixelRatio, but not on Chrome macOS\n onMove(e, pointerType, e.pageX - (state.lastPosition?.pageX ?? 0), e.pageY - (state.lastPosition?.pageY ?? 0));\n state.lastPosition = { pageX: e.pageX, pageY: e.pageY };\n }\n };\n const onPointerUp = (e) => {\n if (e.pointerId === state.id) {\n const pointerType = (e.pointerType || \"mouse\");\n end(e, pointerType);\n state.id = null;\n window.removeEventListener(\"pointermove\", onPointerMove, false);\n window.removeEventListener(\"pointerup\", onPointerUp, false);\n window.removeEventListener(\"pointercancel\", onPointerUp, false);\n }\n };\n moveProps.onPointerDown = (e) => {\n if (e.button === 0 && state.id == null) {\n start();\n e.stopPropagation();\n e.preventDefault();\n state.lastPosition = { pageX: e.pageX, pageY: e.pageY };\n state.id = e.pointerId;\n window.addEventListener(\"pointermove\", onPointerMove, false);\n window.addEventListener(\"pointerup\", onPointerUp, false);\n window.addEventListener(\"pointercancel\", onPointerUp, false);\n }\n };\n const triggerKeyboardMove = (e, deltaX, deltaY) => {\n start();\n onMove(e, \"keyboard\", deltaX, deltaY);\n end(e, \"keyboard\");\n };\n moveProps.onKeyDown = (e) => {\n switch (e.key) {\n case \"Left\":\n case \"ArrowLeft\":\n e.preventDefault();\n e.stopPropagation();\n triggerKeyboardMove(e, -1, 0);\n break;\n case \"Right\":\n case \"ArrowRight\":\n e.preventDefault();\n e.stopPropagation();\n triggerKeyboardMove(e, 1, 0);\n break;\n case \"Up\":\n case \"ArrowUp\":\n e.preventDefault();\n e.stopPropagation();\n triggerKeyboardMove(e, 0, -1);\n break;\n case \"Down\":\n case \"ArrowDown\":\n e.preventDefault();\n e.stopPropagation();\n triggerKeyboardMove(e, 0, 1);\n break;\n }\n };\n return { moveProps: moveProps };\n}\n//# sourceMappingURL=move.js.map","<script setup lang=\"ts\">\nimport {\n getPanelDomAttributes,\n PanelHandle,\n SharedPanelProps,\n} from \"@window-splitter/interface\";\nimport {\n getPanelPercentageSize,\n getPanelPixelSize,\n GroupMachineContextValue,\n haveConstraintsChangedForPanel,\n initializePanel,\n isPanelData,\n PanelData,\n SendFn,\n} from \"@window-splitter/state\";\nimport {\n computed,\n inject,\n onMounted,\n onUnmounted,\n Ref,\n useId,\n watchEffect,\n} from \"vue\";\n\n// eslint-disable-next-line vue/require-default-prop\ntype PanelProps = SharedPanelProps<boolean> & { id?: string };\n\nconst props = withDefaults(defineProps<PanelProps>(), { collapsed: undefined });\nconst {\n min: _min,\n max: _max,\n id,\n collapsible: _collapsible,\n collapsedSize: _collapsedSize,\n onCollapseChange: _onCollapseChange,\n collapseAnimation: _collapseAnimation,\n onResize: _onResize,\n defaultCollapsed,\n default: defaultSize,\n isStaticAtRest,\n collapsed: _collapsed,\n ...attrs\n} = props;\n\nconst panelId = id || useId();\nconst send = inject<SendFn>(\"send\");\nconst state = inject<Ref<GroupMachineContextValue>>(\"state\");\nconst isPrerender = inject<Ref<boolean>>(\"isPrerender\");\n\nconst initPanel = (): PanelData =>\n initializePanel({\n id: panelId,\n min: props.min,\n max: props.max,\n collapsible: props.collapsible,\n collapsed: props.collapsed,\n collapsedSize: props.collapsedSize,\n onCollapseChange: props.onCollapseChange\n ? { current: props.onCollapseChange }\n : undefined,\n collapseAnimation: props.collapseAnimation,\n onResize: props.onResize ? { current: props.onResize } : undefined,\n defaultCollapsed,\n default: defaultSize,\n isStaticAtRest,\n });\n\nconst panelData = computed(() => {\n const item = state?.value?.items.find((i) => i.id === panelId);\n if (!item || !isPanelData(item)) return undefined;\n return item;\n});\n\nlet dynamicPanelIsMounting = false;\n\nif (panelData.value) {\n send?.({\n type: \"rebindPanelCallbacks\",\n data: {\n id: panelId,\n onCollapseChange: props.onCollapseChange\n ? { current: props.onCollapseChange }\n : undefined,\n onResize: props.onResize ? { current: props.onResize } : undefined,\n },\n });\n} else {\n if (isPrerender?.value) {\n send?.({ type: \"registerPanel\", data: initPanel() });\n } else {\n dynamicPanelIsMounting = true;\n }\n}\n\nonMounted(() => {\n const groupId = state?.value?.groupId;\n if (!groupId || !dynamicPanelIsMounting) return;\n\n const groupElement = document.getElementById(groupId);\n if (!groupElement) return;\n\n const panelElement = document.getElementById(panelId);\n if (!panelElement) return;\n\n const order = Array.from(groupElement.children).indexOf(panelElement);\n if (typeof order !== \"number\") return;\n\n send?.({\n type: \"registerDynamicPanel\",\n data: { ...initPanel(), order },\n });\n dynamicPanelIsMounting = false;\n});\n\nconst contraintChanged = computed(\n () =>\n !dynamicPanelIsMounting &&\n haveConstraintsChangedForPanel(initPanel(), panelData.value),\n);\n\nwatchEffect(() => {\n if (!contraintChanged.value) return;\n send?.({ type: \"updateConstraints\", data: initPanel() });\n});\n\nonUnmounted(() => {\n requestAnimationFrame(() => send?.({ type: \"unregisterPanel\", id: panelId }));\n});\n\ndefineExpose<PanelHandle>({\n getId: () => panelId,\n collapse: async () => {\n if (!panelData.value?.collapsible) return;\n return await new Promise<void>((resolve) => {\n send?.({ type: \"collapsePanel\", panelId: panelId, controlled: true, resolve });\n });\n },\n isCollapsed: () =>\n Boolean(panelData.value?.collapsible && panelData.value?.collapsed),\n expand: async () => {\n if (!panelData.value?.collapsible) return;\n return await new Promise<void>((resolve) => {\n send?.({ type: \"expandPanel\", panelId: panelId, controlled: true, resolve });\n });\n },\n isExpanded: () =>\n Boolean(panelData.value?.collapsible && !panelData.value?.collapsed),\n getPixelSize: () => getPanelPixelSize(state!.value, panelId),\n getPercentageSize: () => getPanelPercentageSize(state!.value, panelId),\n setSize: (size) =>\n send?.({ type: \"setPanelPixelSize\", panelId: panelId, size }),\n});\n\nconst isControlledCollapse = computed(\n () => panelData.value?.collapseIsControlled,\n);\n\nwatchEffect(() => {\n // Subscribe to the collapsed prop (doesn't work in rAF)\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n props.collapsed;\n\n requestAnimationFrame(() => {\n if (!isControlledCollapse.value) return;\n if (props.collapsed) {\n send?.({ type: \"collapsePanel\", panelId: panelId, controlled: true });\n } else {\n send?.({ type: \"expandPanel\", panelId: panelId, controlled: true });\n }\n });\n});\n\nconst computedProps = computed(() => {\n const currentPanel = panelData.value;\n\n return {\n ...attrs,\n ...getPanelDomAttributes({\n groupId: state?.value?.groupId,\n id: panelId,\n collapsible: currentPanel?.collapsible,\n collapsed: currentPanel?.collapsed,\n }),\n style: {\n minWidth: 0,\n minHeight: 0,\n overflow: \"hidden\",\n },\n };\n});\n</script>\n\n<template>\n <div v-bind=\"computedProps\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n measureGroupChildren,\n PanelGroupHandle,\n SharedPanelGroupProps,\n} from \"@window-splitter/interface\";\nimport {\n buildTemplate,\n getPanelGroupPercentageSizes,\n getPanelGroupPixelSizes,\n groupMachine,\n GroupMachineContextValue,\n isPanelData,\n prepareItems,\n prepareSnapshot,\n} from \"@window-splitter/state\";\nimport {\n useId,\n provide,\n ref,\n computed,\n onMounted,\n watchEffect,\n onWatcherCleanup,\n} from \"vue\";\n\n// eslint-disable-next-line vue/require-default-prop\ntype PanelGroupProps = SharedPanelGroupProps & { id?: string };\n\nconst {\n orientation = \"horizontal\",\n autosaveStrategy = \"localStorage\",\n snapshot: snapshotProp,\n autosaveId,\n id,\n shiftAmount,\n ...attrs\n} = defineProps<PanelGroupProps>();\n\nlet snapshot = snapshotProp;\n\nif (\n !snapshot &&\n typeof window !== \"undefined\" &&\n autosaveId &&\n autosaveStrategy === \"localStorage\"\n) {\n const localSnapshot = localStorage.getItem(autosaveId);\n\n if (localSnapshot) {\n snapshot = JSON.parse(localSnapshot) as GroupMachineContextValue;\n }\n}\n\nconst isPrerender = ref(true);\nprovide(\"isPrerender\", isPrerender);\n\nconst groupId = autosaveId || id || useId();\nconst [initialState, send, machineState] = groupMachine(\n {\n orientation: orientation,\n groupId,\n autosaveStrategy: autosaveStrategy,\n shiftAmount,\n ...(snapshot ? prepareSnapshot(snapshot) : undefined),\n },\n (s) => {\n context.value = { ...s };\n },\n);\n\nonMounted(() => {\n isPrerender.value = false;\n});\n\nconst context = ref(initialState);\nconst gridStyle = computed(() => {\n const template = buildTemplate(context.value);\n return {\n height: \"100%\",\n display: \"grid\",\n gridTemplateColumns: orientation === \"horizontal\" ? template : undefined,\n gridTemplateRows: orientation === \"vertical\" ? template : undefined,\n };\n});\n\nprovide(\"send\", send);\nprovide(\"state\", context);\nprovide(\"id\", machineState);\n\nconst elementRef = ref<HTMLDivElement | null>(null);\n\nonMounted(() => {\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return;\n if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {\n send?.({ type: \"setSize\", size: entry.contentRect });\n }\n });\n\n if (elementRef.value) {\n observer.observe(elementRef.value);\n }\n\n return () => observer.disconnect();\n});\n\nconst childIds = computed(() =>\n context.value?.items.map((i) => i.id).join(\",\"),\n);\n\nonMounted(() => {\n watchEffect(() => {\n // re-render when the childIds change\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n childIds.value;\n\n const cleanup = measureGroupChildren(groupId, (childrenSizes) => {\n send({ type: \"setActualItemsSize\", childrenSizes });\n });\n\n onWatcherCleanup(cleanup);\n });\n});\n\nonMounted(() => {\n send({ type: \"unlockGroup\" });\n return () => send({ type: \"lockGroup\" });\n});\n\ndefineExpose<PanelGroupHandle>({\n getId: () => groupId,\n getPixelSizes: () => getPanelGroupPixelSizes(context.value),\n getPercentageSizes: () => getPanelGroupPercentageSizes(context.value),\n getTemplate: () =>\n buildTemplate({\n ...context.value,\n items: prepareItems(context.value),\n }),\n getState: () => (machineState.current === \"idle\" ? \"idle\" : \"dragging\"),\n setSizes: (updates) => {\n for (let index = 0; index < updates.length; index++) {\n const item = context.value?.items[index];\n const update = updates[index];\n\n if (item && isPanelData(item) && update) {\n send({\n type: \"setPanelPixelSize\",\n panelId: item.id,\n size: update,\n });\n }\n }\n },\n});\n</script>\n\n<template>\n <div\n v-bind=\"attrs\"\n :id=\"groupId\"\n ref=\"elementRef\"\n data-panel-group-wrapper\n :style=\"gridStyle\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n getPanelResizerDomAttributes,\n move,\n SharedPanelResizerProps,\n} from \"@window-splitter/interface\";\nimport {\n getCollapsiblePanelForHandleId,\n getCursor,\n getGroupSize,\n GroupMachineContextValue,\n haveConstraintsChangedForPanelHandle,\n initializePanelHandleData,\n isPanelData,\n isPanelHandle,\n PanelHandleData,\n SendFn,\n} from \"@window-splitter/state\";\nimport {\n computed,\n inject,\n onMounted,\n onUnmounted,\n Ref,\n useId,\n watchEffect,\n} from \"vue\";\n\n// eslint-disable-next-line vue/require-default-prop\ntype PanelResizerProps = SharedPanelResizerProps & { id?: string };\n\nconst {\n size = \"0px\",\n id: _id,\n onDragStart,\n onDrag,\n onDragEnd,\n disabled,\n ...attrs\n} = defineProps<PanelResizerProps>();\n\nconst defaultId = _id || useId();\nconst id = defaultId;\n\nconst send = inject<SendFn>(\"send\");\nconst state = inject<Ref<GroupMachineContextValue>>(\"state\");\nconst isPrerender = inject<Ref<boolean>>(\"isPrerender\");\n\nconst initHandle = () => initializePanelHandleData({ size, id });\nconst handleData = computed(() => {\n const item = state?.value?.items.find((i) => i.id === id);\n if (!item || !isPanelHandle(item)) return undefined;\n return item;\n});\n\nlet dynamicPanelHandleIsMounting = false;\n\nif (!handleData.value) {\n if (isPrerender?.value) {\n send?.({ type: \"registerPanelHandle\", data: initHandle() });\n } else {\n dynamicPanelHandleIsMounting = true;\n }\n}\n\nonMounted(() => {\n const groupId = state?.value?.groupId;\n if (!groupId || !dynamicPanelHandleIsMounting) return;\n\n const groupElement = document.getElementById(state?.value?.groupId);\n if (!groupElement) return;\n\n const handleEl = document.getElementById(id);\n if (!handleEl) return;\n\n const order = Array.from(groupElement.children).indexOf(handleEl);\n if (typeof order !== \"number\") return;\n\n send?.({\n type: \"registerPanelHandle\",\n data: { ...initHandle(), order },\n });\n dynamicPanelHandleIsMounting = false;\n});\n\nconst contraintChanged = computed(\n () =>\n !dynamicPanelHandleIsMounting &&\n haveConstraintsChangedForPanelHandle(initHandle(), handleData.value),\n);\n\nwatchEffect(() => {\n if (!contraintChanged.value) return;\n send?.({ type: \"updateConstraints\", data: initHandle() });\n});\n\nonUnmounted(() => {\n requestAnimationFrame(() => send?.({ type: \"unregisterPanelHandle\", id }));\n});\n\nconst { moveProps } = move({\n onMoveStart: () => {\n send?.({ type: \"dragHandleStart\", handleId: id });\n onDragStart?.();\n if (!state?.value) return;\n document.body.style.cursor = getCursor(state?.value) || \"auto\";\n },\n onMove: (e) => {\n send?.({ type: \"dragHandle\", handleId: id, value: e });\n onDrag?.();\n },\n onMoveEnd: () => {\n send?.({ type: \"dragHandleEnd\", handleId: id });\n onDragEnd?.();\n document.body.style.cursor = \"auto\";\n },\n});\n\nconst onKeyDown = (e: KeyboardEvent) => {\n if (!state?.value) return;\n\n try {\n const collapsiblePanel = getCollapsiblePanelForHandleId(state?.value, id);\n\n if (e.key === \"Enter\" && collapsiblePanel) {\n if (collapsiblePanel.collapsed) {\n send?.({ type: \"expandPanel\", panelId: collapsiblePanel.id });\n } else {\n send?.({ type: \"collapsePanel\", panelId: collapsiblePanel.id });\n }\n }\n } catch {\n //\n }\n};\n\nconst combinedProps = computed(() => {\n const handleIndex = state?.value?.items.findIndex((item) => item.id === id);\n\n if (!handleIndex) return { id };\n\n const handle = state?.value?.items[handleIndex] as PanelHandleData;\n const panelBeforeHandle = state?.value?.items[handleIndex - 1];\n\n if (!panelBeforeHandle || !isPanelData(panelBeforeHandle)) return { id };\n\n return {\n ...attrs,\n ...getPanelResizerDomAttributes({\n groupId: state?.value?.groupId,\n id,\n orientation: state?.value?.orientation || \"horizontal\",\n isDragging: state?.value?.activeDragHandleId === id,\n activeDragHandleId: state?.value?.activeDragHandleId,\n disabled: disabled,\n controlsId: panelBeforeHandle.id,\n min: panelBeforeHandle.min,\n max: panelBeforeHandle.max,\n currentValue: panelBeforeHandle.currentValue,\n groupSize: getGroupSize(state.value),\n }),\n onpointerdown: disabled ? undefined : moveProps.onPointerDown,\n onkeydown: disabled\n ? undefined\n : (e: KeyboardEvent) => {\n moveProps.onKeyDown(e);\n onKeyDown(e);\n },\n style: {\n cursor: state?.value ? getCursor(state.value) : undefined,\n width:\n state?.value?.orientation === \"horizontal\"\n ? `${handle?.size.value.toNumber()}px`\n : \"100%\",\n height:\n state?.value?.orientation === \"vertical\"\n ? `${handle?.size.value.toNumber()}px`\n : \"100%\",\n },\n };\n});\n</script>\n\n<template>\n <div v-bind=\"combinedProps\" :tabindex=\"disabled ? -1 : 0\">\n <slot />\n </div>\n</template>\n"],"names":["DP","RM","MAX_DP","MAX_POWER","NE","PE","STRICT","NAME","INVALID","INVALID_DP","INVALID_RM","DIV_BY_ZERO","P","UNDEFINED","NUMERIC","_Big_","Big","n","x","parse","e","i","nl","round","sd","rm","more","xc","stringify","doExponential","isNonzero","s","y","isneg","yc","j","k","l","a","b","dp","bl","bt","cmp","ri","bz","ai","al","r","rl","q","qc","qi","p","t","xlty","xe","ye","ygtx","one","c","half","eachSafely","values","each","value","pendingCount","makeQueue","next","current","fn","arg","updateQueue","nativeRaf","raf","schedule","ts","queue","start","loop","stop","update","prevTs","COLLAPSE_THRESHOLD","makePercentUnit","makePixelUnit","getCollapseAnimation","panel","easeFn","collapseAnimations","duration","getCursor","context","prepareSnapshot","snapshot","item","isPanelData","invariant","condition","message","isEvent","event","eventType","isPanelHandle","initializePanel","onResize","lastCall","size","_b","_a","parseUnit","eq","haveConstraintsChangedForPanel","haveConstraintsChangedForPanelHandle","initializePanelHandleData","unit","getUnitPercentageValue","groupsSize","getGroupSize","getUnitPixelValue","parsed","clampUnit","min","max","getPanelWithId","panelId","getPanelHandleIndex","handleId","getCollapsiblePanelForHandleId","handleIndex","panelBefore","panelAfter","getHandleForPanelId","panelIndex","getHandleForPanelIdWithAvailableSpace","findPanelWithSpace","sortWithOrder","items","defaultPlacement","takenPlacements","defaultOrder","withoutOrder","sortedWithOrder","panelHasSpace","adjustment","direction","disregardCollapseBuffer","slice","targetPanel","createUnrestrainedPanel","getStaticWidth","width","formatUnit","getPanelGroupPixelSizes","prepareItems","getPanelPixelSize","getPanelGroupPercentageSizes","commitLayout","getPanelPercentageSize","buildTemplate","staticWidth","hasSeenFillPanel","addDeDuplicatedItems","newItem","currentItemIndex","restItems","_","index","data","newItems","lastSize","pixel","updateLayout","dragEvent","handle","moveAmount","moveDirection","newDragOvershoot","isInLeftBuffer","isInLeftOvershoot","isInRightBuffer","isInRightOvershoot","potentialNewValue","isInDragBugger","unrestrainedPanelBefore","panelBeforePreviousValue","panelBeforeNewValueRaw","panelBeforeNewValue","unrestrainedPanelAfter","panelAfterPreviousValue","applied","panelAfterNewValueRaw","panelAfterNewValue","extra","panelBeforeIsAboutToCollapse","_c","_d","leftoverSpace","acc","dragHandlePayload","delta","orientation","shiftKey","iterativelyUpdateLayout","controlled","isVirtual","newContext","applyDeltaInBothDirections","itemIndex","hasTriedBothDirections","deltaLeft","oldValue","newValue","handleOverflow","groupSize","nonStaticWidth","totalSize","overflow","collapsiblePanel","collapsiblePanelIndex","sizeChange","clearLastKnownSize","setCookie","name","jsonData","getDeltaForEvent","collapsedSize","animationActor","send","abortController","fullDelta","contextCopy","finalLayout","resolve","reject","fps","ease","totalFrames","frame","appliedDelta","renderFrame","progress","assign","action","target","source","key","groupId","groupMachine","input","onUpdate","state","locked","actions","id","removedSize","output","guards","pixelItems","interimContext","updatedPanel","didExpand","transition","to","currentValue","overflowDueToHandles","withLastKnownSize","lastKnownSize","useLastKnownSize","newSize","isBigger","getPanelDomAttributes","collapsible","collapsed","attrs","getPanelResizerDomAttributes","isDragging","activeDragHandleId","disabled","controlsId","measureGroupChildren","cb","childrenObserver","childrenEntries","childrenSizes","childEntry","childId","childSize","child","move","props","onMoveStart","onMoveProp","onMoveEnd","onMove","originalEvent","pointerType","deltaX","deltaY","end","moveProps","onPointerMove","onPointerUp","triggerKeyboardMove","__props","_min","_max","_collapsible","_collapsedSize","_onCollapseChange","_collapseAnimation","_onResize","defaultCollapsed","defaultSize","isStaticAtRest","_collapsed","useId","inject","isPrerender","initPanel","panelData","computed","dynamicPanelIsMounting","onMounted","groupElement","panelElement","order","contraintChanged","watchEffect","onUnmounted","__expose","isControlledCollapse","computedProps","currentPanel","_createPropsRestProxy","localSnapshot","ref","provide","initialState","machineState","gridStyle","template","elementRef","observer","entry","childIds","cleanup","onWatcherCleanup","updates","initHandle","handleData","dynamicPanelHandleIsMounting","handleEl","onKeyDown","combinedProps","panelBeforeHandle","_e","_f","_g","_h","_i"],"mappings":"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","x_google_ignoreList":[0]}
|