cx 26.7.0 → 26.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/ui/Cx.d.ts CHANGED
@@ -43,6 +43,7 @@ export declare class Cx extends VDOM.Component<CxProps, CxState> {
43
43
  deferCounter: number;
44
44
  pendingUpdateTimer?: NodeJS.Timeout;
45
45
  unsubscribeIdleRequest?: () => void;
46
+ stateUpdateDepth: number;
46
47
  constructor(props: CxProps);
47
48
  UNSAFE_componentWillReceiveProps(props: CxProps): void;
48
49
  getInstance(): Instance;
@@ -50,6 +51,7 @@ export declare class Cx extends VDOM.Component<CxProps, CxState> {
50
51
  componentDidMount(): void;
51
52
  componentDidUpdate(): void;
52
53
  update(): void;
54
+ onStateUpdateCompleted(): void;
53
55
  waitForIdle(): void;
54
56
  componentWillUnmount(): void;
55
57
  shouldComponentUpdate(props: CxProps, state: CxState): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Cx.d.ts","sourceRoot":"","sources":["../../src/ui/Cx.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAE7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAc,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,OAAO,EAA2D,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,WAAW,OAAO;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAChE,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,GAAG,CAAA;KAAE,KAAK,GAAG,CAAC;IACnD,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAED,MAAM,WAAW,OAAO;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,CAAC;CACb;AAED,qBAAa,EAAG,SAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,CAAC;IACZ,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACtD,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;gBAExB,KAAK,EAAE,OAAO;IAwC1B,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAsBtD,WAAW,IAAI,QAAQ;IAcvB,MAAM;IAkBN,iBAAiB,IAAI,IAAI;IAOzB,kBAAkB,IAAI,IAAI;IAM1B,MAAM,IAAI,IAAI;IAmBd,WAAW,IAAI,IAAI;IAgBnB,oBAAoB,IAAI,IAAI;IAO5B,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAe9D,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;CAIzD"}
1
+ {"version":3,"file":"Cx.d.ts","sourceRoot":"","sources":["../../src/ui/Cx.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAE7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAc,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,OAAO,EAA2D,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,WAAW,OAAO;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAChE,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,GAAG,CAAA;KAAE,KAAK,GAAG,CAAC;IACnD,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAED,MAAM,WAAW,OAAO;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,CAAC;CACb;AAED,qBAAa,EAAG,SAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,CAAC;IACZ,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACtD,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpC,gBAAgB,EAAE,MAAM,CAAK;gBAEjB,KAAK,EAAE,OAAO;IA0C1B,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAsBtD,WAAW,IAAI,QAAQ;IAcvB,MAAM;IAkBN,iBAAiB,IAAI,IAAI;IAOzB,kBAAkB,IAAI,IAAI;IAM1B,MAAM,IAAI,IAAI;IAkCd,sBAAsB;IAWtB,WAAW,IAAI,IAAI;IAgBnB,oBAAoB,IAAI,IAAI;IAO5B,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAe9D,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;CAIzD"}
package/build/ui/Cx.js CHANGED
@@ -23,6 +23,8 @@ export class Cx extends VDOM.Component {
23
23
  deferCounter;
24
24
  pendingUpdateTimer;
25
25
  unsubscribeIdleRequest;
26
+ // 0 when no synchronous setState is in flight; >0 while one is pending (re-entrancy guard for update())
27
+ stateUpdateDepth = 0;
26
28
  constructor(props) {
27
29
  super(props);
28
30
  if (props.instance) {
@@ -49,6 +51,7 @@ export class Cx extends VDOM.Component {
49
51
  this.unsubscribe = this.store.subscribe(this.update.bind(this));
50
52
  this.state.data = this.store.getData();
51
53
  }
54
+ this.onStateUpdateCompleted = this.onStateUpdateCompleted.bind(this);
52
55
  this.flags = {};
53
56
  this.renderCount = 0;
54
57
  if (props.onError)
@@ -87,7 +90,7 @@ export class Cx extends VDOM.Component {
87
90
  return this.instance;
88
91
  }
89
92
  if (this.widget && this.parentInstance)
90
- return (this.instance = this.parentInstance.getDetachedChild(this.widget, 0, this.store));
93
+ return (this.instance = this.parentInstance.getDetachedChild(this.widget, "0", this.store));
91
94
  throw new Error("Could not resolve a widget instance in the Cx component.");
92
95
  }
93
96
  render() {
@@ -111,21 +114,47 @@ export class Cx extends VDOM.Component {
111
114
  debug(appDataFlag, data);
112
115
  if (this.flags.preparing)
113
116
  this.flags.dirty = true;
114
- else if (isBatchingUpdates() || this.props.immediate) {
115
- notifyBatchedUpdateStarting();
116
- this.setState({ data: data }, notifyBatchedUpdateCompleted);
117
+ // Synchronous path (while batching, or for `immediate` instances). At most one setState may be in flight
118
+ // per Cx: if one is already pending (stateUpdateDepth != 0) skip issuing another. Re-entrant setStates
119
+ // nested deep -- e.g. a large initial render that writes to the store while it renders -- are what trip
120
+ // React's "Maximum update depth exceeded"; coalescing them into a single in-flight update avoids that.
121
+ // The pending update's completion callback re-reads the store and renders again if it changed
122
+ // (see onStateUpdateCompleted), so no change is dropped.
123
+ else if (this.props.immediate || isBatchingUpdates()) {
124
+ if (this.stateUpdateDepth == 0) {
125
+ this.stateUpdateDepth = 1;
126
+ notifyBatchedUpdateStarting();
127
+ this.setState({ data: data }, this.onStateUpdateCompleted);
128
+ }
117
129
  }
118
130
  else {
119
- //in standard mode sequential store commands are batched
131
+ // standard mode: coalesce sequential store commands into a single deferred update
120
132
  if (!this.pendingUpdateTimer) {
121
133
  notifyBatchedUpdateStarting();
122
134
  this.pendingUpdateTimer = setTimeout(() => {
123
135
  delete this.pendingUpdateTimer;
124
- this.setState({ data: data }, notifyBatchedUpdateCompleted);
136
+ // read fresh data at fire time so the coalesced update renders the latest store state
137
+ this.setState({ data: this.store.getData() }, notifyBatchedUpdateCompleted);
125
138
  }, 0);
126
139
  }
127
140
  }
128
141
  }
142
+ // Completion callback for the synchronous setState above. If the store changed while that update was
143
+ // rendering -- i.e. the render itself wrote to the store, as happens throughout a large initial render --
144
+ // render once more with the latest data, keeping this callback armed; otherwise the burst has settled, so
145
+ // clear the in-flight flag and report completion. Re-arming coalesces until the store reaches a fixpoint;
146
+ // a genuinely non-converging update loop is still caught by React's own max-update-depth guard.
147
+ onStateUpdateCompleted() {
148
+ let latestData = this.store.getData();
149
+ if (this.state.data === latestData) {
150
+ this.stateUpdateDepth = 0;
151
+ notifyBatchedUpdateCompleted();
152
+ }
153
+ else {
154
+ this.stateUpdateDepth++;
155
+ this.setState({ data: latestData }, this.onStateUpdateCompleted);
156
+ }
157
+ }
129
158
  waitForIdle() {
130
159
  if (!this.props.deferredUntilIdle)
131
160
  return;
@@ -133,7 +162,7 @@ export class Cx extends VDOM.Component {
133
162
  this.unsubscribeIdleRequest();
134
163
  let token = ++this.deferCounter;
135
164
  this.unsubscribeIdleRequest = onIdleCallback(() => {
136
- this.setState({ deferToken: token });
165
+ this.setState({ deferToken: token }, this.onStateUpdateCompleted);
137
166
  }, {
138
167
  timeout: this.props.idleTimeout || 30000,
139
168
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentTitle.d.ts","sourceRoot":"","sources":["../../src/widgets/DocumentTitle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACtD,oDAAoD;IACpD,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,oDAAoD;IACpD,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,kFAAkF;IAClF,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAE1C,yFAAyF;IACzF,SAAS,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,qBAAa,aAAc,SAAQ,MAAM,CAAC,mBAAmB,CAAC;IACnD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,SAAS,CAAC,EAAE,UAAU,CAAC;gBAEnB,MAAM,CAAC,EAAE,mBAAmB;IAIxC,IAAI,IAAI,IAAI;IAQZ,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI;IASrD,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA+B5D,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAK5D,MAAM,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"DocumentTitle.d.ts","sourceRoot":"","sources":["../../src/widgets/DocumentTitle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACtD,oDAAoD;IACpD,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,oDAAoD;IACpD,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,kFAAkF;IAClF,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAE1C,yFAAyF;IACzF,SAAS,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,qBAAa,aAAc,SAAQ,MAAM,CAAC,mBAAmB,CAAC;IACnD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,SAAS,CAAC,EAAE,UAAU,CAAC;gBAEnB,MAAM,CAAC,EAAE,mBAAmB;IAIxC,IAAI,IAAI,IAAI;IAQZ,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI;IASrD,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA+B5D,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAO5D,MAAM,IAAI,IAAI;CAGhB"}
@@ -45,6 +45,8 @@ export class DocumentTitle extends Widget {
45
45
  super.explore(context, instance);
46
46
  }
47
47
  prepare(context, instance) {
48
+ if (typeof document == "undefined")
49
+ return;
48
50
  if (context.documentTitle.activeInstance == instance)
49
51
  document.title = context.documentTitle.title;
50
52
  }
@@ -25,6 +25,8 @@ export interface TreeNodeConfig extends StyledContainerConfig {
25
25
  openFolderIcon?: StringProp;
26
26
  /** Icon for folder. */
27
27
  folderIcon?: StringProp;
28
+ /** Icon used for the expand/collapse arrow. Defaults to `drop-down`. */
29
+ arrowIcon?: StringProp;
28
30
  /** Set to `true` to hide the icon. */
29
31
  hideIcon?: boolean;
30
32
  /** Set to `true` to hide the arrow. */
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNode.d.ts","sourceRoot":"","sources":["../../../src/widgets/grid/TreeNode.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,cAAe,SAAQ,qBAAqB;IAC3D,qCAAqC;IACrC,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,WAAW,CAAC;IAEvB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,UAAU,CAAC;IAE5B,uBAAuB;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,qBAAa,QAAS,SAAQ,aAAa,CAAC,cAAc,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;gBAEd,MAAM,CAAC,EAAE,cAAc;IAInC,IAAI;IAKJ,WAAW;IAkBX,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ;IAazD,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;IA+CjE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ;CAM/C"}
1
+ {"version":3,"file":"TreeNode.d.ts","sourceRoot":"","sources":["../../../src/widgets/grid/TreeNode.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,cAAe,SAAQ,qBAAqB;IAC3D,qCAAqC;IACrC,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,WAAW,CAAC;IAEvB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,UAAU,CAAC;IAE5B,uBAAuB;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,wEAAwE;IACxE,SAAS,CAAC,EAAE,UAAU,CAAC;IAEvB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,qBAAa,QAAS,SAAQ,aAAa,CAAC,cAAc,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;gBAEd,MAAM,CAAC,EAAE,cAAc;IAInC,IAAI;IAKJ,WAAW;IAkBX,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ;IAazD,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;IA+CjE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ;CAM/C"}