cx 26.7.0 → 26.7.1

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
@@ -12,6 +12,11 @@ export interface CxProps {
12
12
  parentInstance?: Instance;
13
13
  subscribe?: boolean;
14
14
  immediate?: boolean;
15
+ /** Cap re-entrant synchronous updates: while batching, once a burst of back-to-back updates gets too
16
+ * deep, defer the excess to the coalesced (setTimeout) branch instead of updating synchronously. Avoids
17
+ * React's "Maximum update depth exceeded" on very large synchronous render bursts (e.g. the initial
18
+ * render of a huge document). Off by default; has no effect on instances that don't set it. */
19
+ limitSyncBursts?: boolean;
15
20
  deferredUntilIdle?: boolean;
16
21
  idleTimeout?: number;
17
22
  options?: any;
@@ -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;;;oGAGgG;IAChG,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,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;AA4BD,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;IA6Bd,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
@@ -10,6 +10,30 @@ import { shallowEquals } from "../util/shallowEquals";
10
10
  import { PureContainer } from "./PureContainer";
11
11
  import { onIdleCallback } from "../util/onIdleCallback";
12
12
  import { getCurrentCulture, pushCulture, popCulture } from "./Culture";
13
+ // Optional guard (opt in per-instance via the `limitSyncBursts` prop) against React's "Maximum update depth
14
+ // exceeded" during very large synchronous render bursts. On the initial render of a large document the store
15
+ // can be mutated thousands of times within a single React commit: every Instance.setState wraps store.notify()
16
+ // in batchUpdates(), so isBatchingUpdates() stays true and a subscribed Cx takes its *synchronous* setState
17
+ // branch on each notification. React counts those as nested render-phase updates and aborts past ~50
18
+ // (surfacing as the recoverable "error during concurrent rendering"). When a Cx opts in, once back-to-back
19
+ // updates exceed the limit it falls back to the coalesced setTimeout branch, which renders the latest store
20
+ // data on the next tick. The counter is global (it mirrors React's global nested-update counter) and resets
21
+ // after any idle gap. It is advanced on every update() of an opted-in Cx -- counting only the synchronous
22
+ // branch would let the window reset whenever a deferred update lands between two synchronous ones, so the
23
+ // counter would never reach the limit. performance.now() gives sub-ms resolution (Date.now() is the fallback;
24
+ // Timing.now() can't be used here because it returns 0 in production).
25
+ const SYNC_UPDATE_BURST_LIMIT = 30;
26
+ const SYNC_UPDATE_BURST_RESET_MS = 10;
27
+ const syncUpdateBurstNow = typeof performance !== "undefined" && performance.now ? () => performance.now() : () => Date.now();
28
+ let syncUpdateBurstCount = 0;
29
+ let syncUpdateBurstLastAt = 0;
30
+ function trackSyncUpdateBurst() {
31
+ let t = syncUpdateBurstNow();
32
+ if (t - syncUpdateBurstLastAt > SYNC_UPDATE_BURST_RESET_MS)
33
+ syncUpdateBurstCount = 0;
34
+ syncUpdateBurstLastAt = t;
35
+ return ++syncUpdateBurstCount > SYNC_UPDATE_BURST_LIMIT;
36
+ }
13
37
  export class Cx extends VDOM.Component {
14
38
  widget;
15
39
  store;
@@ -111,17 +135,24 @@ export class Cx extends VDOM.Component {
111
135
  debug(appDataFlag, data);
112
136
  if (this.flags.preparing)
113
137
  this.flags.dirty = true;
114
- else if (isBatchingUpdates() || this.props.immediate) {
138
+ // `immediate` always renders synchronously (its contract). Otherwise, while batching, a Cx that opts in
139
+ // via `limitSyncBursts` defers once a synchronous burst gets too deep (avoids React's max-update-depth).
140
+ // Without the flag the condition is unchanged -- trackSyncUpdateBurst() is never even called, so the
141
+ // guard has zero effect on instances that don't opt in.
142
+ else if (this.props.immediate || (isBatchingUpdates() && !(this.props.limitSyncBursts && trackSyncUpdateBurst()))) {
115
143
  notifyBatchedUpdateStarting();
116
144
  this.setState({ data: data }, notifyBatchedUpdateCompleted);
117
145
  }
118
146
  else {
119
- //in standard mode sequential store commands are batched
147
+ //in standard mode sequential store commands are batched -- as is any update that exceeds the
148
+ //synchronous burst limit above, which falls through here to avoid React's max-update-depth abort
120
149
  if (!this.pendingUpdateTimer) {
121
150
  notifyBatchedUpdateStarting();
122
151
  this.pendingUpdateTimer = setTimeout(() => {
123
152
  delete this.pendingUpdateTimer;
124
- this.setState({ data: data }, notifyBatchedUpdateCompleted);
153
+ //for opted-in instances read fresh data at fire time so a deferred (coalesced) update isn't
154
+ //left stale after a burst; otherwise keep the original captured-data behavior unchanged
155
+ this.setState({ data: this.props.limitSyncBursts ? this.store.getData() : data }, notifyBatchedUpdateCompleted);
125
156
  }, 0);
126
157
  }
127
158
  }
@@ -16,6 +16,11 @@ export interface RestateConfig extends PureContainerConfig {
16
16
  cacheKey?: StringProp;
17
17
  /** Set to `true` to disable batching of updates. */
18
18
  immediate?: boolean;
19
+ /** Cap re-entrant synchronous updates on the detached `Cx` this Restate renders: once a burst of
20
+ * back-to-back updates gets too deep, defer the excess to the coalesced branch instead of updating
21
+ * synchronously. Avoids React's "Maximum update depth exceeded" on very large synchronous render bursts.
22
+ * Only applies in `detached` mode (a non-detached Restate has no `Cx` of its own). Off by default. */
23
+ limitSyncBursts?: boolean;
19
24
  /** Error handler callback. */
20
25
  onError?: (error: Error, instance: Instance) => void;
21
26
  /** Culture info to be used for formatting. */
@@ -33,6 +38,7 @@ export declare class Restate<Config extends RestateConfig = RestateConfig> exten
33
38
  onError?: (error: Error, instance: Instance) => void;
34
39
  waitForIdle: boolean;
35
40
  immediate: boolean;
41
+ limitSyncBursts: boolean;
36
42
  declareData(...args: any[]): void;
37
43
  init(): void;
38
44
  initSubStore(context: any, instance: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Restate.d.ts","sourceRoot":"","sources":["../../src/ui/Restate.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAiB,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AASxF,OAAO,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACvD,oDAAoD;IACpD,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAEhC,gDAAgD;IAChD,WAAW,CAAC,EAAE,UAAU,CAAC;IAEzB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IAErD,8CAA8C;IAC9C,OAAO,CAAC,EAAE,WAAW,CAAC;CACxB;AAGD,MAAM,WAAW,YAAa,SAAQ,aAAa;CAAG;AAEtD,qBAAa,OAAO,CAAC,MAAM,SAAS,aAAa,GAAG,aAAa,CAAE,SAAQ,iBAAiB,CAAC,MAAM,CAAC;IACzF,SAAS,EAAE,GAAG,CAAC;IACf,mBAAmB,EAAE,GAAG,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IAE3B,WAAW,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAQ1B,IAAI;IAsBJ,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;IAmBxC,gBAAgB,CAAC,QAAQ,EAAE,GAAG;IAI9B,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;IAQnC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;IAQpD,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;CAmBjD;AAOD,eAAO,MAAM,YAAY,gBAAU,CAAC"}
1
+ {"version":3,"file":"Restate.d.ts","sourceRoot":"","sources":["../../src/ui/Restate.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAiB,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AASxF,OAAO,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACvD,oDAAoD;IACpD,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAEhC,gDAAgD;IAChD,WAAW,CAAC,EAAE,UAAU,CAAC;IAEzB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;2GAGuG;IACvG,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IAErD,8CAA8C;IAC9C,OAAO,CAAC,EAAE,WAAW,CAAC;CACxB;AAGD,MAAM,WAAW,YAAa,SAAQ,aAAa;CAAG;AAEtD,qBAAa,OAAO,CAAC,MAAM,SAAS,aAAa,GAAG,aAAa,CAAE,SAAQ,iBAAiB,CAAC,MAAM,CAAC;IACzF,SAAS,EAAE,GAAG,CAAC;IACf,mBAAmB,EAAE,GAAG,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IAEjC,WAAW,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IAQ1B,IAAI;IAsBJ,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;IAmBxC,gBAAgB,CAAC,QAAQ,EAAE,GAAG;IAI9B,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;IAQnC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;IAQpD,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;CAoBjD;AAQD,eAAO,MAAM,YAAY,gBAAU,CAAC"}
@@ -80,12 +80,13 @@ export class Restate extends PureContainerBase {
80
80
  render(context, instance, key) {
81
81
  if (!this.detached)
82
82
  return instance.container.render(context);
83
- return (_jsx(Cx, { widget: this.container, parentInstance: instance, store: instance.subStore, subscribe: true, options: this.options, onError: this.onError, deferredUntilIdle: instance.data.deferredUntilIdle, idleTimeout: instance.data.idleTimeout, immediate: this.immediate, cultureInfo: instance.cultureInfo }, key));
83
+ return (_jsx(Cx, { widget: this.container, parentInstance: instance, store: instance.subStore, subscribe: true, options: this.options, onError: this.onError, deferredUntilIdle: instance.data.deferredUntilIdle, idleTimeout: instance.data.idleTimeout, immediate: this.immediate, limitSyncBursts: this.limitSyncBursts, cultureInfo: instance.cultureInfo }, key));
84
84
  }
85
85
  }
86
86
  Restate.prototype.detached = false;
87
87
  Restate.prototype.waitForIdle = false;
88
88
  Restate.prototype.immediate = false;
89
+ Restate.prototype.limitSyncBursts = false;
89
90
  Restate.prototype.culture = null;
90
91
  export const PrivateStore = Restate;
91
92
  class RestateStore extends Store {
@@ -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"}