@darajs/components 1.9.4 → 1.10.0

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.
@@ -786,6 +786,11 @@
786
786
  icon: [448, 512, [61460, "trash-alt"], "f2ed", "M135.2 17.7C140.6 6.8 151.7 0 163.8 0H284.2c12.1 0 23.2 6.8 28.6 17.7L320 32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32h96l7.2-14.3zM32 128H416V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V128zm96 64c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16z"]
787
787
  };
788
788
  var faTrashAlt = faTrashCan;
789
+ var faDownLeftAndUpRightToCenter = {
790
+ prefix: "fas",
791
+ iconName: "down-left-and-up-right-to-center",
792
+ icon: [512, 512, ["compress-alt"], "f422", "M439 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8H296c-13.3 0-24-10.7-24-24V72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39L439 7zM72 272H216c13.3 0 24 10.7 24 24V440c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39L73 505c-9.4 9.4-24.6 9.4-33.9 0L7 473c-9.4-9.4-9.4-24.6 0-33.9l87-87L55 313c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8z"]
793
+ };
789
794
  var faToggleOff = {
790
795
  prefix: "fas",
791
796
  iconName: "toggle-off",
@@ -933,6 +938,11 @@
933
938
  iconName: "moon",
934
939
  icon: [384, 512, [127769, 9214], "f186", "M223.5 32C100 32 0 132.3 0 256S100 480 223.5 480c60.6 0 115.5-24.2 155.8-63.4c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-9.8 1.7-19.8 2.6-30.1 2.6c-96.9 0-175.5-78.8-175.5-176c0-65.8 36-123.1 89.3-153.3c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-6.3-.5-12.6-.8-19-.8z"]
935
940
  };
941
+ var faUpRightAndDownLeftFromCenter = {
942
+ prefix: "fas",
943
+ iconName: "up-right-and-down-left-from-center",
944
+ icon: [512, 512, ["expand-alt"], "f424", "M344 0H488c13.3 0 24 10.7 24 24V168c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87L327 41c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512H24c-13.3 0-24-10.7-24-24V344c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8z"]
945
+ };
936
946
  var faCheck = {
937
947
  prefix: "fas",
938
948
  iconName: "check",
@@ -3737,7 +3747,7 @@
3737
3747
  var allProps = _objectSpread2$1(_objectSpread2$1({}, defaultProps$7), props);
3738
3748
  var iconArgs = allProps.icon, maskArgs = allProps.mask, symbol = allProps.symbol, className = allProps.className, title = allProps.title, titleId = allProps.titleId, maskId = allProps.maskId;
3739
3749
  var iconLookup = normalizeIconArgs(iconArgs);
3740
- var classes = objectWithKey("classes", [].concat(_toConsumableArray$3(classList$1(allProps)), _toConsumableArray$3(className.split(" "))));
3750
+ var classes = objectWithKey("classes", [].concat(_toConsumableArray$3(classList$1(allProps)), _toConsumableArray$3((className || "").split(" "))));
3741
3751
  var transform = objectWithKey("transform", typeof allProps.transform === "string" ? parse$1$1.transform(allProps.transform) : allProps.transform);
3742
3752
  var mask = objectWithKey("mask", normalizeIconArgs(maskArgs));
3743
3753
  var renderedIcon = icon(iconLookup, _objectSpread2$1(_objectSpread2$1(_objectSpread2$1(_objectSpread2$1({}, classes), transform), mask), {}, {
@@ -4055,6 +4065,9 @@
4055
4065
  const TrashAlt = (props) => {
4056
4066
  return jsxRuntime.exports.jsx(StyledFAIcon, Object.assign({ icon: faTrashAlt }, props));
4057
4067
  };
4068
+ const DownLeftAndUpRightToCenter = (props) => {
4069
+ return jsxRuntime.exports.jsx(StyledFAIcon, Object.assign({ icon: faDownLeftAndUpRightToCenter }, props));
4070
+ };
4058
4071
  const PenToSquare = (props) => {
4059
4072
  return jsxRuntime.exports.jsx(StyledFAIcon, Object.assign({ icon: faPenToSquare }, props));
4060
4073
  };
@@ -4070,6 +4083,9 @@
4070
4083
  const Xmark = (props) => {
4071
4084
  return jsxRuntime.exports.jsx(StyledFAIcon, Object.assign({ icon: faXmark }, props));
4072
4085
  };
4086
+ const UpRightAndDownLeftFromCenter = (props) => {
4087
+ return jsxRuntime.exports.jsx(StyledFAIcon, Object.assign({ icon: faUpRightAndDownLeftFromCenter }, props));
4088
+ };
4073
4089
  const TriangleExclamation = (props) => {
4074
4090
  return jsxRuntime.exports.jsx(StyledFAIcon, Object.assign({ icon: faTriangleExclamation }, props));
4075
4091
  };
@@ -4087,10 +4103,8 @@
4087
4103
  color: ${(props) => props.theme.colors.grey5};
4088
4104
  transition: transform 0.1s linear;
4089
4105
  `;
4090
- function Chevron$1(props, ref2) {
4091
- return jsxRuntime.exports.jsx(Icon$2, { angles: props.angles, className: props.className, disabled: props.disabled, isOpen: props.isOpen, onClick: props.onClick, ref: ref2, style: props.style });
4092
- }
4093
- const Chevron$2 = React__namespace.forwardRef(Chevron$1);
4106
+ const Chevron$1 = React__namespace.forwardRef((props, ref2) => jsxRuntime.exports.jsx(Icon$2, { angles: props.angles, className: props.className, disabled: props.disabled, isOpen: props.isOpen, onClick: props.onClick, ref: ref2, style: props.style }));
4107
+ const Chevron$2 = React__namespace.memo(Chevron$1);
4094
4108
  styled__default.default.label`
4095
4109
  margin-bottom: 0;
4096
4110
  font-size: 11px;
@@ -4107,33 +4121,18 @@
4107
4121
 
4108
4122
  border: 1px solid ${(props) => props.theme.colors.grey3};
4109
4123
  `;
4110
- const ListItem = styled__default.default.span`
4111
- cursor: pointer;
4112
- user-select: none;
4113
-
4114
- overflow: hidden;
4124
+ const NoItemsLabel = styled__default.default.span`
4125
+ display: flex;
4126
+ flex: 1 1 auto;
4127
+ align-items: center;
4128
+ justify-content: center;
4115
4129
 
4116
- width: 100%;
4117
- min-height: 2rem;
4118
- padding: 0.25rem 1rem;
4130
+ height: 2rem;
4119
4131
 
4120
- font-size: ${(props) => props.size ? `${props.size}rem` : "1rem"};
4121
- font-weight: 300;
4132
+ font-size: 1rem;
4122
4133
  color: ${(props) => props.theme.colors.text};
4123
- text-overflow: ellipsis;
4124
- white-space: nowrap;
4125
4134
 
4126
- background-color: ${(props) => props.hovered ? props.theme.colors.grey2 : props.theme.colors.blue1};
4127
- border-bottom: 1px solid ${(props) => props.theme.colors.grey3};
4128
-
4129
- :active {
4130
- color: ${(props) => props.theme.colors.blue1};
4131
- background-color: ${(props) => props.theme.colors.primary};
4132
- }
4133
-
4134
- &:last-child {
4135
- border-bottom: none;
4136
- }
4135
+ background-color: ${(props) => props.theme.colors.blue1};
4137
4136
  `;
4138
4137
  globalThis && globalThis.__awaiter || function(thisArg, _arguments, P2, generator) {
4139
4138
  function adopt(value) {
@@ -8544,48 +8543,38 @@
8544
8543
  border-radius: ${(props) => props.height ? `${props.height / 2}px` : "1rem"};
8545
8544
  `;
8546
8545
  function _extends$3() {
8547
- _extends$3 = Object.assign ? Object.assign.bind() : function(target) {
8548
- for (var i2 = 1; i2 < arguments.length; i2++) {
8549
- var source = arguments[i2];
8550
- for (var key in source) {
8551
- if (Object.prototype.hasOwnProperty.call(source, key)) {
8552
- target[key] = source[key];
8553
- }
8554
- }
8546
+ return _extends$3 = Object.assign ? Object.assign.bind() : function(n2) {
8547
+ for (var e3 = 1; e3 < arguments.length; e3++) {
8548
+ var t2 = arguments[e3];
8549
+ for (var r2 in t2)
8550
+ ({}).hasOwnProperty.call(t2, r2) && (n2[r2] = t2[r2]);
8555
8551
  }
8556
- return target;
8557
- };
8558
- return _extends$3.apply(this, arguments);
8552
+ return n2;
8553
+ }, _extends$3.apply(null, arguments);
8559
8554
  }
8560
- function _assertThisInitialized$4(self2) {
8561
- if (self2 === void 0) {
8555
+ function _assertThisInitialized$4(e3) {
8556
+ if (void 0 === e3)
8562
8557
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
8563
- }
8564
- return self2;
8558
+ return e3;
8565
8559
  }
8566
- function _setPrototypeOf$4(o2, p2) {
8567
- _setPrototypeOf$4 = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o3, p3) {
8568
- o3.__proto__ = p3;
8569
- return o3;
8570
- };
8571
- return _setPrototypeOf$4(o2, p2);
8560
+ function _setPrototypeOf$4(t2, e3) {
8561
+ return _setPrototypeOf$4 = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(t3, e4) {
8562
+ return t3.__proto__ = e4, t3;
8563
+ }, _setPrototypeOf$4(t2, e3);
8572
8564
  }
8573
- function _inheritsLoose$2(subClass, superClass) {
8574
- subClass.prototype = Object.create(superClass.prototype);
8575
- subClass.prototype.constructor = subClass;
8576
- _setPrototypeOf$4(subClass, superClass);
8565
+ function _inheritsLoose$2(t2, o2) {
8566
+ t2.prototype = Object.create(o2.prototype), t2.prototype.constructor = t2, _setPrototypeOf$4(t2, o2);
8577
8567
  }
8578
- function _getPrototypeOf$3(o2) {
8579
- _getPrototypeOf$3 = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf2(o3) {
8580
- return o3.__proto__ || Object.getPrototypeOf(o3);
8581
- };
8582
- return _getPrototypeOf$3(o2);
8568
+ function _getPrototypeOf$3(t2) {
8569
+ return _getPrototypeOf$3 = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(t3) {
8570
+ return t3.__proto__ || Object.getPrototypeOf(t3);
8571
+ }, _getPrototypeOf$3(t2);
8583
8572
  }
8584
- function _isNativeFunction$1(fn2) {
8573
+ function _isNativeFunction$1(t2) {
8585
8574
  try {
8586
- return Function.toString.call(fn2).indexOf("[native code]") !== -1;
8587
- } catch (e3) {
8588
- return typeof fn2 === "function";
8575
+ return -1 !== Function.toString.call(t2).indexOf("[native code]");
8576
+ } catch (n2) {
8577
+ return "function" == typeof t2;
8589
8578
  }
8590
8579
  }
8591
8580
  function _isNativeReflectConstruct$3() {
@@ -8606,33 +8595,30 @@
8606
8595
  var p2 = new (t2.bind.apply(t2, o2))();
8607
8596
  return r2 && _setPrototypeOf$4(p2, r2.prototype), p2;
8608
8597
  }
8609
- function _wrapNativeSuper$1(Class) {
8610
- var _cache = typeof Map === "function" ? /* @__PURE__ */ new Map() : void 0;
8611
- _wrapNativeSuper$1 = function _wrapNativeSuper2(Class2) {
8612
- if (Class2 === null || !_isNativeFunction$1(Class2))
8613
- return Class2;
8614
- if (typeof Class2 !== "function") {
8598
+ function _wrapNativeSuper$1(t2) {
8599
+ var r2 = "function" == typeof Map ? /* @__PURE__ */ new Map() : void 0;
8600
+ return _wrapNativeSuper$1 = function _wrapNativeSuper2(t3) {
8601
+ if (null === t3 || !_isNativeFunction$1(t3))
8602
+ return t3;
8603
+ if ("function" != typeof t3)
8615
8604
  throw new TypeError("Super expression must either be null or a function");
8616
- }
8617
- if (typeof _cache !== "undefined") {
8618
- if (_cache.has(Class2))
8619
- return _cache.get(Class2);
8620
- _cache.set(Class2, Wrapper2);
8605
+ if (void 0 !== r2) {
8606
+ if (r2.has(t3))
8607
+ return r2.get(t3);
8608
+ r2.set(t3, Wrapper2);
8621
8609
  }
8622
8610
  function Wrapper2() {
8623
- return _construct$1(Class2, arguments, _getPrototypeOf$3(this).constructor);
8611
+ return _construct$1(t3, arguments, _getPrototypeOf$3(this).constructor);
8624
8612
  }
8625
- Wrapper2.prototype = Object.create(Class2.prototype, {
8613
+ return Wrapper2.prototype = Object.create(t3.prototype, {
8626
8614
  constructor: {
8627
8615
  value: Wrapper2,
8628
8616
  enumerable: false,
8629
8617
  writable: true,
8630
8618
  configurable: true
8631
8619
  }
8632
- });
8633
- return _setPrototypeOf$4(Wrapper2, Class2);
8634
- };
8635
- return _wrapNativeSuper$1(Class);
8620
+ }), _setPrototypeOf$4(Wrapper2, t3);
8621
+ }, _wrapNativeSuper$1(t2);
8636
8622
  }
8637
8623
  var PolishedError$2 = /* @__PURE__ */ function(_Error) {
8638
8624
  _inheritsLoose$2(PolishedError2, _Error);
@@ -9125,7 +9111,7 @@
9125
9111
  var _a3;
9126
9112
  return jsxRuntime.exports.jsxs(Wrapper$c, { className: props.className, style: props.style, children: [jsxRuntime.exports.jsxs(Loader$1, { color: props.color, size: props.size, children: [jsxRuntime.exports.jsx("div", { className: "sk-chase-dot" }), jsxRuntime.exports.jsx("div", { className: "sk-chase-dot" }), jsxRuntime.exports.jsx("div", { className: "sk-chase-dot" }), jsxRuntime.exports.jsx("div", { className: "sk-chase-dot" }), jsxRuntime.exports.jsx("div", { className: "sk-chase-dot" }), jsxRuntime.exports.jsx("div", { className: "sk-chase-dot" })] }), (props.showText || props.text) && jsxRuntime.exports.jsx(LoadingText, { color: props.color, children: (_a3 = props.text) !== null && _a3 !== void 0 ? _a3 : "LOADING" })] });
9127
9113
  }
9128
- var __rest$d = globalThis && globalThis.__rest || function(s2, e3) {
9114
+ var __rest$f = globalThis && globalThis.__rest || function(s2, e3) {
9129
9115
  var t2 = {};
9130
9116
  for (var p2 in s2)
9131
9117
  if (Object.prototype.hasOwnProperty.call(s2, p2) && e3.indexOf(p2) < 0)
@@ -9231,7 +9217,7 @@
9231
9217
  secondary: SecondaryButton$1
9232
9218
  };
9233
9219
  function Button$2(_a3, ref2) {
9234
- var { autoFocus, children: children2, className, disabled: disabled2, download, href, loading, id: id2, onClick, outline = false, style: style2, styling = "primary", type: type2 = "button" } = _a3, props = __rest$d(_a3, ["autoFocus", "children", "className", "disabled", "download", "href", "loading", "id", "onClick", "outline", "style", "styling", "type"]);
9220
+ var { autoFocus, children: children2, className, disabled: disabled2, download, href, loading, id: id2, onClick, outline = false, style: style2, styling = "primary", type: type2 = "button" } = _a3, props = __rest$f(_a3, ["autoFocus", "children", "className", "disabled", "download", "href", "loading", "id", "onClick", "outline", "style", "styling", "type"]);
9235
9221
  const currentTheme = useClTheme();
9236
9222
  const Component = stylingMap[styling];
9237
9223
  const content2 = loading ? jsxRuntime.exports.jsx(StyledLoading, { color: outline ? currentTheme.colors.grey2 : currentTheme.colors.blue1 }) : children2;
@@ -23850,11 +23836,7 @@
23850
23836
  options = encoding;
23851
23837
  encoding = void 0;
23852
23838
  }
23853
- return compiler(options)(
23854
- postprocess(
23855
- parse$6(options).document().write(preprocess()(value, encoding, true))
23856
- )
23857
- );
23839
+ return compiler(options)(postprocess(parse$6(options).document().write(preprocess()(value, encoding, true))));
23858
23840
  }
23859
23841
  function compiler(options) {
23860
23842
  const config2 = {
@@ -23914,6 +23896,7 @@
23914
23896
  characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,
23915
23897
  characterReferenceMarkerNumeric: onexitcharacterreferencemarker,
23916
23898
  characterReferenceValue: onexitcharacterreferencevalue,
23899
+ characterReference: onexitcharacterreference,
23917
23900
  codeFenced: closer(onexitcodefenced),
23918
23901
  codeFencedFence: onexitcodefencedfence,
23919
23902
  codeFencedFenceInfo: onexitcodefencedfenceinfo,
@@ -23988,15 +23971,9 @@
23988
23971
  while (++index2 < events2.length) {
23989
23972
  const handler = config2[events2[index2][0]];
23990
23973
  if (own$7.call(handler, events2[index2][1].type)) {
23991
- handler[events2[index2][1].type].call(
23992
- Object.assign(
23993
- {
23994
- sliceSerialize: events2[index2][2].sliceSerialize
23995
- },
23996
- context2
23997
- ),
23998
- events2[index2][1]
23999
- );
23974
+ handler[events2[index2][1].type].call(Object.assign({
23975
+ sliceSerialize: events2[index2][2].sliceSerialize
23976
+ }, context2), events2[index2][1]);
24000
23977
  }
24001
23978
  }
24002
23979
  if (context2.tokenStack.length > 0) {
@@ -24005,20 +23982,16 @@
24005
23982
  handler.call(context2, void 0, tail[0]);
24006
23983
  }
24007
23984
  tree.position = {
24008
- start: point$2(
24009
- events2.length > 0 ? events2[0][1].start : {
24010
- line: 1,
24011
- column: 1,
24012
- offset: 0
24013
- }
24014
- ),
24015
- end: point$2(
24016
- events2.length > 0 ? events2[events2.length - 2][1].end : {
24017
- line: 1,
24018
- column: 1,
24019
- offset: 0
24020
- }
24021
- )
23985
+ start: point$2(events2.length > 0 ? events2[0][1].start : {
23986
+ line: 1,
23987
+ column: 1,
23988
+ offset: 0
23989
+ }),
23990
+ end: point$2(events2.length > 0 ? events2[events2.length - 2][1].end : {
23991
+ line: 1,
23992
+ column: 1,
23993
+ offset: 0
23994
+ })
24022
23995
  };
24023
23996
  index2 = -1;
24024
23997
  while (++index2 < config2.transforms.length) {
@@ -24092,10 +24065,7 @@
24092
24065
  if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {
24093
24066
  listItem3._spread = true;
24094
24067
  }
24095
- listItem3.end = Object.assign(
24096
- {},
24097
- lineIndex ? events2[lineIndex][1].start : event2[1].end
24098
- );
24068
+ listItem3.end = Object.assign({}, lineIndex ? events2[lineIndex][1].start : event2[1].end);
24099
24069
  events2.splice(lineIndex || index2, 0, ["exit", listItem3, event2[2]]);
24100
24070
  index2++;
24101
24071
  length++;
@@ -24156,12 +24126,10 @@
24156
24126
  const node2 = this.stack.pop();
24157
24127
  const open = this.tokenStack.pop();
24158
24128
  if (!open) {
24159
- throw new Error(
24160
- "Cannot close `" + token.type + "` (" + stringifyPosition({
24161
- start: token.start,
24162
- end: token.end
24163
- }) + "): it\u2019s not open"
24164
- );
24129
+ throw new Error("Cannot close `" + token.type + "` (" + stringifyPosition({
24130
+ start: token.start,
24131
+ end: token.end
24132
+ }) + "): it\u2019s not open");
24165
24133
  } else if (open[0].type !== token.type) {
24166
24134
  if (onExitError) {
24167
24135
  onExitError.call(this, token, open[0]);
@@ -24216,9 +24184,7 @@
24216
24184
  const label = this.resume();
24217
24185
  const node2 = this.stack[this.stack.length - 1];
24218
24186
  node2.label = label;
24219
- node2.identifier = normalizeIdentifier(
24220
- this.sliceSerialize(token)
24221
- ).toLowerCase();
24187
+ node2.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();
24222
24188
  }
24223
24189
  function onexitdefinitiontitlestring() {
24224
24190
  const data3 = this.resume();
@@ -24363,9 +24329,7 @@
24363
24329
  const label = this.resume();
24364
24330
  const node2 = this.stack[this.stack.length - 1];
24365
24331
  node2.label = label;
24366
- node2.identifier = normalizeIdentifier(
24367
- this.sliceSerialize(token)
24368
- ).toLowerCase();
24332
+ node2.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();
24369
24333
  this.data.referenceType = "full";
24370
24334
  }
24371
24335
  function onexitcharacterreferencemarker(token) {
@@ -24376,17 +24340,17 @@
24376
24340
  const type2 = this.data.characterReferenceType;
24377
24341
  let value;
24378
24342
  if (type2) {
24379
- value = decodeNumericCharacterReference(
24380
- data3,
24381
- type2 === "characterReferenceMarkerNumeric" ? 10 : 16
24382
- );
24343
+ value = decodeNumericCharacterReference(data3, type2 === "characterReferenceMarkerNumeric" ? 10 : 16);
24383
24344
  this.data.characterReferenceType = void 0;
24384
24345
  } else {
24385
24346
  const result = decodeNamedCharacterReference(data3);
24386
24347
  value = result;
24387
24348
  }
24388
- const tail = this.stack.pop();
24349
+ const tail = this.stack[this.stack.length - 1];
24389
24350
  tail.value += value;
24351
+ }
24352
+ function onexitcharacterreference(token) {
24353
+ const tail = this.stack.pop();
24390
24354
  tail.position.end = point$2(token.end);
24391
24355
  }
24392
24356
  function onexitautolinkprotocol(token) {
@@ -24560,22 +24524,18 @@
24560
24524
  }
24561
24525
  function defaultOnError(left2, right2) {
24562
24526
  if (left2) {
24563
- throw new Error(
24564
- "Cannot close `" + left2.type + "` (" + stringifyPosition({
24565
- start: left2.start,
24566
- end: left2.end
24567
- }) + "): a different token (`" + right2.type + "`, " + stringifyPosition({
24568
- start: right2.start,
24569
- end: right2.end
24570
- }) + ") is open"
24571
- );
24527
+ throw new Error("Cannot close `" + left2.type + "` (" + stringifyPosition({
24528
+ start: left2.start,
24529
+ end: left2.end
24530
+ }) + "): a different token (`" + right2.type + "`, " + stringifyPosition({
24531
+ start: right2.start,
24532
+ end: right2.end
24533
+ }) + ") is open");
24572
24534
  } else {
24573
- throw new Error(
24574
- "Cannot close document, a token (`" + right2.type + "`, " + stringifyPosition({
24575
- start: right2.start,
24576
- end: right2.end
24577
- }) + ") is still open"
24578
- );
24535
+ throw new Error("Cannot close document, a token (`" + right2.type + "`, " + stringifyPosition({
24536
+ start: right2.start,
24537
+ end: right2.end
24538
+ }) + ") is still open");
24579
24539
  }
24580
24540
  }
24581
24541
  function remarkParse(options) {
@@ -24729,13 +24689,13 @@
24729
24689
  }
24730
24690
  function imageReference$1(state, node2) {
24731
24691
  const id2 = String(node2.identifier).toUpperCase();
24732
- const def = state.definitionById.get(id2);
24733
- if (!def) {
24692
+ const definition2 = state.definitionById.get(id2);
24693
+ if (!definition2) {
24734
24694
  return revert(state, node2);
24735
24695
  }
24736
- const properties = { src: normalizeUri(def.url || ""), alt: node2.alt };
24737
- if (def.title !== null && def.title !== void 0) {
24738
- properties.title = def.title;
24696
+ const properties = { src: normalizeUri(definition2.url || ""), alt: node2.alt };
24697
+ if (definition2.title !== null && definition2.title !== void 0) {
24698
+ properties.title = definition2.title;
24739
24699
  }
24740
24700
  const result = { type: "element", tagName: "img", properties, children: [] };
24741
24701
  state.patch(node2, result);
@@ -24767,13 +24727,13 @@
24767
24727
  }
24768
24728
  function linkReference$1(state, node2) {
24769
24729
  const id2 = String(node2.identifier).toUpperCase();
24770
- const def = state.definitionById.get(id2);
24771
- if (!def) {
24730
+ const definition2 = state.definitionById.get(id2);
24731
+ if (!definition2) {
24772
24732
  return revert(state, node2);
24773
24733
  }
24774
- const properties = { href: normalizeUri(def.url || "") };
24775
- if (def.title !== null && def.title !== void 0) {
24776
- properties.title = def.title;
24734
+ const properties = { href: normalizeUri(definition2.url || "") };
24735
+ if (definition2.title !== null && definition2.title !== void 0) {
24736
+ properties.title = definition2.title;
24777
24737
  }
24778
24738
  const result = {
24779
24739
  type: "element",
@@ -25288,12 +25248,14 @@
25288
25248
  const listItems = [];
25289
25249
  let referenceIndex = -1;
25290
25250
  while (++referenceIndex < state.footnoteOrder.length) {
25291
- const def = state.footnoteById.get(state.footnoteOrder[referenceIndex]);
25292
- if (!def) {
25251
+ const definition2 = state.footnoteById.get(
25252
+ state.footnoteOrder[referenceIndex]
25253
+ );
25254
+ if (!definition2) {
25293
25255
  continue;
25294
25256
  }
25295
- const content2 = state.all(def);
25296
- const id2 = String(def.identifier).toUpperCase();
25257
+ const content2 = state.all(definition2);
25258
+ const id2 = String(definition2.identifier).toUpperCase();
25297
25259
  const safeId = normalizeUri(id2.toLowerCase());
25298
25260
  let rereferenceIndex = 0;
25299
25261
  const backReferences = [];
@@ -25336,7 +25298,7 @@
25336
25298
  properties: { id: clobberPrefix + "fn-" + safeId },
25337
25299
  children: state.wrap(content2, true)
25338
25300
  };
25339
- state.patch(def, listItem2);
25301
+ state.patch(definition2, listItem2);
25340
25302
  listItems.push(listItem2);
25341
25303
  }
25342
25304
  if (listItems.length === 0) {
@@ -29519,7 +29481,7 @@
29519
29481
  fromMarkdownExtensions.push(gfmFromMarkdown());
29520
29482
  toMarkdownExtensions.push(gfmToMarkdown(settings2));
29521
29483
  }
29522
- var __rest$c = globalThis && globalThis.__rest || function(s2, e3) {
29484
+ var __rest$e = globalThis && globalThis.__rest || function(s2, e3) {
29523
29485
  var t2 = {};
29524
29486
  for (var p2 in s2)
29525
29487
  if (Object.prototype.hasOwnProperty.call(s2, p2) && e3.indexOf(p2) < 0)
@@ -29786,7 +29748,7 @@
29786
29748
  `;
29787
29749
  function Markdown$1(props) {
29788
29750
  var _a3;
29789
- const { markdown, className, style: style2 } = props, reactMarkdownProps = __rest$c(props, ["markdown", "className", "style"]);
29751
+ const { markdown, className, style: style2 } = props, reactMarkdownProps = __rest$e(props, ["markdown", "className", "style"]);
29790
29752
  return jsxRuntime.exports.jsx(CustomMarkdownWrapper, { className, style: style2, children: jsxRuntime.exports.jsx(Markdown$2, Object.assign({}, reactMarkdownProps, { remarkPlugins: (_a3 = reactMarkdownProps.remarkPlugins) !== null && _a3 !== void 0 ? _a3 : [remarkGfm], children: markdown })) });
29791
29753
  }
29792
29754
  var top$1 = "top";
@@ -34226,7 +34188,7 @@
34226
34188
  return jsxRuntime.exports.jsx(CheckboxWrapper, { "aria-disabled": props.disabled, children: jsxRuntime.exports.jsx(Checkbox, { disabled: isSelectPermitted ? props.disabled : ((_a3 = checkedState.find((option) => option.value === item.value)) === null || _a3 === void 0 ? void 0 : _a3.state) === false, id: index2, isListStyle: props.isListStyle, label: item.label ? item.label : item.value, onChange: (checked, e3) => onChangeValue(e3), selected: (_b = checkedState.find((option) => option.value === item.value)) === null || _b === void 0 ? void 0 : _b.state }) }, `item-${index2}`);
34227
34189
  })] });
34228
34190
  }
34229
- var __rest$b = globalThis && globalThis.__rest || function(s2, e3) {
34191
+ var __rest$d = globalThis && globalThis.__rest || function(s2, e3) {
34230
34192
  var t2 = {};
34231
34193
  for (var p2 in s2)
34232
34194
  if (Object.prototype.hasOwnProperty.call(s2, p2) && e3.indexOf(p2) < 0)
@@ -34282,7 +34244,7 @@
34282
34244
  color: ${(props) => props.theme.colors.error};
34283
34245
  `;
34284
34246
  const Input$3 = React.forwardRef((_a3, ref2) => {
34285
- var { type: type2 = "text" } = _a3, props = __rest$b(_a3, ["type"]);
34247
+ var { type: type2 = "text" } = _a3, props = __rest$d(_a3, ["type"]);
34286
34248
  const onChange2 = (e3) => {
34287
34249
  const target = e3.target;
34288
34250
  if (props.onChange) {
@@ -34456,18 +34418,17 @@
34456
34418
  setPreviousFilter(filterValue);
34457
34419
  }, children: "Apply" })] });
34458
34420
  }
34459
- function _objectWithoutPropertiesLoose$4(source, excluded) {
34460
- if (source == null)
34421
+ function _objectWithoutPropertiesLoose$4(r2, e3) {
34422
+ if (null == r2)
34461
34423
  return {};
34462
- var target = {};
34463
- for (var key in source) {
34464
- if (Object.prototype.hasOwnProperty.call(source, key)) {
34465
- if (excluded.indexOf(key) >= 0)
34424
+ var t2 = {};
34425
+ for (var n2 in r2)
34426
+ if ({}.hasOwnProperty.call(r2, n2)) {
34427
+ if (e3.indexOf(n2) >= 0)
34466
34428
  continue;
34467
- target[key] = source[key];
34429
+ t2[n2] = r2[n2];
34468
34430
  }
34469
- }
34470
- return target;
34431
+ return t2;
34471
34432
  }
34472
34433
  var reactIs = { exports: {} };
34473
34434
  var reactIs_production_min = {};
@@ -34642,25 +34603,6 @@
34642
34603
  }
34643
34604
  return D2;
34644
34605
  };
34645
- var extendStatics = function(d2, b2) {
34646
- extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b3) {
34647
- d3.__proto__ = b3;
34648
- } || function(d3, b3) {
34649
- for (var p2 in b3)
34650
- if (Object.prototype.hasOwnProperty.call(b3, p2))
34651
- d3[p2] = b3[p2];
34652
- };
34653
- return extendStatics(d2, b2);
34654
- };
34655
- function __extends(d2, b2) {
34656
- if (typeof b2 !== "function" && b2 !== null)
34657
- throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null");
34658
- extendStatics(d2, b2);
34659
- function __() {
34660
- this.constructor = d2;
34661
- }
34662
- d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __());
34663
- }
34664
34606
  var __assign = function() {
34665
34607
  __assign = Object.assign || function __assign2(t2) {
34666
34608
  for (var s2, i2 = 1, n2 = arguments.length; i2 < n2; i2++) {
@@ -34776,21 +34718,7 @@
34776
34718
  return { value: op[0] ? op[1] : void 0, done: true };
34777
34719
  }
34778
34720
  }
34779
- function __values(o2) {
34780
- var s2 = typeof Symbol === "function" && Symbol.iterator, m2 = s2 && o2[s2], i2 = 0;
34781
- if (m2)
34782
- return m2.call(o2);
34783
- if (o2 && typeof o2.length === "number")
34784
- return {
34785
- next: function() {
34786
- if (o2 && i2 >= o2.length)
34787
- o2 = void 0;
34788
- return { value: o2 && o2[i2++], done: !o2 };
34789
- }
34790
- };
34791
- throw new TypeError(s2 ? "Object is not iterable." : "Symbol.iterator is not defined.");
34792
- }
34793
- function __read(o2, n2) {
34721
+ function __read$1(o2, n2) {
34794
34722
  var m2 = typeof Symbol === "function" && o2[Symbol.iterator];
34795
34723
  if (!m2)
34796
34724
  return o2;
@@ -34813,20 +34741,9 @@
34813
34741
  }
34814
34742
  function __spread() {
34815
34743
  for (var ar = [], i2 = 0; i2 < arguments.length; i2++)
34816
- ar = ar.concat(__read(arguments[i2]));
34744
+ ar = ar.concat(__read$1(arguments[i2]));
34817
34745
  return ar;
34818
34746
  }
34819
- function __spreadArray(to2, from, pack) {
34820
- if (pack || arguments.length === 2)
34821
- for (var i2 = 0, l2 = from.length, ar; i2 < l2; i2++) {
34822
- if (ar || !(i2 in from)) {
34823
- if (!ar)
34824
- ar = Array.prototype.slice.call(from, 0, i2);
34825
- ar[i2] = from[i2];
34826
- }
34827
- }
34828
- return to2.concat(ar || Array.prototype.slice.call(from));
34829
- }
34830
34747
  typeof SuppressedError === "function" ? SuppressedError : function(error2, suppressed, message) {
34831
34748
  var e3 = new Error(message);
34832
34749
  return e3.name = "SuppressedError", e3.error = error2, e3.suppressed = suppressed, e3;
@@ -36864,6 +36781,118 @@
36864
36781
  activeIndex
36865
36782
  };
36866
36783
  }
36784
+ var __rest$c = globalThis && globalThis.__rest || function(s2, e3) {
36785
+ var t2 = {};
36786
+ for (var p2 in s2)
36787
+ if (Object.prototype.hasOwnProperty.call(s2, p2) && e3.indexOf(p2) < 0)
36788
+ t2[p2] = s2[p2];
36789
+ if (s2 != null && typeof Object.getOwnPropertySymbols === "function")
36790
+ for (var i2 = 0, p2 = Object.getOwnPropertySymbols(s2); i2 < p2.length; i2++) {
36791
+ if (e3.indexOf(p2[i2]) < 0 && Object.prototype.propertyIsEnumerable.call(s2, p2[i2]))
36792
+ t2[p2[i2]] = s2[p2[i2]];
36793
+ }
36794
+ return t2;
36795
+ };
36796
+ const StyledChevronButton = styled__default.default(Button$3).attrs((attrs2) => Object.assign(Object.assign({}, attrs2), { styling: "ghost" }))`
36797
+ min-width: 0;
36798
+ height: auto;
36799
+ margin: 0;
36800
+ padding: 0 0.25rem;
36801
+
36802
+ background-color: transparent !important;
36803
+ `;
36804
+ const ChevronButton = (_a3) => {
36805
+ var { getToggleButtonProps, disabled: disabled2, isOpen } = _a3, props = __rest$c(_a3, ["getToggleButtonProps", "disabled", "isOpen"]);
36806
+ return jsxRuntime.exports.jsx(StyledChevronButton, Object.assign({}, getToggleButtonProps(), props, { children: jsxRuntime.exports.jsx(Chevron$2, { disabled: disabled2, isOpen }) }));
36807
+ };
36808
+ const ChevronButton$1 = React__default.default.memo(ChevronButton);
36809
+ var __rest$b = globalThis && globalThis.__rest || function(s2, e3) {
36810
+ var t2 = {};
36811
+ for (var p2 in s2)
36812
+ if (Object.prototype.hasOwnProperty.call(s2, p2) && e3.indexOf(p2) < 0)
36813
+ t2[p2] = s2[p2];
36814
+ if (s2 != null && typeof Object.getOwnPropertySymbols === "function")
36815
+ for (var i2 = 0, p2 = Object.getOwnPropertySymbols(s2); i2 < p2.length; i2++) {
36816
+ if (e3.indexOf(p2[i2]) < 0 && Object.prototype.propertyIsEnumerable.call(s2, p2[i2]))
36817
+ t2[p2[i2]] = s2[p2[i2]];
36818
+ }
36819
+ return t2;
36820
+ };
36821
+ const StyledListItem = styled__default.default.span`
36822
+ cursor: pointer;
36823
+ user-select: none;
36824
+
36825
+ overflow: hidden;
36826
+
36827
+ width: 100%;
36828
+ min-height: 2rem;
36829
+ padding: 0.25rem 1rem;
36830
+
36831
+ font-size: ${(props) => props.size ? `${props.size}rem` : "1rem"};
36832
+ font-weight: 300;
36833
+ color: ${(props) => props.theme.colors.text};
36834
+ text-overflow: ellipsis;
36835
+ white-space: nowrap;
36836
+
36837
+ background-color: ${(props) => {
36838
+ if (props.isSelected) {
36839
+ return props.theme.colors.blue3;
36840
+ }
36841
+ if (props.isHighlighted) {
36842
+ return props.theme.colors.grey2;
36843
+ }
36844
+ return props.theme.colors.blue1;
36845
+ }};
36846
+ border-bottom: 1px solid ${(props) => props.theme.colors.grey3};
36847
+
36848
+ :hover {
36849
+ background-color: ${(props) => props.theme.colors.grey2};
36850
+ }
36851
+
36852
+ :active {
36853
+ color: ${(props) => props.theme.colors.blue1};
36854
+ background-color: ${(props) => props.theme.colors.blue4};
36855
+ }
36856
+
36857
+ &:last-child {
36858
+ border-bottom: none;
36859
+ }
36860
+ `;
36861
+ const ListItem = ({ size: size2, title, item, index: index2, getItemProps, itemClass, children: children2, isHighlighted, isSelected }) => {
36862
+ const _a3 = getItemProps({ index: index2, item }), { itemClassName } = _a3, itemProps = __rest$b(_a3, ["itemClassName"]);
36863
+ return jsxRuntime.exports.jsx(StyledListItem, Object.assign({}, itemProps, { className: itemClass ? `${itemClassName} ${itemClass}` : itemClassName, title, size: size2, item, isHighlighted, isSelected, children: children2 }));
36864
+ };
36865
+ ListItem.displayName = "ListItem";
36866
+ const ListItem$1 = React__default.default.memo(ListItem);
36867
+ const StyledDropdownList$1 = styled__default.default(List)`
36868
+ border-radius: 0 0 0.25rem 0.25rem;
36869
+ outline: 0;
36870
+ box-shadow: ${(props) => props.theme.shadow.light};
36871
+ `;
36872
+ const DropdownList = React__default.default.forwardRef(({ items, getItemProps, getFloatingProps, isOpen, getMenuProps, size: size2, style: style2, maxItems, itemClass, className, children: children2, selectedItem, kbdHighlightIdx }, ref2) => jsxRuntime.exports.jsx(StyledDropdownList$1, Object.assign({}, getMenuProps ? getMenuProps({ ref: ref2 }) : { ref: ref2 }, getFloatingProps(), { isOpen, maxItems, style: Object.assign(Object.assign({}, style2), { zIndex: 9999 }), className, children: !lodash$1.exports.isEmpty(items) ? items.map((item, index2) => {
36873
+ const isSelected = (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label) === item.label;
36874
+ return children2 ? children2(item, index2) : jsxRuntime.exports.jsx(ListItem$1, { getItemProps, size: size2, title: item.label, item, index: index2, itemClass, isHighlighted: isOpen && kbdHighlightIdx !== void 0 && kbdHighlightIdx === index2, isSelected, children: item.label }, `item-${index2}-${isOpen && isSelected}`);
36875
+ }) : jsxRuntime.exports.jsx(NoItemsLabel, { children: "No Items" }) })));
36876
+ DropdownList.displayName = "DropdownList";
36877
+ const DropdownList$1 = React__default.default.memo(DropdownList);
36878
+ const { stateChangeTypes: useSelectChangeTypes } = useSelect;
36879
+ const { stateChangeTypes: useComboboxChangeTypes } = useCombobox;
36880
+ const setTypes = /* @__PURE__ */ new Set([
36881
+ useSelectChangeTypes.ToggleButtonKeyDownArrowDown,
36882
+ useSelectChangeTypes.ToggleButtonKeyDownArrowUp,
36883
+ useComboboxChangeTypes.InputKeyDownArrowDown,
36884
+ useComboboxChangeTypes.InputKeyDownArrowUp
36885
+ ]);
36886
+ const syncKbdHighlightIdx = (setKbdHighlightIdx) => ({
36887
+ onHighlightedIndexChange: ({ highlightedIndex, type: type2 }) => {
36888
+ if (setTypes.has(type2)) {
36889
+ setKbdHighlightIdx(highlightedIndex);
36890
+ }
36891
+ if (type2 === useSelectChangeTypes.ItemMouseMove) {
36892
+ setKbdHighlightIdx(void 0);
36893
+ }
36894
+ }
36895
+ });
36867
36896
  const { stateChangeTypes: stateChangeTypes$3 } = useCombobox;
36868
36897
  const Wrapper$a = styled__default.default.div`
36869
36898
  display: inline-flex;
@@ -36943,42 +36972,17 @@
36943
36972
  cursor: not-allowed;
36944
36973
  color: ${(props) => props.theme.colors.grey2};
36945
36974
  }
36946
- `;
36947
- const NoItemsLabel$1 = styled__default.default.span`
36948
- display: flex;
36949
- flex: 1 1 auto;
36950
- align-items: center;
36951
- justify-content: center;
36952
-
36953
- height: 2rem;
36954
-
36955
- font-size: 1rem;
36956
- color: ${(props) => props.theme.colors.text};
36957
-
36958
- background-color: ${(props) => props.theme.colors.blue1};
36959
- `;
36960
- const DropdownList$3 = styled__default.default(List)`
36961
- margin-left: -1px;
36962
- border-radius: 0 0 0.25rem 0.25rem;
36963
- box-shadow: ${(props) => props.theme.shadow.light};
36964
- `;
36965
- const ChevronButton$1 = styled__default.default(Button$3).attrs((attrs2) => Object.assign(Object.assign({}, attrs2), { styling: "ghost" }))`
36966
- min-width: 0;
36967
- height: auto;
36968
- margin: 0;
36969
- padding: 0 0.25rem;
36970
-
36971
- background-color: transparent !important;
36972
36975
  `;
36973
36976
  function ComboBox(props) {
36974
36977
  var _a3, _b, _c, _d, _e2, _f;
36975
36978
  const [inputValue, setInputValue] = React.useState((_d = (_b = (_a3 = props.initialValue) === null || _a3 === void 0 ? void 0 : _a3.label) !== null && _b !== void 0 ? _b : (_c = props.selectedItem) === null || _c === void 0 ? void 0 : _c.label) !== null && _d !== void 0 ? _d : "");
36976
36979
  const [pendingHighlight, setPendingHighlight] = React.useState(null);
36977
- const filteredItems = props.items.filter((item) => {
36980
+ const filteredItems = React.useMemo(() => props.items.filter((item) => {
36978
36981
  var _a4;
36979
36982
  return inputValue ? (_a4 = item.label) === null || _a4 === void 0 ? void 0 : _a4.toLowerCase().includes(inputValue === null || inputValue === void 0 ? void 0 : inputValue.toLowerCase()) : true;
36980
- });
36981
- const { selectedItem, isOpen, getMenuProps, getInputProps, getToggleButtonProps, highlightedIndex, getItemProps, setHighlightedIndex } = useCombobox(Object.assign({ initialIsOpen: props.initialIsOpen, initialSelectedItem: (_e2 = props.initialValue) !== null && _e2 !== void 0 ? _e2 : props.selectedItem, itemToString: (item) => item ? item.label : "", items: filteredItems, onInputValueChange: (change) => {
36983
+ }), [inputValue, props.items]);
36984
+ const [kbdHighlightIdx, setKbdHighlightIdx] = React__default.default.useState();
36985
+ const { selectedItem, isOpen, getMenuProps, getInputProps, getToggleButtonProps, getItemProps, setHighlightedIndex } = useCombobox(Object.assign(Object.assign(Object.assign({ initialIsOpen: props.initialIsOpen, initialSelectedItem: (_e2 = props.initialValue) !== null && _e2 !== void 0 ? _e2 : props.selectedItem, itemToString: (item) => item ? item.label : "", items: filteredItems, onInputValueChange: (change) => {
36982
36986
  setInputValue(change.inputValue);
36983
36987
  }, onSelectedItemChange: (changes) => {
36984
36988
  var _a4, _b2;
@@ -36987,7 +36991,7 @@
36987
36991
  props.onSelect(changes.selectedItem);
36988
36992
  }
36989
36993
  }
36990
- }, stateReducer: (state, { changes, type: type2 }) => {
36994
+ } }, syncKbdHighlightIdx(setKbdHighlightIdx)), { stateReducer: (state, { changes, type: type2 }) => {
36991
36995
  var _a4;
36992
36996
  if (type2 === stateChangeTypes$3.InputFocus || type2 === stateChangeTypes$3.ToggleButtonClick && changes.isOpen || type2 === stateChangeTypes$3.ControlledPropUpdatedSelectedItem && changes.isOpen) {
36993
36997
  setPendingHighlight(changes.selectedItem ? props.items.findIndex((i2) => i2.value === changes.selectedItem.value) : 0);
@@ -37003,7 +37007,7 @@
37003
37007
  return Object.assign(Object.assign({}, changes), { inputValue: ((_a4 = changes.selectedItem) === null || _a4 === void 0 ? void 0 : _a4.label) || "" });
37004
37008
  }
37005
37009
  return changes;
37006
- } }, "selectedItem" in props && { selectedItem: props.selectedItem }));
37010
+ } }), "selectedItem" in props && { selectedItem: props.selectedItem }));
37007
37011
  React.useEffect(() => {
37008
37012
  if (isOpen && pendingHighlight !== null) {
37009
37013
  setHighlightedIndex(pendingHighlight);
@@ -37020,17 +37024,13 @@
37020
37024
  middleware: [flip$2(), shift$1(), offset$2({ crossAxis: 1 }), matchWidthToReference(2)],
37021
37025
  whileElementsMounted: isOpen ? autoUpdate : void 0
37022
37026
  });
37027
+ const dropdownStyle = React.useMemo(() => Object.assign(Object.assign({}, floatingStyles), { marginLeft: -1 }), [floatingStyles]);
37023
37028
  const role = useRole(context2, { role: "combobox" });
37024
37029
  const { getReferenceProps, getFloatingProps } = useInteractions([role]);
37025
- const menuProps = React.useMemo(() => getMenuProps({ ref: refs.setFloating }), [refs.setFloating, getMenuProps]);
37026
37030
  return jsxRuntime.exports.jsx(Tooltip$1, { content: props.errorMsg, disabled: !props.errorMsg, styling: "error", children: jsxRuntime.exports.jsxs(Wrapper$a, { className: props.className, isDisabled: props.disabled, isErrored: !!props.errorMsg, isOpen, style: props.style, children: [jsxRuntime.exports.jsxs(InputWrapper$4, { disabled: props.disabled, isOpen, ref: refs.setReference, children: [jsxRuntime.exports.jsx(Input$2, Object.assign({}, getInputProps({
37027
37031
  disabled: props.disabled
37028
- }), getReferenceProps(), { placeholder: (_f = selectedItem === null ? props.placeholder : selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label) !== null && _f !== void 0 ? _f : props.placeholder, size: props.size })), jsxRuntime.exports.jsx(ChevronButton$1, Object.assign({}, getToggleButtonProps(), { children: jsxRuntime.exports.jsx(Chevron$2, { disabled: props.disabled, isOpen }) }))] }), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsxs(DropdownList$3, Object.assign({}, menuProps, getFloatingProps(), { isOpen, style: Object.assign(Object.assign({}, floatingStyles), { zIndex: 9999 }), children: [filteredItems.length > 0 && filteredItems.map((item, index2) => React.createElement(ListItem, Object.assign({}, getItemProps({ index: index2, item }), { hovered: index2 === highlightedIndex, key: `item-${index2}`, size: props.size, title: item.label }), item.label)), filteredItems.length === 0 && jsxRuntime.exports.jsx(NoItemsLabel$1, { children: "No Items" })] })), document.body)] }) });
37032
+ }), getReferenceProps(), { placeholder: (_f = selectedItem === null ? props.placeholder : selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label) !== null && _f !== void 0 ? _f : props.placeholder, size: props.size })), jsxRuntime.exports.jsx(ChevronButton$1, { disabled: props.disabled, isOpen, getToggleButtonProps })] }), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsx(DropdownList$1, { items: filteredItems, getItemProps, getFloatingProps, style: dropdownStyle, isOpen, getMenuProps, size: props.size, ref: refs.setFloating, selectedItem, kbdHighlightIdx }), document.body)] }) });
37029
37033
  }
37030
- styled__default.default(List)`
37031
- overflow-y: auto;
37032
- box-shadow: ${(props) => props.theme.shadow.light};
37033
- `;
37034
37034
  var dateFormats$1 = {
37035
37035
  full: "EEEE, d MMMM yyyy",
37036
37036
  long: "d MMMM yyyy",
@@ -43662,7 +43662,7 @@
43662
43662
  }
43663
43663
  }
43664
43664
  `;
43665
- const DatepickerListItem = styled__default.default.span`
43665
+ const StyledDatepickerListItem = styled__default.default.span`
43666
43666
  cursor: pointer;
43667
43667
  user-select: none;
43668
43668
 
@@ -43674,22 +43674,27 @@
43674
43674
  min-height: 2rem;
43675
43675
  padding: 0.25rem 1.5rem;
43676
43676
 
43677
- font-size: ${(props) => props.size ? `${props.size}rem` : props.theme.font.size};
43677
+ font-size: 0.75rem;
43678
43678
  font-weight: 300;
43679
43679
  color: ${(props) => props.isSelected ? "#FFF" : props.theme.colors.text};
43680
43680
  text-overflow: ellipsis;
43681
43681
  white-space: nowrap;
43682
+ border-radius: 0.25rem;
43682
43683
 
43683
43684
  background-color: ${(props) => {
43684
43685
  if (props.isSelected) {
43685
43686
  return props.theme.colors.primary;
43686
43687
  }
43687
- if (props.hovered) {
43688
+ if (props.isHighlighted) {
43688
43689
  return props.theme.colors.grey2;
43689
43690
  }
43690
43691
  return props.theme.colors.grey1;
43691
43692
  }};
43692
43693
 
43694
+ :hover {
43695
+ background-color: ${(props) => props.isSelected ? props.theme.colors.primary : props.theme.colors.grey2};
43696
+ }
43697
+
43693
43698
  :active {
43694
43699
  background-color: ${(props) => props.theme.colors.grey1};
43695
43700
  }
@@ -43698,39 +43703,41 @@
43698
43703
  border-bottom: none;
43699
43704
  }
43700
43705
  `;
43701
- const DropdownList$2 = styled__default.default.div`
43706
+ const DatepickerListItem = React__namespace.memo(({ item, index: index2, getItemProps, isSelected, size: size2, isHighlighted }) => {
43707
+ const _a3 = getItemProps({ index: index2, item }), itemProps = __rest$a(_a3, ["itemClassName"]);
43708
+ return jsxRuntime.exports.jsx(StyledDatepickerListItem, Object.assign({}, itemProps, { isSelected, title: item.label, item, index: index2, size: size2, isHighlighted, children: item.label }));
43709
+ });
43710
+ const StyledDropdownList = React__namespace.memo(styled__default.default(DropdownList$1)`
43702
43711
  overflow-y: auto;
43703
43712
  display: ${(props) => props.isOpen ? "flex" : "none"};
43704
43713
  flex-direction: column;
43705
43714
  gap: 0.125rem;
43706
43715
 
43707
- max-height: calc(${(props) => (props.maxItems || 5) * 2}em + 2px);
43716
+ width: 16.25rem;
43717
+ max-height: calc(
43718
+ ${(props) => (props.maxItems || 5) * 2}em + 2px + (${(props) => (props.maxItems || 5) - 1}) * 0.125em
43719
+ );
43708
43720
  margin-left: ${(props) => props.displacement}rem;
43709
43721
 
43710
43722
  background-color: ${(props) => props.theme.colors.grey1};
43711
43723
  border: none;
43712
- outline: 0;
43713
- `;
43724
+ box-shadow: none;
43725
+ `);
43726
+ const DatepickerSelectButtonPrimary = React__namespace.memo(({ disabled: disabled2, getToggleButtonProps, setReference, getReferenceProps, size: size2, isOpen, selectedItem }) => jsxRuntime.exports.jsxs(SelectButtonPrimary, Object.assign({ disabled: disabled2 }, getToggleButtonProps({ disabled: disabled2, ref: setReference }), getReferenceProps(), { type: "button", children: [jsxRuntime.exports.jsx(SelectedItem$1, { size: size2, children: selectedItem ? selectedItem.label : "Select" }), jsxRuntime.exports.jsx(Chevron$2, { disabled: disabled2, isOpen })] })));
43714
43727
  function DatepickerSelect(props) {
43715
43728
  var _a3;
43716
- const [pendingHighlight, setPendingHighlight] = React.useState(null);
43717
- const { isOpen, selectedItem, getToggleButtonProps, getMenuProps, highlightedIndex, getItemProps, setHighlightedIndex } = useSelect(Object.assign({ initialSelectedItem: props.initialValue, itemToString: (item) => item.label, items: props.items, onSelectedItemChange: (changes) => {
43729
+ const [kbdHighlightIdx, setKbdHighlightIdx] = React__namespace.useState();
43730
+ const { isOpen, selectedItem, getToggleButtonProps, getMenuProps, getItemProps } = useSelect(Object.assign(Object.assign(Object.assign({ initialSelectedItem: props.initialValue, itemToString: (item) => item.label, items: props.items, onSelectedItemChange: (changes) => {
43718
43731
  const selected = changes.selectedItem;
43719
43732
  if (props.onSelect) {
43720
43733
  props.onSelect(selected);
43721
43734
  }
43722
- }, stateReducer: (state, { changes, type: type2 }) => {
43723
- if (type2 === stateChangeTypes$2.ToggleButtonClick) {
43724
- setPendingHighlight(changes.selectedItem ? props.items.findIndex((i2) => i2.value === changes.selectedItem.value) : 0);
43735
+ } }, syncKbdHighlightIdx(setKbdHighlightIdx)), { stateReducer: (state, { changes, type: type2 }) => {
43736
+ if (type2 === stateChangeTypes$2.ToggleButtonClick && (changes === null || changes === void 0 ? void 0 : changes.isOpen) && props.selectedItem) {
43737
+ return Object.assign(Object.assign({}, changes), { highlightedIndex: props.items.findIndex((i2) => i2.value === changes.selectedItem.value) });
43725
43738
  }
43726
43739
  return changes;
43727
- } }, props.selectedItem && { selectedItem: props.selectedItem }));
43728
- React.useEffect(() => {
43729
- if (isOpen && pendingHighlight !== null) {
43730
- setHighlightedIndex(pendingHighlight);
43731
- setPendingHighlight(null);
43732
- }
43733
- }, [isOpen, pendingHighlight, setHighlightedIndex]);
43740
+ } }), props.selectedItem && { selectedItem: props.selectedItem }));
43734
43741
  const { refs, floatingStyles, context: context2 } = useFloating({
43735
43742
  open: isOpen,
43736
43743
  placement: props.placement || "bottom-start",
@@ -43739,19 +43746,15 @@
43739
43746
  });
43740
43747
  const role = useRole(context2, { role: "listbox" });
43741
43748
  const { getReferenceProps, getFloatingProps } = useInteractions([role]);
43742
- const menuProps = getMenuProps();
43743
- const setMenuRef = menuProps.ref;
43744
43749
  const setFloatingRef = refs.setFloating;
43745
43750
  const { dropdownRef } = props;
43746
43751
  const mergedDropdownRef = React__namespace.useCallback((node2) => {
43747
43752
  setFloatingRef(node2);
43748
- setMenuRef(node2);
43749
43753
  dropdownRef === null || dropdownRef === void 0 ? void 0 : dropdownRef(node2);
43750
- }, [setFloatingRef, setMenuRef, dropdownRef]);
43751
- return jsxRuntime.exports.jsx(Tooltip$1, { content: props.errorMsg, disabled: !props.errorMsg, styling: "error", children: jsxRuntime.exports.jsxs(Wrapper$9, { className: props.className, isDisabled: props.disabled, isErrored: !!props.errorMsg, onClick: props.onClick, style: props.style, children: [jsxRuntime.exports.jsxs(SelectButtonPrimary, Object.assign({ disabled: props.disabled }, getToggleButtonProps({ disabled: props.disabled, ref: refs.setReference }), getReferenceProps(), { type: "button", children: [jsxRuntime.exports.jsx(SelectedItem$1, { size: props.size, children: selectedItem ? selectedItem.label : "Select" }), jsxRuntime.exports.jsx(Chevron$2, { disabled: props.disabled, isOpen })] })), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsx(DropdownList$2, Object.assign({}, menuProps, getFloatingProps(), { ref: mergedDropdownRef, className: `${(_a3 = menuProps === null || menuProps === void 0 ? void 0 : menuProps.className) !== null && _a3 !== void 0 ? _a3 : ""} ${props.itemClass}`, displacement: props.displacement, isOpen, maxItems: 7, style: Object.assign(Object.assign({}, floatingStyles), { width: "16.25rem", zIndex: 9999 }), children: props.items.map((item, index2) => {
43752
- const _a4 = getItemProps({ index: index2, item }), { itemClassName } = _a4, itemProps = __rest$a(_a4, ["itemClassName"]);
43753
- return React.createElement(DatepickerListItem, Object.assign({}, itemProps, { "aria-selected": selectedItem.label === item.label, className: `${itemClassName} ${props.itemClass}`, hovered: index2 === highlightedIndex, isSelected: selectedItem.label === item.label, key: `item-${index2}`, size: props.size, title: item.label }), item.label);
43754
- }) })), document.body)] }) });
43754
+ }, [setFloatingRef, dropdownRef]);
43755
+ const menuProps = React__namespace.useMemo(() => getMenuProps({ ref: mergedDropdownRef }), [mergedDropdownRef, getMenuProps]);
43756
+ const renderListItem = React__namespace.useCallback((item, index2) => jsxRuntime.exports.jsx(DatepickerListItem, { item, index: index2, getItemProps, isSelected: (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label) === item.label, isHighlighted: isOpen && kbdHighlightIdx !== void 0 && kbdHighlightIdx === index2 }, `item-${index2}-${isOpen && (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label) === item.label}`), [getItemProps, selectedItem, isOpen, kbdHighlightIdx]);
43757
+ return jsxRuntime.exports.jsx(Tooltip$1, { content: props.errorMsg, disabled: !props.errorMsg, styling: "error", children: jsxRuntime.exports.jsxs(Wrapper$9, { className: props.className, isDisabled: props.disabled, isErrored: !!props.errorMsg, onClick: props.onClick, style: props.style, children: [jsxRuntime.exports.jsx(DatepickerSelectButtonPrimary, { disabled: props.disabled, getToggleButtonProps, setReference: refs.setReference, getReferenceProps, size: props.size, isOpen, selectedItem }), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsx(StyledDropdownList, { items: props.items, getItemProps, getFloatingProps, style: floatingStyles, isOpen, getMenuProps, size: props.size, className: `${(_a3 = menuProps === null || menuProps === void 0 ? void 0 : menuProps.className) !== null && _a3 !== void 0 ? _a3 : ""} ${props.itemClass}`, itemClass: props.itemClass, displacement: props.displacement, maxItems: 7, ref: mergedDropdownRef, kbdHighlightIdx, children: renderListItem }), document.body)] }) });
43755
43758
  }
43756
43759
  function getMonths() {
43757
43760
  const months = [];
@@ -45607,42 +45610,16 @@
45607
45610
  overflow: hidden;
45608
45611
  text-overflow: ellipsis;
45609
45612
  white-space: nowrap;
45610
- `;
45611
- const NoItemsLabel = styled__default.default.span`
45612
- display: flex;
45613
- flex: 1 1 auto;
45614
- align-items: center;
45615
- justify-content: center;
45616
-
45617
- height: 2rem;
45618
-
45619
- font-size: 1rem;
45620
- color: ${(props) => props.theme.colors.grey4};
45621
-
45622
- background-color: ${(props) => props.theme.colors.blue1};
45623
- `;
45624
- const DropdownList$1 = styled__default.default(List)`
45625
- border-radius: 0 0 0.25rem 0.25rem;
45626
- outline: 0;
45627
- box-shadow: ${(props) => props.theme.shadow.light};
45628
- `;
45629
- const ChevronButton = styled__default.default(Button$3).attrs((attrs2) => Object.assign(Object.assign({}, attrs2), { styling: "ghost" }))`
45630
- min-width: 0;
45631
- height: auto;
45632
- margin: 0;
45633
- padding: 0 0.25rem;
45634
-
45635
- background-color: transparent !important;
45636
45613
  `;
45637
45614
  function MultiSelect(_a3) {
45638
- var _b;
45615
+ var _b, _c;
45639
45616
  var { maxWidth = "100%", maxRows = 3 } = _a3, props = __rest$9(_a3, ["maxWidth", "maxRows"]);
45640
45617
  const [inputValue, setInputValue] = React.useState("");
45641
45618
  const { getSelectedItemProps, getDropdownProps, addSelectedItem, removeSelectedItem, selectedItems } = useMultipleSelection(Object.assign({ initialSelectedItems: (_b = props.initialValue) !== null && _b !== void 0 ? _b : [], onSelectedItemsChange: (changes) => {
45642
45619
  if (props.onSelect) {
45643
45620
  props.onSelect(changes.selectedItems);
45644
45621
  }
45645
- } }, "selectedItems" in props && { selectedItems: props.selectedItems }));
45622
+ } }, "selectedItems" in props && { selectedItems: (_c = props.selectedItems) !== null && _c !== void 0 ? _c : [] }));
45646
45623
  const onTermChange = React.useCallback(
45647
45624
  (term) => {
45648
45625
  setInputValue(term);
@@ -45656,35 +45633,23 @@
45656
45633
  var _a4;
45657
45634
  return !selectedItems.includes(item) && ((_a4 = item.label) === null || _a4 === void 0 ? void 0 : _a4.toLowerCase().includes(inputValue.toLowerCase()));
45658
45635
  }), [props.onTermChange, props.items, selectedItems, inputValue]);
45659
- const { isOpen, getMenuProps, getInputProps, highlightedIndex, getItemProps, getToggleButtonProps } = useCombobox({
45660
- defaultHighlightedIndex: -1,
45661
- initialIsOpen: props.initialIsOpen,
45662
- inputValue,
45663
- itemToString: (item) => (item === null || item === void 0 ? void 0 : item.label) || "",
45664
- items: filteredItems,
45665
- onStateChange: ({ inputValue: internalInputVal, selectedItem, type: type2 }) => {
45666
- if (type2 === stateChangeTypes$1.InputChange) {
45667
- onTermChange(internalInputVal);
45668
- }
45669
- if ([
45670
- stateChangeTypes$1.InputKeyDownEnter,
45671
- stateChangeTypes$1.ItemClick,
45672
- stateChangeTypes$1.InputBlur
45673
- ].includes(type2)) {
45674
- if (selectedItem) {
45675
- onTermChange("");
45676
- addSelectedItem(selectedItem);
45677
- }
45678
- }
45679
- },
45680
- selectedItem: null,
45681
- stateReducer: (state, { changes, type: type2 }) => {
45682
- if (type2 === stateChangeTypes$1.ItemClick || type2 === stateChangeTypes$1.InputKeyDownEnter) {
45683
- return Object.assign(Object.assign({}, changes), { isOpen: true });
45636
+ const [kbdHighlightIdx, setKbdHighlightIdx] = React.useState();
45637
+ const { isOpen, getMenuProps, getInputProps, getItemProps, getToggleButtonProps } = useCombobox(Object.assign(Object.assign({ defaultHighlightedIndex: -1, initialIsOpen: props.initialIsOpen, inputValue, itemToString: (item) => (item === null || item === void 0 ? void 0 : item.label) || "", items: filteredItems, onStateChange: ({ inputValue: internalInputVal, selectedItem, type: type2 }) => {
45638
+ if (type2 === stateChangeTypes$1.InputChange) {
45639
+ onTermChange(internalInputVal);
45640
+ }
45641
+ if ([stateChangeTypes$1.InputKeyDownEnter, stateChangeTypes$1.ItemClick, stateChangeTypes$1.InputBlur].includes(type2)) {
45642
+ if (selectedItem) {
45643
+ onTermChange("");
45644
+ addSelectedItem(selectedItem);
45684
45645
  }
45685
- return changes;
45686
45646
  }
45687
- });
45647
+ } }, syncKbdHighlightIdx(setKbdHighlightIdx)), { selectedItem: null, stateReducer: (state, { changes, type: type2 }) => {
45648
+ if (type2 === stateChangeTypes$1.ItemClick || type2 === stateChangeTypes$1.InputKeyDownEnter) {
45649
+ return Object.assign(Object.assign({}, changes), { isOpen: true });
45650
+ }
45651
+ return changes;
45652
+ } }));
45688
45653
  const { refs, floatingStyles, context: context2 } = useFloating({
45689
45654
  open: isOpen,
45690
45655
  middleware: [flip$2(), shift$1(), matchWidthToReference()],
@@ -45692,25 +45657,11 @@
45692
45657
  });
45693
45658
  const role = useRole(context2, { role: "listbox" });
45694
45659
  const { getReferenceProps, getFloatingProps } = useInteractions([role]);
45695
- const menuProps = React.useMemo(() => getMenuProps({ ref: refs.setFloating }), [getMenuProps, refs.setFloating]);
45696
- const toggleProps = React.useMemo(() => getToggleButtonProps(), [getToggleButtonProps]);
45697
45660
  return jsxRuntime.exports.jsxs(Wrapper$7, { className: props.className, isDisabled: props.disabled, isOpen, maxRows, maxWidth, style: props.style, children: [jsxRuntime.exports.jsx(Tooltip$1, { content: props.errorMsg, disabled: !props.errorMsg, styling: "error", children: jsxRuntime.exports.jsxs(InputWrapper$3, { isDisabled: props.disabled, isOpen, ref: refs.setReference, children: [jsxRuntime.exports.jsxs(TagWrapper, { maxRows, children: [selectedItems.map((selectedItem, index2) => jsxRuntime.exports.jsxs(Tag$1, Object.assign({ disabled: props.disabled }, getSelectedItemProps({ index: index2, selectedItem }), { children: [jsxRuntime.exports.jsx(TagText, { children: selectedItem.label }), jsxRuntime.exports.jsx(Cross$1, { asButton: true, onClick: (e3) => {
45698
45661
  e3.stopPropagation();
45699
45662
  return removeSelectedItem(selectedItem);
45700
- } })] }), selectedItem.value)), jsxRuntime.exports.jsx(Input$1, Object.assign({}, getInputProps(getDropdownProps({ preventKeyAction: isOpen })), getReferenceProps(), { disabled: props.disabled, placeholder: props.placeholder, size: props.size, style: { flex: "1 1 5ch" } }))] }), jsxRuntime.exports.jsx(ChevronButton, Object.assign({}, toggleProps, { children: jsxRuntime.exports.jsx(Chevron$2, { disabled: props.disabled, isOpen }) }))] }) }), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsxs(DropdownList$1, Object.assign({}, menuProps, getFloatingProps(), { isOpen, style: Object.assign(Object.assign({}, floatingStyles), { zIndex: 9999 }), children: [filteredItems.length > 0 && filteredItems.map((item, index2) => React.createElement(ListItem, Object.assign({}, getItemProps({ index: index2, item }), { hovered: index2 === highlightedIndex, key: `item-${index2}`, size: props.size, title: item.label }), item.label)), filteredItems.length === 0 && jsxRuntime.exports.jsx(NoItemsLabel, { children: "No Items" })] })), document.body)] });
45663
+ } })] }), selectedItem.value)), jsxRuntime.exports.jsx(Input$1, Object.assign({}, getInputProps(getDropdownProps({ preventKeyAction: isOpen })), getReferenceProps(), { disabled: props.disabled, placeholder: props.placeholder, size: props.size, style: { flex: "1 1 5ch" } }))] }), jsxRuntime.exports.jsx(ChevronButton$1, { disabled: props.disabled, isOpen, getToggleButtonProps })] }) }), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsx(DropdownList$1, { items: filteredItems, getItemProps, getFloatingProps, style: floatingStyles, isOpen, getMenuProps, size: props.size, ref: refs.setFloating, kbdHighlightIdx }), document.body)] });
45701
45664
  }
45702
- var __rest$8 = globalThis && globalThis.__rest || function(s2, e3) {
45703
- var t2 = {};
45704
- for (var p2 in s2)
45705
- if (Object.prototype.hasOwnProperty.call(s2, p2) && e3.indexOf(p2) < 0)
45706
- t2[p2] = s2[p2];
45707
- if (s2 != null && typeof Object.getOwnPropertySymbols === "function")
45708
- for (var i2 = 0, p2 = Object.getOwnPropertySymbols(s2); i2 < p2.length; i2++) {
45709
- if (e3.indexOf(p2[i2]) < 0 && Object.prototype.propertyIsEnumerable.call(s2, p2[i2]))
45710
- t2[p2[i2]] = s2[p2[i2]];
45711
- }
45712
- return t2;
45713
- };
45714
45665
  const SelectedItem = styled__default.default.div`
45715
45666
  overflow: hidden;
45716
45667
 
@@ -45791,21 +45742,16 @@
45791
45742
  color: ${(props) => props.theme.colors.grey2};
45792
45743
  }
45793
45744
  }
45794
- `;
45795
- const DropdownList = styled__default.default(List)`
45796
- margin-left: -1px;
45797
- border-radius: 0 0 0.25rem 0.25rem;
45798
- outline: 0;
45799
- box-shadow: ${(props) => props.theme.shadow.light};
45800
45745
  `;
45801
45746
  function Select$1(props) {
45802
45747
  var _a3, _b, _c;
45803
45748
  const { applySameWidthModifier = true } = props;
45804
- const { isOpen, selectedItem, getToggleButtonProps, getMenuProps, highlightedIndex, getItemProps } = useSelect(Object.assign({ initialIsOpen: props.initialIsOpen, initialSelectedItem: props.initialValue, itemToString: (item) => item.label, items: props.items, onSelectedItemChange: (changes) => {
45749
+ const [kbdHighlightIdx, setKbdHighlightIdx] = React__namespace.useState();
45750
+ const { isOpen, selectedItem, getToggleButtonProps, getMenuProps, getItemProps } = useSelect(Object.assign(Object.assign({ initialIsOpen: props.initialIsOpen, initialSelectedItem: props.initialValue, itemToString: (item) => item.label, items: props.items, onSelectedItemChange: (changes) => {
45805
45751
  var _a4;
45806
45752
  const selected = changes.selectedItem;
45807
45753
  (_a4 = props.onSelect) === null || _a4 === void 0 ? void 0 : _a4.call(props, selected);
45808
- } }, "selectedItem" in props && { selectedItem: props.selectedItem }));
45754
+ } }, syncKbdHighlightIdx(setKbdHighlightIdx)), "selectedItem" in props && { selectedItem: props.selectedItem }));
45809
45755
  const { refs, floatingStyles, context: context2 } = useFloating({
45810
45756
  open: isOpen,
45811
45757
  placement: props.placement || "bottom-start",
@@ -45822,10 +45768,8 @@
45822
45768
  }, [setFloatingRef, dropdownRef]);
45823
45769
  const menuProps = React__namespace.useMemo(() => getMenuProps({ ref: mergedDropdownRef }), [mergedDropdownRef, getMenuProps]);
45824
45770
  const toggleButtonProps = React__namespace.useMemo(() => getToggleButtonProps({ disabled: props.disabled, ref: refs.setReference }), [props.disabled, refs.setReference, getToggleButtonProps]);
45825
- return jsxRuntime.exports.jsx(Tooltip$1, { content: props.errorMsg, disabled: !props.errorMsg, styling: "error", children: jsxRuntime.exports.jsxs(Wrapper$6, { className: props.className, isDisabled: props.disabled, isErrored: !!props.errorMsg, isOpen, onClick: props.onClick, style: props.style, children: [jsxRuntime.exports.jsxs(SelectButton, Object.assign({ disabled: props.disabled, isOpen }, toggleButtonProps, getReferenceProps(), { type: "button", children: [jsxRuntime.exports.jsx(SelectedItem, { size: props.size, children: (_b = (_a3 = selectedItem === null ? props.placeholder : selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label) !== null && _a3 !== void 0 ? _a3 : props.placeholder) !== null && _b !== void 0 ? _b : "Select" }), jsxRuntime.exports.jsx(Chevron$2, { disabled: props.disabled, isOpen })] })), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsx(DropdownList, Object.assign({}, menuProps, getFloatingProps(), { className: `${(_c = menuProps === null || menuProps === void 0 ? void 0 : menuProps.className) !== null && _c !== void 0 ? _c : ""} ${props.itemClass}`, isOpen, maxItems: props.maxItems, style: Object.assign(Object.assign({}, floatingStyles), { zIndex: 9999 }), children: props.items.map((item, index2) => {
45826
- const _a4 = getItemProps({ index: index2, item }), { itemClassName } = _a4, itemProps = __rest$8(_a4, ["itemClassName"]);
45827
- return React.createElement(ListItem, Object.assign({}, itemProps, { className: `${itemClassName} ${props.itemClass}`, hovered: index2 === highlightedIndex, key: `item-${index2}`, size: props.size, title: item.label }), item.label);
45828
- }) })), document.body)] }) });
45771
+ const dropdownStyle = React__namespace.useMemo(() => Object.assign(Object.assign({}, floatingStyles), { marginLeft: -1 }), [floatingStyles]);
45772
+ return jsxRuntime.exports.jsx(Tooltip$1, { content: props.errorMsg, disabled: !props.errorMsg, styling: "error", children: jsxRuntime.exports.jsxs(Wrapper$6, { className: props.className, isDisabled: props.disabled, isErrored: !!props.errorMsg, isOpen, onClick: props.onClick, style: props.style, children: [jsxRuntime.exports.jsxs(SelectButton, Object.assign({ disabled: props.disabled, isOpen }, toggleButtonProps, getReferenceProps(), { type: "button", children: [jsxRuntime.exports.jsx(SelectedItem, { size: props.size, children: (_b = (_a3 = selectedItem === null ? props.placeholder : selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label) !== null && _a3 !== void 0 ? _a3 : props.placeholder) !== null && _b !== void 0 ? _b : "Select" }), jsxRuntime.exports.jsx(Chevron$2, { disabled: props.disabled, isOpen })] })), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsx(DropdownList$1, { items: props.items, getItemProps, getFloatingProps, style: dropdownStyle, isOpen, getMenuProps, size: props.size, ref: refs.setFloating, className: `${(_c = menuProps === null || menuProps === void 0 ? void 0 : menuProps.className) !== null && _c !== void 0 ? _c : ""} ${props.itemClass}`, itemClass: props.itemClass, maxItems: props.maxItems, selectedItem, kbdHighlightIdx }), document.body)] }) });
45829
45773
  }
45830
45774
  const StyledSelect$2 = styled__default.default(Select$1)`
45831
45775
  margin: 1px solid ${(props) => props.theme.colors.background};
@@ -46425,22 +46369,29 @@
46425
46369
  return jsxRuntime.exports.jsxs(RadioWrapper, { "aria-disabled": props.disabled, isListStyle: props.isListStyle, children: [jsxRuntime.exports.jsx(RadioButton, { checked: isEqual_1((_a3 = props.value) === null || _a3 === void 0 ? void 0 : _a3.value, item.value) || currentSelected === index2, disabled: props.disabled, name: uuid2.current, onChange: (e3) => onChangeValue(e3), type: "radio", value: index2 }), jsxRuntime.exports.jsx(StyledCheckmark, { disabled: props.disabled }), item.label ? item.label : item.value] }, `item-${index2}`);
46426
46370
  }) });
46427
46371
  }
46372
+ var __rest$8 = globalThis && globalThis.__rest || function(s2, e3) {
46373
+ var t2 = {};
46374
+ for (var p2 in s2)
46375
+ if (Object.prototype.hasOwnProperty.call(s2, p2) && e3.indexOf(p2) < 0)
46376
+ t2[p2] = s2[p2];
46377
+ if (s2 != null && typeof Object.getOwnPropertySymbols === "function")
46378
+ for (var i2 = 0, p2 = Object.getOwnPropertySymbols(s2); i2 < p2.length; i2++) {
46379
+ if (e3.indexOf(p2[i2]) < 0 && Object.prototype.propertyIsEnumerable.call(s2, p2[i2]))
46380
+ t2[p2[i2]] = s2[p2[i2]];
46381
+ }
46382
+ return t2;
46383
+ };
46428
46384
  const { stateChangeTypes } = useCombobox;
46429
- const ListWrapper = styled__default.default(List)`
46430
- margin-left: -1px;
46431
- border-radius: 0 0 0.25rem 0.25rem;
46432
- box-shadow: ${(props) => props.theme.shadow.light};
46433
- `;
46434
- const getTextColor = (heading2, selected, theme2) => {
46385
+ const getTextColor = (heading2, isSelected, theme2) => {
46435
46386
  if (heading2) {
46436
46387
  return theme2.colors.text;
46437
46388
  }
46438
- if (selected) {
46389
+ if (isSelected) {
46439
46390
  return theme2.colors.primary;
46440
46391
  }
46441
46392
  return theme2.colors.text;
46442
46393
  };
46443
- const ListItemSpan = styled__default.default(ListItem)`
46394
+ const ListItemSpan = styled__default.default(StyledListItem)`
46444
46395
  cursor: ${(props) => (props === null || props === void 0 ? void 0 : props.heading) ? "text" : "pointer"};
46445
46396
  user-select: ${(props) => (props === null || props === void 0 ? void 0 : props.heading) ? "text" : "none"};
46446
46397
 
@@ -46452,7 +46403,7 @@
46452
46403
  padding-right: 0.7rem;
46453
46404
 
46454
46405
  font-weight: ${(props) => (props === null || props === void 0 ? void 0 : props.heading) ? "bold" : "normal"};
46455
- color: ${(props) => getTextColor(props === null || props === void 0 ? void 0 : props.heading, props.selected, props.theme)};
46406
+ color: ${(props) => getTextColor(props === null || props === void 0 ? void 0 : props.heading, props.isSelected, props.theme)};
46456
46407
 
46457
46408
  ${(props) => {
46458
46409
  if (props.heading) {
@@ -46478,14 +46429,22 @@
46478
46429
  return [...acc, item];
46479
46430
  }, []);
46480
46431
  }
46432
+ const SectionedListItem = ({ item, index: index2, getItemProps, isSelected, isHighlighted }) => {
46433
+ const theme2 = useClTheme();
46434
+ const _a3 = getItemProps({ index: index2, item }), itemProps = __rest$8(_a3, ["itemClassName"]);
46435
+ if (item.heading) {
46436
+ delete itemProps.onClick;
46437
+ }
46438
+ return jsxRuntime.exports.jsxs(ListItemSpan, Object.assign({}, itemProps, { heading: item.heading, section: item.section, isSelected, title: item.label, item, index: index2, isHighlighted, children: [item.label || item.section, item.badge && jsxRuntime.exports.jsx(Badge, { color: item.badge.color || theme2.colors.primary, children: item.badge.label })] }));
46439
+ };
46481
46440
  function SectionedList(props) {
46482
46441
  var _a3, _b, _c;
46483
- const theme2 = useClTheme();
46484
46442
  const unpackedItems = React.useMemo(() => unpackSectionedList(props.items), [props.items]);
46485
46443
  const [pendingHighlight, setPendingHighlight] = React.useState(null);
46486
46444
  const [items, setItems] = React.useState(unpackedItems);
46487
46445
  const [inputValue, setInputValue] = React.useState((_b = (_a3 = props.selectedItem) === null || _a3 === void 0 ? void 0 : _a3.label) !== null && _b !== void 0 ? _b : "");
46488
- const { selectedItem, isOpen, getMenuProps, getInputProps, getToggleButtonProps, highlightedIndex, getItemProps, setHighlightedIndex } = useCombobox(Object.assign({ initialIsOpen: false, initialSelectedItem: (_c = props.initialValue) !== null && _c !== void 0 ? _c : props.selectedItem, itemToString: (item) => item ? item.label : "", items, onInputValueChange: (change) => {
46446
+ const [kbdHighlightIdx, setKbdHighlightIdx] = React__default.default.useState();
46447
+ const { selectedItem, isOpen, getMenuProps, getInputProps, getToggleButtonProps, getItemProps, setHighlightedIndex } = useCombobox(Object.assign(Object.assign(Object.assign({ initialIsOpen: false, initialSelectedItem: (_c = props.initialValue) !== null && _c !== void 0 ? _c : props.selectedItem, itemToString: (item) => item ? item.label : "", items, onInputValueChange: (change) => {
46489
46448
  setInputValue(change.inputValue);
46490
46449
  if (!change.inputValue) {
46491
46450
  setItems(unpackedItems);
@@ -46518,7 +46477,7 @@
46518
46477
  props.onSelect(changes.selectedItem);
46519
46478
  }
46520
46479
  }
46521
- }, stateReducer: (state, { changes, type: type2 }) => {
46480
+ } }, syncKbdHighlightIdx(setKbdHighlightIdx)), { stateReducer: (state, { changes, type: type2 }) => {
46522
46481
  var _a4, _b2, _c2;
46523
46482
  if (type2 === stateChangeTypes.ControlledPropUpdatedSelectedItem) {
46524
46483
  return Object.assign(Object.assign({}, changes), { inputValue: "" });
@@ -46543,7 +46502,7 @@
46543
46502
  return Object.assign(Object.assign({}, changes), { highlightedIndex: changes.highlightedIndex + 1 === items.length ? 0 : changes.highlightedIndex + 1 });
46544
46503
  }
46545
46504
  return changes;
46546
- } }, "selectedItem" in props && { selectedItem: props.selectedItem }));
46505
+ } }), "selectedItem" in props && { selectedItem: props.selectedItem }));
46547
46506
  React.useEffect(() => {
46548
46507
  if (isOpen && pendingHighlight !== null) {
46549
46508
  setHighlightedIndex(pendingHighlight);
@@ -46563,25 +46522,9 @@
46563
46522
  });
46564
46523
  const role = useRole(context2, { role: "listbox" });
46565
46524
  const { getReferenceProps, getFloatingProps } = useInteractions([role]);
46566
- const menuProps = getMenuProps();
46567
- const setMenuRef = menuProps.ref;
46568
- const setFloatingRef = refs.setFloating;
46569
- const mergedRefs = React.useCallback((node2) => {
46570
- setFloatingRef(node2);
46571
- setMenuRef(node2);
46572
- }, [setFloatingRef, setMenuRef]);
46573
- return jsxRuntime.exports.jsxs(Wrapper$a, { className: props.className, isDisabled: props.disabled, isErrored: false, isOpen, style: props.style, children: [jsxRuntime.exports.jsxs(InputWrapper$4, { disabled: props.disabled, isOpen, ref: refs.setReference, children: [jsxRuntime.exports.jsx(Input$2, Object.assign({}, getInputProps({ value: inputValue }), getReferenceProps())), jsxRuntime.exports.jsx(ChevronButton$1, Object.assign({}, getToggleButtonProps(), { children: jsxRuntime.exports.jsx(Chevron$2, { disabled: props.disabled, isOpen }) }))] }), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsxs(ListWrapper, Object.assign({}, menuProps, getFloatingProps(), { ref: mergedRefs, isOpen, style: Object.assign(Object.assign({}, floatingStyles), { zIndex: 9999 }), children: [items.length > 0 && items.map((item, index2) => {
46574
- const itemProps = getItemProps({ index: index2, item });
46575
- if (item.heading) {
46576
- delete itemProps.onClick;
46577
- }
46578
- return React.createElement(
46579
- ListItemSpan,
46580
- Object.assign({}, itemProps, { heading: item.heading, hovered: index2 === highlightedIndex, key: `item-${index2}`, section: item.section, selected: item.value === (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.value), title: item.label }),
46581
- item.label || item.section,
46582
- item.badge && jsxRuntime.exports.jsx(Badge, { color: item.badge.color || theme2.colors.primary, children: item.badge.label })
46583
- );
46584
- }), items.length === 0 && jsxRuntime.exports.jsx(NoItemsLabel$1, { children: "No Items" })] })), document.body)] });
46525
+ const dropdownStyle = React__default.default.useMemo(() => Object.assign(Object.assign({}, floatingStyles), { marginLeft: -1 }), [floatingStyles]);
46526
+ const renderListItem = React.useCallback((item, index2) => jsxRuntime.exports.jsx(SectionedListItem, { item, index: index2, getItemProps, isSelected: (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.value) === item.value, isHighlighted: isOpen && kbdHighlightIdx !== void 0 && kbdHighlightIdx === index2 }, `item-${index2}-${isOpen && (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label) === item.label}`), [getItemProps, selectedItem, isOpen, kbdHighlightIdx]);
46527
+ return jsxRuntime.exports.jsxs(Wrapper$a, { className: props.className, isDisabled: props.disabled, isErrored: false, isOpen, style: props.style, children: [jsxRuntime.exports.jsxs(InputWrapper$4, { disabled: props.disabled, isOpen, ref: refs.setReference, children: [jsxRuntime.exports.jsx(Input$2, Object.assign({}, getInputProps({ value: inputValue }), getReferenceProps())), jsxRuntime.exports.jsx(ChevronButton$1, { disabled: props.disabled, isOpen, getToggleButtonProps })] }), ReactDOM__default.default.createPortal(jsxRuntime.exports.jsx(DropdownList$1, { items, getItemProps, getFloatingProps, style: dropdownStyle, isOpen, getMenuProps, ref: refs.setFloating, kbdHighlightIdx, children: renderListItem }), document.body)] });
46585
46528
  }
46586
46529
  var toNumber$2 = toNumber_1$1;
46587
46530
  var INFINITY$3 = 1 / 0, MAX_INTEGER = 17976931348623157e292;
@@ -50793,31 +50736,6 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
50793
50736
  var nextStyle = nextProps.style, nextRest = _objectWithoutPropertiesLoose$1(nextProps, _excluded2);
50794
50737
  return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);
50795
50738
  }
50796
- const GlobalStyle = styled.createGlobalStyle`
50797
- body {
50798
- /* stylelint-disable-next-line -- external classname */
50799
- .DatetimeFilterSelect {
50800
- background-color: ${(props) => props.theme.colors.grey1};
50801
-
50802
- span {
50803
- background-color: ${(props) => props.theme.colors.grey1};
50804
- border-bottom: 1px solid ${(props) => props.theme.colors.grey1};
50805
-
50806
- &[aria-selected="true"] {
50807
- background-color: ${(props) => props.theme.colors.primary};
50808
- }
50809
-
50810
- :hover {
50811
- background-color: ${(props) => props.theme.colors.grey3};
50812
- }
50813
-
50814
- :active {
50815
- background-color: ${(props) => props.theme.colors.grey4};
50816
- }
50817
- }
50818
- }
50819
- }
50820
- `;
50821
50739
  const DatetimeFilterWrapper = styled__default.default(FilterWrapper)`
50822
50740
  gap: 0;
50823
50741
  `;
@@ -50943,7 +50861,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
50943
50861
  }
50944
50862
  return false;
50945
50863
  }, [props.disabled, previousFilter, filteredValues, dateValues, selected]);
50946
- return jsxRuntime.exports.jsxs(DatetimeFilterWrapper, { className: props.className, children: [jsxRuntime.exports.jsx(GlobalStyle, {}), jsxRuntime.exports.jsxs(FilterHeader, { children: [jsxRuntime.exports.jsx(StyledSelect$1, { dropdownRef: (element2) => {
50864
+ return jsxRuntime.exports.jsxs(DatetimeFilterWrapper, { className: props.className, children: [jsxRuntime.exports.jsxs(FilterHeader, { children: [jsxRuntime.exports.jsx(StyledSelect$1, { dropdownRef: (element2) => {
50947
50865
  if (props.portalsRef) {
50948
50866
  props.portalsRef.current[2] = element2;
50949
50867
  }
@@ -295805,7 +295723,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
295805
295723
  android: /* @__PURE__ */ /Android\b/.test(nav.userAgent),
295806
295724
  webkit,
295807
295725
  safari,
295808
- webkit_version: webkit ? +(/* @__PURE__ */ /\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0,
295726
+ webkit_version: webkit ? +(/* @__PURE__ */ /\bAppleWebKit\/(\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,
295809
295727
  tabSize: doc.documentElement.style.tabSize != null ? "tab-size" : "-moz-tab-size"
295810
295728
  };
295811
295729
  const MaxJoinLen = 256;
@@ -297173,6 +297091,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
297173
297091
  }
297174
297092
  }
297175
297093
  const scrollIntoView = /* @__PURE__ */ StateEffect.define({ map: (t2, ch) => t2.map(ch) });
297094
+ const setEditContextFormatting = /* @__PURE__ */ StateEffect.define();
297176
297095
  function logException(state, exception, context2) {
297177
297096
  let handler = state.facet(exceptionSink);
297178
297097
  if (handler.length)
@@ -297412,10 +297331,11 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
297412
297331
  super();
297413
297332
  this.view = view;
297414
297333
  this.decorations = [];
297415
- this.dynamicDecorationMap = [];
297334
+ this.dynamicDecorationMap = [false];
297416
297335
  this.domChanged = null;
297417
297336
  this.hasComposition = null;
297418
297337
  this.markedForComposition = /* @__PURE__ */ new Set();
297338
+ this.editContextFormatting = Decoration.none;
297419
297339
  this.lastCompositionAfterCursor = false;
297420
297340
  this.minWidth = 0;
297421
297341
  this.minWidthFrom = 0;
@@ -297441,8 +297361,9 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
297441
297361
  this.minWidthTo = update2.changes.mapPos(this.minWidthTo, 1);
297442
297362
  }
297443
297363
  }
297364
+ this.updateEditContextFormatting(update2);
297444
297365
  let readCompositionAt = -1;
297445
- if (this.view.inputState.composing >= 0) {
297366
+ if (this.view.inputState.composing >= 0 && !this.view.observer.editContext) {
297446
297367
  if ((_a3 = this.domChanged) === null || _a3 === void 0 ? void 0 : _a3.newSel)
297447
297368
  readCompositionAt = this.domChanged.newSel.head;
297448
297369
  else if (!touchesComposition(update2.changes, this.hasComposition) && !update2.selectionSet)
@@ -297528,6 +297449,14 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
297528
297449
  if (composition)
297529
297450
  this.fixCompositionDOM(composition);
297530
297451
  }
297452
+ updateEditContextFormatting(update2) {
297453
+ this.editContextFormatting = this.editContextFormatting.map(update2.changes);
297454
+ for (let tr2 of update2.transactions)
297455
+ for (let effect2 of tr2.effects)
297456
+ if (effect2.is(setEditContextFormatting)) {
297457
+ this.editContextFormatting = effect2.value;
297458
+ }
297459
+ }
297531
297460
  compositionView(composition) {
297532
297461
  let cur = new TextView(composition.text.nodeValue);
297533
297462
  cur.flags |= 8;
@@ -297700,6 +297629,11 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
297700
297629
  if (start2 <= pos && (start2 < pos || child.covers(-1)) && (end2 > pos || child.covers(1)) && (!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {
297701
297630
  best = child;
297702
297631
  bestPos = start2;
297632
+ } else if (best && start2 == pos && end2 == pos && child instanceof BlockWidgetView && Math.abs(side) < 2) {
297633
+ if (child.deco.startSide < 0)
297634
+ break;
297635
+ else if (i2)
297636
+ best = null;
297703
297637
  }
297704
297638
  off = start2;
297705
297639
  }
@@ -297817,7 +297751,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
297817
297751
  return Decoration.set(deco);
297818
297752
  }
297819
297753
  updateDeco() {
297820
- let i2 = 0;
297754
+ let i2 = 1;
297821
297755
  let allDeco = this.view.state.facet(decorations).map((d2) => {
297822
297756
  let dynamic = this.dynamicDecorationMap[i2++] = typeof d2 == "function";
297823
297757
  return dynamic ? d2(this.view) : d2;
@@ -297833,6 +297767,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
297833
297767
  allDeco.push(RangeSet.join(outerDeco));
297834
297768
  }
297835
297769
  this.decorations = [
297770
+ this.editContextFormatting,
297836
297771
  ...allDeco,
297837
297772
  this.computeBlockGapDeco(),
297838
297773
  this.view.viewState.lineGapDeco
@@ -298346,9 +298281,9 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
298346
298281
  this.lastScrollTop = 0;
298347
298282
  this.lastScrollLeft = 0;
298348
298283
  this.pendingIOSKey = void 0;
298284
+ this.tabFocusMode = -1;
298349
298285
  this.lastSelectionOrigin = null;
298350
298286
  this.lastSelectionTime = 0;
298351
- this.lastEscPress = 0;
298352
298287
  this.lastContextMenu = 0;
298353
298288
  this.scrollHandlers = [];
298354
298289
  this.handlers = /* @__PURE__ */ Object.create(null);
@@ -298409,10 +298344,10 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
298409
298344
  keydown(event2) {
298410
298345
  this.lastKeyCode = event2.keyCode;
298411
298346
  this.lastKeyTime = Date.now();
298412
- if (event2.keyCode == 9 && Date.now() < this.lastEscPress + 2e3)
298347
+ if (event2.keyCode == 9 && this.tabFocusMode > -1 && (!this.tabFocusMode || Date.now() <= this.tabFocusMode))
298413
298348
  return true;
298414
- if (event2.keyCode != 27 && modifierCodes.indexOf(event2.keyCode) < 0)
298415
- this.view.inputState.lastEscPress = 0;
298349
+ if (this.tabFocusMode > 0 && event2.keyCode != 27 && modifierCodes.indexOf(event2.keyCode) < 0)
298350
+ this.tabFocusMode = -1;
298416
298351
  if (browser.android && browser.chrome && !event2.synthetic && (event2.keyCode == 13 || event2.keyCode == 8)) {
298417
298352
  this.view.observer.delayAndroidKey(event2.key, event2.keyCode);
298418
298353
  return true;
@@ -298453,6 +298388,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
298453
298388
  this.mouseSelection = mouseSelection;
298454
298389
  }
298455
298390
  update(update2) {
298391
+ this.view.observer.update(update2);
298456
298392
  if (this.mouseSelection)
298457
298393
  this.mouseSelection.update(update2);
298458
298394
  if (this.draggedContent && update2.docChanged)
@@ -298623,7 +298559,9 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
298623
298559
  this.mustSelect = false;
298624
298560
  }
298625
298561
  update(update2) {
298626
- if (this.style.update(update2))
298562
+ if (update2.transactions.some((tr2) => tr2.isUserEvent("input.type")))
298563
+ this.destroy();
298564
+ else if (this.style.update(update2))
298627
298565
  setTimeout(() => this.select(this.lastEvent), 20);
298628
298566
  }
298629
298567
  }
@@ -298715,8 +298653,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
298715
298653
  };
298716
298654
  handlers.keydown = (view, event2) => {
298717
298655
  view.inputState.setSelectionOrigin("select");
298718
- if (event2.keyCode == 27)
298719
- view.inputState.lastEscPress = Date.now();
298656
+ if (event2.keyCode == 27 && view.inputState.tabFocusMode != 0)
298657
+ view.inputState.tabFocusMode = Date.now() + 2e3;
298720
298658
  return false;
298721
298659
  };
298722
298660
  observers.touchstart = (view, e3) => {
@@ -298742,7 +298680,12 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
298742
298680
  let mustFocus = !view.hasFocus;
298743
298681
  view.inputState.startMouseSelection(new MouseSelection(view, event2, style2, mustFocus));
298744
298682
  if (mustFocus)
298745
- view.observer.ignore(() => focusPreventScroll(view.contentDOM));
298683
+ view.observer.ignore(() => {
298684
+ focusPreventScroll(view.contentDOM);
298685
+ let active = view.root.activeElement;
298686
+ if (active && !active.contains(view.contentDOM))
298687
+ active.blur();
298688
+ });
298746
298689
  let mouseSel = view.inputState.mouseSelection;
298747
298690
  if (mouseSel) {
298748
298691
  mouseSel.start(event2);
@@ -299012,6 +298955,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
299012
298955
  updateForFocusChange(view);
299013
298956
  };
299014
298957
  observers.compositionstart = observers.compositionupdate = (view) => {
298958
+ if (view.observer.editContext)
298959
+ return;
299015
298960
  if (view.inputState.compositionFirstChange == null)
299016
298961
  view.inputState.compositionFirstChange = true;
299017
298962
  if (view.inputState.composing < 0) {
@@ -299019,6 +298964,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
299019
298964
  }
299020
298965
  };
299021
298966
  observers.compositionend = (view) => {
298967
+ if (view.observer.editContext)
298968
+ return;
299022
298969
  view.inputState.composing = -1;
299023
298970
  view.inputState.compositionEndedAt = Date.now();
299024
298971
  view.inputState.compositionPendingKey = true;
@@ -299831,9 +299778,12 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
299831
299778
  this.heightOracle = new HeightOracle(guessWrapping);
299832
299779
  this.stateDeco = state.facet(decorations).filter((d2) => typeof d2 != "function");
299833
299780
  this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text$1.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);
299834
- this.viewport = this.getViewport(0, null);
299781
+ for (let i2 = 0; i2 < 2; i2++) {
299782
+ this.viewport = this.getViewport(0, null);
299783
+ if (!this.updateForViewport())
299784
+ break;
299785
+ }
299835
299786
  this.updateViewportLines();
299836
- this.updateForViewport();
299837
299787
  this.lineGaps = this.ensureLineGaps([]);
299838
299788
  this.lineGapDeco = Decoration.set(this.lineGaps.map((gap) => gap.draw(this, false)));
299839
299789
  this.computeVisibleRanges();
@@ -299848,12 +299798,17 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
299848
299798
  }
299849
299799
  }
299850
299800
  this.viewports = viewports.sort((a2, b2) => a2.from - b2.from);
299801
+ return this.updateScaler();
299802
+ }
299803
+ updateScaler() {
299804
+ let scaler = this.scaler;
299851
299805
  this.scaler = this.heightMap.height <= 7e6 ? IdScaler : new BigScaler(this.heightOracle, this.heightMap, this.viewports);
299806
+ return scaler.eq(this.scaler) ? 0 : 2;
299852
299807
  }
299853
299808
  updateViewportLines() {
299854
299809
  this.viewportLines = [];
299855
299810
  this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, (block) => {
299856
- this.viewportLines.push(this.scaler.scale == 1 ? block : scaleBlock(block, this.scaler));
299811
+ this.viewportLines.push(scaleBlock(block, this.scaler));
299857
299812
  });
299858
299813
  }
299859
299814
  update(update2, scrollTarget = null) {
@@ -299877,10 +299832,10 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
299877
299832
  let viewport2 = heightChanges.length ? this.mapViewport(this.viewport, update2.changes) : this.viewport;
299878
299833
  if (scrollTarget && (scrollTarget.range.head < viewport2.from || scrollTarget.range.head > viewport2.to) || !this.viewportIsAppropriate(viewport2))
299879
299834
  viewport2 = this.getViewport(0, scrollTarget);
299880
- let updateLines = !update2.changes.empty || update2.flags & 2 || viewport2.from != this.viewport.from || viewport2.to != this.viewport.to;
299835
+ let viewportChange = viewport2.from != this.viewport.from || viewport2.to != this.viewport.to;
299881
299836
  this.viewport = viewport2;
299882
- this.updateForViewport();
299883
- if (updateLines)
299837
+ update2.flags |= this.updateForViewport();
299838
+ if (viewportChange || !update2.changes.empty || update2.flags & 2)
299884
299839
  this.updateViewportLines();
299885
299840
  if (this.lineGaps.length || this.viewport.to - this.viewport.from > 2e3 << 1)
299886
299841
  this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update2.changes)));
@@ -299971,9 +299926,12 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
299971
299926
  result |= 2;
299972
299927
  }
299973
299928
  let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) || this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from || this.scrollTarget.range.head > this.viewport.to);
299974
- if (viewportChange)
299929
+ if (viewportChange) {
299930
+ if (result & 2)
299931
+ result |= this.updateScaler();
299975
299932
  this.viewport = this.getViewport(bias, this.scrollTarget);
299976
- this.updateForViewport();
299933
+ result |= this.updateForViewport();
299934
+ }
299977
299935
  if (result & 2 || viewportChange)
299978
299936
  this.updateViewportLines();
299979
299937
  if (this.lineGaps.length || this.viewport.to - this.viewport.from > 2e3 << 1)
@@ -300063,12 +300021,12 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300063
300021
  }
300064
300022
  gaps.push(gap);
300065
300023
  };
300066
- for (let line of this.viewportLines) {
300067
- if (line.length < doubleMargin)
300068
- continue;
300024
+ let checkLine = (line) => {
300025
+ if (line.length < doubleMargin || line.type != BlockType.Text)
300026
+ return;
300069
300027
  let structure = lineStructure(line.from, line.to, this.stateDeco);
300070
300028
  if (structure.total < doubleMargin)
300071
- continue;
300029
+ return;
300072
300030
  let target = this.scrollTarget ? this.scrollTarget.range.head : null;
300073
300031
  let viewFrom, viewTo;
300074
300032
  if (wrapping) {
@@ -300105,6 +300063,12 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300105
300063
  addGap(line.from, viewFrom, line, structure);
300106
300064
  if (viewTo < line.to)
300107
300065
  addGap(viewTo, line.to, line, structure);
300066
+ };
300067
+ for (let line of this.viewportLines) {
300068
+ if (Array.isArray(line.type))
300069
+ line.type.forEach(checkLine);
300070
+ else
300071
+ checkLine(line);
300108
300072
  }
300109
300073
  return gaps;
300110
300074
  }
@@ -300142,7 +300106,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300142
300106
  return pos >= this.viewport.from && pos <= this.viewport.to && this.viewportLines.find((b2) => b2.from <= pos && b2.to >= pos) || scaleBlock(this.heightMap.lineAt(pos, QueryType$1.ByPos, this.heightOracle, 0, 0), this.scaler);
300143
300107
  }
300144
300108
  lineBlockAtHeight(height) {
300145
- return scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType$1.ByHeight, this.heightOracle, 0, 0), this.scaler);
300109
+ return height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom && this.viewportLines.find((l2) => l2.top <= height && l2.bottom >= height) || scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType$1.ByHeight, this.heightOracle, 0, 0), this.scaler);
300146
300110
  }
300147
300111
  scrollAnchorAt(scrollTop) {
300148
300112
  let block = this.lineBlockAtHeight(scrollTop + 8);
@@ -300220,7 +300184,10 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300220
300184
  fromDOM(n2) {
300221
300185
  return n2;
300222
300186
  },
300223
- scale: 1
300187
+ scale: 1,
300188
+ eq(other) {
300189
+ return other == this;
300190
+ }
300224
300191
  };
300225
300192
  class BigScaler {
300226
300193
  constructor(oracle, heightMap, viewports) {
@@ -300260,6 +300227,11 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300260
300227
  domBase = vp.domBottom;
300261
300228
  }
300262
300229
  }
300230
+ eq(other) {
300231
+ if (!(other instanceof BigScaler))
300232
+ return false;
300233
+ return this.scale == other.scale && this.viewports.length == other.viewports.length && this.viewports.every((vp, i2) => vp.from == other.viewports[i2].from && vp.to == other.viewports[i2].to);
300234
+ }
300263
300235
  }
300264
300236
  function scaleBlock(block, scaler) {
300265
300237
  if (scaler.scale == 1)
@@ -300632,6 +300604,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300632
300604
  this.typeOver = typeOver;
300633
300605
  this.bounds = null;
300634
300606
  this.text = "";
300607
+ this.domChanged = start2 > -1;
300635
300608
  let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;
300636
300609
  if (view.state.readOnly && start2 > -1) {
300637
300610
  this.newSel = null;
@@ -300702,18 +300675,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300702
300675
  change = { from: sel.from, to: sel.to, insert: Text$1.of([" "]) };
300703
300676
  }
300704
300677
  if (change) {
300705
- if (browser.ios && view.inputState.flushIOSKey(change))
300706
- return true;
300707
- if (browser.android && (change.to == sel.to && (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == " ") && change.insert.length == 1 && change.insert.lines == 2 && dispatchKey(view.contentDOM, "Enter", 13) || (change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 || lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) && dispatchKey(view.contentDOM, "Backspace", 8) || change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 && dispatchKey(view.contentDOM, "Delete", 46)))
300708
- return true;
300709
- let text2 = change.insert.toString();
300710
- if (view.inputState.composing >= 0)
300711
- view.inputState.composing++;
300712
- let defaultTr;
300713
- let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));
300714
- if (!view.state.facet(inputHandler$1).some((h2) => h2(view, change.from, change.to, text2, defaultInsert)))
300715
- view.dispatch(defaultInsert());
300716
- return true;
300678
+ return applyDOMChangeInner(view, change, newSel, lastKey);
300717
300679
  } else if (newSel && !newSel.main.eq(sel)) {
300718
300680
  let scrollIntoView2 = false, userEvent = "select";
300719
300681
  if (view.inputState.lastSelectionTime > Date.now() - 50) {
@@ -300727,6 +300689,21 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300727
300689
  return false;
300728
300690
  }
300729
300691
  }
300692
+ function applyDOMChangeInner(view, change, newSel, lastKey = -1) {
300693
+ if (browser.ios && view.inputState.flushIOSKey(change))
300694
+ return true;
300695
+ let sel = view.state.selection.main;
300696
+ if (browser.android && (change.to == sel.to && (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == " ") && change.insert.length == 1 && change.insert.lines == 2 && dispatchKey(view.contentDOM, "Enter", 13) || (change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 || lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) && dispatchKey(view.contentDOM, "Backspace", 8) || change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 && dispatchKey(view.contentDOM, "Delete", 46)))
300697
+ return true;
300698
+ let text2 = change.insert.toString();
300699
+ if (view.inputState.composing >= 0)
300700
+ view.inputState.composing++;
300701
+ let defaultTr;
300702
+ let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));
300703
+ if (!view.state.facet(inputHandler$1).some((h2) => h2(view, change.from, change.to, text2, defaultInsert)))
300704
+ view.dispatch(defaultInsert());
300705
+ return true;
300706
+ }
300730
300707
  function applyDefaultInsert(view, change, newSel) {
300731
300708
  let tr2, startState = view.state, sel = startState.selection.main;
300732
300709
  if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 && (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) && view.inputState.composing < 0) {
@@ -300835,6 +300812,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300835
300812
  constructor(view) {
300836
300813
  this.view = view;
300837
300814
  this.active = false;
300815
+ this.editContext = null;
300838
300816
  this.selectionRange = new DOMSelectionState();
300839
300817
  this.selectionChanged = false;
300840
300818
  this.delayedFlush = -1;
@@ -300860,6 +300838,10 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300860
300838
  else
300861
300839
  this.flush();
300862
300840
  });
300841
+ if (window.EditContext && view.constructor.EDIT_CONTEXT !== false) {
300842
+ this.editContext = new EditContextManager(view);
300843
+ view.contentDOM.editContext = this.editContext.editContext;
300844
+ }
300863
300845
  if (useCharData)
300864
300846
  this.onCharData = (event2) => {
300865
300847
  this.queue.push({
@@ -300912,6 +300894,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
300912
300894
  onScroll(e3) {
300913
300895
  if (this.intersecting)
300914
300896
  this.flush(false);
300897
+ if (this.editContext)
300898
+ this.view.requestMeasure(this.editContext.measureReq);
300915
300899
  this.onScrollChanged(e3);
300916
300900
  }
300917
300901
  onResize() {
@@ -301134,7 +301118,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
301134
301118
  }
301135
301119
  let startState = this.view.state;
301136
301120
  let handled = applyDOMChange(this.view, domChange);
301137
- if (this.view.state == startState)
301121
+ if (this.view.state == startState && (domChange.domChanged || domChange.newSel && !domChange.newSel.main.eq(this.view.state.selection.main)))
301138
301122
  this.view.update([]);
301139
301123
  return handled;
301140
301124
  }
@@ -301184,6 +301168,10 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
301184
301168
  win.removeEventListener("beforeprint", this.onPrint);
301185
301169
  win.document.removeEventListener("selectionchange", this.onSelectionChange);
301186
301170
  }
301171
+ update(update2) {
301172
+ if (this.editContext)
301173
+ this.editContext.update(update2);
301174
+ }
301187
301175
  destroy() {
301188
301176
  var _a3, _b, _c;
301189
301177
  this.stop();
@@ -301234,6 +301222,147 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
301234
301222
  view.contentDOM.removeEventListener("beforeinput", read2, true);
301235
301223
  return found ? buildSelectionRangeFromRange(view, found) : null;
301236
301224
  }
301225
+ class EditContextManager {
301226
+ constructor(view) {
301227
+ this.from = 0;
301228
+ this.to = 0;
301229
+ this.pendingContextChange = null;
301230
+ this.resetRange(view.state);
301231
+ let context2 = this.editContext = new window.EditContext({
301232
+ text: view.state.doc.sliceString(this.from, this.to),
301233
+ selectionStart: this.toContextPos(Math.max(this.from, Math.min(this.to, view.state.selection.main.anchor))),
301234
+ selectionEnd: this.toContextPos(view.state.selection.main.head)
301235
+ });
301236
+ context2.addEventListener("textupdate", (e3) => {
301237
+ let { anchor } = view.state.selection.main;
301238
+ let change = {
301239
+ from: this.toEditorPos(e3.updateRangeStart),
301240
+ to: this.toEditorPos(e3.updateRangeEnd),
301241
+ insert: Text$1.of(e3.text.split("\n"))
301242
+ };
301243
+ if (change.from == this.from && anchor < this.from)
301244
+ change.from = anchor;
301245
+ else if (change.to == this.to && anchor > this.to)
301246
+ change.to = anchor;
301247
+ if (change.from == change.to && !change.insert.length)
301248
+ return;
301249
+ this.pendingContextChange = change;
301250
+ applyDOMChangeInner(view, change, EditorSelection.single(this.toEditorPos(e3.selectionStart), this.toEditorPos(e3.selectionEnd)));
301251
+ if (this.pendingContextChange)
301252
+ this.revertPending(view.state);
301253
+ });
301254
+ context2.addEventListener("characterboundsupdate", (e3) => {
301255
+ let rects = [], prev = null;
301256
+ for (let i2 = this.toEditorPos(e3.rangeStart), end2 = this.toEditorPos(e3.rangeEnd); i2 < end2; i2++) {
301257
+ let rect = view.coordsForChar(i2);
301258
+ prev = rect && new DOMRect(rect.left, rect.right, rect.right - rect.left, rect.bottom - rect.top) || prev || new DOMRect();
301259
+ rects.push(prev);
301260
+ }
301261
+ context2.updateCharacterBounds(e3.rangeStart, rects);
301262
+ });
301263
+ context2.addEventListener("textformatupdate", (e3) => {
301264
+ let deco = [];
301265
+ for (let format2 of e3.getTextFormats()) {
301266
+ let lineStyle = format2.underlineStyle, thickness = format2.underlineThickness;
301267
+ if (lineStyle != "None" && thickness != "None") {
301268
+ let style2 = `text-decoration: underline ${lineStyle == "Dashed" ? "dashed " : lineStyle == "Squiggle" ? "wavy " : ""}${thickness == "Thin" ? 1 : 2}px`;
301269
+ deco.push(Decoration.mark({ attributes: { style: style2 } }).range(this.toEditorPos(format2.rangeStart), this.toEditorPos(format2.rangeEnd)));
301270
+ }
301271
+ }
301272
+ view.dispatch({ effects: setEditContextFormatting.of(Decoration.set(deco)) });
301273
+ });
301274
+ context2.addEventListener("compositionstart", () => {
301275
+ if (view.inputState.composing < 0) {
301276
+ view.inputState.composing = 0;
301277
+ view.inputState.compositionFirstChange = true;
301278
+ }
301279
+ });
301280
+ context2.addEventListener("compositionend", () => {
301281
+ view.inputState.composing = -1;
301282
+ view.inputState.compositionFirstChange = null;
301283
+ });
301284
+ this.measureReq = { read: (view2) => {
301285
+ this.editContext.updateControlBounds(view2.contentDOM.getBoundingClientRect());
301286
+ let sel = getSelection(view2.root);
301287
+ if (sel && sel.rangeCount)
301288
+ this.editContext.updateSelectionBounds(sel.getRangeAt(0).getBoundingClientRect());
301289
+ } };
301290
+ }
301291
+ applyEdits(update2) {
301292
+ let off = 0, abort = false, pending = this.pendingContextChange;
301293
+ update2.changes.iterChanges((fromA, toA, _fromB, _toB, insert2) => {
301294
+ if (abort)
301295
+ return;
301296
+ let dLen = insert2.length - (toA - fromA);
301297
+ if (pending && toA >= pending.to) {
301298
+ if (pending.from == fromA && pending.to == toA && pending.insert.eq(insert2)) {
301299
+ pending = this.pendingContextChange = null;
301300
+ off += dLen;
301301
+ return;
301302
+ } else {
301303
+ pending = null;
301304
+ this.revertPending(update2.state);
301305
+ }
301306
+ }
301307
+ fromA += off;
301308
+ toA += off;
301309
+ if (toA <= this.from) {
301310
+ this.from += dLen;
301311
+ this.to += dLen;
301312
+ } else if (fromA < this.to) {
301313
+ if (fromA < this.from || toA > this.to || this.to - this.from + insert2.length > 3e4) {
301314
+ abort = true;
301315
+ return;
301316
+ }
301317
+ this.editContext.updateText(this.toContextPos(fromA), this.toContextPos(toA), insert2.toString());
301318
+ this.to += dLen;
301319
+ }
301320
+ off += dLen;
301321
+ });
301322
+ if (pending && !abort)
301323
+ this.revertPending(update2.state);
301324
+ return !abort;
301325
+ }
301326
+ update(update2) {
301327
+ if (!this.applyEdits(update2) || !this.rangeIsValid(update2.state)) {
301328
+ this.pendingContextChange = null;
301329
+ this.resetRange(update2.state);
301330
+ this.editContext.updateText(0, this.editContext.text.length, update2.state.doc.sliceString(this.from, this.to));
301331
+ this.setSelection(update2.state);
301332
+ } else if (update2.docChanged || update2.selectionSet) {
301333
+ this.setSelection(update2.state);
301334
+ }
301335
+ if (update2.geometryChanged || update2.docChanged || update2.selectionSet)
301336
+ update2.view.requestMeasure(this.measureReq);
301337
+ }
301338
+ resetRange(state) {
301339
+ let { head } = state.selection.main;
301340
+ this.from = Math.max(0, head - 1e4);
301341
+ this.to = Math.min(state.doc.length, head + 1e4);
301342
+ }
301343
+ revertPending(state) {
301344
+ let pending = this.pendingContextChange;
301345
+ this.pendingContextChange = null;
301346
+ this.editContext.updateText(this.toContextPos(pending.from), this.toContextPos(pending.to + pending.insert.length), state.doc.sliceString(pending.from, pending.to));
301347
+ }
301348
+ setSelection(state) {
301349
+ let { main: main2 } = state.selection;
301350
+ let start2 = this.toContextPos(Math.max(this.from, Math.min(this.to, main2.anchor)));
301351
+ let end2 = this.toContextPos(main2.head);
301352
+ if (this.editContext.selectionStart != start2 || this.editContext.selectionEnd != end2)
301353
+ this.editContext.updateSelection(start2, end2);
301354
+ }
301355
+ rangeIsValid(state) {
301356
+ let { head } = state.selection.main;
301357
+ return !(this.from > 0 && head - this.from < 500 || this.to < state.doc.length && this.to - head < 500 || this.to - this.from > 1e4 * 3);
301358
+ }
301359
+ toEditorPos(contextPos) {
301360
+ return contextPos + this.from;
301361
+ }
301362
+ toContextPos(editorPos) {
301363
+ return editorPos - this.from;
301364
+ }
301365
+ }
301237
301366
  class EditorView {
301238
301367
  get state() {
301239
301368
  return this.viewState.state;
@@ -301766,6 +301895,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
301766
301895
  }
301767
301896
  }
301768
301897
  destroy() {
301898
+ if (this.root.activeElement == this.contentDOM)
301899
+ this.contentDOM.blur();
301769
301900
  for (let plugin of this.plugins)
301770
301901
  plugin.destroy(this);
301771
301902
  this.plugins = [];
@@ -301785,6 +301916,14 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
301785
301916
  let ref2 = this.viewState.scrollAnchorAt(scrollTop);
301786
301917
  return scrollIntoView.of(new ScrollTarget(EditorSelection.cursor(ref2.from), "start", "start", ref2.top - scrollTop, scrollLeft, true));
301787
301918
  }
301919
+ setTabFocusMode(to2) {
301920
+ if (to2 == null)
301921
+ this.inputState.tabFocusMode = this.inputState.tabFocusMode < 0 ? 0 : -1;
301922
+ else if (typeof to2 == "boolean")
301923
+ this.inputState.tabFocusMode = to2 ? 0 : -1;
301924
+ else if (this.inputState.tabFocusMode != 0)
301925
+ this.inputState.tabFocusMode = Date.now() + to2;
301926
+ }
301788
301927
  static domEventHandlers(handlers2) {
301789
301928
  return ViewPlugin.define(() => ({}), { eventHandlers: handlers2 });
301790
301929
  }
@@ -301978,8 +302117,9 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
301978
302117
  let scopeObj = bound2[scope2] || (bound2[scope2] = /* @__PURE__ */ Object.create(null));
301979
302118
  if (!scopeObj._any)
301980
302119
  scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };
302120
+ let { any } = b2;
301981
302121
  for (let key in scopeObj)
301982
- scopeObj[key].run.push(b2.any);
302122
+ scopeObj[key].run.push((view) => any(view, currentKeyEvent));
301983
302123
  }
301984
302124
  let name2 = b2[platform2] || b2.key;
301985
302125
  if (!name2)
@@ -301992,7 +302132,9 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
301992
302132
  }
301993
302133
  return bound2;
301994
302134
  }
302135
+ let currentKeyEvent = null;
301995
302136
  function runHandlers(map2, event2, view, scope2) {
302137
+ currentKeyEvent = event2;
301996
302138
  let name2 = keyName(event2);
301997
302139
  let charCode = codePointAt(name2, 0), isChar = codePointSize(charCode) == name2.length && name2 != " ";
301998
302140
  let prefix = "", handled = false, prevented = false, stopPropagation = false;
@@ -302009,7 +302151,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
302009
302151
  for (let cmd2 of binding.run)
302010
302152
  if (!ran.has(cmd2)) {
302011
302153
  ran.add(cmd2);
302012
- if (cmd2(view, event2)) {
302154
+ if (cmd2(view)) {
302013
302155
  if (binding.stopPropagation)
302014
302156
  stopPropagation = true;
302015
302157
  return true;
@@ -302043,19 +302185,25 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
302043
302185
  handled = true;
302044
302186
  if (handled && stopPropagation)
302045
302187
  event2.stopPropagation();
302188
+ currentKeyEvent = null;
302046
302189
  return handled;
302047
302190
  }
302048
302191
  const CanHidePrimary = !browser.ios;
302049
302192
  const themeSpec = {
302050
302193
  ".cm-line": {
302051
- "& ::selection": { backgroundColor: "transparent !important" },
302052
- "&::selection": { backgroundColor: "transparent !important" }
302194
+ "& ::selection, &::selection": { backgroundColor: "transparent !important" }
302195
+ },
302196
+ ".cm-content": {
302197
+ "& :focus": {
302198
+ caretColor: "initial !important",
302199
+ "&::selection, & ::selection": {
302200
+ backgroundColor: "Highlight !important"
302201
+ }
302202
+ }
302053
302203
  }
302054
302204
  };
302055
- if (CanHidePrimary) {
302056
- themeSpec[".cm-line"].caretColor = "transparent !important";
302057
- themeSpec[".cm-content"] = { caretColor: "transparent !important" };
302058
- }
302205
+ if (CanHidePrimary)
302206
+ themeSpec[".cm-line"].caretColor = themeSpec[".cm-content"].caretColor = "transparent !important";
302059
302207
  const panelConfig = /* @__PURE__ */ Facet.define({
302060
302208
  combine(configs) {
302061
302209
  let topContainer, bottomContainer;
@@ -305445,8 +305593,9 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
305445
305593
  let fields = [];
305446
305594
  let lines = [], positions = [], m2;
305447
305595
  for (let line of template.split(/\r\n?|\n/)) {
305448
- while (m2 = /[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(line)) {
305449
- let seq = m2[1] ? +m2[1] : null, name2 = m2[2] || m2[3] || "", found = -1;
305596
+ while (m2 = /[#$]\{(?:(\d+)(?::([^}]*))?|((?:\\[{}]|[^}])*))\}/.exec(line)) {
305597
+ let seq = m2[1] ? +m2[1] : null, rawName = m2[2] || m2[3] || "", found = -1;
305598
+ let name2 = rawName.replace(/\\[{}]/g, (m3) => m3[1]);
305450
305599
  for (let i2 = 0; i2 < fields.length; i2++) {
305451
305600
  if (seq != null ? fields[i2].seq == seq : name2 ? fields[i2].name == name2 : false)
305452
305601
  found = i2;
@@ -305462,16 +305611,16 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
305462
305611
  pos.field++;
305463
305612
  }
305464
305613
  positions.push(new FieldPos(found, lines.length, m2.index, m2.index + name2.length));
305465
- line = line.slice(0, m2.index) + name2 + line.slice(m2.index + m2[0].length);
305614
+ line = line.slice(0, m2.index) + rawName + line.slice(m2.index + m2[0].length);
305466
305615
  }
305467
- for (let esc; esc = /\\([{}])/.exec(line); ) {
305468
- line = line.slice(0, esc.index) + esc[1] + line.slice(esc.index + esc[0].length);
305616
+ line = line.replace(/\\([{}])/g, (_2, brace, index2) => {
305469
305617
  for (let pos of positions)
305470
- if (pos.line == lines.length && pos.from > esc.index) {
305618
+ if (pos.line == lines.length && pos.from > index2) {
305471
305619
  pos.from--;
305472
305620
  pos.to--;
305473
305621
  }
305474
- }
305622
+ return brace;
305623
+ });
305475
305624
  lines.push(line);
305476
305625
  }
305477
305626
  return new Snippet(lines, positions);
@@ -306759,6 +306908,10 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
306759
306908
  }), { userEvent: "delete.dedent" }));
306760
306909
  return true;
306761
306910
  };
306911
+ const toggleTabFocusMode = (view) => {
306912
+ view.setTabFocusMode();
306913
+ return true;
306914
+ };
306762
306915
  const emacsStyleKeymap = [
306763
306916
  { key: "Ctrl-b", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },
306764
306917
  { key: "Ctrl-f", run: cursorCharRight, shift: selectCharRight },
@@ -306819,7 +306972,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
306819
306972
  { key: "Shift-Mod-k", run: deleteLine },
306820
306973
  { key: "Shift-Mod-\\", run: cursorMatchingBracket },
306821
306974
  { key: "Mod-/", run: toggleComment },
306822
- { key: "Alt-A", run: toggleBlockComment }
306975
+ { key: "Alt-A", run: toggleBlockComment },
306976
+ { key: "Ctrl-m", mac: "Shift-Alt-m", run: toggleTabFocusMode }
306823
306977
  ].concat(standardKeymap);
306824
306978
  const indentWithTab = { key: "Tab", run: indentMore, shift: indentLess };
306825
306979
  class Stack$1 {
@@ -306854,6 +307008,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
306854
307008
  var _a3;
306855
307009
  let depth = action >> 19, type2 = action & 65535;
306856
307010
  let { parser: parser2 } = this.p;
307011
+ if (this.reducePos < this.pos - 25)
307012
+ this.setLookAhead(this.pos);
306857
307013
  let dPrec = parser2.dynamicPrecedence(type2);
306858
307014
  if (dPrec)
306859
307015
  this.score += dPrec;
@@ -308279,7 +308435,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
308279
308435
  function json() {
308280
308436
  return new LanguageSupport(jsonLanguage);
308281
308437
  }
308282
- const printKeyword = 1, indent = 194, dedent = 195, newline$1 = 196, blankLineStart = 197, newlineBracketed = 198, eof = 199, stringContent = 200, Escape = 2, replacementStart = 3, stringEnd = 201, ParenL = 24, ParenthesizedExpression = 25, TupleExpression = 49, ComprehensionExpression = 50, BracketL = 55, ArrayExpression = 56, ArrayComprehensionExpression = 57, BraceL = 59, DictionaryExpression = 60, DictionaryComprehensionExpression = 61, SetExpression = 62, SetComprehensionExpression = 63, ArgList = 65, subscript = 238, String$1 = 71, stringStart = 241, stringStartD = 242, stringStartL = 243, stringStartLD = 244, stringStartR = 245, stringStartRD = 246, stringStartRL = 247, stringStartRLD = 248, FormatString = 72, stringStartF = 249, stringStartFD = 250, stringStartFL = 251, stringStartFLD = 252, stringStartFR = 253, stringStartFRD = 254, stringStartFRL = 255, stringStartFRLD = 256, FormatReplacement = 73, nestedFormatReplacement = 77, importList = 264, TypeParamList = 112, ParamList = 130, SequencePattern = 151, MappingPattern = 152, PatternArgList = 155;
308438
+ const printKeyword = 1, indent = 194, dedent = 195, newline$1 = 196, blankLineStart = 197, newlineBracketed = 198, eof = 199, stringContent = 200, Escape = 2, replacementStart = 3, stringEnd = 201, ParenL = 24, ParenthesizedExpression = 25, TupleExpression = 49, ComprehensionExpression = 50, BracketL = 55, ArrayExpression = 56, ArrayComprehensionExpression = 57, BraceL = 59, DictionaryExpression = 60, DictionaryComprehensionExpression = 61, SetExpression = 62, SetComprehensionExpression = 63, ArgList = 65, subscript = 238, String$1 = 71, stringStart = 241, stringStartD = 242, stringStartL = 243, stringStartLD = 244, stringStartR = 245, stringStartRD = 246, stringStartRL = 247, stringStartRLD = 248, FormatString = 72, stringStartF = 249, stringStartFD = 250, stringStartFL = 251, stringStartFLD = 252, stringStartFR = 253, stringStartFRD = 254, stringStartFRL = 255, stringStartFRLD = 256, FormatReplacement = 73, nestedFormatReplacement = 77, importList = 263, TypeParamList = 112, ParamList = 130, SequencePattern = 151, MappingPattern = 152, PatternArgList = 155;
308283
308439
  const newline = 10, carriageReturn = 13, space = 32, tab = 9, hash = 35, parenOpen = 40, dot = 46, braceOpen = 123, braceClose = 125, singleQuote = 39, doubleQuote = 34, backslash = 92, letter_o = 111, letter_x = 120, letter_N = 78, letter_u = 117, letter_U = 85;
308284
308440
  const bracketed = /* @__PURE__ */ new Set([
308285
308441
  ParenthesizedExpression,
@@ -308536,9 +308692,9 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
308536
308692
  const spec_identifier = { __proto__: null, await: 44, or: 54, and: 56, in: 60, not: 62, is: 64, if: 70, else: 72, lambda: 76, yield: 94, from: 96, async: 102, for: 104, None: 162, True: 164, False: 164, del: 178, pass: 182, break: 186, continue: 190, return: 194, raise: 202, import: 206, as: 208, global: 212, nonlocal: 214, assert: 218, type: 223, elif: 236, while: 240, try: 246, except: 248, finally: 250, with: 254, def: 258, class: 268, match: 279, case: 285 };
308537
308693
  const parser$1 = LRParser.deserialize({
308538
308694
  version: 14,
308539
- states: "##pO`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO1XQdO'#EfO3rQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO3}QdO'#EyO4UQdO'#FOO4aQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4fQdO'#F[P4mOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO4xQdO'#DoOOQS,5:Y,5:YO5]QdO'#HdOOQS,5:],5:]O5jQ!fO,5:]O5oQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8_QdO,59bO8dQdO,59bO8kQdO,59jO8rQdO'#HTO9xQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:aQdO,59aO'vQdO,59aO:oQdO,59aOOQS,59y,59yO:tQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;SQdO,5:QO;XQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;jQdO,5:UO;oQdO,5:WOOOW'#Fy'#FyO;tOWO,5:aOOQS,5:a,5:aO<PQdO'#HwOOOW'#Dw'#DwOOOW'#Fz'#FzO<aOWO,5:bOOQS,5:b,5:bOOQS'#F}'#F}O<oQtO,5:iO?aQtO,5=`O?zQ#xO,5=`O@kQtO,5=`OOQS,5:},5:}OASQeO'#GWOBfQdO,5;^OOQV,5=^,5=^OBqQtO'#H}OCYQdO,5;tOOQS-E:[-E:[OOQV,5;s,5;sO4[QdO'#FQOOQV-E9o-E9oOCbQtO,59]OEiQtO,59iOFSQdO'#HVOF_QdO'#HVO1XQdO'#HVOFjQdO'#DTOFrQdO,59mOFwQdO'#HZO'vQdO'#HZO0rQdO,5=tOOQS,5=t,5=tO0rQdO'#EROOQS'#ES'#ESOGfQdO'#GPOGvQdO,58|OGvQdO,58|O*xQdO,5:oOHUQtO'#H]OOQS,5:r,5:rOOQS,5:z,5:zOHiQdO,5;OOHzQdO,5;QOOQS'#GS'#GSOIYQtO,5;QOIhQdO,5;QOImQdO'#IQOOQS,5;T,5;TOI{QdO'#H|OOQS,5;W,5;WOJ^QdO,5;YO4aQdO,5;`O4aQdO,5;cOJfQtO'#ITO'vQdO'#ITOJpQdO,5;eO3}QdO,5;eO0rQdO,5;jO1XQdO,5;lOJuQeO'#EuOLRQgO,5;fO!!SQdO'#IUO4aQdO,5;jO!!_QdO,5;lO!!gQdO,5;qO!!rQtO,5;vO'vQdO,5;vPOOO,5=[,5=[P!!yOSO,5=[P!#OOdO,5=[O!%sQtO1G.jO!%zQtO1G.jO!(kQtO1G.jO!(uQtO1G.jO!+`QtO1G.jO!+sQtO1G.jO!,WQdO'#HcO!,fQtO'#GuO0rQdO'#HcO!,pQdO'#HbOOQS,5:Z,5:ZO!,xQdO,5:ZO!,}QdO'#HeO!-YQdO'#HeO!-mQdO,5>OOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!.mQtO1G.|O!.tQtO1G.|O1lQdO1G.|O!/aQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!/hQdO1G/eO!/xQdO1G/eO!0QQdO1G/fO'vQdO'#H[O!0VQdO'#H[O!0[QtO1G.{O!0lQdO,59iO!1rQdO,5=zO!2SQdO,5=zO!2[QdO1G/mO!2aQtO1G/mOOQS1G/l1G/lO!2qQdO,5=uO!3hQdO,5=uO0rQdO1G/qO!4VQdO1G/sO!4[QtO1G/sO!4lQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!4|QdO'#HxO0rQdO'#HxO!5_QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!5mQ#xO1G2zO!6^QtO1G2zO'vQdO,5<jOOQS,5<j,5<jOOQS-E9|-E9|OOQS,5<r,5<rOOQS-E:U-E:UOOQV1G0x1G0xO1XQdO'#GRO!6uQtO,5>iOOQS1G1`1G1`O!7^QdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!7cQdO'#FrO!7nQdO,59oO!7vQdO1G/XO!8QQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!8qQdO'#GtOOQS,5<k,5<kOOQS-E9}-E9}O!9SQdO1G.hOOQS1G0Z1G0ZO!9bQdO,5=wO!9rQdO,5=wO0rQdO1G0jO0rQdO1G0jO1XQdO1G0lOOQS-E:Q-E:QO!:TQdO1G0lO!:`QdO1G0lO!:eQdO,5>lO!:sQdO,5>lO!;RQdO,5>hO!;iQdO,5>hO!;zQdO'#EpO0rQdO1G0tO!<VQdO1G0tO!<[QgO1G0zO!@YQgO1G0}O!DTQdO,5>oO!D_QdO,5>oO!DgQtO,5>oO0rQdO1G1PO!DqQdO1G1PO4aQdO1G1UO!!_QdO1G1WOOQV,5;a,5;aO!DvQfO,5;aO!D{QgO1G1QO!H|QdO'#GZO4aQdO1G1QO4aQdO1G1QO!I^QdO,5>pO!IkQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!IsQdO'#FSO!JUQ!fO1G1WO!J^QdO1G1WOOQV1G1]1G1]O4aQdO1G1]O!JcQdO1G1]O!JkQdO'#F^OOQV1G1b1G1bO!!rQtO1G1bPOOO1G2v1G2vP!JpOSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!JuQdO,5=|O!KYQdO,5=|OOQS1G/u1G/uO!KbQdO,5>PO!KrQdO,5>PO!KzQdO,5>PO!L_QdO,5>PO!LoQdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!7vQdO7+$pO!NbQdO1G.|O!NiQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO!NpQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO# QQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO# VQdO7+%PO# _QdO7+%QO# dQdO1G3fOOQS7+%X7+%XO# tQdO1G3fO# |QdO7+%XOOQS,5<_,5<_O'vQdO,5<_O#!RQdO1G3aOOQS-E9q-E9qO#!xQdO7+%]OOQS7+%_7+%_O##WQdO1G3aO##uQdO7+%_O##zQdO1G3gO#$[QdO1G3gO#$dQdO7+%]O#$iQdO,5>dO#%SQdO,5>dO#%SQdO,5>dOOQS'#Dx'#DxO#%eO&jO'#DzO#%pO`O'#HyOOOW1G3}1G3}O#%uQdO1G3}O#%}QdO1G3}O#&YQ#xO7+(fO#&yQtO1G2UP#'dQdO'#GOOOQS,5<m,5<mOOQS-E:P-E:POOQS7+&z7+&zOOQS1G3]1G3]OOQS,5<^,5<^OOQS-E9p-E9pOOQS7+$s7+$sO#'qQdO,5=`O#([QdO,5=`O#(mQtO,5<aO#)QQdO1G3cOOQS-E9s-E9sOOQS7+&U7+&UO#)bQdO7+&UOOQS7+&W7+&WO#)pQdO'#IPO1XQdO'#IOO#*UQdO7+&WOOQS,5<p,5<pO#*aQdO1G4WOOQS-E:S-E:SOOQS,5<l,5<lO#*oQdO1G4SOOQS-E:O-E:OO1XQdO'#EqO#+VQdO'#EqO#+bQdO'#IRO#+jQdO,5;[OOQS7+&`7+&`O0rQdO7+&`O#+oQgO7+&fO!IPQdO'#GXO4aQdO7+&fO4aQdO7+&iO#/mQtO,5<tO'vQdO,5<tO#/wQdO1G4ZOOQS-E:W-E:WO#0RQdO1G4ZO4aQdO7+&kO0rQdO7+&kOOQV7+&p7+&pO!JUQ!fO7+&rO!J^QdO7+&rO`QeO1G0{OOQV-E:X-E:XO4aQdO7+&lO4aQdO7+&lOOQV,5<u,5<uO#0ZQdO,5<uO!IPQdO,5<uOOQV7+&l7+&lO#0fQgO7+&lO#4aQdO,5<vO#4lQdO1G4[OOQS-E:Y-E:YO#4yQdO1G4[O#5RQdO'#IWO#5aQdO'#IWO1XQdO'#IWOOQS'#IW'#IWO#5lQdO'#IVOOQS,5;n,5;nO#5tQdO,5;nO0rQdO'#FUOOQV7+&r7+&rO4aQdO7+&rOOQV7+&w7+&wO4aQdO7+&wO#5yQfO,5;xOOQV7+&|7+&|POOO7+(b7+(bO#6OQdO1G3iOOQS,5<c,5<cO#6^QdO1G3hOOQS-E9u-E9uO#6qQdO,5<dO#6|QdO,5<dO#7aQdO1G3kOOQS-E9v-E9vO#7qQdO1G3kO#7yQdO1G3kO#8ZQdO1G3kO#7qQdO1G3kOOQS<<H[<<H[O#8fQtO1G1zOOQS<<Hk<<HkP#8sQdO'#FtO8kQdO1G3bO#9QQdO1G3bO#9VQdO<<HkOOQS<<Hl<<HlO#9gQdO7+)QOOQS<<Hs<<HsO#9wQtO1G1yP#:hQdO'#FsO#:uQdO7+)RO#;VQdO7+)RO#;_QdO<<HwO#;dQdO7+({OOQS<<Hy<<HyO#<ZQdO,5<bO'vQdO,5<bOOQS-E9t-E9tOOQS<<Hw<<HwOOQS,5<g,5<gO0rQdO,5<gO#<`QdO1G4OOOQS-E9y-E9yO#<yQdO1G4OO<PQdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#=[O&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#=gQdO7+)iO#=oQdO1G2zO#>YQdO1G2zP'vQdO'#FuO0rQdO<<IpO#>kQdO,5>kO#>|QdO,5>kO1XQdO,5>kO#?_QdO,5>jOOQS<<Ir<<IrP1XQdO'#GUP0rQdO'#GQOOQS,5;],5;]O#?dQdO,5>mO#?rQdO,5>mOOQS1G0v1G0vOOQS<<Iz<<IzOOQV-E:V-E:VO4aQdO<<JQOOQV,5<s,5<sO4aQdO,5<sOOQV<<JQ<<JQOOQV<<JT<<JTO#?zQtO1G2`P#@UQdO'#GYO#@]QdO7+)uO#@gQgO<<JVO4aQdO<<JVOOQV<<J^<<J^O4aQdO<<J^O!JUQ!fO<<J^O#DbQgO7+&gOOQV<<JW<<JWO#DlQgO<<JWOOQV1G2a1G2aO1XQdO1G2aO#HgQdO1G2aO4aQdO<<JWO1XQdO1G2bP0rQdO'#G[O#HrQdO7+)vO#IPQdO7+)vOOQS'#FT'#FTO0rQdO,5>rO#IXQdO,5>rOOQS,5>r,5>rO#IdQdO,5>qO#IuQdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<<Jc<<JcO#I}QdO1G1dOOQS7+)T7+)TP#JSQdO'#FwO#JdQdO1G2OO#JwQdO1G2OO#KXQdO1G2OP#KdQdO'#FxO#KqQdO7+)VO#LRQdO7+)VO#LRQdO7+)VO#LZQdO7+)VO#LkQdO7+(|O8kQdO7+(|OOQSAN>VAN>VO#MUQdO<<LmOOQSAN>cAN>cO0rQdO1G1|O#MfQtO1G1|P#MpQdO'#FvOOQS1G2R1G2RP#M}QdO'#F{O#N[QdO7+)jO#NuQdO,5>gOOOO-E9z-E9zOOOW<<MT<<MTO$ TQdO7+(fOOQSAN?[AN?[O$ nQdO,5<oO$!SQdO1G4VOOQS-E:R-E:RO$!eQdO1G4VOOQS1G4U1G4UOOQS,5<q,5<qO$!vQdO1G4XOOQS-E:T-E:TOOQVAN?lAN?lOOQV1G2_1G2_O4aQdOAN?qO$#UQgOAN?qOOQVAN?xAN?xO4aQdOAN?xOOQV<<JR<<JRO4aQdOAN?rO4aQdO7+'{OOQV7+'{7+'{O1XQdO7+'{OOQVAN?rAN?rOOQS7+'|7+'|O$'PQdO<<MbOOQS1G4^1G4^O0rQdO1G4^OOQS,5<w,5<wO$'^QdO1G4]OOQS-E:Z-E:ZOOQU'#G_'#G_O$'oQfO7+'OO$'zQdO'#F_O$)RQdO7+'jO$)cQdO7+'jOOQS7+'j7+'jO$)nQdO<<LqO$*OQdO<<LqO$*OQdO<<LqO$*WQdO'#H^OOQS<<Lh<<LhO$*bQdO<<LhOOQS7+'h7+'hOOQS'#D|'#D|OOOO1G4R1G4RO$*{QdO1G4RO$+TQdO1G4RO1XQdO1G2ZP1XQdO'#GTO$+`QdO7+)qO$+qQdO7+)qP!;zQdO'#GVOOQVG25]G25]O4aQdOG25]OOQVG25dG25dOOQVG25^G25^OOQV<<Kg<<KgO4aQdO<<KgOOQS7+)x7+)xP$,SQdO'#G]OOQU-E:]-E:]OOQV<<Jj<<JjO$,vQtO'#FaOOQS'#Fc'#FcO$-WQdO'#FbO$-xQdO'#FbOOQS'#Fb'#FbO$-}QdO'#IYO$'zQdO'#FiO$'zQdO'#FiO$.fQdO'#FjO$'zQdO'#FkO$.mQdO'#IZOOQS'#IZ'#IZO$/[QdO,5;yOOQS<<KU<<KUO$/dQdO<<KUO$/tQdOANB]O$0UQdOANB]O$0^QdO'#H_OOQS'#H_'#H_O1sQdO'#DcO$0wQdO,5=xOOQSANBSANBSOOOO7+)m7+)mO$1`QdO7+)mOOQS7+'u7+'uO$1hQdO<<M]OOQVLD*wLD*wOOQVANARANARO5jQ!fO'#GaO$1yQtO,5<SO$'zQdO'#FmOOQS,5<W,5<WOOQS'#Fd'#FdO$2kQdO,5;|O$2pQdO,5;|OOQS'#Fg'#FgO$'zQdO'#G`O$3bQdO,5<QO$3|QdO,5>tO$4^QdO,5>tO1XQdO,5<PO$4oQdO,5<TO$4tQdO,5<TO$'zQdO'#I[O$4yQdO'#I[O$5OQdO,5<UOOQS,5<V,5<VO'vQdO'#FpOOQU1G1e1G1eO4aQdO1G1eOOQSAN@pAN@pO$5TQdOG27wO$5eQdO,59}OOQS1G3d1G3dOOOO<<MX<<MXOOQS,5<{,5<{OOQS-E:_-E:_O$5jQtO'#FaO$5qQdO'#I]O$6PQdO'#I]O$6XQdO,5<XOOQS1G1h1G1hO$6^QdO1G1hO$6cQdO,5<zOOQS-E:^-E:^O$6}QdO,5=OO$7fQdO1G4`OOQS-E:b-E:bOOQS1G1k1G1kOOQS1G1o1G1oO$7vQdO,5>vO$'zQdO,5>vOOQS1G1p1G1pO$8UQtO,5<[OOQU7+'P7+'PO$*WQdO1G/iO$'zQdO,5<YO$8]QdO,5>wO$8dQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$'zQdO'#GdO$8lQdO1G4bO$8vQdO1G4bO$9OQdO1G4bOOQS7+%T7+%TO$9^QdO1G1tO$9lQtO'#FaO$9sQdO,5<}OOQS,5<},5<}O$:RQdO1G4cOOQS-E:a-E:aO$'zQdO,5<|O$:YQdO,5<|O$:_QdO7+)|OOQS-E:`-E:`O$:iQdO7+)|O$'zQdO,5<ZP$'zQdO'#GcO$:qQdO1G2hO$'zQdO1G2hP$;PQdO'#GbO$;WQdO<<MhO$;bQdO1G1uO$;pQdO7+(SO8kQdO'#C}O8kQdO,59bO8kQdO,59bO8kQdO,59bO$<OQtO,5=`O8kQdO1G.|O0rQdO1G/XO0rQdO7+$pP$<cQdO'#GOO'vQdO'#GtO$<pQdO,59bO$<uQdO,59bO$<|QdO,59mO$=RQdO1G/UO1sQdO'#DRO8kQdO,59j",
308540
- stateData: "$=l~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0dOv0rO!PrO~P'vOV#OOo0dOv0rO!W#PO~P'vOV#SOa#TOo0dOv0rO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0dOv0rO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0dOv0rO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0dOv0rO#g#SX%[#SX%_#SX~P'vOo0dOv0rO#g#WX%[#WX%_#WX~P'vO!f$WO!r$WO%uWO~OV$cO~P'vO!U$eO#s$fO#u$gO~O{$hO~OV$oO~P'vOS$qO%[$pO%c$rO~OV${Oa${Og$}Oo0dOv0rO~P'vOo0dOv0rO{%QO~P'vO&Y%SO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%XO~Oo%XO~P'vOo0dO~P'vOk0fOl0gOm0eOn0eOo0nOp0oOs0sOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%ZOg%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%]Oz%^O!T%bO!U%aO~Og%]O~Oz%eO!T%bO!U%aO!W&SX~O!W%iO~Oz%jO{%lO!T%bO!U%aO![%}X~O![%pO~O![%qO~OQ#XO%`#XO%a%sO~OV%uOo0dOv0rO!PrO~P'vOQ#^OR#[O%`#^O%a%xO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%zO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV%|OopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%zO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&RO%_&RO~O!f&SOh&qX%[&qX#[&qX#g&qX%_&qX#Z&qX~Oh!iO%[&UO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEQO%z&WOz%yX{%yX~O%uWOz%yX{%yX~Oz&ZO{wX~O{&]O~Oz%jO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0mOo0dOv0rO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&fO#g&PX%[&PX%_&PXn&PX~P%SOz&iO!Q&hO#g#Wa%[#Wa%_#Wa~O#[&jO#g#Ya%[#Ya%_#Ya~O!f$WO!r$WO#Z&lO%uWO~O#Z&lO~Oz&nO#g&tX%[&tX%_&tX~Oz&pO#g&pX%[&pX%_&pX{&pX~O!X&rO%z&sO~Oz&wOn&wX~P%SOn&zO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['PO~P'vOt'TO#p'RO#q'SOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'UO#['WO{&xX~Oh'YO!X&rO~Oh!iO{$hO!X&rO~O{'`O~P%SO%['cO~OS'dO%['cO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#WO%kWi~P!#WOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&RO%mWi%nWi~P!&ROa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)POVWi_Wi%qWi%rWi%sWi~P!)PO!T%bO!U%aOg&VXz&VX~O%z'fO%{'fO~P,eOz'hOg&UX~Og'jO~Oz'kO{'mO!W&XX~Oo0dOv0rOz'kO{'nO!W&XX~P'vO!W'pO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!-rOlji~P!-rOk0fOl0gOm0eOn0eOo0nOp0oO~Ot'rO~P!.{OV'wOg'xOo0dOv0rO~P'vOg'xOz'yO~Og'{O~O!U'}O~Og(OOz'yO!T%bO!U%aO~P%SOk0fOl0gOm0eOn0eOo0nOp0oOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEQOV'wOo0dOv0rO!W&Sa~P'vOz(RO!W&Sa~O!W(SO~Oz(RO!T%bO!U%aO!W&Sa~P%SOV(WOo0dOv0rO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(XO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![([O~Oz(XO!T%bO!U%aO![%}a~P%SOz(_O!T%bO!U%aO![&Ta~P%SOz(bO{&lX![&lX!m&lX%z&lX~O{(fO![(hO!m(iO%z(eO~OV%|OopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(kO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&SOh&qa%[&qa#[&qa#g&qa%_&qa#Z&qa~O%[(pO~OV#sOa#tO%uWO~Oz&ZO{wa~OopOvqO~P'vOz(XO#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(uO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(xO#g&Pa%[&Pa%_&Pan&Pa~OV(|Oh)OO%uWO~O#Z)PO~O%uWO#g&ta%[&ta%_&ta~Oz)RO#g&ta%[&ta%_&ta~Oo0dOv0rO#g&pa%[&pa%_&pa{&pa~P'vOz)UO#g&pa%[&pa%_&pa{&pa~OV)WOa)WO%uWO~O%z)]O~Ot)`O#j)_OP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)aOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)cOn&wa~P'vOz)dOn&wa~Oz)dOn&wa~P%SOn)hO~O%Y)lO~Ot)oO#p'RO#q)nOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)rOo0dOv0rO{$hO~P'vOo0dOv0rO{&xa~P'vOz)vO{&xa~OV)zOa){Og*OO%q)|O%uWO~O{$hO&{*QO~Oh'YO~Oh!iO{$hO~O%[*VO~O%[*XO~OV${Oa${Oo0dOv0rOg&Ua~P'vOz*[Og&Ua~Oo0dOv0rO{*_O!W&Xa~P'vOz*`O!W&Xa~Oo0dOv0rOz*`O{*cO!W&Xa~P'vOo0dOv0rOz*`O!W&Xa~P'vOz*`O{*cO!W&Xa~Om0eOn0eOo0nOp0oOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0gO~P!LzOlji~P!LzOV'wOg*hOo0dOv0rO~P'vOn*jO~Og*hOz*lO~Og*mO~OV'wOo0dOv0rO!W&Si~P'vOz*nO!W&Si~O!W*oO~OV(WOo0dOv0rO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*rO!T%bO!U%aO![&Ti~Oz*uO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![*vO~Oa*xOo0dOv0rO![&Ti~P'vOz*rO![&Ti~O![*zO~OV*|Oo0dOv0rO{&la![&la!m&la%z&la~P'vOz*}O{&la![&la!m&la%z&la~O!]+QO&n+SO![!nX~O![+UO~O{(fO![+VO~O{(fO![+VO!m+WO~OV%|OopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV%|OopOvqO~P'vOV%|Oo0dOv0rO#g%ha%[%ha%_%ha%z%ha~P'vOz+XO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+[O#g#Wq%[#Wq%_#Wq~Oz+]O#[+_O#g&sX%[&sX%_&sXg&sX~OV+aOh)OO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0dOv0rO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+eO!W&uX~O!W+gO~Ot+jO#j)_OP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)cOn&wi~P'vOz+qOn&wi~Oz+{O{$hO#[+{O~O#q+}OP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,OOz%Oa{%Oa~Oo0dOv0rO{&xi~P'vOz,QO{&xi~O{#{O%z,SOg&zXz&zX~O%uWOg&zXz&zX~Oz,WOg&yX~Og,YO~O%Y,]O~O!T%bO!U%aOg&Viz&Vi~OV${Oa${Oo0dOv0rOg&Ui~P'vO{,`Oz$la!W$la~Oo0dOv0rO{,aOz$la!W$la~P'vOo0dOv0rO{*_O!W&Xi~P'vOz,dO!W&Xi~Oo0dOv0rOz,dO!W&Xi~P'vOz,dO{,gO!W&Xi~Og$hiz$hi!W$hi~P%SOV'wOo0dOv0rO~P'vOn,iO~OV'wOg,jOo0dOv0rO~P'vOV'wOo0dOv0rO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(WOo0dOv0rO~P'vOa*xOo0dOv0rO![&Tq~P'vOz,kO![&Tq~O![,lO~OV(WOo0dOv0rO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,mO~OV*|Oo0dOv0rO{&li![&li!m&li%z&li~P'vOz,rO{&li![&li!m&li%z&li~O!]+QO&n+SO![!na~O{(fO![,uO~OV%|Oo0dOv0rO#g%hi%[%hi%_%hi%z%hi~P'vOz,vO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&sa%[&sa%_&sag&sa~Oz,yO#g&sa%[&sa%_&sag&sa~Og,|O~OV)WOa)WO%uWO!W&ua~Oz-OO!W&ua~On$|iz$|i~P%SOV)cO~P'vOV)cOn&wq~P'vOt-SOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-WO%_-WO~P`O#q-XOP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-[O{$hO#[-[O~Oo0dOv0rO{&xq~P'vOz-_O{&xq~O%z,SOg&zaz&za~OV)zOa){O%q)|O%uWOg&ya~Oz-cOg&ya~O$S-gO~OV${Oa${Oo0dOv0rO~P'vOo0dOv0rO{-hOz$li!W$li~P'vOo0dOv0rOz$li!W$li~P'vO{-hOz$li!W$li~Oo0dOv0rO{*_O~P'vOo0dOv0rO{*_O!W&Xq~P'vOz-kO!W&Xq~Oo0dOv0rOz-kO!W&Xq~P'vOs-nO!T%bO!U%aOg&Oq!W&Oq![&Oqz&Oq~P!.{Oa*xOo0dOv0rO![&Ty~P'vOz$ji![$ji~P%SOa*xOo0dOv0rO~P'vOV*|Oo0dOv0rO~P'vOV*|Oo0dOv0rO{&lq![&lq!m&lq%z&lq~P'vO{(fO![-sO!m-tO%z-rO~OV%|Oo0dOv0rO#g%hq%[%hq%_%hq%z%hq~P'vO#[-vOz$wa#g$wa%[$wa%_$wag$wa~O%uWO#g&si%[&si%_&sig&si~Oz-xO#g&si%[&si%_&sig&si~OV)WOa)WO%uWO!W&ui~Ot-|OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0dOv0rO{&xy~P'vOV)zOa){O%q)|O%uWOg&yi~O$S-gO%Z.UO%_.UO~OV.`Oh.^O!X.]O!]._O!h.XO!s.ZO!t.ZO%p.WO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0dOv0rOz$lq!W$lq~P'vO{.eOz$lq!W$lq~Oo0dOv0rO{*_O!W&Xy~P'vOz.fO!W&Xy~Oo0dOv.jO~P'vOs-nO!T%bO!U%aOg&Oy!W&Oy![&Oyz&Oy~P!.{O{(fO![.mO~O{(fO![.mO!m.nO~O%uWO#g&sq%[&sq%_&sqg&sq~Oz.pO#g&sq%[&sq%_&sqg&sq~OV)zOa){O%q)|O%uWO~Oh.uO!f.sOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$,bO%o.wO%p.wOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.yO~Oz.}O#[/PO%j.zOs&|X{&|X!W&|Xg&|X~Oa/SO~P$(WOh.uOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/WO{$hO~Oo0dOv0rOz$ly!W$ly~P'vOo0dOv0rO{*_O!W&X!R~P'vOz/[O!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!.{Os-nO!T%bO!U%aOg&Qa!W&Qa![&Qaz&Qa~O{(fO![/_O~O%uWO#g&sy%[&sy%_&syg&sy~O!f.sOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/fO~O%o.wO%p.wOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.zOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$'zOz/kOs&|a{&|a!W&|ag&|a~O!W/nO~Og/nO~O{/pO~O![/qO~Oo0dOv0rO{*_O!W&X!Z~P'vO{/tO~O%z/uO~P$,bOz/vO#[/PO%j.zOg'PX~Oz/vOg'PX~Og/xO~O!h/yO~O#[/POs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/PO%j.zOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$'zOz/{O#[/PO%j.zO!['Oa~O{$da~P%SOg'Pa~P$'zOz0TOg'Pa~Oa0VO!['Oi~P$(WOz0XO!['Oi~Oz0XO#[/PO%j.zO!['Oi~O#[/PO%j.zOg$biz$bi~O%z0[O~P$,bO#[/PO%j.zOg%Vaz%Va~Og'Pi~P$'zO{0_O~Oa0VO!['Oq~P$(WOz0aO!['Oq~O#[/PO%j.zOz%Ui![%Ui~Oa0VO~P$(WOa0VO!['Oy~P$(WO#[/PO%j.zOg$ciz$ci~O#[/PO%j.zOz%Uq![%Uq~Oz+XO#g%ha%[%ha%_%ha%z%ha~P%SOV%|Oo0dOv0rO~P'vOn0iO~Oo0iO~P'vO{0jO~Ot0kO~P!.{O&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~",
308541
- goto: "!=c'QPPPPPP'RP'Z*s+]+v,b,}-kP.YP'Z.y.y'ZPPP'Z2cPPPPPP2c5VPP5VP7g7p>PPP>S>t>wPP'Z'ZPP?WPP'Z'ZPP'Z'Z'Z'Z'Z?[@U'ZP@XP@_DfHSHWPHZHeHi'ZPPPHlHu'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPH{IXIaPIhInPIhPIhIhPPPIhPK|PLVLaLgK|PIhLpPIhPLwL}PMRMgNUNoMRMRNu! SMRMRMRMR! h! n! q! v! y!!T!!Z!!g!!y!#P!#Z!#a!#}!$T!$Z!$e!$k!$q!%T!%_!%e!%k!%q!%{!&R!&X!&_!&e!&o!&u!'P!'V!'`!'f!'u!'}!(X!(`PPPPPPPPPPP!(f!(i!(o!(x!)S!)_PPPPPPPPPPPP!.R!/g!3g!6wPP!7P!7`!7i!8b!8X!8k!8q!8t!8w!8z!9S!9sPPPPPPPPPPPPPPPPP!9v!9z!:QP!:f!:j!:v!;S!;Y!;c!;f!;i!;o!;u!;{!<OP!<W!<a!=]!=`]eOn#g$h)l+w'}`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$c$e$f$h$o${%Q%X%[%^%a%e%j%l%u%z%|&X&]&f&h&i&p&s&w&z'R'U'g'h'k'm'n'r'w'y'}(R(W(X(_(b(k(m(u(x)U)])_)c)d)h)l)r)v*Q*[*_*`*c*i*j*l*n*q*r*u*x*|*}+Q+X+Z+[+c+p+q+w,P,Q,T,_,`,a,c,d,g,i,k,m,o,q,r,v-_-a-h-k-n.e.f/W/[/t0d0e0f0g0i0j0k0l0m0o0s}!cQ#c#p$R$b$n%c%h%n%o&^&y'b(l(w)b*g*p+o,n/r0h!P!dQ#c#p$R$b$n$s%c%h%n%o&^&y'b(l(w)b*g*p+o,n/r0h!R!eQ#c#p$R$b$n$s$t%c%h%n%o&^&y'b(l(w)b*g*p+o,n/r0h!T!fQ#c#p$R$b$n$s$t$u%c%h%n%o&^&y'b(l(w)b*g*p+o,n/r0h!V!gQ#c#p$R$b$n$s$t$u$v%c%h%n%o&^&y'b(l(w)b*g*p+o,n/r0h!X!hQ#c#p$R$b$n$s$t$u$v$w%c%h%n%o&^&y'b(l(w)b*g*p+o,n/r0h!]!hQ!n#c#p$R$b$n$s$t$u$v$w$x%c%h%n%o&^&y'b(l(w)b*g*p+o,n/r0h'}TOTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$c$e$f$h$o${%Q%X%[%^%a%e%j%l%u%z%|&X&]&f&h&i&p&s&w&z'R'U'g'h'k'm'n'r'w'y'}(R(W(X(_(b(k(m(u(x)U)])_)c)d)h)l)r)v*Q*[*_*`*c*i*j*l*n*q*r*u*x*|*}+Q+X+Z+[+c+p+q+w,P,Q,T,_,`,a,c,d,g,i,k,m,o,q,r,v-_-a-h-k-n.e.f/W/[/t0d0e0f0g0i0j0k0l0m0o0s&cVOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$f$h${%Q%X%[%^%e%j%l%u%z&X&]&h&i&p&s&z'R'U'g'h'k'm'n'r'y(R(X(_(b(k(m(u)U)])_)h)l)r)v*Q*[*_*`*c*i*j*l*n*q*r*u*|*}+Q+X+[+c+w,P,Q,T,_,`,a,c,d,g,i,k,m,o,q,r,v-_-a-h-k-n.e.f/[/t0d0e0f0g0i0j0k0l0o0s%mXOYZ[dnrxy}!P!Q!U!i!k#[#d#g#y#{#}$Q$f$h${%Q%[%^%e%j%l%u%z&X&]&h&i&p&s&z'R'U'g'h'k'm'n'r'y(R(X(_(b(k(m(u)U)])_)h)l)r)v*Q*[*_*`*c*i*l*n*q*r*u*|*}+Q+X+[+c+w,P,Q,T,_,`,a,c,d,g,k,m,o,q,r,v-_-a-h-k.e.f/[0j0k0lQ#vqQ/].jR0p0r't`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$c$e$f$h$o${%Q%X%[%^%a%e%j%l%u%z%|&X&]&f&h&i&p&s&w&z'R'U'g'k'm'n'r'w'y'}(R(W(X(_(b(k(m(u(x)U)])_)c)d)h)l)r)v*Q*_*`*c*i*j*l*n*q*r*u*x*|*}+Q+X+Z+[+c+p+q+w,P,Q,T,`,a,c,d,g,i,k,m,o,q,r,v-_-a-h-k-n.e.f/W/[/t0d0e0f0g0i0j0k0l0m0o0sW#jhz{$XW#rq&Z.j0rQ$Z|Q$_!OQ$l!VQ$m!WW$z!i'h*[,_S&Y#s#tQ&}$gQ(n&SQ(|&jU(}&l)O)PU)Q&n)R+bW)X&r+e-O-zQ)x'WW)y'Y,W-c.SQ+d)WS,V)z){Y,x+],y-w-x.pQ,{+_Q-Y+{Q-^,OQ.Q-[l.V-g.].^.`.{.}/S/k/p/u/z0V0[0_Q.o-vQ/T._Q/b.uQ/m/PU0Q/v0T0]X0W/{0X0`0aR&X#r!_!wYZ!P!Q!k%Q%^%e'k'm'n'y(R)_*_*`*c*i*l*n,`,a,c,d,g-h-k.e.f/[R%[!vQ!{YQ%v#[Q&b#}Q&e$QR,s+QT.i-n/t![!jQ!n#c#p$R$b$n$s$t$u$v$w$x%c%h%n%o&^&y'b(l(w)b*g*p+o,n/r0hQ&V#kQ'^$mR*U'_R'g$zQ%T!mR/`.s'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$c$e$f$h$o${%Q%X%[%^%a%e%j%l%u%z%|&X&]&f&h&i&p&s&w&z'R'U'g'h'k'm'n'r'w'y'}(R(W(X(_(b(k(m(u(x)U)])_)c)d)h)l)r)v*Q*[*_*`*c*i*j*l*n*q*r*u*x*|*}+Q+X+Z+[+c+p+q+w,P,Q,T,_,`,a,c,d,g,i,k,m,o,q,r,v-_-a-h-k-n.e.f/W/[/t0d0e0f0g0i0j0k0l0m0o0sS#a_#b!P.Z-g.].^._.`.u.{.}/S/k/p/u/v/z/{0T0V0X0[0]0_0`0a'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$c$e$f$h$o${%Q%X%[%^%a%e%j%l%u%z%|&X&]&f&h&i&p&s&w&z'R'U'g'h'k'm'n'r'w'y'}(R(W(X(_(b(k(m(u(x)U)])_)c)d)h)l)r)v*Q*[*_*`*c*i*j*l*n*q*r*u*x*|*}+Q+X+Z+[+c+p+q+w,P,Q,T,_,`,a,c,d,g,i,k,m,o,q,r,v-_-a-h-k-n.e.f/W/[/t0d0e0f0g0i0j0k0l0m0o0sT#a_#bT#^^#_R(j%va(g%v(i(j+W,s-t-u.nT+S(f+TR-u,sQ$PsQ+d)XR,U)yX#}s$O$P&dQ&t$_Q'[$lQ'_$mR)k&}Q)Y&rV,}+e-O-zZgOn$h)l+wXkOn)l+wQ$i!TQ&u$`Q&v$aQ'X$kQ']$mQ)i&|Q)p'RQ)s'SQ)t'TQ*R'ZS*T'^'_Q+k)_Q+m)`Q+n)aQ+r)gS+t)j*SQ+x)nQ+y)oS+z)q)rQ,[*UQ-Q+jQ-R+lQ-T+sS-U+u+vQ-Z+|Q-]+}Q-{-SQ-}-VQ.O-XQ.P-YQ.q-|Q.r.QQ/X.cR/s/YWkOn)l+wR#mjQ'Z$lS)j&}'[R+v)kQ,T)yR-a,UQ*S'ZQ+u)jR-V+vZiOjn)l+wQ'a$nR*W'bT-e,]-fu.b-g.].^.`.u.{.}/S/k/p/u/v/z0T0V0[0]0_t.b-g.].^.`.u.{.}/S/k/p/u/v/z0T0V0[0]0_Q/T._X0W/{0X0`0a!P.Y-g.].^._.`.u.{.}/S/k/p/u/v/z/{0T0V0X0[0]0_0`0aQ.x.XR/g.yg.{.[.|/c/j/o/}0P0R0^0b0cu.a-g.].^.`.u.{.}/S/k/p/u/v/z0T0V0[0]0_X.v.V.a/b0QR/d.uV0S/v0T0]R/Y.cQnOS#on+wR+w)lQ&[#uR(s&[S%k#R#wS(Y%k(]T(]%n&^Q%_!yQ%f!}W'z%_%f(P(TQ(P%cR(T%hQ&g$RR(y&gQ(`%oQ*s(ZT*y(`*sQ'i$|R*]'iS'l%P%QY*a'l*b,e-l.gU*b'm'n'oU,e*c*d*eS-l,f,gR.g-mQ#Y]R%r#YQ#_^R%w#_Q(c%tS+O(c+PR+P(dQ+T(fR,t+TQ#b_R%y#bQ#ebQ%{#cW&O#e%{(v+YQ(v&aR+Y0hQ$OsS&c$O&dR&d$PQ&q$]R)V&qQ&T#jR(o&TQ$X{R&k$XQ+^(}S,z+^-yR-y,{Q&o$ZR)S&oQ+f)YR-P+fQ#hfR&Q#hQ)^&uR+i)^Q&x$bS)e&x)fR)f&yQ'Q$iR)m'QQ'V$jS)w'V,RR,R)xQ,X)}R-d,XWjOn)l+wR#ljQ-f,]R.T-fd.|.[/c/j/o/}0P0R0^0b0cR/i.|U.t.V/b0QR/a.tQ/|/oS0Y/|0ZR0Z/}S/w/c/dR0U/wQ/O.[R/l/OR!ZPXmOn)l+wWlOn)l+wR'O$hYfOn$h)l+wR&P#g[sOn#g$h)l+wR&b#}&bQOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$f$h${%Q%X%[%^%e%j%l%u%z&X&]&h&i&p&s&z'R'U'g'h'k'm'n'r'y(R(X(_(b(k(m(u)U)])_)h)l)r)v*Q*[*_*`*c*i*j*l*n*q*r*u*|*}+Q+X+[+c+w,P,Q,T,_,`,a,c,d,g,i,k,m,o,q,r,v-_-a-h-k-n.e.f/[/t0d0e0f0g0i0j0k0l0o0sQ!nTQ#caQ#poU$Rt%a'}S$b!R$eQ$n!XQ$s!cQ$t!dQ$u!eQ$v!fQ$w!gQ$x!hQ%c!zQ%h#OQ%n#SQ%o#TQ&^#xQ&y$cQ'b$oQ(l%|U(w&f(x+ZW)b&w)d+p+qQ*g'wQ*p(WQ+o)cQ,n*xQ/r/WR0h0mQ!yYQ!}ZQ$`!PQ$a!QQ%P!kQ'o%Q^'v%^%e'y(R*i*l*n^*^'k*`,c,d-k.f/[Q*d'mQ*e'nQ+l)_Q,b*_Q,f*cQ-i,`Q-j,aQ-m,gQ.d-hR/Z.e[bOn#g$h)l+w!^!vYZ!P!Q!k%Q%^%e'k'm'n'y(R)_*_*`*c*i*l*n,`,a,c,d,g-h-k.e.f/[Q#R[Q#fdS#wrxQ$UyW$]}$Q&z)hS$j!U$fW$y!i'h*[,_S%t#[+Q`%}#d%z(k(m(u+X,v0lQ&_#yQ&`#{Q&a#}Q'e${Q'u%[W(V%j(X*q*uQ(Z%lQ(d%uQ(q&XS(t&]0jQ(z&hQ({&iU)T&p)U+cQ)[&sQ)q'RY)u'U)v,P,Q-_Q*Y'gS*f'r0kW*w(_*r,k,oW*{(b*},q,rQ+h)]Q+|)rQ,Z*QQ,p*|Q,w+[Q-`,TQ-q,mR.R-ahUOn#d#g$h%z&]'r(k(m)l+w%S!uYZ[drxy}!P!Q!U!i!k#[#y#{#}$Q$f${%Q%[%^%e%j%l%u&X&h&i&p&s&z'R'U'g'h'k'm'n'y(R(X(_(b(u)U)])_)h)r)v*Q*[*_*`*c*i*l*n*q*r*u*|*}+Q+X+[+c,P,Q,T,_,`,a,c,d,g,k,m,o,q,r,v-_-a-h-k.e.f/[0j0k0lQ#qpW%U!o!s0e0oQ%V!pQ%W!qQ%Y!tQ%d0dS'q%X0iQ's0fQ't0gQ,h*jQ-p,iS.h-n/tR0q0sU#uq.j0rR(r&Z[cOn#g$h)l+wZ!xY#[#}$Q+QQ#W[Q#zrR$TxQ%`!yQ%g!}Q%m#RQ'e$yQ(Q%cQ(U%hQ(^%nQ(a%oQ*t(ZQ,^*YQ-o,hQ.l-pR/^.kQ$StQ'|%aR*k'}Q.k-nR0O/tR#QZR#V[R%O!iQ$|!iV*Z'h*[,_!]!lQ!n#c#p$R$b$n$s$t$u$v$w$x%c%h%n%o&^&y'b(l(w)b*g*p+o,n/r0hR%R!kT#]^#_Q%v#[R,s+QQ(h%vS+V(i(jQ,u+WQ-s,sS.m-t-uR/_.nT+R(f+TQ$^}Q&e$QQ)g&zR+s)hQ#khQ$VzQ$Y{R&m$XQ(|&lR+a)PQ(|&lQ+`)OR+a)PR$[|R)Z&rXlOn)l+wQ$d!RR&{$eQ$k!UR&|$fR*P'YQ)}'YV-b,W-c.SQ.c-gQ/Q.]R/R.^U.[-g.].^Q/V.`Q/c.uQ/h.{U/j.}/k/zQ/o/SQ/}/pQ0P/uU0R/v0T0]Q0^0VQ0b0[R0c0_R/U._R/e.u",
308695
+ states: "##jO`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5QQdO'#DoOOQS,5:Y,5:YO5eQdO'#HdOOQS,5:],5:]O5rQ!fO,5:]O5wQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8gQdO,59bO8lQdO,59bO8sQdO,59jO8zQdO'#HTO:QQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:iQdO,59aO'vQdO,59aO:wQdO,59aOOQS,59y,59yO:|QdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;[QdO,5:QO;aQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;rQdO,5:UO;wQdO,5:WOOOW'#Fy'#FyO;|OWO,5:aOOQS,5:a,5:aO<XQdO'#HwOOOW'#Dw'#DwOOOW'#Fz'#FzO<iOWO,5:bOOQS,5:b,5:bOOQS'#F}'#F}O<wQtO,5:iO?iQtO,5=`O@SQ#xO,5=`O@sQtO,5=`OOQS,5:},5:}OA[QeO'#GWOBnQdO,5;^OOQV,5=^,5=^OByQtO'#IPOChQdO,5;tOOQS-E:[-E:[OOQV,5;s,5;sO4dQdO'#FQOOQV-E9o-E9oOCpQtO,59]OEwQtO,59iOFbQdO'#HVOFmQdO'#HVO1XQdO'#HVOFxQdO'#DTOGQQdO,59mOGVQdO'#HZO'vQdO'#HZO0rQdO,5=tOOQS,5=t,5=tO0rQdO'#EROOQS'#ES'#ESOGtQdO'#GPOHUQdO,58|OHUQdO,58|O*xQdO,5:oOHdQtO'#H]OOQS,5:r,5:rOOQS,5:z,5:zOHwQdO,5;OOIYQdO'#IOO1XQdO'#H}OOQS,5;Q,5;QOOQS'#GT'#GTOInQtO,5;QOI|QdO,5;QOJRQdO'#IQOOQS,5;T,5;TOJaQdO'#H|OOQS,5;W,5;WOJrQdO,5;YO4iQdO,5;`O4iQdO,5;cOJzQtO'#ITO'vQdO'#ITOKUQdO,5;eO4VQdO,5;eO0rQdO,5;jO1XQdO,5;lOKZQeO'#EuOLgQgO,5;fO!!hQdO'#IUO4iQdO,5;jO!!sQdO,5;lO!!{QdO,5;qO!#WQtO,5;vO'vQdO,5;vPOOO,5=[,5=[P!#_OSO,5=[P!#dOdO,5=[O!&XQtO1G.jO!&`QtO1G.jO!)PQtO1G.jO!)ZQtO1G.jO!+tQtO1G.jO!,XQtO1G.jO!,lQdO'#HcO!,zQtO'#GuO0rQdO'#HcO!-UQdO'#HbOOQS,5:Z,5:ZO!-^QdO,5:ZO!-cQdO'#HeO!-nQdO'#HeO!.RQdO,5>OOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/RQtO1G.|O!/YQtO1G.|O1lQdO1G.|O!/uQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!/|QdO1G/eO!0^QdO1G/eO!0fQdO1G/fO'vQdO'#H[O!0kQdO'#H[O!0pQtO1G.{O!1QQdO,59iO!2WQdO,5=zO!2hQdO,5=zO!2pQdO1G/mO!2uQtO1G/mOOQS1G/l1G/lO!3VQdO,5=uO!3|QdO,5=uO0rQdO1G/qO!4kQdO1G/sO!4pQtO1G/sO!5QQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5bQdO'#HxO0rQdO'#HxO!5sQdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6RQ#xO1G2zO!6rQtO1G2zO'vQdO,5<jOOQS,5<j,5<jOOQS-E9|-E9|OOQS,5<r,5<rOOQS-E:U-E:UOOQV1G0x1G0xO1XQdO'#GRO!7ZQtO,5>kOOQS1G1`1G1`O!7xQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!7}QdO'#FrO!8YQdO,59oO!8bQdO1G/XO!8lQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9]QdO'#GtOOQS,5<k,5<kOOQS-E9}-E9}O!9nQdO1G.hOOQS1G0Z1G0ZO!9|QdO,5=wO!:^QdO,5=wO0rQdO1G0jO0rQdO1G0jO!:oQdO,5>jO!;QQdO,5>jO1XQdO,5>jO!;cQdO,5>iOOQS-E:R-E:RO!;hQdO1G0lO!;sQdO1G0lO!;xQdO,5>lO!<WQdO,5>lO!<fQdO,5>hO!<|QdO,5>hO!=_QdO'#EpO0rQdO1G0tO!=jQdO1G0tO!=oQgO1G0zO!AmQgO1G0}O!EhQdO,5>oO!ErQdO,5>oO!EzQtO,5>oO0rQdO1G1PO!FUQdO1G1PO4iQdO1G1UO!!sQdO1G1WOOQV,5;a,5;aO!FZQfO,5;aO!F`QgO1G1QO!JaQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JqQdO,5>pO!KOQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KWQdO'#FSO!KiQ!fO1G1WO!KqQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!KvQdO1G1]O!LOQdO'#F^OOQV1G1b1G1bO!#WQtO1G1bPOOO1G2v1G2vP!LTOSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LYQdO,5=|O!LmQdO,5=|OOQS1G/u1G/uO!LuQdO,5>PO!MVQdO,5>PO!M_QdO,5>PO!MrQdO,5>PO!NSQdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8bQdO7+$pO# uQdO1G.|O# |QdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!TQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!eQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!jQdO7+%PO#!rQdO7+%QO#!wQdO1G3fOOQS7+%X7+%XO##XQdO1G3fO##aQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##fQdO1G3aOOQS-E9q-E9qO#$]QdO7+%]OOQS7+%_7+%_O#$kQdO1G3aO#%YQdO7+%_O#%_QdO1G3gO#%oQdO1G3gO#%wQdO7+%]O#%|QdO,5>dO#&gQdO,5>dO#&gQdO,5>dOOQS'#Dx'#DxO#&xO&jO'#DzO#'TO`O'#HyOOOW1G3}1G3}O#'YQdO1G3}O#'bQdO1G3}O#'mQ#xO7+(fO#(^QtO1G2UP#(wQdO'#GOOOQS,5<m,5<mOOQS-E:P-E:POOQS7+&z7+&zOOQS1G3]1G3]OOQS,5<^,5<^OOQS-E9p-E9pOOQS7+$s7+$sO#)UQdO,5=`O#)oQdO,5=`O#*QQtO,5<aO#*eQdO1G3cOOQS-E9s-E9sOOQS7+&U7+&UO#*uQdO7+&UO#+TQdO,5<nO#+iQdO1G4UOOQS-E:Q-E:QO#+zQdO1G4UOOQS1G4T1G4TOOQS7+&W7+&WO#,]QdO7+&WOOQS,5<p,5<pO#,hQdO1G4WOOQS-E:S-E:SOOQS,5<l,5<lO#,vQdO1G4SOOQS-E:O-E:OO1XQdO'#EqO#-^QdO'#EqO#-iQdO'#IRO#-qQdO,5;[OOQS7+&`7+&`O0rQdO7+&`O#-vQgO7+&fO!JdQdO'#GXO4iQdO7+&fO4iQdO7+&iO#1tQtO,5<tO'vQdO,5<tO#2OQdO1G4ZOOQS-E:W-E:WO#2YQdO1G4ZO4iQdO7+&kO0rQdO7+&kOOQV7+&p7+&pO!KiQ!fO7+&rO!KqQdO7+&rO`QeO1G0{OOQV-E:X-E:XO4iQdO7+&lO4iQdO7+&lOOQV,5<u,5<uO#2bQdO,5<uO!JdQdO,5<uOOQV7+&l7+&lO#2mQgO7+&lO#6hQdO,5<vO#6sQdO1G4[OOQS-E:Y-E:YO#7QQdO1G4[O#7YQdO'#IWO#7hQdO'#IWO1XQdO'#IWOOQS'#IW'#IWO#7sQdO'#IVOOQS,5;n,5;nO#7{QdO,5;nO0rQdO'#FUOOQV7+&r7+&rO4iQdO7+&rOOQV7+&w7+&wO4iQdO7+&wO#8QQfO,5;xOOQV7+&|7+&|POOO7+(b7+(bO#8VQdO1G3iOOQS,5<c,5<cO#8eQdO1G3hOOQS-E9u-E9uO#8xQdO,5<dO#9TQdO,5<dO#9hQdO1G3kOOQS-E9v-E9vO#9xQdO1G3kO#:QQdO1G3kO#:bQdO1G3kO#9xQdO1G3kOOQS<<H[<<H[O#:mQtO1G1zOOQS<<Hk<<HkP#:zQdO'#FtO8sQdO1G3bO#;XQdO1G3bO#;^QdO<<HkOOQS<<Hl<<HlO#;nQdO7+)QOOQS<<Hs<<HsO#<OQtO1G1yP#<oQdO'#FsO#<|QdO7+)RO#=^QdO7+)RO#=fQdO<<HwO#=kQdO7+({OOQS<<Hy<<HyO#>bQdO,5<bO'vQdO,5<bOOQS-E9t-E9tOOQS<<Hw<<HwOOQS,5<g,5<gO0rQdO,5<gO#>gQdO1G4OOOQS-E9y-E9yO#?QQdO1G4OO<XQdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?cO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?nQdO7+)iO#?vQdO1G2zO#@aQdO1G2zP'vQdO'#FuO0rQdO<<IpO1XQdO1G2YP1XQdO'#GSO#@rQdO7+)pO#ATQdO7+)pOOQS<<Ir<<IrP1XQdO'#GUP0rQdO'#GQOOQS,5;],5;]O#AfQdO,5>mO#AtQdO,5>mOOQS1G0v1G0vOOQS<<Iz<<IzOOQV-E:V-E:VO4iQdO<<JQOOQV,5<s,5<sO4iQdO,5<sOOQV<<JQ<<JQOOQV<<JT<<JTO#A|QtO1G2`P#BWQdO'#GYO#B_QdO7+)uO#BiQgO<<JVO4iQdO<<JVOOQV<<J^<<J^O4iQdO<<J^O!KiQ!fO<<J^O#FdQgO7+&gOOQV<<JW<<JWO#FnQgO<<JWOOQV1G2a1G2aO1XQdO1G2aO#JiQdO1G2aO4iQdO<<JWO1XQdO1G2bP0rQdO'#G[O#JtQdO7+)vO#KRQdO7+)vOOQS'#FT'#FTO0rQdO,5>rO#KZQdO,5>rOOQS,5>r,5>rO#KfQdO,5>qO#KwQdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<<Jc<<JcO#LPQdO1G1dOOQS7+)T7+)TP#LUQdO'#FwO#LfQdO1G2OO#LyQdO1G2OO#MZQdO1G2OP#MfQdO'#FxO#MsQdO7+)VO#NTQdO7+)VO#NTQdO7+)VO#N]QdO7+)VO#NmQdO7+(|O8sQdO7+(|OOQSAN>VAN>VO$ WQdO<<LmOOQSAN>cAN>cO0rQdO1G1|O$ hQtO1G1|P$ rQdO'#FvOOQS1G2R1G2RP$!PQdO'#F{O$!^QdO7+)jO$!wQdO,5>gOOOO-E9z-E9zOOOW<<MT<<MTO$#VQdO7+(fOOQSAN?[AN?[OOQS7+'t7+'tO$#pQdO<<M[OOQS,5<q,5<qO$$RQdO1G4XOOQS-E:T-E:TOOQVAN?lAN?lOOQV1G2_1G2_O4iQdOAN?qO$$aQgOAN?qOOQVAN?xAN?xO4iQdOAN?xOOQV<<JR<<JRO4iQdOAN?rO4iQdO7+'{OOQV7+'{7+'{O1XQdO7+'{OOQVAN?rAN?rOOQS7+'|7+'|O$([QdO<<MbOOQS1G4^1G4^O0rQdO1G4^OOQS,5<w,5<wO$(iQdO1G4]OOQS-E:Z-E:ZOOQU'#G_'#G_O$(zQfO7+'OO$)VQdO'#F_O$*^QdO7+'jO$*nQdO7+'jOOQS7+'j7+'jO$*yQdO<<LqO$+ZQdO<<LqO$+ZQdO<<LqO$+cQdO'#H^OOQS<<Lh<<LhO$+mQdO<<LhOOQS7+'h7+'hOOQS'#D|'#D|OOOO1G4R1G4RO$,WQdO1G4RO$,`QdO1G4RP!=_QdO'#GVOOQVG25]G25]O4iQdOG25]OOQVG25dG25dOOQVG25^G25^OOQV<<Kg<<KgO4iQdO<<KgOOQS7+)x7+)xP$,kQdO'#G]OOQU-E:]-E:]OOQV<<Jj<<JjO$-_QtO'#FaOOQS'#Fc'#FcO$-oQdO'#FbO$.aQdO'#FbOOQS'#Fb'#FbO$.fQdO'#IYO$)VQdO'#FiO$)VQdO'#FiO$.}QdO'#FjO$)VQdO'#FkO$/UQdO'#IZOOQS'#IZ'#IZO$/sQdO,5;yOOQS<<KU<<KUO$/{QdO<<KUO$0]QdOANB]O$0mQdOANB]O$0uQdO'#H_OOQS'#H_'#H_O1sQdO'#DcO$1`QdO,5=xOOQSANBSANBSOOOO7+)m7+)mO$1wQdO7+)mOOQVLD*wLD*wOOQVANARANARO5rQ!fO'#GaO$2PQtO,5<SO$)VQdO'#FmOOQS,5<W,5<WOOQS'#Fd'#FdO$2qQdO,5;|O$2vQdO,5;|OOQS'#Fg'#FgO$)VQdO'#G`O$3hQdO,5<QO$4SQdO,5>tO$4dQdO,5>tO1XQdO,5<PO$4uQdO,5<TO$4zQdO,5<TO$)VQdO'#I[O$5PQdO'#I[O$5UQdO,5<UOOQS,5<V,5<VO'vQdO'#FpOOQU1G1e1G1eO4iQdO1G1eOOQSAN@pAN@pO$5ZQdOG27wO$5kQdO,59}OOQS1G3d1G3dOOOO<<MX<<MXOOQS,5<{,5<{OOQS-E:_-E:_O$5pQtO'#FaO$5wQdO'#I]O$6VQdO'#I]O$6_QdO,5<XOOQS1G1h1G1hO$6dQdO1G1hO$6iQdO,5<zOOQS-E:^-E:^O$7TQdO,5=OO$7lQdO1G4`OOQS-E:b-E:bOOQS1G1k1G1kOOQS1G1o1G1oO$7|QdO,5>vO$)VQdO,5>vOOQS1G1p1G1pO$8[QtO,5<[OOQU7+'P7+'PO$+cQdO1G/iO$)VQdO,5<YO$8cQdO,5>wO$8jQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)VQdO'#GdO$8rQdO1G4bO$8|QdO1G4bO$9UQdO1G4bOOQS7+%T7+%TO$9dQdO1G1tO$9rQtO'#FaO$9yQdO,5<}OOQS,5<},5<}O$:XQdO1G4cOOQS-E:a-E:aO$)VQdO,5<|O$:`QdO,5<|O$:eQdO7+)|OOQS-E:`-E:`O$:oQdO7+)|O$)VQdO,5<ZP$)VQdO'#GcO$:wQdO1G2hO$)VQdO1G2hP$;VQdO'#GbO$;^QdO<<MhO$;hQdO1G1uO$;vQdO7+(SO8sQdO'#C}O8sQdO,59bO8sQdO,59bO8sQdO,59bO$<UQtO,5=`O8sQdO1G.|O0rQdO1G/XO0rQdO7+$pP$<iQdO'#GOO'vQdO'#GtO$<vQdO,59bO$<{QdO,59bO$=SQdO,59mO$=XQdO1G/UO1sQdO'#DRO8sQdO,59j",
308696
+ stateData: "$=r~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PE`O%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO~OS'iO%['hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#lO%kWi~P!#lOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&gO%mWi%nWi~P!&gOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)eOVWi_Wi%qWi%rWi%sWi~P!)eO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.WOlji~P!.WOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/aOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PE`OV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!N_Olji~P!N_OV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/aOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/aO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$,yO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)cOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/aOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)VOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$,yOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)VOz/zO#[/OO%j.yO!['Oa~O{$da~P%SOg'Pa~P$)VOz0SOg'Pa~Oa0UO!['Oi~P$)cOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$,yO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)VO{0^O~Oa0UO!['Oq~P$)cOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)cOa0UO!['Oy~P$)cO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/aO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~",
308697
+ goto: "!=l'QPPPPPP'RP'Z*s+]+v,b,}-kP.YP'Z.y.y'ZPPP'Z2cPPPPPP2c5VPP5VP7g7p=xPP={>m>pPP'Z'ZPP?PPP'Z'ZPP'Z'Z'Z'Z'Z?T?}'ZP@QP@WD_G{HPPHSH^Hb'ZPPPHeHn'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHtIQIYPIaIgPIaPIaIaPPPIaPKuPLOLYL`KuPIaLiPIaPLpLvPLzM`M}NhLzLzNnN{LzLzLzLz! a! g! j! o! r! |!!S!!`!!r!!x!#S!#Y!#v!#|!$S!$^!$d!$j!$|!%W!%^!%d!%n!%t!%z!&Q!&W!&^!&h!&n!&x!'O!'X!'_!'n!'v!(Q!(XPPPPPPPPPPP!(_!(b!(h!(q!({!)WPPPPPPPPPPPP!-z!/`!3`!6pPP!6x!7X!7b!8Z!8Q!8d!8j!8m!8p!8s!8{!9lPPPPPPPPPPPPPPPPP!9o!9s!9yP!:_!:c!:o!:x!;U!;l!;o!;r!;x!<O!<U!<XP!<a!<j!=f!=i]eOn#g$j)t,P'}`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r}!cQ#c#p$R$d$p%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!P!dQ#c#p$R$d$p$u%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!R!eQ#c#p$R$d$p$u$v%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!T!fQ#c#p$R$d$p$u$v$w%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!V!gQ#c#p$R$d$p$u$v$w$x%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!X!hQ#c#p$R$d$p$u$v$w$x$y%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!]!hQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g'}TOTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r&cVOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/Z/s0c0d0e0f0h0i0j0k0n0r%mXOYZ[dnrxy}!P!Q!U!i!k#[#d#g#y#{#}$Q$h$j$}%S%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/Z0i0j0kQ#vqQ/[.kR0o0q't`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rh#jhz{$W$Z&l&q)S)X+f+g-RW#rq&].k0qQ$]|Q$a!OQ$n!VQ$o!WW$|!i'm*d,gS&[#s#tQ'S$iQ(s&UQ)U&nU)Y&s)Z+jW)a&w+m-T-{Q*Q']W*R'_,`-h.TQ+l)`S,_*S*TQ-Q+eQ-_,TQ-c,WQ.R-al.W-l.^._.a.z.|/R/j/o/t/y0U0Z0^Q/S.`Q/a.tQ/l/OU0P/u0S0[X0V/z0W0_0`R&Z#r!_!wYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZR%^!vQ!{YQ%x#[Q&d#}Q&g$QR,{+YT.j-s/s![!jQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0gQ&X#kQ'c$oR*^'dR'l$|Q%V!mR/_.r'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rS#a_#b!P.[-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rT#a_#bT#^^#_R(o%xa(l%x(n(o+`,{-y-z.oT+[(k+]R-z,{Q$PsQ+l)aR,^*RX#}s$O$P&fQ&y$aQ'a$nQ'd$oR)s'SQ)b&wV-S+m-T-{ZgOn$j)t,PXkOn)t,PQ$k!TQ&z$bQ&{$cQ'^$mQ'b$oQ)q'RQ)x'WQ){'XQ)|'YQ*Z'`S*]'c'dQ+s)gQ+u)hQ+v)iQ+z)oS+|)r*[Q,Q)vQ,R)wS,S)y)zQ,d*^Q-V+rQ-W+tQ-Y+{S-Z+},OQ-`,UQ-b,VQ-|-XQ.O-[Q.P-^Q.Q-_Q.p-}Q.q.RQ/W.dR/r/XWkOn)t,PR#mjQ'`$nS)r'S'aR,O)sQ,]*RR-f,^Q*['`Q+})rR-[,OZiOjn)t,PQ'f$pR*`'gT-j,e-ku.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^t.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^Q/S.`X0V/z0W0_0`!P.Z-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`Q.w.YR/f.xg.z.].{/b/i/n/|0O0Q0]0a0bu.b-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^X.u.W.b/a0PR/c.tV0R/u0S0[R/X.dQnOS#on,PR,P)tQ&^#uR(x&^S%m#R#wS(_%m(bT(b%p&`Q%a!yQ%h!}W(P%a%h(U(YQ(U%eR(Y%jQ&i$RR)O&iQ(e%qQ*{(`T+R(e*{Q'n%OR*e'nS'q%R%SY*i'q*j,m-q.hU*j'r's'tU,m*k*l*mS-q,n,oR.h-rQ#Y]R%t#YQ#_^R%y#_Q(h%vS+W(h+XR+X(iQ+](kR,|+]Q#b_R%{#bQ#ebQ%}#cW&Q#e%}({+bQ({&cR+b0gQ$OsS&e$O&fR&f$PQ&v$_R)_&vQ&V#jR(t&VQ&m$VS)T&m+hR+h)UQ$Z{R&p$ZQ&t$]R)[&tQ+n)bR-U+nQ#hfR&S#hQ)f&zR+q)fQ&}$dS)m&})nR)n'OQ'V$kR)u'VQ'[$lS*P'[,ZR,Z*QQ,a*VR-i,aWjOn)t,PR#ljQ-k,eR.U-kd.{.]/b/i/n/|0O0Q0]0a0bR/h.{U.s.W/a0PR/`.sQ/{/nS0X/{0YR0Y/|S/v/b/cR0T/vQ.}.]R/k.}R!ZPXmOn)t,PWlOn)t,PR'T$jYfOn$j)t,PR&R#g[sOn#g$j)t,PR&d#}&bQOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/Z/s0c0d0e0f0h0i0j0k0n0rQ!nTQ#caQ#poU$Rt%c(SS$d!R$gQ$p!XQ$u!cQ$v!dQ$w!eQ$x!fQ$y!gQ$z!hQ%e!zQ%j#OQ%p#SQ%q#TQ&`#xQ'O$eQ'g$qQ(q&OU(|&h(}+cW)j&|)l+x+yQ*o'|Q*x(]Q+w)kQ,v+QQ/q/VR0g0lQ!yYQ!}ZQ$b!PQ$c!QQ%R!kQ't%S^'{%`%g(O(W*q*t*v^*f'p*h,k,l-p.g/ZQ*l'rQ*m'sQ+t)gQ,j*gQ,n*kQ-n,hQ-o,iQ-r,oQ.e-mR/Y.f[bOn#g$j)t,P!^!vYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZQ#R[Q#fdS#wrxQ$UyW$_}$Q'P)pS$l!U$hW${!i'm*d,gS%v#[+Y`&P#d%|(p(r(z+a-O0kQ&a#yQ&b#{Q&c#}Q'j$}Q'z%^W([%l(^*y*}Q(`%nQ(i%wQ(v&ZS(y&_0iQ)P&jQ)Q&kU)]&u)^+kQ)d&xQ)y'WY)}'Z*O,X,Y-dQ*b'lS*n'w0jW+P(d*z,s,wW+T(g+V,y,zQ+p)eQ,U)zQ,c*YQ,x+UQ-P+dQ-e,]Q-v,uR.S-fhUOn#d#g$j%|&_'w(p(r)t,P%S!uYZ[drxy}!P!Q!U!i!k#[#y#{#}$Q$h$}%S%^%`%g%l%n%w&Z&j&k&u&x'P'W'Z'l'm'p'r's(O(W(^(d(g(z)^)e)g)p)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/Z0i0j0kQ#qpW%W!o!s0d0nQ%X!pQ%Y!qQ%[!tQ%f0cS'v%Z0hQ'x0eQ'y0fQ,p*rQ-u,qS.i-s/sR0p0rU#uq.k0qR(w&][cOn#g$j)t,PZ!xY#[#}$Q+YQ#W[Q#zrR$TxQ%b!yQ%i!}Q%o#RQ'j${Q(V%eQ(Z%jQ(c%pQ(f%qQ*|(`Q,f*bQ-t,pQ.m-uR/].lQ$StQ(R%cR*s(SQ.l-sR/}/sR#QZR#V[R%Q!iQ%O!iV*c'm*d,g!]!lQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0gR%T!kT#]^#_Q%x#[R,{+YQ(m%xS+_(n(oQ,}+`Q-x,{S.n-y-zR/^.oT+Z(k+]Q$`}Q&g$QQ)o'PR+{)pQ$XzQ)W&qR+i)XQ$XzQ&o$WQ)W&qR+i)XQ#khW$Vz$W&q)XQ$[{Q&r$ZZ)R&l)S+f+g-RR$^|R)c&wXlOn)t,PQ$f!RR'Q$gQ$m!UR'R$hR*X'_Q*V'_V-g,`-h.TQ.d-lQ/P.^R/Q._U.]-l.^._Q/U.aQ/b.tQ/g.zU/i.|/j/yQ/n/RQ/|/oQ0O/tU0Q/u0S0[Q0]0UQ0a0ZR0b0^R/T.`R/d.t",
308542
308698
  nodeNames: "\u26A0 print Escape { Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ) ( ParenthesizedExpression BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from TupleExpression ComprehensionExpression async for LambdaExpression ] [ ArrayExpression ArrayComprehensionExpression } { DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatSelfDoc FormatConversion FormatSpec FormatReplacement FormatSelfDoc ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert TypeDefinition type TypeParamList TypeParam StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At MatchStatement match MatchBody MatchClause case CapturePattern LiteralPattern ArithOp ArithOp AsPattern OrPattern LogicOp AttributePattern SequencePattern MappingPattern StarPattern ClassPattern PatternArgList KeywordPattern KeywordPattern Guard",
308543
308699
  maxTerm: 277,
308544
308700
  context: trackIndent,
@@ -308555,7 +308711,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
308555
308711
  tokenizers: [legacyPrint, indentation, newlines, strings, 0, 1, 2, 3, 4],
308556
308712
  topRules: { "Script": [0, 5] },
308557
308713
  specialized: [{ term: 221, get: (value) => spec_identifier[value] || -1 }],
308558
- tokenPrec: 7646
308714
+ tokenPrec: 7652
308559
308715
  });
308560
308716
  const cache$1 = /* @__PURE__ */ new NodeWeakMap();
308561
308717
  const ScopeNodes = /* @__PURE__ */ new Set([
@@ -310145,6 +310301,75 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
310145
310301
  function noop$3() {
310146
310302
  }
310147
310303
  var noop_1 = noop$3;
310304
+ var extendStatics = function(d2, b2) {
310305
+ extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b3) {
310306
+ d3.__proto__ = b3;
310307
+ } || function(d3, b3) {
310308
+ for (var p2 in b3)
310309
+ if (Object.prototype.hasOwnProperty.call(b3, p2))
310310
+ d3[p2] = b3[p2];
310311
+ };
310312
+ return extendStatics(d2, b2);
310313
+ };
310314
+ function __extends(d2, b2) {
310315
+ if (typeof b2 !== "function" && b2 !== null)
310316
+ throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null");
310317
+ extendStatics(d2, b2);
310318
+ function __() {
310319
+ this.constructor = d2;
310320
+ }
310321
+ d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __());
310322
+ }
310323
+ function __values(o2) {
310324
+ var s2 = typeof Symbol === "function" && Symbol.iterator, m2 = s2 && o2[s2], i2 = 0;
310325
+ if (m2)
310326
+ return m2.call(o2);
310327
+ if (o2 && typeof o2.length === "number")
310328
+ return {
310329
+ next: function() {
310330
+ if (o2 && i2 >= o2.length)
310331
+ o2 = void 0;
310332
+ return { value: o2 && o2[i2++], done: !o2 };
310333
+ }
310334
+ };
310335
+ throw new TypeError(s2 ? "Object is not iterable." : "Symbol.iterator is not defined.");
310336
+ }
310337
+ function __read(o2, n2) {
310338
+ var m2 = typeof Symbol === "function" && o2[Symbol.iterator];
310339
+ if (!m2)
310340
+ return o2;
310341
+ var i2 = m2.call(o2), r2, ar = [], e3;
310342
+ try {
310343
+ while ((n2 === void 0 || n2-- > 0) && !(r2 = i2.next()).done)
310344
+ ar.push(r2.value);
310345
+ } catch (error2) {
310346
+ e3 = { error: error2 };
310347
+ } finally {
310348
+ try {
310349
+ if (r2 && !r2.done && (m2 = i2["return"]))
310350
+ m2.call(i2);
310351
+ } finally {
310352
+ if (e3)
310353
+ throw e3.error;
310354
+ }
310355
+ }
310356
+ return ar;
310357
+ }
310358
+ function __spreadArray(to2, from, pack) {
310359
+ if (pack || arguments.length === 2)
310360
+ for (var i2 = 0, l2 = from.length, ar; i2 < l2; i2++) {
310361
+ if (ar || !(i2 in from)) {
310362
+ if (!ar)
310363
+ ar = Array.prototype.slice.call(from, 0, i2);
310364
+ ar[i2] = from[i2];
310365
+ }
310366
+ }
310367
+ return to2.concat(ar || Array.prototype.slice.call(from));
310368
+ }
310369
+ typeof SuppressedError === "function" ? SuppressedError : function(error2, suppressed, message) {
310370
+ var e3 = new Error(message);
310371
+ return e3.name = "SuppressedError", e3.error = error2, e3.suppressed = suppressed, e3;
310372
+ };
310148
310373
  function isFunction$1(value) {
310149
310374
  return typeof value === "function";
310150
310375
  }
@@ -311338,6 +311563,11 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
311338
311563
  function SoftEdgeArrowButton() {
311339
311564
  return jsxRuntime.exports.jsxs("svg", { fill: "none", height: "15", viewBox: "0 0 16 15", width: "16", xmlns: "http://www.w3.org/2000/svg", children: [jsxRuntime.exports.jsx("path", { d: "M9.1333 0.867188C10.9545 0.867188 12.701 1.59064 13.9888 2.87839C15.2765 4.16614 16 5.9127 16 7.73385C16 9.55501 15.2765 11.3016 13.9888 12.5893C12.701 13.8771 10.9545 14.6005 9.1333 14.6005L9.1333 12.2659C10.3353 12.2659 11.488 11.7884 12.3379 10.9385C13.1878 10.0885 13.6653 8.93581 13.6653 7.73385C13.6653 6.53189 13.1878 5.37916 12.3379 4.52925C11.488 3.67933 10.3353 3.20185 9.1333 3.20185V0.867188Z", fill: "currentColor" }), jsxRuntime.exports.jsx("path", { d: "M1.14286 6.59375H14.1667V8.87946H1.14286C0.510714 8.87946 0 8.36875 0 7.73661C0 7.10446 0.510714 6.59375 1.14286 6.59375Z", fill: "currentColor" }), jsxRuntime.exports.jsx("circle", { cx: "9.13389", cy: "2.03452", fill: "currentColor", r: "1.16733" }), jsxRuntime.exports.jsx("circle", { cx: "9.13389", cy: "13.4344", fill: "currentColor", r: "1.16733" })] });
311340
311565
  }
311566
+ function CollapseExpandGroupButton(props) {
311567
+ const { disablePointerEvents } = React.useContext(pointerCtx);
311568
+ const buttonText = props.showExpandAll ? "Collapse All" : "Expand All";
311569
+ return jsxRuntime.exports.jsx(Tooltip$1, { content: buttonText, placement: "bottom", children: jsxRuntime.exports.jsx(FloatingButton, { "aria-label": buttonText, disableEvents: disablePointerEvents, fixedSize: true, onClick: props.showExpandAll ? props.onCollapseAll : props.onExpandAll, style: { padding: "0 0.75rem" }, children: props.showExpandAll ? jsxRuntime.exports.jsx(DownLeftAndUpRightToCenter, {}) : jsxRuntime.exports.jsx(UpRightAndDownLeftFromCenter, {}) }) });
311570
+ }
311341
311571
  function SaveImageButton(props) {
311342
311572
  const [hovered, setHovered] = React.useState(false);
311343
311573
  const { disablePointerEvents } = React.useContext(pointerCtx);
@@ -311792,6 +312022,8 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
311792
312022
  return deque;
311793
312023
  };
311794
312024
  var hasCycle = hasCycle$1;
312025
+ const DEFAULT_NODE_SIZE$1 = 64;
312026
+ const TARGET_NODE_MULTIPLIER = 1.25;
311795
312027
  function willCreateCycle(graphOriginal, edge) {
311796
312028
  const graph = graphOriginal.copy();
311797
312029
  try {
@@ -311828,14 +312060,14 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
311828
312060
  function getTooltipContent(id2, data2, theme2, label, tooltipSize) {
311829
312061
  return jsxRuntime.exports.jsxs("div", { children: [jsxRuntime.exports.jsx("div", { style: { display: "flex", flexDirection: "row", justifyContent: "center" }, children: jsxRuntime.exports.jsx("h2", { style: { fontSize: tooltipSize ? `${tooltipSize}px` : theme2.font.size }, children: label !== null && label !== void 0 ? label : id2 }) }), data2 && typeof data2 === "object" && jsxRuntime.exports.jsx("ul", { style: { margin: 0, padding: 0, paddingLeft: "1rem", paddingTop: "1rem" }, children: Object.keys(data2).map((key) => jsxRuntime.exports.jsx("li", { children: jsxRuntime.exports.jsxs("p", { style: { fontSize: tooltipSize ? `${tooltipSize}px` : theme2.font.size }, children: [jsxRuntime.exports.jsxs("strong", { children: [key, ": "] }), data2[key]] }) }, `${id2}-${String(data2[key])}`)) }), data2 && typeof data2 === "string" && jsxRuntime.exports.jsx("span", { style: { margin: 0, padding: 0, paddingTop: "1rem" }, children: data2 })] });
311830
312062
  }
311831
- function getNodeGroup(graph, id2, isLatent) {
311832
- let group = "other";
312063
+ function getNodeCategory(graph, id2, isLatent) {
312064
+ let category = "other";
311833
312065
  if (isLatent) {
311834
- group = "latent";
311835
- } else if (graph.inDegree(id2) > 0 && graph.outDegree(id2) === 0) {
311836
- group = "target";
312066
+ category = "latent";
312067
+ } else if (graph.hasNode(id2) && graph.inDegree(id2) > 0 && graph.outDegree(id2) === 0) {
312068
+ category = "target";
311837
312069
  }
311838
- return group;
312070
+ return category;
311839
312071
  }
311840
312072
  function isDag(graph) {
311841
312073
  if (hasCycle(graph)) {
@@ -311865,7 +312097,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
311865
312097
  }
311866
312098
  return void 0;
311867
312099
  }
311868
- function getNodeGroups(nodes, group, graph) {
312100
+ function getGroupToNodesMap(nodes, group, graph) {
311869
312101
  const attributePathArray = group.split(".");
311870
312102
  return nodes.reduce((groupAccumulator, node2) => {
311871
312103
  const nodeAttributes = graph.getNodeAttributes(node2);
@@ -311881,6 +312113,18 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
311881
312113
  return groupAccumulator;
311882
312114
  }, {});
311883
312115
  }
312116
+ function getNodeToGroupMap(nodes, group, graph) {
312117
+ const attributePathArray = group.split(".");
312118
+ return nodes.reduce((nodeToGroupMap, node2) => {
312119
+ const nodeAttributes = graph.getNodeAttributes(node2);
312120
+ const nodeGroup = attributePathArray.reduce(getPathInNodeAttribute, nodeAttributes);
312121
+ if (nodeGroup !== void 0) {
312122
+ const groupKey = String(nodeGroup);
312123
+ nodeToGroupMap[node2] = groupKey;
312124
+ }
312125
+ return nodeToGroupMap;
312126
+ }, {});
312127
+ }
311884
312128
  function getNodeOrder(nodes, orderPath, graph) {
311885
312129
  const attributePathArray = orderPath.split(".");
311886
312130
  return nodes.reduce((groupAccumulator, node2) => {
@@ -311898,7 +312142,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
311898
312142
  if (!Array.isArray(tiers)) {
311899
312143
  const { group, rank } = tiers;
311900
312144
  const nodes = graph.nodes();
311901
- const tieredNodes = getNodeGroups(nodes, group, graph);
312145
+ const tieredNodes = getGroupToNodesMap(nodes, group, graph);
311902
312146
  if (rank) {
311903
312147
  const missingGroups = [];
311904
312148
  tiersArray = rank.map((key) => {
@@ -312427,7 +312671,7 @@ You must set sticky: 'left' | 'right' for the '${bugWithUnderColumnsSticky.Heade
312427
312671
  function LegendList({ listItems }) {
312428
312672
  return jsxRuntime.exports.jsx(Ul, { children: listItems.map((_a3) => {
312429
312673
  var { label } = _a3, props = __rest$5(_a3, ["label"]);
312430
- return jsxRuntime.exports.jsxs(Li, { children: [jsxRuntime.exports.jsx(LegendSymbol, Object.assign({}, props)), jsxRuntime.exports.jsx(LegendText, { children: label })] }, label);
312674
+ return jsxRuntime.exports.jsxs(Li, { children: [jsxRuntime.exports.jsx(LegendSymbol, Object.assign({}, props)), jsxRuntime.exports.jsx(LegendText, { children: label })] }, `${label}-${props.type}`);
312431
312675
  }) });
312432
312676
  }
312433
312677
  const LegendWrapper = styled__default.default.div`
@@ -340168,7 +340412,7 @@ ${e3}`);
340168
340412
  }
340169
340413
  class GraphLayoutBuilder {
340170
340414
  constructor() {
340171
- this._nodeSize = 64;
340415
+ this._nodeSize = DEFAULT_NODE_SIZE$1;
340172
340416
  this._nodeFontSize = 16;
340173
340417
  }
340174
340418
  nodeSize(size2) {
@@ -347395,22 +347639,22 @@ ${e3}`);
347395
347639
  }
347396
347640
  const nodes = graph.mapNodes((id2, attributes2) => {
347397
347641
  const parentIds = graph.inboundNeighbors(id2);
347398
- let nodeGroup = "latent";
347642
+ let nodeType = "latent";
347399
347643
  let nodeOrder;
347400
347644
  let nodeRank;
347401
347645
  if (tiers) {
347402
347646
  const nodeData = nodeTiersMap.get(id2);
347403
- nodeGroup = nodeData === null || nodeData === void 0 ? void 0 : nodeData.group;
347647
+ nodeType = nodeData === null || nodeData === void 0 ? void 0 : nodeData.group;
347404
347648
  nodeOrder = nodeData === null || nodeData === void 0 ? void 0 : nodeData.order;
347405
347649
  nodeRank = nodeData === null || nodeData === void 0 ? void 0 : nodeData.rank;
347406
347650
  }
347407
- return Object.assign(Object.assign({}, attributes2), { group: nodeGroup, ord: nodeOrder, parentIds, rank: nodeRank });
347651
+ return Object.assign(Object.assign({}, attributes2), { group: nodeType, ord: nodeOrder, parentIds, rank: nodeRank });
347408
347652
  });
347409
347653
  const stratify = ai();
347410
347654
  return stratify(nodes);
347411
347655
  }
347412
347656
  function getD3Data(graph) {
347413
- const nodes = graph.reduceNodes((acc, id2, attrs2) => Object.assign(Object.assign({}, acc), { [id2]: Object.assign(Object.assign({}, attrs2), { group: getNodeGroup(graph, id2, attrs2["meta.rendering_properties.latent"]) }) }), {});
347657
+ const nodes = graph.reduceNodes((acc, id2, attrs2) => Object.assign(Object.assign({}, acc), { [id2]: Object.assign(Object.assign({}, attrs2), { category: getNodeCategory(graph, id2, attrs2["meta.rendering_properties.latent"]) }) }), {});
347414
347658
  const edges = graph.mapEdges((edgeKey, attrs2, source, target) => {
347415
347659
  return Object.assign(Object.assign({}, attrs2), { source: nodes[source], target: nodes[target] });
347416
347660
  });
@@ -347555,6 +347799,7 @@ ${e3}`);
347555
347799
  this._linkForce = 5;
347556
347800
  this._warmupTicks = 100;
347557
347801
  this._tierSeparation = 300;
347802
+ this._groupRepelStrength = 2e3;
347558
347803
  this.orientation = "horizontal";
347559
347804
  }
347560
347805
  collisionForce(force) {
@@ -347577,6 +347822,10 @@ ${e3}`);
347577
347822
  this._tierSeparation = separation;
347578
347823
  return this;
347579
347824
  }
347825
+ groupRepelStrength(force) {
347826
+ this._groupRepelStrength = force;
347827
+ return this;
347828
+ }
347580
347829
  build() {
347581
347830
  return new SpringLayout(this);
347582
347831
  }
@@ -347589,12 +347838,12 @@ ${e3}`);
347589
347838
  function force(alpha) {
347590
347839
  sortedNodesOrderArray.forEach((nodeName, index2) => {
347591
347840
  const targetPosition = index2 * nodeSeparation;
347592
- const targettedNode = nodesMap.get(nodeName);
347593
- if (targettedNode) {
347841
+ const targetedNode = nodesMap.get(nodeName);
347842
+ if (targetedNode) {
347594
347843
  if (orientation === "horizontal") {
347595
- targettedNode.vy += (targetPosition - targettedNode.y) * alpha;
347844
+ targetedNode.vy += (targetPosition - targetedNode.y) * alpha;
347596
347845
  } else {
347597
- targettedNode.vx += (targetPosition - targettedNode.x) * alpha;
347846
+ targetedNode.vx += (targetPosition - targetedNode.x) * alpha;
347598
347847
  }
347599
347848
  }
347600
347849
  });
@@ -347619,12 +347868,12 @@ ${e3}`);
347619
347868
  tiersArray.forEach((tier, index2) => {
347620
347869
  const targetPosition = index2 * tiersSeparation;
347621
347870
  tier.forEach((nodeName) => {
347622
- const targettedNode = nodesMapping.get(nodeName);
347623
- if (targettedNode) {
347871
+ const targetedNode = nodesMapping.get(nodeName);
347872
+ if (targetedNode) {
347624
347873
  if (orientation === "horizontal") {
347625
- targettedNode.x = targetPosition + (targettedNode.x - targetPosition) * alpha;
347874
+ targetedNode.x = targetPosition + (targetedNode.x - targetPosition) * alpha;
347626
347875
  } else {
347627
- targettedNode.y = targetPosition + (targettedNode.y - targetPosition) * alpha;
347876
+ targetedNode.y = targetPosition + (targetedNode.y - targetPosition) * alpha;
347628
347877
  }
347629
347878
  }
347630
347879
  });
@@ -347634,6 +347883,33 @@ ${e3}`);
347634
347883
  }
347635
347884
  simulation2.force("layer", forceLayer());
347636
347885
  }
347886
+ function createGroupEdges(nodeList) {
347887
+ const edges = [];
347888
+ if (nodeList.length > 1) {
347889
+ for (let i2 = 0; i2 < nodeList.length; i2++) {
347890
+ for (let j2 = i2 + 1; j2 < nodeList.length; j2++) {
347891
+ edges.push({
347892
+ source: nodeList[i2],
347893
+ target: nodeList[j2],
347894
+ originalMeta: {},
347895
+ edge_type: EdgeType.UNDIRECTED_EDGE
347896
+ });
347897
+ }
347898
+ }
347899
+ }
347900
+ return edges;
347901
+ }
347902
+ function createEdgesWithinAllGroups(group, graph, nodes) {
347903
+ const groupsToNodes = getGroupToNodesMap(graph.nodes(), group, graph);
347904
+ const edges = [];
347905
+ Object.keys(groupsToNodes).forEach((groupName) => {
347906
+ const nodeStringsList = groupsToNodes[groupName];
347907
+ const nodeList = nodeStringsList.map((nodeString) => nodes.find((node2) => node2.id === nodeString));
347908
+ const groupEdges = createGroupEdges(nodeList);
347909
+ edges.push(...groupEdges);
347910
+ });
347911
+ return edges;
347912
+ }
347637
347913
  class SpringLayout extends GraphLayout {
347638
347914
  constructor(builder) {
347639
347915
  super(builder);
@@ -347642,12 +347918,56 @@ ${e3}`);
347642
347918
  this.gravity = builder._gravity;
347643
347919
  this.warmupTicks = builder._warmupTicks;
347644
347920
  this.tierSeparation = builder._tierSeparation;
347921
+ this.groupRepelStrength = builder._groupRepelStrength;
347645
347922
  this.orientation = builder.orientation;
347646
347923
  this.tiers = builder.tiers;
347924
+ this.group = builder.group;
347647
347925
  }
347648
347926
  applyLayout(graph, forceUpdate) {
347649
- let [edges, nodes] = getD3Data(graph);
347650
- const simulation$1 = simulation(nodes).force("links", link(edges).id((d2) => d2.id).distance(() => this.nodeSize * this.linkForce)).force("charge", manyBody().strength(this.gravity)).force("collide", collide(this.nodeSize * this.collisionForce)).force("center", center()).stop();
347927
+ const [edges, nodes] = getD3Data(graph);
347928
+ const { group, groupRepelStrength } = this;
347929
+ let simulation$1;
347930
+ if (group) {
347931
+ let clusterRepelForce = function(alpha) {
347932
+ for (let i2 = 0; i2 < groupKeys.length; i2++) {
347933
+ const groupA = groupKeys[i2];
347934
+ const nodeA = firstNodes[groupA];
347935
+ const groupASize = groupsToNodes[groupA].length;
347936
+ for (let j2 = i2 + 1; j2 < groupKeys.length; j2++) {
347937
+ const groupB = groupKeys[j2];
347938
+ const nodeB = firstNodes[groupB];
347939
+ const groupBSize = groupsToNodes[groupB].length;
347940
+ const dx = nodeA.x - nodeB.x;
347941
+ const dy = nodeA.y - nodeB.y;
347942
+ const distance = Math.sqrt(dx * dx + dy * dy);
347943
+ if (distance > 3e3) {
347944
+ continue;
347945
+ }
347946
+ const cappedDistance = Math.max(distance, 1);
347947
+ const strengthFactor = groupASize * groupBSize;
347948
+ const strength = groupRepelStrength * strengthFactor * alpha / (cappedDistance * cappedDistance);
347949
+ if (strength < 0.01) {
347950
+ continue;
347951
+ }
347952
+ nodeA.vx += nodeA.x * strength;
347953
+ nodeA.vy += nodeA.y * strength;
347954
+ nodeB.vx -= nodeB.x * strength;
347955
+ nodeB.vy -= nodeB.y * strength;
347956
+ }
347957
+ }
347958
+ };
347959
+ const groupsToNodes = getGroupToNodesMap(graph.nodes(), group, graph);
347960
+ const groupKeys = Object.keys(groupsToNodes);
347961
+ const firstNodes = {};
347962
+ groupKeys.forEach((groupKey) => {
347963
+ const nodeId = groupsToNodes[groupKey][0];
347964
+ firstNodes[groupKey] = nodes.find((node2) => node2.id === nodeId);
347965
+ });
347966
+ const groupEdges = createEdgesWithinAllGroups(this.group, graph, nodes);
347967
+ simulation$1 = simulation(nodes).force("clusterRepel", clusterRepelForce).force("groupLinks", link(groupEdges).id((d2) => d2.id).distance(() => this.nodeSize * this.linkForce)).force("collide", collide(this.nodeSize * this.collisionForce)).force("center", center()).stop();
347968
+ } else {
347969
+ simulation$1 = simulation(nodes).force("links", link(edges).id((d2) => d2.id).distance(() => this.nodeSize * this.linkForce)).force("charge", manyBody().strength(this.gravity)).force("collide", collide(this.nodeSize * this.collisionForce)).force("center", center()).stop();
347970
+ }
347651
347971
  if (this.tiers) {
347652
347972
  applyTierForces(simulation$1, graph, nodes, this.tiers, this.tierSeparation, this.orientation);
347653
347973
  }
@@ -347657,7 +347977,6 @@ ${e3}`);
347657
347977
  forceUpdate(newNodes);
347658
347978
  }).restart();
347659
347979
  const onAddNode = debounce_1$1(() => {
347660
- [edges, nodes] = getD3Data(graph);
347661
347980
  simulation$1.nodes(nodes).force("links", link(edges).id((d2) => d2.id).distance(() => this.nodeSize * this.linkForce)).alpha(0.8).alphaTarget(0).restart();
347662
347981
  }, 100);
347663
347982
  return Promise.resolve({
@@ -347714,18 +348033,18 @@ ${e3}`);
347714
348033
  applyLayout(graph) {
347715
348034
  const [edges, nodes] = getD3Data(graph);
347716
348035
  const simulation$1 = simulation(nodes).alphaMin(1e-3).force("link", link(edges).id((d2) => d2.id).distance(() => this.nodeSize * 3).strength(this.targetLocation === "center" ? 0.7 : 0.1)).force("charge", manyBody().strength(this.targetLocation === "center" ? -1e3 : -2e3)).force("y", y$3().y((node2) => {
347717
- if (node2.group === "target") {
348036
+ if (node2.category === "target") {
347718
348037
  return this.nodeSize * 10;
347719
348038
  }
347720
- if (node2.group === "latent") {
348039
+ if (node2.category === "latent") {
347721
348040
  return this.nodeSize * 2;
347722
348041
  }
347723
348042
  return this.nodeSize * 6;
347724
348043
  }).strength(this.targetLocation === "center" ? 0 : 0.3)).force("collide", collide(this.nodeSize + 10)).force("radial", radial((node2) => {
347725
- if (node2.group === "target") {
348044
+ if (node2.category === "target") {
347726
348045
  return 0;
347727
348046
  }
347728
- if (node2.group === "latent") {
348047
+ if (node2.category === "latent") {
347729
348048
  return this.nodeSize * 8;
347730
348049
  }
347731
348050
  return this.nodeSize * 4;
@@ -347733,7 +348052,7 @@ ${e3}`);
347733
348052
  if (this.targetLocation === "center") {
347734
348053
  return 1;
347735
348054
  }
347736
- return node2.group === "other" ? 0.7 : 1;
348055
+ return node2.category === "other" ? 0.7 : 1;
347737
348056
  })).stop();
347738
348057
  if (this.tiers) {
347739
348058
  applyTierForces(simulation$1, graph, nodes, this.tiers, this.tierSeparation, this.orientation);
@@ -383431,6 +383750,20 @@ ${e3}`);
383431
383750
  relativePlacementConstraint: getRelativeTieredArrayPlacement(tiersArray, orientation, tierSeparation, nodesOrder)
383432
383751
  };
383433
383752
  }
383753
+ function assignParents(elements, relationships) {
383754
+ const elementLookup = {};
383755
+ elements.forEach((element2) => {
383756
+ elementLookup[element2.data.id] = element2;
383757
+ });
383758
+ for (const [parent, children2] of Object.entries(relationships)) {
383759
+ children2.forEach((childId) => {
383760
+ const node2 = elementLookup[childId];
383761
+ if (node2) {
383762
+ node2.data.parent = parent;
383763
+ }
383764
+ });
383765
+ }
383766
+ }
383434
383767
  class FcoseLayout extends GraphLayout {
383435
383768
  constructor(builder) {
383436
383769
  super(builder);
@@ -383446,6 +383779,7 @@ ${e3}`);
383446
383779
  this.tierSeparation = builder._tierSeparation;
383447
383780
  this.orientation = builder.orientation;
383448
383781
  this.tiers = builder.tiers;
383782
+ this.group = builder.group;
383449
383783
  }
383450
383784
  get requiresPosition() {
383451
383785
  return false;
@@ -383470,6 +383804,16 @@ ${e3}`);
383470
383804
  group: "edges"
383471
383805
  }))
383472
383806
  ];
383807
+ if (this.group) {
383808
+ const groupedNodes = getGroupToNodesMap(graph.nodes(), this.group, graph);
383809
+ Object.keys(groupedNodes).forEach((groupLabel) => {
383810
+ elements.push({
383811
+ data: { id: groupLabel, height: size2, width: size2 },
383812
+ group: "nodes"
383813
+ });
383814
+ });
383815
+ assignParents(elements, groupedNodes);
383816
+ }
383473
383817
  cytoscape$1({
383474
383818
  elements,
383475
383819
  headless: true,
@@ -386242,6 +386586,9 @@ if (vType < 0.5) {
386242
386586
  function isGraphLayoutWithTiers(layout2) {
386243
386587
  return layout2.tiers !== void 0;
386244
386588
  }
386589
+ function isGraphLayoutWithGroups(layout2) {
386590
+ return layout2.group !== void 0;
386591
+ }
386245
386592
  const DOT_DISTANCE = 20;
386246
386593
  const SCALE = 0.5;
386247
386594
  class Background extends EventEmitter$1 {
@@ -388930,12 +389277,75 @@ void main(void){
388930
389277
  }
388931
389278
  return gfx;
388932
389279
  }
389280
+ function calculateSourceBoundPosition(centerX, centerY, rotation2, width) {
389281
+ const halfSize = width / 2;
389282
+ let x2;
389283
+ let y2;
389284
+ if (rotation2 >= 0 && rotation2 < Math.PI / 4) {
389285
+ x2 = centerX + halfSize;
389286
+ y2 = centerY + Math.tan(rotation2) * halfSize;
389287
+ } else if (rotation2 >= Math.PI / 4 && rotation2 < Math.PI / 2) {
389288
+ x2 = centerX + Math.tan(Math.PI / 2 - rotation2) * halfSize;
389289
+ y2 = centerY + halfSize;
389290
+ } else if (rotation2 >= Math.PI / 2 && rotation2 < 3 * Math.PI / 4) {
389291
+ x2 = centerX - Math.tan(rotation2 - Math.PI / 2) * halfSize;
389292
+ y2 = centerY + halfSize;
389293
+ } else if (rotation2 >= Math.PI / 4 && rotation2 < 3 * Math.PI) {
389294
+ x2 = centerX - halfSize;
389295
+ y2 = centerY + Math.tan(Math.PI - rotation2) * halfSize;
389296
+ } else if (rotation2 <= 0 && rotation2 > -Math.PI / 4) {
389297
+ y2 = centerY + Math.tan(Math.PI + rotation2) * halfSize;
389298
+ x2 = centerX + halfSize;
389299
+ } else if (rotation2 <= -Math.PI / 4 && rotation2 > -Math.PI / 2) {
389300
+ x2 = centerX - Math.tan(-rotation2 - Math.PI / 2) * halfSize;
389301
+ y2 = centerY - halfSize;
389302
+ } else if (rotation2 <= -Math.PI / 2 && rotation2 > -3 * Math.PI / 4) {
389303
+ x2 = centerX + Math.tan(Math.PI / 2 + rotation2) * halfSize;
389304
+ y2 = centerY - halfSize;
389305
+ } else {
389306
+ x2 = centerX - halfSize;
389307
+ y2 = centerY + Math.tan(-rotation2) * halfSize;
389308
+ }
389309
+ return { x: x2, y: y2 };
389310
+ }
389311
+ function calculateTargetBoundPosition(centerX, centerY, rotation2, width) {
389312
+ const halfSize = width / 2;
389313
+ let x2;
389314
+ let y2;
389315
+ if (rotation2 >= 0 && rotation2 < Math.PI / 4) {
389316
+ x2 = centerX - halfSize;
389317
+ y2 = centerY - Math.tan(rotation2) * halfSize;
389318
+ } else if (rotation2 >= Math.PI / 4 && rotation2 < Math.PI / 2) {
389319
+ x2 = centerX - Math.tan(Math.PI / 2 - rotation2) * halfSize;
389320
+ y2 = centerY - halfSize;
389321
+ } else if (rotation2 >= Math.PI / 2 && rotation2 < 3 * Math.PI / 4) {
389322
+ x2 = centerX + Math.tan(rotation2 - Math.PI / 2) * halfSize;
389323
+ y2 = centerY - halfSize;
389324
+ } else if (rotation2 >= Math.PI / 4 && rotation2 < 3 * Math.PI) {
389325
+ x2 = centerX + halfSize;
389326
+ y2 = centerY - Math.tan(Math.PI - rotation2) * halfSize;
389327
+ } else if (rotation2 <= 0 && rotation2 > -Math.PI / 4) {
389328
+ x2 = centerX - halfSize;
389329
+ y2 = centerY - Math.tan(Math.PI + rotation2) * halfSize;
389330
+ } else if (rotation2 <= -Math.PI / 4 && rotation2 > -Math.PI / 2) {
389331
+ x2 = centerX + Math.tan(-rotation2 - Math.PI / 2) * halfSize;
389332
+ y2 = centerY + halfSize;
389333
+ } else if (rotation2 <= -Math.PI / 2 && rotation2 > -3 * Math.PI / 4) {
389334
+ x2 = centerX - Math.tan(Math.PI / 2 + rotation2) * halfSize;
389335
+ y2 = centerY + halfSize;
389336
+ } else {
389337
+ x2 = centerX + halfSize;
389338
+ y2 = centerY - Math.tan(-rotation2) * halfSize;
389339
+ }
389340
+ return { x: x2, y: y2 };
389341
+ }
388933
389342
  const EDGE_LINE_SPRITE = "EDGE_LINE_SPRITE";
388934
389343
  const EDGE_LINE_GFX = "EDGE_LINE_GFX";
388935
389344
  const EDGE_TOP_SYMBOL = "EDGE_TOP_SYMBOL";
388936
389345
  const EDGE_CENTER_SYMBOL = "EDGE_CENTER_SYMBOL";
388937
389346
  const EDGE_BOTTOM_SYMBOL = "EDGE_BOTTOM_SYMBOL";
388938
389347
  const EDGE_STRENGTH_SYMBOL = "EDGE_STRENGTH_SYMBOL";
389348
+ const EDGE_NUMBER_SYMBOL = "EDGE_NUMBER_SYMBOL";
388939
389349
  const EDGE_OFFSET = 10;
388940
389350
  const LOCAL_MULTIPLIER = 1.5;
388941
389351
  class EdgeObject extends EventEmitter$1 {
@@ -388990,6 +389400,10 @@ void main(void){
388990
389400
  edgeStrengthSymbol.name = EDGE_STRENGTH_SYMBOL;
388991
389401
  edgeStrengthSymbol.anchor.set(0.5, 1);
388992
389402
  edgeSymbolsGfx.addChild(edgeStrengthSymbol);
389403
+ const edgeSourceNumberSymbol = new Sprite();
389404
+ edgeSourceNumberSymbol.name = EDGE_NUMBER_SYMBOL;
389405
+ edgeSourceNumberSymbol.anchor.set(0.5);
389406
+ edgeSymbolsGfx.addChild(edgeSourceNumberSymbol);
388993
389407
  return edgeSymbolsGfx;
388994
389408
  }
388995
389409
  static updateEdgeStyle(edgeGfx, edgeStyle, textureCache) {
@@ -389100,6 +389514,24 @@ void main(void){
389100
389514
  edgeStrengthSymbol.position.y = edgeTopSymbol.position.y - 5;
389101
389515
  [edgeStrengthSymbol.tint] = colorToPixi(edgeStyle.color);
389102
389516
  edgeStrengthSymbol.alpha = 1;
389517
+ const edgeNumberSymbol = edgeSymbolsGfx.getChildByName(EDGE_NUMBER_SYMBOL);
389518
+ const numberSymbolTexture = textureCache.get(createKey(EDGE_NUMBER_SYMBOL, edgeStyle.collapsedEdgesCount), () => {
389519
+ if (edgeStyle.collapsedEdgesCount === void 0) {
389520
+ return new Graphics();
389521
+ }
389522
+ const textStyle = new TextStyle({
389523
+ fontFamily: "Manrope",
389524
+ fontSize: 18,
389525
+ fill: colorToPixi(edgeStyle.color)
389526
+ });
389527
+ const text2 = new Text(edgeStyle.collapsedEdgesCount, textStyle);
389528
+ return text2;
389529
+ });
389530
+ edgeNumberSymbol.texture = numberSymbolTexture;
389531
+ edgeNumberSymbol.position.y = edgeTopSymbol.position.y - 30;
389532
+ edgeNumberSymbol.rotation = edgeGfx.rotation <= Math.PI / 2 && edgeGfx.rotation > 0 || edgeGfx.rotation >= -3 * Math.PI / 2 && edgeGfx.rotation < -Math.PI ? -Math.PI / 2 : Math.PI / 2;
389533
+ [edgeStrengthSymbol.tint] = colorToPixi(edgeStyle.color);
389534
+ edgeNumberSymbol.alpha = 1;
389103
389535
  if (edgeStyle.isEdgeSelected && !edgeStyle.state.selected && !edgeStyle.state.hover) {
389104
389536
  edgeCenterSymbol.alpha = 0.3;
389105
389537
  edgeBottomSymbol.alpha = 0.3;
@@ -389134,28 +389566,38 @@ void main(void){
389134
389566
  edgeBottomSymbol.visible = !hasPoints && edgeBottomSymbol.visible && zoomState.symbol;
389135
389567
  edgeStrengthSymbol.visible = !hasPoints && edgeStrengthSymbol.visible && zoomState.symbol;
389136
389568
  }
389137
- updatePosition(edgeStyle, sourceNodePosition, targetNodePosition, sourceSize, targetSize, viewport2, textureCache) {
389569
+ updatePosition(edgeStyle, sourceNodePosition, targetNodePosition, sourceSize, targetSize, viewport2, textureCache, isSourceSquare, isTargetSquare) {
389138
389570
  var _a3;
389139
- const rotation2 = -Math.atan2(targetNodePosition.x - sourceNodePosition.x, targetNodePosition.y - sourceNodePosition.y);
389140
- const targetRadius = (targetSize - BORDER_PADDING) / 2;
389141
- const targetBoundPosition = {
389142
- x: targetNodePosition.x + Math.sin(rotation2) * targetRadius,
389143
- y: targetNodePosition.y - Math.cos(rotation2) * targetRadius
389144
- };
389571
+ const rotation2 = Math.atan2(targetNodePosition.y - sourceNodePosition.y, targetNodePosition.x - sourceNodePosition.x);
389145
389572
  const sourceRadius = (sourceSize - BORDER_PADDING) / 2;
389146
- const sourceBoundPosition = {
389147
- x: sourceNodePosition.x - Math.sin(rotation2) * sourceRadius,
389148
- y: sourceNodePosition.y + Math.cos(rotation2) * sourceRadius
389149
- };
389573
+ const targetRadius = (targetSize - BORDER_PADDING) / 2;
389574
+ let targetBoundPosition;
389575
+ let sourceBoundPosition;
389576
+ if (isTargetSquare) {
389577
+ targetBoundPosition = calculateTargetBoundPosition(targetNodePosition.x, targetNodePosition.y, rotation2, targetSize - BORDER_PADDING);
389578
+ } else {
389579
+ targetBoundPosition = {
389580
+ x: targetNodePosition.x - Math.cos(rotation2) * targetRadius,
389581
+ y: targetNodePosition.y - Math.sin(rotation2) * targetRadius
389582
+ };
389583
+ }
389584
+ if (isSourceSquare) {
389585
+ sourceBoundPosition = calculateSourceBoundPosition(sourceNodePosition.x, sourceNodePosition.y, rotation2, sourceSize - BORDER_PADDING);
389586
+ } else {
389587
+ sourceBoundPosition = {
389588
+ x: sourceNodePosition.x + Math.cos(rotation2) * sourceRadius,
389589
+ y: sourceNodePosition.y + Math.sin(rotation2) * sourceRadius
389590
+ };
389591
+ }
389150
389592
  const position2 = {
389151
389593
  x: (sourceBoundPosition.x + targetBoundPosition.x) / 2,
389152
389594
  y: (sourceBoundPosition.y + targetBoundPosition.y) / 2
389153
389595
  };
389154
389596
  const length = Math.hypot(targetBoundPosition.x - sourceBoundPosition.x, targetBoundPosition.y - sourceBoundPosition.y);
389155
389597
  this.edgeGfx.position.copyFrom(position2);
389156
- this.edgeGfx.rotation = rotation2;
389598
+ this.edgeGfx.rotation = rotation2 - Math.PI / 2;
389157
389599
  this.edgeSymbolsGfx.position.copyFrom(position2);
389158
- this.edgeSymbolsGfx.rotation = rotation2;
389600
+ this.edgeSymbolsGfx.rotation = rotation2 - Math.PI / 2;
389159
389601
  (_a3 = edgeStyle.color) !== null && _a3 !== void 0 ? _a3 : edgeStyle.color = edgeStyle.theme.colors.grey5;
389160
389602
  if (edgeStyle.points) {
389161
389603
  this.edgeGfx.scale.x = 1;
@@ -389283,6 +389725,89 @@ void main(void){
389283
389725
  thickness: 4
389284
389726
  }
389285
389727
  ];
389728
+ const GROUP_RECTANGLE = "GROUP_RECTANGLE";
389729
+ const GROUP_BORDER = "GROUP_BORDER";
389730
+ class GroupContainerObject extends EventEmitter$1 {
389731
+ constructor() {
389732
+ super();
389733
+ this.state = {
389734
+ hover: false
389735
+ };
389736
+ this.groupContainerGfx = this.createGroupContainer();
389737
+ }
389738
+ createGroupContainer() {
389739
+ const groupContainerGfx = new Container();
389740
+ groupContainerGfx.interactive = true;
389741
+ groupContainerGfx.cursor = "pointer";
389742
+ groupContainerGfx.hitArea = new Rectangle(0, 0);
389743
+ MOUSE_EVENTS.forEach((eventName) => {
389744
+ groupContainerGfx.addEventListener(eventName, (event2) => this.emit(eventName, event2));
389745
+ });
389746
+ const containerRectangle = new Sprite();
389747
+ containerRectangle.name = GROUP_RECTANGLE;
389748
+ containerRectangle.anchor.set(0.5);
389749
+ groupContainerGfx.addChild(containerRectangle);
389750
+ const containerBorder = new Sprite();
389751
+ containerBorder.name = GROUP_BORDER;
389752
+ containerBorder.anchor.set(0.5);
389753
+ groupContainerGfx.addChild(containerBorder);
389754
+ return groupContainerGfx;
389755
+ }
389756
+ static updateContainerStyle(groupContainerGfx, nodes, textureCache, theme2) {
389757
+ let minX = Infinity;
389758
+ let maxX = -Infinity;
389759
+ let minY = Infinity;
389760
+ let maxY = -Infinity;
389761
+ nodes.forEach((node2) => {
389762
+ var _a3;
389763
+ let radius2 = (_a3 = node2["meta.rendering_properties.size"]) !== null && _a3 !== void 0 ? _a3 : DEFAULT_NODE_SIZE$1 * TARGET_NODE_MULTIPLIER;
389764
+ radius2 += 20;
389765
+ minX = Math.min(minX, node2.x - radius2);
389766
+ maxX = Math.max(maxX, node2.x + radius2);
389767
+ minY = Math.min(minY, node2.y - radius2);
389768
+ maxY = Math.max(maxY, node2.y + radius2);
389769
+ });
389770
+ const height = maxY - minY;
389771
+ const width = maxX - minX;
389772
+ groupContainerGfx.hitArea.x = -width / 2;
389773
+ groupContainerGfx.hitArea.y = -height / 2;
389774
+ groupContainerGfx.hitArea.width = width;
389775
+ groupContainerGfx.hitArea.height = height;
389776
+ const rectangleTexture = textureCache.get(createKey(GROUP_RECTANGLE, minX, maxX, minY, maxY), () => {
389777
+ const graphics = new Graphics();
389778
+ graphics.lineStyle(2, theme2.colors.primary.replace("#", "0x"), 0.5);
389779
+ graphics.beginFill(theme2.colors.blue2.replace("#", "0x"), 1);
389780
+ graphics.drawRoundedRect(minX, minY, width, height, 8);
389781
+ graphics.endFill();
389782
+ return graphics;
389783
+ });
389784
+ const rectangle = groupContainerGfx.getChildByName(GROUP_RECTANGLE);
389785
+ rectangle.texture = rectangleTexture;
389786
+ [rectangle.tint, rectangle.alpha] = colorToPixi(theme2.colors.blue2);
389787
+ }
389788
+ updatePosition(position2) {
389789
+ this.groupContainerGfx.position.copyFrom(position2);
389790
+ }
389791
+ updateStyle(nodes, textureCache, theme2) {
389792
+ let minX = Infinity;
389793
+ let maxX = -Infinity;
389794
+ let minY = Infinity;
389795
+ let maxY = -Infinity;
389796
+ nodes.forEach((node2) => {
389797
+ var _a3;
389798
+ let radius2 = (_a3 = node2["meta.rendering_properties.size"]) !== null && _a3 !== void 0 ? _a3 : DEFAULT_NODE_SIZE$1 * TARGET_NODE_MULTIPLIER;
389799
+ radius2 += 20;
389800
+ minX = Math.min(minX, node2.x - radius2);
389801
+ maxX = Math.max(maxX, node2.x + radius2);
389802
+ minY = Math.min(minY, node2.y - radius2);
389803
+ maxY = Math.max(maxY, node2.y + radius2);
389804
+ });
389805
+ const centerX = minX + (maxX - minX) / 2;
389806
+ const centerY = minY + (maxY - minY) / 2;
389807
+ GroupContainerObject.updateContainerStyle(this.groupContainerGfx, nodes, textureCache, theme2);
389808
+ this.groupContainerGfx.position.copyFrom({ x: centerX, y: centerY });
389809
+ }
389810
+ }
389286
389811
  const SHADOWS = {
389287
389812
  dark: {
389288
389813
  shadowHover: "rgba(255, 255, 255, 0.3)",
@@ -389357,8 +389882,8 @@ ${letters.join("\n")}`;
389357
389882
  }
389358
389883
  return finalText.join(" ");
389359
389884
  }
389360
- function getNodeColor(group, theme2) {
389361
- switch (group) {
389885
+ function getNodeColor(category, theme2) {
389886
+ switch (category) {
389362
389887
  case "target":
389363
389888
  return [theme2.colors.secondary, theme2.colors.blue1];
389364
389889
  case "latent":
@@ -389367,13 +389892,15 @@ ${letters.join("\n")}`;
389367
389892
  return [theme2.colors.blue4, theme2.colors.text];
389368
389893
  }
389369
389894
  }
389370
- function getNodeSize(size2, group) {
389371
- const sizeMultiplier = group === "target" ? 1.25 : 1;
389895
+ function getNodeSize(size2, category) {
389896
+ const sizeMultiplier = category === "target" ? TARGET_NODE_MULTIPLIER : 1;
389372
389897
  return size2 * sizeMultiplier;
389373
389898
  }
389374
389899
  const NODE_CIRCLE = "NODE_CIRCLE";
389375
389900
  const NODE_BORDER = "NODE_BORDER";
389376
389901
  const NODE_LABEL = "NODE_LABEL";
389902
+ const NODE_SQUARE = "NODE_SQUARE";
389903
+ const NODE_SQUARE_BORDER = "NODE_SQUARE_BORDER";
389377
389904
  class NodeObject extends EventEmitter$1 {
389378
389905
  constructor() {
389379
389906
  super();
@@ -389398,10 +389925,18 @@ ${letters.join("\n")}`;
389398
389925
  nodeCircle.name = NODE_CIRCLE;
389399
389926
  nodeCircle.anchor.set(0.5);
389400
389927
  nodeGfx.addChild(nodeCircle);
389928
+ const nodeSquare = new Sprite();
389929
+ nodeSquare.name = NODE_SQUARE;
389930
+ nodeSquare.anchor.set(0.5);
389931
+ nodeGfx.addChild(nodeSquare);
389401
389932
  const nodeBorder = new Sprite();
389402
389933
  nodeBorder.name = NODE_BORDER;
389403
389934
  nodeBorder.anchor.set(0.5);
389404
389935
  nodeGfx.addChild(nodeBorder);
389936
+ const nodeSquareBorder = new Sprite();
389937
+ nodeSquareBorder.name = NODE_SQUARE_BORDER;
389938
+ nodeSquareBorder.anchor.set(0.5);
389939
+ nodeGfx.addChild(nodeSquareBorder);
389405
389940
  return nodeGfx;
389406
389941
  }
389407
389942
  createNodeLabel() {
@@ -389425,22 +389960,32 @@ ${letters.join("\n")}`;
389425
389960
  nodeGfx.filters = [new F({ offset: { x: 0, y: 0 } })];
389426
389961
  }
389427
389962
  const dropShadow = nodeGfx.filters[0];
389428
- const circleTexture = textureCache.get(createKey(NODE_CIRCLE, nodeStyle.size), () => {
389963
+ const nodeTextureKey = nodeStyle.isGroupNode ? NODE_SQUARE : NODE_CIRCLE;
389964
+ const nodeBorderTextureKey = nodeStyle.isGroupNode ? NODE_SQUARE_BORDER : NODE_BORDER;
389965
+ const nodeTexture = textureCache.get(createKey(nodeTextureKey, nodeStyle.size), () => {
389429
389966
  const graphics = new SmoothGraphics();
389430
389967
  graphics.beginFill(16777215, 1, true);
389431
- graphics.drawCircle(nodeStyle.size, nodeStyle.size, nodeStyle.size);
389968
+ if (nodeStyle.isGroupNode) {
389969
+ graphics.drawRoundedRect(nodeStyle.size, nodeStyle.size, 2 * nodeStyle.size, 2 * nodeStyle.size, 8);
389970
+ } else {
389971
+ graphics.drawCircle(nodeStyle.size, nodeStyle.size, nodeStyle.size);
389972
+ }
389432
389973
  return graphics;
389433
389974
  });
389434
- const circle2 = nodeGfx.getChildByName(NODE_CIRCLE);
389435
- circle2.texture = circleTexture;
389436
- [circle2.tint, circle2.alpha] = colorToPixi(nodeStyle.color);
389437
- const borderTexture = textureCache.get(createKey(NODE_BORDER, outerRadius, borderWidth, nodeStyle.size), () => {
389975
+ const nodeBody = nodeGfx.getChildByName(nodeTextureKey);
389976
+ nodeBody.texture = nodeTexture;
389977
+ [nodeBody.tint, nodeBody.alpha] = colorToPixi(nodeStyle.color);
389978
+ const borderTexture = textureCache.get(createKey(nodeBorderTextureKey, outerRadius, borderWidth, nodeStyle.size), () => {
389438
389979
  const graphics = new SmoothGraphics();
389439
389980
  graphics.lineStyle({ color: 16777215, width: borderWidth });
389440
- graphics.drawCircle(outerRadius, outerRadius, nodeStyle.size);
389981
+ if (nodeStyle.isGroupNode) {
389982
+ graphics.drawRoundedRect(outerRadius, outerRadius, 2 * nodeStyle.size, 2 * nodeStyle.size, 8);
389983
+ } else {
389984
+ graphics.drawCircle(outerRadius, outerRadius, nodeStyle.size);
389985
+ }
389441
389986
  return graphics;
389442
389987
  }, BORDER_PADDING);
389443
- const border = nodeGfx.getChildByName(NODE_BORDER);
389988
+ const border = nodeGfx.getChildByName(nodeBorderTextureKey);
389444
389989
  border.texture = borderTexture;
389445
389990
  [border.tint, border.alpha] = colorToPixi(nodeStyle.highlight_color);
389446
389991
  const themeShadows = SHADOWS[nodeStyle.theme.themeType];
@@ -389457,13 +390002,13 @@ ${letters.join("\n")}`;
389457
390002
  dropShadow.blur = blur;
389458
390003
  dropShadow.padding = 10;
389459
390004
  if (nodeStyle.isEdgeSelected && !nodeStyle.state.selected && !nodeStyle.state.attachedEdgeSelected && !nodeStyle.state.hover && !nodeStyle.isSourceOfNewEdge) {
389460
- circle2.alpha = 0.3;
390005
+ nodeBody.alpha = 0.3;
389461
390006
  border.alpha = 0.3;
389462
390007
  }
389463
390008
  }
389464
390009
  static updateNodeLabelStyle(nodeLabelGfx, nodeStyle, textureCache) {
389465
- const labelTexture = textureCache.get(createKey(NODE_LABEL, nodeStyle.label, nodeStyle.size, nodeStyle.group), () => {
389466
- const nodeRadius = getNodeSize(nodeStyle.size, nodeStyle.group);
390010
+ const labelTexture = textureCache.get(createKey(NODE_LABEL, nodeStyle.label, nodeStyle.size, nodeStyle.category), () => {
390011
+ const nodeRadius = getNodeSize(nodeStyle.size, nodeStyle.category);
389467
390012
  const nodeSize2 = nodeRadius * 2;
389468
390013
  const maxSize = nodeSize2 - 10;
389469
390014
  const textStyle = getTextStyle(nodeStyle.label_size);
@@ -389493,7 +390038,7 @@ ${letters.join("\n")}`;
389493
390038
  }
389494
390039
  updateStyle(nodeStyle, textureCache) {
389495
390040
  var _a3, _b, _c;
389496
- const [defaultColor, defaultFontColor] = getNodeColor(nodeStyle.group, nodeStyle.theme);
390041
+ const [defaultColor, defaultFontColor] = getNodeColor(nodeStyle.category, nodeStyle.theme);
389497
390042
  (_a3 = nodeStyle.color) !== null && _a3 !== void 0 ? _a3 : nodeStyle.color = defaultColor;
389498
390043
  (_b = nodeStyle.highlight_color) !== null && _b !== void 0 ? _b : nodeStyle.highlight_color = nodeStyle.theme.colors.primary;
389499
390044
  (_c = nodeStyle.label_color) !== null && _c !== void 0 ? _c : nodeStyle.label_color = defaultFontColor;
@@ -389585,7 +390130,9 @@ ${letters.join("\n")}`;
389585
390130
  "nodeMouseover",
389586
390131
  "nodeMouseout",
389587
390132
  "edgeMouseout",
389588
- "edgeMouseover"
390133
+ "edgeMouseover",
390134
+ "groupMouseout",
390135
+ "groupMouseover"
389589
390136
  ];
389590
390137
  class Engine extends EventEmitter$1 {
389591
390138
  constructor(graph, layout2, editable2, editorMode, theme2, constraints, zoomThresholds, errorHandler, processEdgeStyle, requireFocusToZoom) {
@@ -389604,6 +390151,8 @@ ${letters.join("\n")}`;
389604
390151
  this.onAddNode = null;
389605
390152
  this.onAddEdge = null;
389606
390153
  this.onCleanup = null;
390154
+ this.groupContainerMap = /* @__PURE__ */ new Map();
390155
+ this.collapsedEdgesMap = /* @__PURE__ */ new Map();
389607
390156
  this.onGraphAttributesUpdatedBound = this.onGraphAttributesUpdated.bind(this);
389608
390157
  this.onGraphNodeAddedBound = this.onGraphNodeAdded.bind(this);
389609
390158
  this.onGraphEdgeAddedBound = this.onGraphEdgeAdded.bind(this);
@@ -389681,10 +390230,28 @@ ${letters.join("\n")}`;
389681
390230
  resetViewport() {
389682
390231
  const nodesX = this.graph.mapNodes((nodeKey) => this.graph.getNodeAttribute(nodeKey, "x"));
389683
390232
  const nodesY = this.graph.mapNodes((nodeKey) => this.graph.getNodeAttribute(nodeKey, "y"));
389684
- const minX = Math.min(...nodesX);
389685
- const maxX = Math.max(...nodesX);
389686
- const minY = Math.min(...nodesY);
389687
- const maxY = Math.max(...nodesY);
390233
+ let minX = Math.min(...nodesX);
390234
+ let maxX = Math.max(...nodesX);
390235
+ let minY = Math.min(...nodesY);
390236
+ let maxY = Math.max(...nodesY);
390237
+ if (isGraphLayoutWithGroups(this.layout)) {
390238
+ const nodes = this.graph.mapNodes((nodeKey) => this.graph.getNodeAttributes(nodeKey));
390239
+ const nodesInGroups = Object.values(getGroupToNodesMap(this.graph.nodes(), this.layout.group, this.graph)).flat();
390240
+ const updateBoundary = (node2, delta) => {
390241
+ if (nodesInGroups.includes(node2 === null || node2 === void 0 ? void 0 : node2.id)) {
390242
+ return delta;
390243
+ }
390244
+ return 0;
390245
+ };
390246
+ const nodeWithMinX = nodes.find((node2) => node2.x === minX);
390247
+ const nodeWithMaxX = nodes.find((node2) => node2.x === maxX);
390248
+ const nodeWithMinY = nodes.find((node2) => node2.y === minY);
390249
+ const nodeWithMaxY = nodes.find((node2) => node2.y === maxY);
390250
+ minX += updateBoundary(nodeWithMinX, -20);
390251
+ maxX += updateBoundary(nodeWithMaxX, 20);
390252
+ minY += updateBoundary(nodeWithMinY, -20);
390253
+ maxY += updateBoundary(nodeWithMaxY, 20);
390254
+ }
389688
390255
  const graphWidth = Math.abs(maxX - minX);
389689
390256
  const graphHeight = Math.abs(maxY - minY);
389690
390257
  const graphCenter = new Point$1(minX + graphWidth / 2, minY + graphHeight / 2);
@@ -389700,6 +390267,111 @@ ${letters.join("\n")}`;
389700
390267
  console.error("Error resetting viewport", err);
389701
390268
  }
389702
390269
  }
390270
+ collapseAllGroups() {
390271
+ if (isGraphLayoutWithGroups(this.layout)) {
390272
+ const layoutGroup = this.layout.group;
390273
+ const groupsObject = getGroupToNodesMap(this.graph.nodes(), layoutGroup, this.graph);
390274
+ const nodeToGroup = getNodeToGroupMap(this.graph.nodes(), layoutGroup, this.graph);
390275
+ const groupsArray = Object.keys(groupsObject);
390276
+ groupsArray.forEach((group) => {
390277
+ const groupNodeAttributes = {
390278
+ id: group,
390279
+ originalMeta: {},
390280
+ variable_type: "groupNode"
390281
+ };
390282
+ this.dropGroupContainer(group);
390283
+ if (!this.graph.hasNode(group)) {
390284
+ this.graph.addNode(group, groupNodeAttributes);
390285
+ } else {
390286
+ this.createNode(group, groupNodeAttributes);
390287
+ }
390288
+ });
390289
+ groupsArray.forEach((group) => {
390290
+ const collapsedEdges = [];
390291
+ this.graph.forEachEdge((edgeKey) => {
390292
+ var _a3, _b;
390293
+ const initialSource = this.graph.source(edgeKey);
390294
+ const initialTarget = this.graph.target(edgeKey);
390295
+ if (nodeToGroup[initialSource] === group || nodeToGroup[initialTarget] === group || groupsArray.includes(initialSource) || groupsArray.includes(initialTarget)) {
390296
+ const finalTarget = (_a3 = nodeToGroup[initialTarget]) !== null && _a3 !== void 0 ? _a3 : initialTarget;
390297
+ const finalSource = (_b = nodeToGroup[initialSource]) !== null && _b !== void 0 ? _b : initialSource;
390298
+ const edgeHasChanged = !(initialSource === finalSource && initialTarget === finalTarget);
390299
+ const edgeIsNotWithinTheGroup = finalSource !== finalTarget;
390300
+ const graphHasFinalEdge = this.graph.hasEdge(finalSource, finalTarget);
390301
+ const finalSourceAttributes = this.graph.getNodeAttributes(finalSource);
390302
+ const finalTargetAttributes = this.graph.getNodeAttributes(finalTarget);
390303
+ const currentEdgeAttributes = this.graph.getEdgeAttributes(edgeKey);
390304
+ let numberOfCollapsedEdges = graphHasFinalEdge ? this.graph.getEdgeAttributes(finalSource, finalTarget)["meta.rendering_properties.collapsedEdgesCount"] : 0;
390305
+ if (graphHasFinalEdge && edgeHasChanged && group === finalSource) {
390306
+ numberOfCollapsedEdges += 1;
390307
+ }
390308
+ const edgeAttributes = Object.assign(Object.assign({}, currentEdgeAttributes), { "meta.rendering_properties.collapsedEdgesCount": numberOfCollapsedEdges });
390309
+ if (initialSource !== finalSource || initialTarget !== finalTarget) {
390310
+ collapsedEdges.push(Object.assign({ id: edgeKey }, edgeAttributes));
390311
+ this.dropEdge(edgeKey);
390312
+ }
390313
+ if (edgeIsNotWithinTheGroup) {
390314
+ if (!graphHasFinalEdge && group === finalSource) {
390315
+ edgeAttributes["meta.rendering_properties.collapsedEdgesCount"] = 1;
390316
+ this.graph.addEdge(finalSource, finalTarget, edgeAttributes);
390317
+ } else if (!this.edgeMap.has(edgeKey) && !edgeHasChanged) {
390318
+ this.createEdge(edgeKey, edgeAttributes, finalSource, finalTarget, finalSourceAttributes, finalTargetAttributes);
390319
+ } else if (graphHasFinalEdge) {
390320
+ this.graph.setEdgeAttribute(finalSource, finalTarget, "meta.rendering_properties.collapsedEdgesCount", numberOfCollapsedEdges);
390321
+ }
390322
+ }
390323
+ }
390324
+ });
390325
+ this.collapsedEdgesMap.set(group, collapsedEdges);
390326
+ });
390327
+ Object.values(groupsObject).forEach((nodes) => {
390328
+ nodes.forEach((node2) => {
390329
+ if (this.nodeMap.has(node2)) {
390330
+ this.dropNode(node2);
390331
+ }
390332
+ });
390333
+ });
390334
+ this.requestRender();
390335
+ }
390336
+ }
390337
+ expandAllGroups() {
390338
+ if (this.graph.nodes().some((node2) => this.graph.getNodeAttribute(node2, "variable_type") === "groupNode")) {
390339
+ this.graph.forEachEdge((edgeKey) => {
390340
+ const source = this.graph.source(edgeKey);
390341
+ const target = this.graph.target(edgeKey);
390342
+ const isSourceGroupNode = this.graph.getNodeAttribute(source, "variable_type") === "groupNode";
390343
+ const isTargetGroupNode = this.graph.getNodeAttribute(target, "variable_type") === "groupNode";
390344
+ if (isSourceGroupNode || isTargetGroupNode) {
390345
+ this.dropEdge(edgeKey);
390346
+ this.graph.setEdgeAttribute(source, target, "meta.rendering_properties.collapsedEdgesCount", 0);
390347
+ }
390348
+ });
390349
+ this.graph.forEachNode((node2, attributes2) => {
390350
+ if (this.graph.getNodeAttribute(node2, "variable_type") !== "groupNode") {
390351
+ if (!this.nodeMap.has(node2)) {
390352
+ this.createNode(node2, attributes2);
390353
+ }
390354
+ } else {
390355
+ this.dropNode(node2);
390356
+ }
390357
+ });
390358
+ this.collapsedEdgesMap.forEach((edges) => {
390359
+ edges.forEach((edge) => {
390360
+ var _a3, _b;
390361
+ if (!this.edgeMap.has(edge.id)) {
390362
+ const source = (_a3 = edge.extras) === null || _a3 === void 0 ? void 0 : _a3.source.identifier;
390363
+ const target = (_b = edge.extras) === null || _b === void 0 ? void 0 : _b.destination.identifier;
390364
+ const sourceNodeAttributes = this.graph.getNodeAttributes(source);
390365
+ const targetNodeAttributes = this.graph.getNodeAttributes(target);
390366
+ this.createEdge(edge.id, edge, source, target, sourceNodeAttributes, targetNodeAttributes);
390367
+ }
390368
+ });
390369
+ });
390370
+ this.createGroupContainers();
390371
+ this.debouncedUpdateLayout();
390372
+ this.requestRender();
390373
+ }
390374
+ }
389703
390375
  searchNodes(ids) {
389704
390376
  const newNodes = ids.filter((newId2) => !this.searchResults.includes(newId2));
389705
390377
  const removedNodes = this.searchResults.filter((oldId) => !ids.includes(oldId));
@@ -389822,10 +390494,12 @@ ${letters.join("\n")}`;
389822
390494
  this.background.updatePosition(this.container);
389823
390495
  this.app.stage.addChild(this.background.sprite);
389824
390496
  this.app.stage.addChild(this.viewport);
390497
+ this.groupContainerLayer = new Container();
389825
390498
  this.edgeLayer = new Container();
389826
390499
  this.edgeSymbolsLayer = new Container();
389827
390500
  this.nodeLayer = new Container();
389828
390501
  this.nodeLabelLayer = new Container();
390502
+ this.viewport.addChild(this.groupContainerLayer);
389829
390503
  this.viewport.addChild(this.edgeLayer);
389830
390504
  this.viewport.addChild(this.edgeSymbolsLayer);
389831
390505
  this.viewport.addChild(this.nodeLayer);
@@ -389946,12 +390620,19 @@ ${letters.join("\n")}`;
389946
390620
  });
389947
390621
  edge.addListener("mouseup", (event2) => {
389948
390622
  if (this.mousedownEdgeKey === id2) {
390623
+ if (isGraphLayoutWithGroups(this.layout)) {
390624
+ const groupsObject = getGroupToNodesMap(this.graph.nodes(), this.layout.group, this.graph);
390625
+ if (Object.keys(groupsObject).includes(source) || Object.keys(groupsObject).includes(target)) {
390626
+ return;
390627
+ }
390628
+ }
389949
390629
  this.emit("edgeClick", event2, source, target);
389950
390630
  }
389951
390631
  });
389952
390632
  this.updateEdgeStyle(id2, attributes2, source, target, sourceAttributes, targetAttributes);
389953
390633
  }
389954
390634
  createGraph() {
390635
+ this.createGroupContainers();
389955
390636
  this.graph.forEachNode(this.createNode.bind(this));
389956
390637
  this.graph.forEachEdge(this.createEdge.bind(this));
389957
390638
  this.updateStrengthRange();
@@ -389992,6 +390673,12 @@ ${letters.join("\n")}`;
389992
390673
  const xOffset = Math.abs(this.nodeMousedownPosition.x - event2.global.x);
389993
390674
  const yOffset = Math.abs(this.nodeMousedownPosition.y - event2.global.y);
389994
390675
  if (xOffset <= 2 && yOffset <= 2) {
390676
+ if (isGraphLayoutWithGroups(this.layout)) {
390677
+ const groupsObject = getGroupToNodesMap(this.graph.nodes(), this.layout.group, this.graph);
390678
+ if (Object.keys(groupsObject).includes(id2)) {
390679
+ return;
390680
+ }
390681
+ }
389995
390682
  this.emit("nodeClick", event2, id2);
389996
390683
  }
389997
390684
  }
@@ -390006,6 +390693,39 @@ ${letters.join("\n")}`;
390006
390693
  });
390007
390694
  this.updateNodeStyle(id2, attributes2);
390008
390695
  }
390696
+ createGroupContainer(id2, nodes) {
390697
+ const groupContainer = new GroupContainerObject();
390698
+ this.groupContainerLayer.addChild(groupContainer.groupContainerGfx);
390699
+ this.groupContainerMap.set(id2, groupContainer);
390700
+ groupContainer.addListener("mouseover", (event2) => {
390701
+ this.hoverGroupContainer(id2, nodes);
390702
+ if (!this.mousedownNodeKey) {
390703
+ this.emit("groupMouseover", event2, id2);
390704
+ }
390705
+ });
390706
+ groupContainer.addListener("mouseout", (event2) => {
390707
+ const local = groupContainer.groupContainerGfx.toLocal(event2.global);
390708
+ const isInGroupContainer = groupContainer.groupContainerGfx.hitArea.contains(local.x, local.y);
390709
+ if (!isInGroupContainer) {
390710
+ this.unhoverGroupContainer(id2, nodes);
390711
+ this.emit("groupMouseout", event2, id2);
390712
+ }
390713
+ if (!this.editable && !this.isMovingNode && !this.isCreatingEdge) {
390714
+ this.mousedownNodeKey = null;
390715
+ }
390716
+ });
390717
+ this.updateGroupContainerStyle(id2, nodes);
390718
+ }
390719
+ createGroupContainers() {
390720
+ if (isGraphLayoutWithGroups(this.layout)) {
390721
+ const { group } = this.layout;
390722
+ const groups = getGroupToNodesMap(this.graph.nodes(), group, this.graph);
390723
+ Object.keys(groups).forEach((gr) => {
390724
+ const nodesIngroup = groups[gr].map((node2) => this.graph.getNodeAttributes(node2));
390725
+ this.createGroupContainer(gr, nodesIngroup);
390726
+ });
390727
+ }
390728
+ }
390009
390729
  dropEdge(id2) {
390010
390730
  const edge = this.edgeMap.get(id2);
390011
390731
  if (edge) {
@@ -390023,6 +390743,14 @@ ${letters.join("\n")}`;
390023
390743
  this.requestRender();
390024
390744
  }
390025
390745
  }
390746
+ dropGroupContainer(id2) {
390747
+ const container = this.groupContainerMap.get(id2);
390748
+ if (container) {
390749
+ this.groupContainerLayer.removeChild(container.groupContainerGfx);
390750
+ this.groupContainerMap.delete(id2);
390751
+ this.requestRender();
390752
+ }
390753
+ }
390026
390754
  enableDragBehaviour() {
390027
390755
  var _a3;
390028
390756
  if (this.dragMode === "move_node") {
@@ -390058,7 +390786,8 @@ ${letters.join("\n")}`;
390058
390786
  strength: this.getRelativeStrength(attributes2),
390059
390787
  theme: this.theme,
390060
390788
  thickness: attributes2["meta.rendering_properties.thickness"],
390061
- type: attributes2.edge_type
390789
+ type: attributes2.edge_type,
390790
+ collapsedEdges: attributes2["meta.rendering_properties.collapsedEdgesCount"]
390062
390791
  };
390063
390792
  if (this.processEdgeStyle) {
390064
390793
  return this.processEdgeStyle(edgeStyle, attributes2);
@@ -390067,10 +390796,10 @@ ${letters.join("\n")}`;
390067
390796
  }
390068
390797
  getNodeStyle(node2, attributes2) {
390069
390798
  var _a3, _b, _c, _d;
390070
- const group = getNodeGroup(this.graph, attributes2.id, attributes2["meta.rendering_properties.latent"]);
390799
+ const group = getNodeCategory(this.graph, attributes2.id, attributes2["meta.rendering_properties.latent"]);
390071
390800
  return {
390072
390801
  color: attributes2["meta.rendering_properties.color"],
390073
- group,
390802
+ category: group,
390074
390803
  highlight_color: attributes2["meta.rendering_properties.highlight_color"],
390075
390804
  isEdgeSelected: !!this.selectedEdge,
390076
390805
  isSourceOfNewEdge: this.isCreatingEdge && this.mousedownNodeKey === attributes2.id,
@@ -390079,7 +390808,8 @@ ${letters.join("\n")}`;
390079
390808
  label_size: (_b = attributes2["meta.rendering_properties.label_size"]) !== null && _b !== void 0 ? _b : this.layout.nodeFontSize,
390080
390809
  size: (_c = attributes2["meta.rendering_properties.size"]) !== null && _c !== void 0 ? _c : getNodeSize((_d = attributes2["meta.rendering_properties.size"]) !== null && _d !== void 0 ? _d : this.layout.nodeSize, group),
390081
390810
  state: node2.state,
390082
- theme: this.theme
390811
+ theme: this.theme,
390812
+ isGroupNode: attributes2.variable_type === "groupNode"
390083
390813
  };
390084
390814
  }
390085
390815
  hoverEdge(id2) {
@@ -390091,6 +390821,15 @@ ${letters.join("\n")}`;
390091
390821
  this.updateEdgeStyleByKey(id2);
390092
390822
  this.requestRender();
390093
390823
  }
390824
+ hoverGroupContainer(id2, nodes) {
390825
+ const groupContainer = this.groupContainerMap.get(id2);
390826
+ if (groupContainer.state.hover) {
390827
+ return;
390828
+ }
390829
+ groupContainer.state.hover = true;
390830
+ this.updateGroupContainerStyle(id2, nodes);
390831
+ this.requestRender();
390832
+ }
390094
390833
  hoverNode(id2) {
390095
390834
  const node2 = this.nodeMap.get(id2);
390096
390835
  if (node2.state.hover) {
@@ -390234,15 +390973,26 @@ ${letters.join("\n")}`;
390234
390973
  this.updateNodeStyleByKey(id2);
390235
390974
  this.requestRender();
390236
390975
  }
390976
+ unhoverGroupContainer(id2, nodes) {
390977
+ const groupContainer = this.groupContainerMap.get(id2);
390978
+ if (!groupContainer.state.hover) {
390979
+ return;
390980
+ }
390981
+ groupContainer.state.hover = false;
390982
+ this.updateGroupContainerStyle(id2, nodes);
390983
+ this.requestRender();
390984
+ }
390237
390985
  updateEdgeStyle(id2, attributes2, source, target, sourceNodeAttributes, targetNodeAttributes) {
390238
390986
  const edge = this.edgeMap.get(id2);
390239
390987
  if (edge && this.viewport) {
390240
390988
  const sourceNode = this.nodeMap.get(source);
390241
390989
  const targetNode = this.nodeMap.get(target);
390990
+ const isSourceGroupNode = sourceNodeAttributes.variable_type === "groupNode";
390991
+ const isTargetGroupNode = targetNodeAttributes.variable_type === "groupNode";
390242
390992
  const sourceNodePosition = { x: sourceNodeAttributes.x, y: sourceNodeAttributes.y };
390243
390993
  const targetNodePosition = { x: targetNodeAttributes.x, y: targetNodeAttributes.y };
390244
390994
  const edgeStyle = this.getEdgeStyle(edge, attributes2, this.getConstraint(source, target));
390245
- edge.updatePosition(edgeStyle, sourceNodePosition, targetNodePosition, sourceNode.nodeGfx.width, targetNode.nodeGfx.width, this.viewport, this.textureCache);
390995
+ edge.updatePosition(edgeStyle, sourceNodePosition, targetNodePosition, sourceNode.nodeGfx.width, targetNode.nodeGfx.width, this.viewport, this.textureCache, isSourceGroupNode, isTargetGroupNode);
390246
390996
  }
390247
390997
  }
390248
390998
  updateEdgeStyleByKey(edgeKey) {
@@ -390320,6 +391070,12 @@ ${letters.join("\n")}`;
390320
391070
  node2.updateStyle(this.getNodeStyle(node2, attributes2), this.textureCache);
390321
391071
  }
390322
391072
  }
391073
+ updateGroupContainerStyle(id2, nodes) {
391074
+ const groupContainer = this.groupContainerMap.get(id2);
391075
+ if (groupContainer) {
391076
+ groupContainer.updateStyle(nodes, this.textureCache, this.theme);
391077
+ }
391078
+ }
390323
391079
  updateNodeStyleByKey(nodeKey) {
390324
391080
  const nodeAttributes = this.graph.getNodeAttributes(nodeKey);
390325
391081
  this.updateNodeStyle(nodeKey, nodeAttributes);
@@ -390337,6 +391093,14 @@ ${letters.join("\n")}`;
390337
391093
  updateStyles() {
390338
391094
  this.graph.forEachNode(this.updateNodeStyle.bind(this));
390339
391095
  this.graph.forEachEdge(this.updateEdgeStyle.bind(this));
391096
+ if (isGraphLayoutWithGroups(this.layout)) {
391097
+ const { group } = this.layout;
391098
+ const groupsObject = getGroupToNodesMap(this.graph.nodes(), group, this.graph);
391099
+ Object.keys(groupsObject).forEach((gr) => {
391100
+ const nodesIngroup = groupsObject[gr].map((node2) => this.graph.getNodeAttributes(node2));
391101
+ this.updateGroupContainerStyle(gr, nodesIngroup);
391102
+ });
391103
+ }
390340
391104
  }
390341
391105
  }
390342
391106
  function useRenderEngine({ parentRef, graph, layout: layout2, editable: editable2, editorMode, constraints, errorHandler, processEdgeStyle, zoomThresholds, requireFocusToZoom }) {
@@ -390412,6 +391176,16 @@ ${letters.join("\n")}`;
390412
391176
  engine.current.resetViewport();
390413
391177
  }
390414
391178
  },
391179
+ collapseGroups: () => {
391180
+ if (engine.current.initialized) {
391181
+ engine.current.collapseAllGroups();
391182
+ }
391183
+ },
391184
+ expandGroups: () => {
391185
+ if (engine.current.initialized) {
391186
+ engine.current.expandAllGroups();
391187
+ }
391188
+ },
390415
391189
  extractImage: () => {
390416
391190
  if (engine.current.initialized) {
390417
391191
  return engine.current.extractImage();
@@ -391618,7 +392392,8 @@ ${letters.join("\n")}`;
391618
392392
  const handleError = (e3) => {
391619
392393
  setError(e3);
391620
392394
  };
391621
- const { getCenterPosition, useEngineEvent, resetViewport, resetLayout, extractImage, onSetDragMode, onNodeSelected, onEdgeSelected, onSearchResults, onUpdateConstraints, onSetFocus } = useRenderEngine({
392395
+ const layoutHasGroup = React.useMemo(() => layout2.group !== void 0, [layout2]);
392396
+ const { getCenterPosition, useEngineEvent, resetViewport, collapseGroups, expandGroups, resetLayout, extractImage, onSetDragMode, onNodeSelected, onEdgeSelected, onSearchResults, onUpdateConstraints, onSetFocus } = useRenderEngine({
391622
392397
  constraints: props.initialConstraints,
391623
392398
  editable: props.editable,
391624
392399
  editorMode: state.editorMode,
@@ -391639,6 +392414,7 @@ ${letters.join("\n")}`;
391639
392414
  localStorage.setItem("showGraphZoomPrompt", "false");
391640
392415
  }
391641
392416
  const [hasFocus, setHasFocus] = React.useState(false);
392417
+ const [showCollapseAll, setShowCollapseAll] = React.useState(true);
391642
392418
  function onPaneFocus(focus) {
391643
392419
  setHasFocus(focus);
391644
392420
  onSetFocus(focus);
@@ -391683,6 +392459,22 @@ ${letters.join("\n")}`;
391683
392459
  }
391684
392460
  }, [state.editorMode, selectedEdge, constraints]);
391685
392461
  function onRemoveNode() {
392462
+ var _a4, _b2;
392463
+ if (layoutHasGroup) {
392464
+ const layoutGroup = layout2.group;
392465
+ const groupsObject = getGroupToNodesMap(state.graph.nodes(), layoutGroup, state.graph);
392466
+ const nodesToGroups = getNodeToGroupMap(state.graph.nodes(), layoutGroup, state.graph);
392467
+ const group = nodesToGroups[selectedNode];
392468
+ if (((_a4 = groupsObject[group]) === null || _a4 === void 0 ? void 0 : _a4.length) === 1) {
392469
+ (_b2 = props.onNotify) === null || _b2 === void 0 ? void 0 : _b2.call(props, {
392470
+ key: "delete-group",
392471
+ message: "Cannot delete the last node in a group",
392472
+ status: Status.WARNING,
392473
+ title: "Group deletion"
392474
+ });
392475
+ return;
392476
+ }
392477
+ }
391686
392478
  api2.removeNode(selectedNode);
391687
392479
  setSelectedNode(null);
391688
392480
  }
@@ -391715,9 +392507,23 @@ ${letters.join("\n")}`;
391715
392507
  }
391716
392508
  }
391717
392509
  function onAddEdge(edge) {
391718
- var _a4;
392510
+ var _a4, _b2;
392511
+ if (layoutHasGroup) {
392512
+ const layoutGroup = layout2.group;
392513
+ const groupsObject = getGroupToNodesMap(state.graph.nodes(), layoutGroup, state.graph);
392514
+ const groups = Object.keys(groupsObject);
392515
+ if (groups.includes(edge[0]) && groups.includes(edge[1])) {
392516
+ (_a4 = props.onNotify) === null || _a4 === void 0 ? void 0 : _a4.call(props, {
392517
+ key: "create-edge-group",
392518
+ message: "Adding edge between groups is not allowed",
392519
+ status: Status.WARNING,
392520
+ title: "Group edge detected"
392521
+ });
392522
+ return;
392523
+ }
392524
+ }
391719
392525
  if (willCreateCycle(state.graph, edge)) {
391720
- (_a4 = props.onNotify) === null || _a4 === void 0 ? void 0 : _a4.call(props, {
392526
+ (_b2 = props.onNotify) === null || _b2 === void 0 ? void 0 : _b2.call(props, {
391721
392527
  key: "create-edge-cycle",
391722
392528
  message: "Could not create an edge as it would create a cycle",
391723
392529
  status: Status.WARNING,
@@ -391819,6 +392625,20 @@ ${letters.join("\n")}`;
391819
392625
  });
391820
392626
  setTooltipContent(edgeTooltipContent);
391821
392627
  });
392628
+ useEngineEvent("groupMouseover", (event2, groupId) => {
392629
+ tooltipRef.current = () => ({
392630
+ bottom: event2.clientY,
392631
+ height: 0,
392632
+ left: event2.clientX,
392633
+ right: event2.clientX,
392634
+ top: event2.clientY,
392635
+ width: 0
392636
+ });
392637
+ setTooltipContent(getTooltipContent(groupId, "", theme2));
392638
+ });
392639
+ useEngineEvent("groupMouseout", () => {
392640
+ setTooltipContent(null);
392641
+ });
391822
392642
  useEngineEvent("edgeMouseout", () => {
391823
392643
  setTooltipContent(null);
391824
392644
  });
@@ -391943,7 +392763,19 @@ ${letters.join("\n")}`;
391943
392763
  editorMode: state.editorMode,
391944
392764
  onNotify: props.onNotify,
391945
392765
  verboseDescriptions: props.verboseDescriptions
391946
- }, children: jsxRuntime.exports.jsx(pointerCtx.Provider, { value: { disablePointerEvents: isDragging, onPanelEnter, onPanelExit }, children: jsxRuntime.exports.jsx(GraphPane, { "$hasFocus": hasFocus, onClick: () => onPaneFocus(true), ref: paneRef, style: props.style, children: jsxRuntime.exports.jsxs(Graph, { onMouseEnter, onMouseLeave, children: [jsxRuntime.exports.jsx(EditorOverlay, { bottomLeft: jsxRuntime.exports.jsx(Legend, { listItems: getLegendData(props.defaultLegends, state.editorMode, props.additionalLegends) }), onDelete, onNext, onPrev, showFrameButtons: !isDragging && (showFrameButtons || hasFocus), title: panelTitle, topCenter: jsxRuntime.exports.jsx(jsxRuntime.exports.Fragment, { children: showZoomPrompt && jsxRuntime.exports.jsx(ZoomPrompt, { hasFocus, onClose: () => setShowZoomPrompt(false), onDismiss }) }), topLeft: jsxRuntime.exports.jsx(RecalculateLayoutButton, { onResetLayout: resetLayout }), topRight: jsxRuntime.exports.jsxs(jsxRuntime.exports.Fragment, { children: [jsxRuntime.exports.jsx(FloatingSearchBar, { onChange: onSearchBarChange, onClose: () => setSelectedNode(null), onNext: onNextSearchResult, onPrev: onPrevSearchResult, selectedResult: currentSearchNode + 1, totalNumberOfResults: searchResults.length }), jsxRuntime.exports.jsx(CenterGraphButton, { onResetZoom: resetViewport }), jsxRuntime.exports.jsx(EditControls, { onAddNode }), jsxRuntime.exports.jsx(DragModeButton, { dragMode, setDragMode }), jsxRuntime.exports.jsx(SaveImageButton, { onSave: saveImage })] }), validContentSelected: contentSelected, children: jsxRuntime.exports.jsxs(graphCtx.Provider, { value: {
392766
+ }, children: jsxRuntime.exports.jsx(pointerCtx.Provider, { value: { disablePointerEvents: isDragging, onPanelEnter, onPanelExit }, children: jsxRuntime.exports.jsx(GraphPane, { "$hasFocus": hasFocus, onClick: () => onPaneFocus(true), ref: paneRef, style: props.style, children: jsxRuntime.exports.jsxs(Graph, { onMouseEnter, onMouseLeave, children: [jsxRuntime.exports.jsx(EditorOverlay, { bottomLeft: jsxRuntime.exports.jsx(Legend, { listItems: getLegendData(props.defaultLegends, state.editorMode, props.additionalLegends) }), onDelete, onNext, onPrev, showFrameButtons: !isDragging && (showFrameButtons || hasFocus), title: panelTitle, topCenter: jsxRuntime.exports.jsx(jsxRuntime.exports.Fragment, { children: showZoomPrompt && jsxRuntime.exports.jsx(ZoomPrompt, { hasFocus, onClose: () => setShowZoomPrompt(false), onDismiss }) }), topLeft: jsxRuntime.exports.jsx(RecalculateLayoutButton, { onResetLayout: resetLayout }), topRight: jsxRuntime.exports.jsxs(jsxRuntime.exports.Fragment, { children: [jsxRuntime.exports.jsx(FloatingSearchBar, { onChange: (value) => {
392767
+ onSearchBarChange(value);
392768
+ if (layoutHasGroup) {
392769
+ expandGroups();
392770
+ setShowCollapseAll(true);
392771
+ }
392772
+ }, onClose: () => setSelectedNode(null), onNext: onNextSearchResult, onPrev: onPrevSearchResult, selectedResult: currentSearchNode + 1, totalNumberOfResults: searchResults.length }), layoutHasGroup && jsxRuntime.exports.jsx(CollapseExpandGroupButton, { onCollapseAll: () => {
392773
+ setShowCollapseAll(false);
392774
+ collapseGroups();
392775
+ }, onExpandAll: () => {
392776
+ expandGroups();
392777
+ setShowCollapseAll(true);
392778
+ }, showExpandAll: showCollapseAll }), jsxRuntime.exports.jsx(CenterGraphButton, { onResetZoom: resetViewport }), jsxRuntime.exports.jsx(EditControls, { onAddNode }), jsxRuntime.exports.jsx(DragModeButton, { dragMode, setDragMode }), jsxRuntime.exports.jsx(SaveImageButton, { onSave: saveImage })] }), validContentSelected: contentSelected, children: jsxRuntime.exports.jsxs(graphCtx.Provider, { value: {
391947
392779
  api: api2,
391948
392780
  constraints,
391949
392781
  editable: props.editable,
@@ -396763,6 +397595,9 @@ ${letters.join("\n")}`;
396763
397595
  function isDefinitionWithTiers(obj) {
396764
397596
  return obj && typeof obj === "object" && "tiers" in obj;
396765
397597
  }
397598
+ function isDefinitionWithGroup(obj) {
397599
+ return obj && typeof obj === "object" && "group" in obj;
397600
+ }
396766
397601
  function parseLayoutDefinition(definition2) {
396767
397602
  let builder;
396768
397603
  switch (definition2.layout_type) {
@@ -396855,13 +397690,25 @@ ${letters.join("\n")}`;
396855
397690
  }
396856
397691
  case "spring": {
396857
397692
  builder = SpringLayout.Builder;
397693
+ if (definition2.collision_force) {
397694
+ builder.collisionForce(definition2.collision_force);
397695
+ }
397696
+ if (definition2.gravity) {
397697
+ builder.gravity(definition2.gravity);
397698
+ }
397699
+ if (definition2.link_force) {
397700
+ builder.linkForce(definition2.link_force);
397701
+ }
396858
397702
  if (definition2.warmup_ticks) {
396859
397703
  builder.warmupTicks(definition2.warmup_ticks);
396860
397704
  }
397705
+ if (definition2.group_repel_strength) {
397706
+ builder.groupRepelStrength(definition2.group_repel_strength);
397707
+ }
396861
397708
  break;
396862
397709
  }
396863
397710
  default: {
396864
- throw new Error(`Unrecognised layout type: ${String(definition2.layout_type)}`);
397711
+ throw new Error(`Unrecognized layout type: ${String(definition2.layout_type)}`);
396865
397712
  }
396866
397713
  }
396867
397714
  if (isDefinitionWithTiers(definition2)) {
@@ -396876,6 +397723,12 @@ ${letters.join("\n")}`;
396876
397723
  builderWithTiers.tierSeparation(definition2.tier_separation);
396877
397724
  }
396878
397725
  }
397726
+ if (isDefinitionWithGroup(definition2)) {
397727
+ const builderWithGroup = builder;
397728
+ if (definition2.group) {
397729
+ builderWithGroup.group = definition2.group;
397730
+ }
397731
+ }
396879
397732
  if (definition2.node_size) {
396880
397733
  builder.nodeSize(definition2.node_size);
396881
397734
  }