modern-idoc 0.9.0 → 0.9.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/dist/index.cjs CHANGED
@@ -363,6 +363,23 @@ function property2(declaration = {}) {
363
363
  class Reactivable extends Observable {
364
364
  _propertyAccessor;
365
365
  _properties = /* @__PURE__ */ new Map();
366
+ _updatedProperties = /* @__PURE__ */ new Map();
367
+ _changedProperties = /* @__PURE__ */ new Set();
368
+ _updatingPromise = Promise.resolve();
369
+ _updating = false;
370
+ constructor(properties) {
371
+ super();
372
+ this.setProperties(properties);
373
+ }
374
+ isDirty(key) {
375
+ return key ? this._updatedProperties.has(key) : this._updatedProperties.size > 0;
376
+ }
377
+ offsetGet(key) {
378
+ return this[key];
379
+ }
380
+ offsetSet(key, newValue) {
381
+ this[key] = newValue;
382
+ }
366
383
  getProperty(key, defaultValue) {
367
384
  if (this._propertyAccessor?.getProperty) {
368
385
  return this._propertyAccessor.getProperty(key, defaultValue);
@@ -371,7 +388,7 @@ class Reactivable extends Observable {
371
388
  }
372
389
  }
373
390
  setProperty(key, newValue) {
374
- const oldValue = this[key];
391
+ const oldValue = this.offsetGet(key);
375
392
  if (Object.is(newValue, oldValue)) {
376
393
  return;
377
394
  }
@@ -382,31 +399,121 @@ class Reactivable extends Observable {
382
399
  }
383
400
  this.onUpdateProperty(key, newValue, oldValue);
384
401
  }
402
+ getProperties(keys) {
403
+ const properties = {};
404
+ for (const [name, property] of this.getPropertyDeclarations()) {
405
+ if (!property.internal && !property.alias && (!keys || keys.includes(name))) {
406
+ properties[name] = this.getProperty(name);
407
+ }
408
+ }
409
+ return properties;
410
+ }
411
+ setProperties(properties) {
412
+ if (properties && typeof properties === "object") {
413
+ for (const [name] of this.getPropertyDeclarations()) {
414
+ if (name in properties) {
415
+ this.offsetSet(name, properties[name]);
416
+ }
417
+ }
418
+ }
419
+ return this;
420
+ }
421
+ resetProperties() {
422
+ for (const [name, property] of this.getPropertyDeclarations()) {
423
+ this.offsetSet(
424
+ name,
425
+ typeof property.default === "function" ? property.default() : property.default
426
+ );
427
+ }
428
+ return this;
429
+ }
385
430
  getPropertyDeclarations() {
386
431
  return getDeclarations(this.constructor);
387
432
  }
433
+ getPropertyDeclaration(key) {
434
+ return this.getPropertyDeclarations().get(key);
435
+ }
388
436
  setPropertyAccessor(accessor) {
389
437
  this._propertyAccessor = accessor;
390
438
  this.getPropertyDeclarations().forEach((_declaration, key) => {
391
- const newValue = this[key];
439
+ const newValue = this.offsetGet(key);
392
440
  const oldValue = this._properties.get(key);
393
441
  if (newValue === void 0) {
394
442
  if (oldValue !== void 0) {
395
- this[key] = oldValue;
443
+ this.offsetSet(key, oldValue);
396
444
  }
397
445
  } else if (newValue !== oldValue) {
398
- this[key] = newValue;
446
+ this.offsetSet(key, newValue);
399
447
  }
400
448
  });
401
449
  return this;
402
450
  }
451
+ async _nextTick() {
452
+ if ("requestAnimationFrame" in globalThis) {
453
+ return new Promise((r) => globalThis.requestAnimationFrame(r));
454
+ }
455
+ return Promise.resolve();
456
+ }
457
+ async _enqueueUpdate() {
458
+ this._updating = true;
459
+ try {
460
+ await this._updatingPromise;
461
+ } catch (e) {
462
+ Promise.reject(e);
463
+ }
464
+ await this._nextTick();
465
+ if (!this._updating)
466
+ return;
467
+ this.onUpdate();
468
+ this._updating = false;
469
+ }
470
+ onUpdate() {
471
+ this._update(this._updatedProperties);
472
+ this._updatedProperties = /* @__PURE__ */ new Map();
473
+ }
403
474
  onUpdateProperty(key, newValue, oldValue) {
404
- this._updateProperty(key, newValue, oldValue);
405
- this.emit("updateProperty", key, newValue, oldValue);
475
+ this.requestUpdate(key, newValue, oldValue);
476
+ }
477
+ requestUpdate(key, newValue, oldValue) {
478
+ if (key !== void 0) {
479
+ this._updatedProperties.set(key, oldValue);
480
+ this._changedProperties.add(key);
481
+ this._updateProperty(key, newValue, oldValue);
482
+ this.emit("updateProperty", key, newValue, oldValue);
483
+ }
484
+ if (!this._updating) {
485
+ this._updatingPromise = this._enqueueUpdate();
486
+ }
487
+ }
488
+ // eslint-disable-next-line unused-imports/no-unused-vars
489
+ _update(changed) {
406
490
  }
407
491
  // eslint-disable-next-line unused-imports/no-unused-vars
408
492
  _updateProperty(key, newValue, oldValue) {
409
493
  }
494
+ toJSON() {
495
+ const json = {};
496
+ this._properties.forEach((value, key) => {
497
+ if (value === void 0) {
498
+ return;
499
+ }
500
+ if (value && typeof value === "object") {
501
+ if ("toJSON" in value && typeof value.toJSON === "function") {
502
+ json[key] = value.toJSON();
503
+ } else if (Array.isArray(value)) {
504
+ json[key] = [...value];
505
+ } else {
506
+ json[key] = { ...value };
507
+ }
508
+ } else {
509
+ json[key] = value;
510
+ }
511
+ });
512
+ return json;
513
+ }
514
+ clone() {
515
+ return new this.constructor(this.toJSON());
516
+ }
410
517
  }
411
518
 
412
519
  function parseColor(color) {
package/dist/index.d.cts CHANGED
@@ -810,12 +810,12 @@ type EventListenerValue<T extends any[] = any[]> = (...args: T) => void;
810
810
  type EventListenerOptions = boolean | {
811
811
  once?: boolean;
812
812
  };
813
- interface EventListener<T extends any[] = any[]> {
813
+ interface EventListener$1<T extends any[] = any[]> {
814
814
  value: EventListenerValue<T>;
815
815
  options?: EventListenerOptions;
816
816
  }
817
817
  declare class EventEmitter<T extends Record<string, any> = Record<string, any>> {
818
- eventListeners: Map<keyof T, EventListener<any[]> | EventListener<any[]>[]>;
818
+ eventListeners: Map<keyof T, EventListener$1<any[]> | EventListener$1<any[]>[]>;
819
819
  addEventListener<K extends keyof T>(event: K, listener: EventListenerValue<T[K]>, options?: EventListenerOptions): this;
820
820
  removeEventListener<K extends keyof T>(event: K, listener: EventListenerValue<T[K]>, options?: EventListenerOptions): this;
821
821
  removeAllListeners(): this;
@@ -838,9 +838,11 @@ declare function setNestedValue(obj: any, path: (string | number)[], value: any)
838
838
  declare function getObjectValueByPath(obj: any, path: string, fallback?: any): any;
839
839
  declare function setObjectValueByPath(obj: any, path: string, value: any): void;
840
840
 
841
- declare class Observable<T extends {
842
- [K in keyof T]: (...args: any[]) => void;
843
- }> {
841
+ type EventListener = (...args: any[]) => void;
842
+ interface ObservableEvents {
843
+ [event: string]: EventListener;
844
+ }
845
+ declare class Observable<T extends ObservableEvents = ObservableEvents> {
844
846
  _observers: Map<string, Set<any>>;
845
847
  on<K extends keyof T & string>(event: K, listener: T[K]): this;
846
848
  once<K extends keyof T & string>(event: K, listener: T[K]): this;
@@ -858,19 +860,44 @@ declare class RawWeakMap<K extends WeakKey = WeakKey, V = any> {
858
860
  set(key: K, value: V): this;
859
861
  }
860
862
 
861
- interface ReactivableEvents {
863
+ interface ReactivableEvents extends ObservableEvents {
862
864
  updateProperty: (key: string, newValue: any, oldValue: any) => void;
863
865
  }
864
- declare class Reactivable extends Observable<ReactivableEvents> implements PropertyAccessor {
866
+ interface Reactivable {
867
+ on: <K extends keyof ReactivableEvents & string>(event: K, listener: ReactivableEvents[K]) => this;
868
+ once: <K extends keyof ReactivableEvents & string>(event: K, listener: ReactivableEvents[K]) => this;
869
+ off: <K extends keyof ReactivableEvents & string>(event: K, listener: ReactivableEvents[K]) => this;
870
+ emit: <K extends keyof ReactivableEvents & string>(event: K, ...args: Parameters<ReactivableEvents[K]>) => this;
871
+ }
872
+ declare class Reactivable extends Observable implements PropertyAccessor {
865
873
  protected _propertyAccessor?: PropertyAccessor;
866
874
  protected _properties: Map<string, unknown>;
875
+ protected _updatedProperties: Map<string, unknown>;
876
+ protected _changedProperties: Set<string>;
877
+ protected _updatingPromise: Promise<void>;
878
+ protected _updating: boolean;
879
+ constructor(properties?: Record<string, any>);
880
+ isDirty(key?: string): boolean;
881
+ offsetGet(key: string): any;
882
+ offsetSet(key: string, newValue: any): void;
867
883
  getProperty(key: string, defaultValue?: any): any;
868
884
  setProperty(key: string, newValue: any): void;
885
+ getProperties(keys?: string[]): Record<string, any>;
886
+ setProperties(properties?: Record<string, any>): this;
887
+ resetProperties(): this;
869
888
  getPropertyDeclarations(): Map<string, PropertyDeclaration>;
889
+ getPropertyDeclaration(key: string): PropertyDeclaration | undefined;
870
890
  setPropertyAccessor(accessor: PropertyAccessor): this;
891
+ protected _nextTick(): Promise<void>;
892
+ protected _enqueueUpdate(): Promise<void>;
893
+ onUpdate(): void;
871
894
  onUpdateProperty(key: string, newValue: any, oldValue: any): void;
895
+ requestUpdate(key?: string, newValue?: any, oldValue?: any): void;
896
+ protected _update(changed: Map<string, any>): void;
872
897
  protected _updateProperty(key: string, newValue: any, oldValue: any): void;
898
+ toJSON(): Record<string, any>;
899
+ clone(): this;
873
900
  }
874
901
 
875
902
  export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, defaultColor, defineProperty, flatDocumentToDocument, getDeclarations, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, getPropertyInternalKey, hasCRLF, idGenerator, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, property, property2, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
876
- export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, EffectObject, Element, EmNode, EventListener, EventListenerOptions, EventListenerValue, ExtentKeywordNode, Fill, FillObject, FillRule, FlatDocument, FlatElement, FlatTextContent, FlexDirection, FlexWrap, FontKerning, FontStyle, FontWeight, Foreground, ForegroundObject, FragmentObject, FullStyle, GradientFill, GradientFillObject, GradientNode, HeadEnd, Hex8Color, HexNode, HighlightColormap, HighlightImage, HighlightLine, HighlightReferImage, HighlightSize, HighlightThickness, HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, IdGenerator, ImageFill, ImageFillCropRect, ImageFillObject, ImageFillStretchRect, ImageFillTile, InnerShadow, InnerShadowObject, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOuterShadow, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedInnerShadow, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOuterShadow, NormalizedOutline, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedSoftEdge, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, OuterShadow, OuterShadowObject, Outline, OutlineObject, OutlineStyle, Overflow, ParagraphObject, PercentNode, PointerEvents, Position, PositionKeywordNode, PositionNode, PresetFill, PresetFillObject, PropertyAccessor, PropertyDeclaration, PxNode, RadialGradient, RadialGradientNode, RadialGradientWithType, ReactivableEvents, RepeatingLinearGradientNode, RepeatingRadialGradientNode, RgbColor, RgbNode, RgbaColor, RgbaNode, SVGPathData, Shadow, ShadowObject, Shape, ShapeNode, ShapePath, ShapePathStyle, SoftEdge, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextObject, TextOrientation, TextTransform, TextWrap, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor };
903
+ export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, EffectObject, Element, EmNode, EventListenerOptions, EventListenerValue, ExtentKeywordNode, Fill, FillObject, FillRule, FlatDocument, FlatElement, FlatTextContent, FlexDirection, FlexWrap, FontKerning, FontStyle, FontWeight, Foreground, ForegroundObject, FragmentObject, FullStyle, GradientFill, GradientFillObject, GradientNode, HeadEnd, Hex8Color, HexNode, HighlightColormap, HighlightImage, HighlightLine, HighlightReferImage, HighlightSize, HighlightThickness, HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, IdGenerator, ImageFill, ImageFillCropRect, ImageFillObject, ImageFillStretchRect, ImageFillTile, InnerShadow, InnerShadowObject, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOuterShadow, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedInnerShadow, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOuterShadow, NormalizedOutline, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedSoftEdge, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, ObservableEvents, OuterShadow, OuterShadowObject, Outline, OutlineObject, OutlineStyle, Overflow, ParagraphObject, PercentNode, PointerEvents, Position, PositionKeywordNode, PositionNode, PresetFill, PresetFillObject, PropertyAccessor, PropertyDeclaration, PxNode, RadialGradient, RadialGradientNode, RadialGradientWithType, ReactivableEvents, RepeatingLinearGradientNode, RepeatingRadialGradientNode, RgbColor, RgbNode, RgbaColor, RgbaNode, SVGPathData, Shadow, ShadowObject, Shape, ShapeNode, ShapePath, ShapePathStyle, SoftEdge, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextObject, TextOrientation, TextTransform, TextWrap, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor };
package/dist/index.d.mts CHANGED
@@ -810,12 +810,12 @@ type EventListenerValue<T extends any[] = any[]> = (...args: T) => void;
810
810
  type EventListenerOptions = boolean | {
811
811
  once?: boolean;
812
812
  };
813
- interface EventListener<T extends any[] = any[]> {
813
+ interface EventListener$1<T extends any[] = any[]> {
814
814
  value: EventListenerValue<T>;
815
815
  options?: EventListenerOptions;
816
816
  }
817
817
  declare class EventEmitter<T extends Record<string, any> = Record<string, any>> {
818
- eventListeners: Map<keyof T, EventListener<any[]> | EventListener<any[]>[]>;
818
+ eventListeners: Map<keyof T, EventListener$1<any[]> | EventListener$1<any[]>[]>;
819
819
  addEventListener<K extends keyof T>(event: K, listener: EventListenerValue<T[K]>, options?: EventListenerOptions): this;
820
820
  removeEventListener<K extends keyof T>(event: K, listener: EventListenerValue<T[K]>, options?: EventListenerOptions): this;
821
821
  removeAllListeners(): this;
@@ -838,9 +838,11 @@ declare function setNestedValue(obj: any, path: (string | number)[], value: any)
838
838
  declare function getObjectValueByPath(obj: any, path: string, fallback?: any): any;
839
839
  declare function setObjectValueByPath(obj: any, path: string, value: any): void;
840
840
 
841
- declare class Observable<T extends {
842
- [K in keyof T]: (...args: any[]) => void;
843
- }> {
841
+ type EventListener = (...args: any[]) => void;
842
+ interface ObservableEvents {
843
+ [event: string]: EventListener;
844
+ }
845
+ declare class Observable<T extends ObservableEvents = ObservableEvents> {
844
846
  _observers: Map<string, Set<any>>;
845
847
  on<K extends keyof T & string>(event: K, listener: T[K]): this;
846
848
  once<K extends keyof T & string>(event: K, listener: T[K]): this;
@@ -858,19 +860,44 @@ declare class RawWeakMap<K extends WeakKey = WeakKey, V = any> {
858
860
  set(key: K, value: V): this;
859
861
  }
860
862
 
861
- interface ReactivableEvents {
863
+ interface ReactivableEvents extends ObservableEvents {
862
864
  updateProperty: (key: string, newValue: any, oldValue: any) => void;
863
865
  }
864
- declare class Reactivable extends Observable<ReactivableEvents> implements PropertyAccessor {
866
+ interface Reactivable {
867
+ on: <K extends keyof ReactivableEvents & string>(event: K, listener: ReactivableEvents[K]) => this;
868
+ once: <K extends keyof ReactivableEvents & string>(event: K, listener: ReactivableEvents[K]) => this;
869
+ off: <K extends keyof ReactivableEvents & string>(event: K, listener: ReactivableEvents[K]) => this;
870
+ emit: <K extends keyof ReactivableEvents & string>(event: K, ...args: Parameters<ReactivableEvents[K]>) => this;
871
+ }
872
+ declare class Reactivable extends Observable implements PropertyAccessor {
865
873
  protected _propertyAccessor?: PropertyAccessor;
866
874
  protected _properties: Map<string, unknown>;
875
+ protected _updatedProperties: Map<string, unknown>;
876
+ protected _changedProperties: Set<string>;
877
+ protected _updatingPromise: Promise<void>;
878
+ protected _updating: boolean;
879
+ constructor(properties?: Record<string, any>);
880
+ isDirty(key?: string): boolean;
881
+ offsetGet(key: string): any;
882
+ offsetSet(key: string, newValue: any): void;
867
883
  getProperty(key: string, defaultValue?: any): any;
868
884
  setProperty(key: string, newValue: any): void;
885
+ getProperties(keys?: string[]): Record<string, any>;
886
+ setProperties(properties?: Record<string, any>): this;
887
+ resetProperties(): this;
869
888
  getPropertyDeclarations(): Map<string, PropertyDeclaration>;
889
+ getPropertyDeclaration(key: string): PropertyDeclaration | undefined;
870
890
  setPropertyAccessor(accessor: PropertyAccessor): this;
891
+ protected _nextTick(): Promise<void>;
892
+ protected _enqueueUpdate(): Promise<void>;
893
+ onUpdate(): void;
871
894
  onUpdateProperty(key: string, newValue: any, oldValue: any): void;
895
+ requestUpdate(key?: string, newValue?: any, oldValue?: any): void;
896
+ protected _update(changed: Map<string, any>): void;
872
897
  protected _updateProperty(key: string, newValue: any, oldValue: any): void;
898
+ toJSON(): Record<string, any>;
899
+ clone(): this;
873
900
  }
874
901
 
875
902
  export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, defaultColor, defineProperty, flatDocumentToDocument, getDeclarations, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, getPropertyInternalKey, hasCRLF, idGenerator, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, property, property2, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
876
- export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, EffectObject, Element, EmNode, EventListener, EventListenerOptions, EventListenerValue, ExtentKeywordNode, Fill, FillObject, FillRule, FlatDocument, FlatElement, FlatTextContent, FlexDirection, FlexWrap, FontKerning, FontStyle, FontWeight, Foreground, ForegroundObject, FragmentObject, FullStyle, GradientFill, GradientFillObject, GradientNode, HeadEnd, Hex8Color, HexNode, HighlightColormap, HighlightImage, HighlightLine, HighlightReferImage, HighlightSize, HighlightThickness, HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, IdGenerator, ImageFill, ImageFillCropRect, ImageFillObject, ImageFillStretchRect, ImageFillTile, InnerShadow, InnerShadowObject, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOuterShadow, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedInnerShadow, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOuterShadow, NormalizedOutline, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedSoftEdge, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, OuterShadow, OuterShadowObject, Outline, OutlineObject, OutlineStyle, Overflow, ParagraphObject, PercentNode, PointerEvents, Position, PositionKeywordNode, PositionNode, PresetFill, PresetFillObject, PropertyAccessor, PropertyDeclaration, PxNode, RadialGradient, RadialGradientNode, RadialGradientWithType, ReactivableEvents, RepeatingLinearGradientNode, RepeatingRadialGradientNode, RgbColor, RgbNode, RgbaColor, RgbaNode, SVGPathData, Shadow, ShadowObject, Shape, ShapeNode, ShapePath, ShapePathStyle, SoftEdge, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextObject, TextOrientation, TextTransform, TextWrap, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor };
903
+ export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, EffectObject, Element, EmNode, EventListenerOptions, EventListenerValue, ExtentKeywordNode, Fill, FillObject, FillRule, FlatDocument, FlatElement, FlatTextContent, FlexDirection, FlexWrap, FontKerning, FontStyle, FontWeight, Foreground, ForegroundObject, FragmentObject, FullStyle, GradientFill, GradientFillObject, GradientNode, HeadEnd, Hex8Color, HexNode, HighlightColormap, HighlightImage, HighlightLine, HighlightReferImage, HighlightSize, HighlightThickness, HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, IdGenerator, ImageFill, ImageFillCropRect, ImageFillObject, ImageFillStretchRect, ImageFillTile, InnerShadow, InnerShadowObject, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOuterShadow, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedInnerShadow, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOuterShadow, NormalizedOutline, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedSoftEdge, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, ObservableEvents, OuterShadow, OuterShadowObject, Outline, OutlineObject, OutlineStyle, Overflow, ParagraphObject, PercentNode, PointerEvents, Position, PositionKeywordNode, PositionNode, PresetFill, PresetFillObject, PropertyAccessor, PropertyDeclaration, PxNode, RadialGradient, RadialGradientNode, RadialGradientWithType, ReactivableEvents, RepeatingLinearGradientNode, RepeatingRadialGradientNode, RgbColor, RgbNode, RgbaColor, RgbaNode, SVGPathData, Shadow, ShadowObject, Shape, ShapeNode, ShapePath, ShapePathStyle, SoftEdge, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextObject, TextOrientation, TextTransform, TextWrap, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor };
package/dist/index.d.ts CHANGED
@@ -810,12 +810,12 @@ type EventListenerValue<T extends any[] = any[]> = (...args: T) => void;
810
810
  type EventListenerOptions = boolean | {
811
811
  once?: boolean;
812
812
  };
813
- interface EventListener<T extends any[] = any[]> {
813
+ interface EventListener$1<T extends any[] = any[]> {
814
814
  value: EventListenerValue<T>;
815
815
  options?: EventListenerOptions;
816
816
  }
817
817
  declare class EventEmitter<T extends Record<string, any> = Record<string, any>> {
818
- eventListeners: Map<keyof T, EventListener<any[]> | EventListener<any[]>[]>;
818
+ eventListeners: Map<keyof T, EventListener$1<any[]> | EventListener$1<any[]>[]>;
819
819
  addEventListener<K extends keyof T>(event: K, listener: EventListenerValue<T[K]>, options?: EventListenerOptions): this;
820
820
  removeEventListener<K extends keyof T>(event: K, listener: EventListenerValue<T[K]>, options?: EventListenerOptions): this;
821
821
  removeAllListeners(): this;
@@ -838,9 +838,11 @@ declare function setNestedValue(obj: any, path: (string | number)[], value: any)
838
838
  declare function getObjectValueByPath(obj: any, path: string, fallback?: any): any;
839
839
  declare function setObjectValueByPath(obj: any, path: string, value: any): void;
840
840
 
841
- declare class Observable<T extends {
842
- [K in keyof T]: (...args: any[]) => void;
843
- }> {
841
+ type EventListener = (...args: any[]) => void;
842
+ interface ObservableEvents {
843
+ [event: string]: EventListener;
844
+ }
845
+ declare class Observable<T extends ObservableEvents = ObservableEvents> {
844
846
  _observers: Map<string, Set<any>>;
845
847
  on<K extends keyof T & string>(event: K, listener: T[K]): this;
846
848
  once<K extends keyof T & string>(event: K, listener: T[K]): this;
@@ -858,19 +860,44 @@ declare class RawWeakMap<K extends WeakKey = WeakKey, V = any> {
858
860
  set(key: K, value: V): this;
859
861
  }
860
862
 
861
- interface ReactivableEvents {
863
+ interface ReactivableEvents extends ObservableEvents {
862
864
  updateProperty: (key: string, newValue: any, oldValue: any) => void;
863
865
  }
864
- declare class Reactivable extends Observable<ReactivableEvents> implements PropertyAccessor {
866
+ interface Reactivable {
867
+ on: <K extends keyof ReactivableEvents & string>(event: K, listener: ReactivableEvents[K]) => this;
868
+ once: <K extends keyof ReactivableEvents & string>(event: K, listener: ReactivableEvents[K]) => this;
869
+ off: <K extends keyof ReactivableEvents & string>(event: K, listener: ReactivableEvents[K]) => this;
870
+ emit: <K extends keyof ReactivableEvents & string>(event: K, ...args: Parameters<ReactivableEvents[K]>) => this;
871
+ }
872
+ declare class Reactivable extends Observable implements PropertyAccessor {
865
873
  protected _propertyAccessor?: PropertyAccessor;
866
874
  protected _properties: Map<string, unknown>;
875
+ protected _updatedProperties: Map<string, unknown>;
876
+ protected _changedProperties: Set<string>;
877
+ protected _updatingPromise: Promise<void>;
878
+ protected _updating: boolean;
879
+ constructor(properties?: Record<string, any>);
880
+ isDirty(key?: string): boolean;
881
+ offsetGet(key: string): any;
882
+ offsetSet(key: string, newValue: any): void;
867
883
  getProperty(key: string, defaultValue?: any): any;
868
884
  setProperty(key: string, newValue: any): void;
885
+ getProperties(keys?: string[]): Record<string, any>;
886
+ setProperties(properties?: Record<string, any>): this;
887
+ resetProperties(): this;
869
888
  getPropertyDeclarations(): Map<string, PropertyDeclaration>;
889
+ getPropertyDeclaration(key: string): PropertyDeclaration | undefined;
870
890
  setPropertyAccessor(accessor: PropertyAccessor): this;
891
+ protected _nextTick(): Promise<void>;
892
+ protected _enqueueUpdate(): Promise<void>;
893
+ onUpdate(): void;
871
894
  onUpdateProperty(key: string, newValue: any, oldValue: any): void;
895
+ requestUpdate(key?: string, newValue?: any, oldValue?: any): void;
896
+ protected _update(changed: Map<string, any>): void;
872
897
  protected _updateProperty(key: string, newValue: any, oldValue: any): void;
898
+ toJSON(): Record<string, any>;
899
+ clone(): this;
873
900
  }
874
901
 
875
902
  export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, defaultColor, defineProperty, flatDocumentToDocument, getDeclarations, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, getPropertyInternalKey, hasCRLF, idGenerator, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, property, property2, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
876
- export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, EffectObject, Element, EmNode, EventListener, EventListenerOptions, EventListenerValue, ExtentKeywordNode, Fill, FillObject, FillRule, FlatDocument, FlatElement, FlatTextContent, FlexDirection, FlexWrap, FontKerning, FontStyle, FontWeight, Foreground, ForegroundObject, FragmentObject, FullStyle, GradientFill, GradientFillObject, GradientNode, HeadEnd, Hex8Color, HexNode, HighlightColormap, HighlightImage, HighlightLine, HighlightReferImage, HighlightSize, HighlightThickness, HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, IdGenerator, ImageFill, ImageFillCropRect, ImageFillObject, ImageFillStretchRect, ImageFillTile, InnerShadow, InnerShadowObject, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOuterShadow, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedInnerShadow, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOuterShadow, NormalizedOutline, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedSoftEdge, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, OuterShadow, OuterShadowObject, Outline, OutlineObject, OutlineStyle, Overflow, ParagraphObject, PercentNode, PointerEvents, Position, PositionKeywordNode, PositionNode, PresetFill, PresetFillObject, PropertyAccessor, PropertyDeclaration, PxNode, RadialGradient, RadialGradientNode, RadialGradientWithType, ReactivableEvents, RepeatingLinearGradientNode, RepeatingRadialGradientNode, RgbColor, RgbNode, RgbaColor, RgbaNode, SVGPathData, Shadow, ShadowObject, Shape, ShapeNode, ShapePath, ShapePathStyle, SoftEdge, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextObject, TextOrientation, TextTransform, TextWrap, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor };
903
+ export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, EffectObject, Element, EmNode, EventListenerOptions, EventListenerValue, ExtentKeywordNode, Fill, FillObject, FillRule, FlatDocument, FlatElement, FlatTextContent, FlexDirection, FlexWrap, FontKerning, FontStyle, FontWeight, Foreground, ForegroundObject, FragmentObject, FullStyle, GradientFill, GradientFillObject, GradientNode, HeadEnd, Hex8Color, HexNode, HighlightColormap, HighlightImage, HighlightLine, HighlightReferImage, HighlightSize, HighlightThickness, HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, IdGenerator, ImageFill, ImageFillCropRect, ImageFillObject, ImageFillStretchRect, ImageFillTile, InnerShadow, InnerShadowObject, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOuterShadow, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedInnerShadow, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOuterShadow, NormalizedOutline, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedSoftEdge, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, ObservableEvents, OuterShadow, OuterShadowObject, Outline, OutlineObject, OutlineStyle, Overflow, ParagraphObject, PercentNode, PointerEvents, Position, PositionKeywordNode, PositionNode, PresetFill, PresetFillObject, PropertyAccessor, PropertyDeclaration, PxNode, RadialGradient, RadialGradientNode, RadialGradientWithType, ReactivableEvents, RepeatingLinearGradientNode, RepeatingRadialGradientNode, RgbColor, RgbNode, RgbaColor, RgbaNode, SVGPathData, Shadow, ShadowObject, Shape, ShapeNode, ShapePath, ShapePathStyle, SoftEdge, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextObject, TextOrientation, TextTransform, TextWrap, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(o,G){typeof exports=="object"&&typeof module<"u"?G(exports):typeof define=="function"&&define.amd?define(["exports"],G):(o=typeof globalThis<"u"?globalThis:o||self,G(o.modernIdoc={}))})(this,(function(o){"use strict";function G(t){return typeof t=="string"?{src:t}:t}var Se={grad:.9,turn:360,rad:360/(2*Math.PI)},D=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},b=function(t,e,n){return e===void 0&&(e=0),n===void 0&&(n=Math.pow(10,e)),Math.round(n*t)/n+0},E=function(t,e,n){return e===void 0&&(e=0),n===void 0&&(n=1),t>n?n:t>e?t:e},ht=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},pt=function(t){return{r:E(t.r,0,255),g:E(t.g,0,255),b:E(t.b,0,255),a:E(t.a)}},tt=function(t){return{r:b(t.r),g:b(t.g),b:b(t.b),a:b(t.a,3)}},Ce=/^#([0-9a-f]{3,8})$/i,K=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},vt=function(t){var e=t.r,n=t.g,r=t.b,i=t.a,a=Math.max(e,n,r),l=a-Math.min(e,n,r),u=l?a===e?(n-r)/l:a===n?2+(r-e)/l:4+(e-n)/l:0;return{h:60*(u<0?u+6:u),s:a?l/a*100:0,v:a/255*100,a:i}},mt=function(t){var e=t.h,n=t.s,r=t.v,i=t.a;e=e/360*6,n/=100,r/=100;var a=Math.floor(e),l=r*(1-n),u=r*(1-(e-a)*n),f=r*(1-(1-e+a)*n),p=a%6;return{r:255*[r,u,l,l,f,r][p],g:255*[f,r,r,u,l,l][p],b:255*[l,l,f,r,r,u][p],a:i}},yt=function(t){return{h:ht(t.h),s:E(t.s,0,100),l:E(t.l,0,100),a:E(t.a)}},bt=function(t){return{h:b(t.h),s:b(t.s),l:b(t.l),a:b(t.a,3)}},St=function(t){return mt((n=(e=t).s,{h:e.h,s:(n*=((r=e.l)<50?r:100-r)/100)>0?2*n/(r+n)*100:0,v:r+n,a:e.a}));var e,n,r},V=function(t){return{h:(e=vt(t)).h,s:(i=(200-(n=e.s))*(r=e.v)/100)>0&&i<200?n*r/100/(i<=100?i:200-i)*100:0,l:i/2,a:e.a};var e,n,r,i},we=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,_e=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ze=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Ee=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Ct={string:[[function(t){var e=Ce.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?b(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?b(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=ze.exec(t)||Ee.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:pt({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=we.exec(t)||_e.exec(t);if(!e)return null;var n,r,i=yt({h:(n=e[1],r=e[2],r===void 0&&(r="deg"),Number(n)*(Se[r]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return St(i)},"hsl"]],object:[[function(t){var e=t.r,n=t.g,r=t.b,i=t.a,a=i===void 0?1:i;return D(e)&&D(n)&&D(r)?pt({r:Number(e),g:Number(n),b:Number(r),a:Number(a)}):null},"rgb"],[function(t){var e=t.h,n=t.s,r=t.l,i=t.a,a=i===void 0?1:i;if(!D(e)||!D(n)||!D(r))return null;var l=yt({h:Number(e),s:Number(n),l:Number(r),a:Number(a)});return St(l)},"hsl"],[function(t){var e=t.h,n=t.s,r=t.v,i=t.a,a=i===void 0?1:i;if(!D(e)||!D(n)||!D(r))return null;var l=(function(u){return{h:ht(u.h),s:E(u.s,0,100),v:E(u.v,0,100),a:E(u.a)}})({h:Number(e),s:Number(n),v:Number(r),a:Number(a)});return mt(l)},"hsv"]]},wt=function(t,e){for(var n=0;n<e.length;n++){var r=e[n][0](t);if(r)return[r,e[n][1]]}return[null,void 0]},Fe=function(t){return typeof t=="string"?wt(t.trim(),Ct.string):typeof t=="object"&&t!==null?wt(t,Ct.object):[null,void 0]},et=function(t,e){var n=V(t);return{h:n.h,s:E(n.s+100*e,0,100),l:n.l,a:n.a}},nt=function(t){return(299*t.r+587*t.g+114*t.b)/1e3/255},_t=function(t,e){var n=V(t);return{h:n.h,s:n.s,l:E(n.l+100*e,0,100),a:n.a}},zt=(function(){function t(e){this.parsed=Fe(e)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return t.prototype.isValid=function(){return this.parsed!==null},t.prototype.brightness=function(){return b(nt(this.rgba),2)},t.prototype.isDark=function(){return nt(this.rgba)<.5},t.prototype.isLight=function(){return nt(this.rgba)>=.5},t.prototype.toHex=function(){return e=tt(this.rgba),n=e.r,r=e.g,i=e.b,l=(a=e.a)<1?K(b(255*a)):"","#"+K(n)+K(r)+K(i)+l;var e,n,r,i,a,l},t.prototype.toRgb=function(){return tt(this.rgba)},t.prototype.toRgbString=function(){return e=tt(this.rgba),n=e.r,r=e.g,i=e.b,(a=e.a)<1?"rgba("+n+", "+r+", "+i+", "+a+")":"rgb("+n+", "+r+", "+i+")";var e,n,r,i,a},t.prototype.toHsl=function(){return bt(V(this.rgba))},t.prototype.toHslString=function(){return e=bt(V(this.rgba)),n=e.h,r=e.s,i=e.l,(a=e.a)<1?"hsla("+n+", "+r+"%, "+i+"%, "+a+")":"hsl("+n+", "+r+"%, "+i+"%)";var e,n,r,i,a},t.prototype.toHsv=function(){return e=vt(this.rgba),{h:b(e.h),s:b(e.s),v:b(e.v),a:b(e.a,3)};var e},t.prototype.invert=function(){return O({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},t.prototype.saturate=function(e){return e===void 0&&(e=.1),O(et(this.rgba,e))},t.prototype.desaturate=function(e){return e===void 0&&(e=.1),O(et(this.rgba,-e))},t.prototype.grayscale=function(){return O(et(this.rgba,-1))},t.prototype.lighten=function(e){return e===void 0&&(e=.1),O(_t(this.rgba,e))},t.prototype.darken=function(e){return e===void 0&&(e=.1),O(_t(this.rgba,-e))},t.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},t.prototype.alpha=function(e){return typeof e=="number"?O({r:(n=this.rgba).r,g:n.g,b:n.b,a:e}):b(this.rgba.a,3);var n},t.prototype.hue=function(e){var n=V(this.rgba);return typeof e=="number"?O({h:e,s:n.s,l:n.l,a:n.a}):b(n.h)},t.prototype.isEqual=function(e){return this.toHex()===O(e).toHex()},t})(),O=function(t){return t instanceof zt?t:new zt(t)};class Le{eventListeners=new Map;addEventListener(e,n,r){const i={value:n,options:r},a=this.eventListeners.get(e);return a?Array.isArray(a)?a.push(i):this.eventListeners.set(e,[a,i]):this.eventListeners.set(e,i),this}removeEventListener(e,n,r){if(!n)return this.eventListeners.delete(e),this;const i=this.eventListeners.get(e);if(!i)return this;if(Array.isArray(i)){const a=[];for(let l=0,u=i.length;l<u;l++){const f=i[l];(f.value!==n||typeof r=="object"&&r?.once&&(typeof f.options=="boolean"||!f.options?.once))&&a.push(f)}a.length?this.eventListeners.set(e,a.length===1?a[0]:a):this.eventListeners.delete(e)}else i.value===n&&(typeof r=="boolean"||!r?.once||typeof i.options=="boolean"||i.options?.once)&&this.eventListeners.delete(e);return this}removeAllListeners(){return this.eventListeners.clear(),this}hasEventListener(e){return this.eventListeners.has(e)}dispatchEvent(e,...n){const r=this.eventListeners.get(e);if(r){if(Array.isArray(r))for(let i=r.length,a=0;a<i;a++){const l=r[a];typeof l.options=="object"&&l.options?.once&&this.off(e,l.value,l.options),l.value.apply(this,n)}else typeof r.options=="object"&&r.options?.once&&this.off(e,r.value,r.options),r.value.apply(this,n);return!0}else return!1}on(e,n,r){return this.addEventListener(e,n,r)}once(e,n){return this.addEventListener(e,n,{once:!0})}off(e,n,r){return this.removeEventListener(e,n,r)}emit(e,...n){this.dispatchEvent(e,...n)}}function h(t){return t==null||t==="none"}function A(t,e=0,n=10**e){return Math.round(n*t)/n+0}function w(t,e=!1){if(typeof t!="object"||!t)return t;if(Array.isArray(t))return e?t.map(r=>w(r,e)):t;const n={};for(const r in t){const i=t[r];i!=null&&(e?n[r]=w(i,e):n[r]=i)}return n}function U(t,e){const n={};return e.forEach(r=>{r in t&&(n[r]=t[r])}),n}function X(t,e){if(t===e)return!0;if(t&&e&&typeof t=="object"&&typeof e=="object"){const n=Array.from(new Set([...Object.keys(t),...Object.keys(e)]));return!n.length||n.every(r=>t[r]===e[r])}return!1}function Et(t,e,n){const r=e.length-1;if(r<0)return t===void 0?n:t;for(let i=0;i<r;i++){if(t==null)return n;t=t[e[i]]}return t==null||t[e[r]]===void 0?n:t[e[r]]}function Ft(t,e,n){const r=e.length-1;for(let i=0;i<r;i++)typeof t[e[i]]!="object"&&(t[e[i]]={}),t=t[e[i]];t[e[r]]=n}function Lt(t,e,n){return t==null||!e||typeof e!="string"?n:t[e]!==void 0?t[e]:(e=e.replace(/\[(\w+)\]/g,".$1"),e=e.replace(/^\./,""),Et(t,e.split("."),n))}function Pt(t,e,n){if(!(typeof t!="object"||!e))return e=e.replace(/\[(\w+)\]/g,".$1"),e=e.replace(/^\./,""),Ft(t,e.split("."),n)}class Ot{_observers=new Map;on(e,n){let r=this._observers.get(e);return r===void 0&&this._observers.set(e,r=new Set),r.add(n),this}once(e,n){const r=(...i)=>{this.off(e,r),n(...i)};return this.on(e,r),this}off(e,n){const r=this._observers.get(e);return r!==void 0&&(r.delete(n),r.size===0&&this._observers.delete(e)),this}emit(e,...n){return Array.from((this._observers.get(e)||new Map).values()).forEach(r=>r(...n)),this}destroy(){this._observers=new Map}}class Pe{_map=new WeakMap;_toRaw(e){if(e&&typeof e=="object"){const n=e.__v_raw;n&&(e=this._toRaw(n))}return e}delete(e){return this._map.delete(this._toRaw(e))}get(e){return this._map.get(this._toRaw(e))}has(e){return this._map.has(this._toRaw(e))}set(e,n){return this._map.set(this._toRaw(e),this._toRaw(n)),this}}const rt=Symbol("properties"),Dt=Symbol("inited");function M(t){let e;if(Object.hasOwn(t,rt))e=t[rt];else{const n=Object.getPrototypeOf(t);e=new Map(n?M(n):void 0),t[rt]=e}return e}function At(t){return`__internal:${t}`}function it(t,e={}){const n=At(t),{default:r,fallback:i,alias:a,internal:l}=e,u=()=>typeof r=="function"?r():r,f=()=>typeof i=="function"?i():i;function p(){let d;if(a&&a!==t?d=Lt(this,a):!l&&typeof this.getProperty<"u"?d=this.getProperty(t):d=this[n],d=d??f(),d===void 0&&r!==void 0&&!this[Dt]){this[Dt]=!0;const m=u();m!==void 0&&(v.call(this,m),d=m)}return d}function v(d){a&&a!==t?Pt(this,a,d):!l&&typeof this.setProperty<"u"?this.setProperty(t,d):this[n]=d}return{get:p,set:v}}function Nt(t,e,n={}){M(t).set(e,n);const r=it(e,n);Object.defineProperty(t.prototype,e,{get(){return r.get.call(this)},set(i){r.set.call(this,i)},configurable:!0,enumerable:!0})}function Oe(t){return function(e,n){if(typeof n!="string")throw new TypeError("Failed to @property decorator, prop name cannot be a symbol");Nt(e.constructor,n,t)}}function De(t={}){return function(e,n){const r=n.name;if(typeof r!="string")throw new TypeError("Failed to @property decorator, prop name cannot be a symbol");const i=it(r,t);return{init(a){return M(this.constructor).set(r,t),i.set.call(this,a),a},get(){return i.get.call(this)},set(a){i.set.call(this,a)}}}}class Ae extends Ot{_propertyAccessor;_properties=new Map;getProperty(e,n){return this._propertyAccessor?.getProperty?this._propertyAccessor.getProperty(e,n):this._properties.get(e)??n}setProperty(e,n){const r=this[e];Object.is(n,r)||(this._propertyAccessor?.setProperty?this._propertyAccessor.setProperty(e,n):this._properties.set(e,n),this.onUpdateProperty(e,n,r))}getPropertyDeclarations(){return M(this.constructor)}setPropertyAccessor(e){return this._propertyAccessor=e,this.getPropertyDeclarations().forEach((n,r)=>{const i=this[r],a=this._properties.get(r);i===void 0?a!==void 0&&(this[r]=a):i!==a&&(this[r]=i)}),this}onUpdateProperty(e,n,r){this._updateProperty(e,n,r),this.emit("updateProperty",e,n,r)}_updateProperty(e,n,r){}}function ot(t){let e;return typeof t=="number"?e={r:t>>24&255,g:t>>16&255,b:t>>8&255,a:(t&255)/255}:e=t,O(e)}function Ne(t){return{r:A(t.r),g:A(t.g),b:A(t.b),a:A(t.a,3)}}function Y(t){const e=t.toString(16);return e.length<2?`0${e}`:e}const T="#000000FF";function Rt(t){return ot(t).isValid()}function C(t,e=!1){const n=ot(t);if(!n.isValid()){if(typeof t=="string")return t;const u=`Failed to normalizeColor ${t}`;if(e)throw new Error(u);return console.warn(u),T}const{r,g:i,b:a,a:l}=Ne(n.rgba);return`#${Y(r)}${Y(i)}${Y(a)}${Y(A(l*255))}`}var x=x||{};x.parse=(function(){const t={linearGradient:/^(-(webkit|o|ms|moz)-)?(linear-gradient)/i,repeatingLinearGradient:/^(-(webkit|o|ms|moz)-)?(repeating-linear-gradient)/i,radialGradient:/^(-(webkit|o|ms|moz)-)?(radial-gradient)/i,repeatingRadialGradient:/^(-(webkit|o|ms|moz)-)?(repeating-radial-gradient)/i,sideOrCorner:/^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,extentKeywords:/^(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/,positionKeywords:/^(left|center|right|top|bottom)/i,pixelValue:/^(-?((\d*\.\d+)|(\d+\.?)))px/,percentageValue:/^(-?((\d*\.\d+)|(\d+\.?)))%/,emValue:/^(-?((\d*\.\d+)|(\d+\.?)))em/,angleValue:/^(-?((\d*\.\d+)|(\d+\.?)))deg/,radianValue:/^(-?((\d*\.\d+)|(\d+\.?)))rad/,startCall:/^\(/,endCall:/^\)/,comma:/^,/,hexColor:/^#([0-9a-f]+)/i,literalColor:/^([a-z]+)/i,rgbColor:/^rgb/i,rgbaColor:/^rgba/i,varColor:/^var/i,calcValue:/^calc/i,variableName:/^(--[a-z0-9-,\s#]+)/i,number:/^((\d*\.\d+)|(\d+\.?))/,hslColor:/^hsl/i,hslaColor:/^hsla/i};let e="";function n(s){const c=new Error(`${e}: ${s}`);throw c.source=e,c}function r(){const s=i();return e.length>0&&n("Invalid input not EOF"),s}function i(){return j(a)}function a(){return l("linear-gradient",t.linearGradient,f)||l("repeating-linear-gradient",t.repeatingLinearGradient,f)||l("radial-gradient",t.radialGradient,d)||l("repeating-radial-gradient",t.repeatingRadialGradient,d)}function l(s,c,g){return u(c,S=>{const I=g();return I&&(y(t.comma)||n("Missing comma before color stops")),{type:s,orientation:I,colorStops:j(dt)}})}function u(s,c){const g=y(s);if(g){y(t.startCall)||n("Missing (");const S=c(g);return y(t.endCall)||n("Missing )"),S}}function f(){const s=p();if(s)return s;const c=z("position-keyword",t.positionKeywords,1);return c?{type:"directional",value:c.value}:v()}function p(){return z("directional",t.sideOrCorner,1)}function v(){return z("angular",t.angleValue,1)||z("angular",t.radianValue,1)}function d(){let s,c=m(),g;return c&&(s=[],s.push(c),g=e,y(t.comma)&&(c=m(),c?s.push(c):e=g)),s}function m(){let s=_()||N();if(s)s.at=P();else{const c=F();if(c){s=c;const g=P();g&&(s.at=g)}else{const g=P();if(g)s={type:"default-radial",at:g};else{const S=R();S&&(s={type:"default-radial",at:S})}}}return s}function _(){const s=z("shape",/^(circle)/i,0);return s&&(s.style=be()||F()),s}function N(){const s=z("shape",/^(ellipse)/i,0);return s&&(s.style=R()||Q()||F()),s}function F(){return z("extent-keyword",t.extentKeywords,1)}function P(){if(z("position",/^at/,0)){const s=R();return s||n("Missing positioning value"),s}}function R(){const s=W();if(s.x||s.y)return{type:"position",value:s}}function W(){return{x:Q(),y:Q()}}function j(s){let c=s();const g=[];if(c)for(g.push(c);y(t.comma);)c=s(),c?g.push(c):n("One extra comma");return g}function dt(){const s=Ke();return s||n("Expected color definition"),s.length=Q(),s}function Ke(){return Xe()||Je()||Ze()||xe()||Ye()||qe()||Ue()}function Ue(){return z("literal",t.literalColor,0)}function Xe(){return z("hex",t.hexColor,1)}function Ye(){return u(t.rgbColor,()=>({type:"rgb",value:j(B)}))}function xe(){return u(t.rgbaColor,()=>({type:"rgba",value:j(B)}))}function qe(){return u(t.varColor,()=>({type:"var",value:Qe()}))}function Ze(){return u(t.hslColor,()=>{y(t.percentageValue)&&n("HSL hue value must be a number in degrees (0-360) or normalized (-360 to 360), not a percentage");const c=B();y(t.comma);let g=y(t.percentageValue);const S=g?g[1]:null;y(t.comma),g=y(t.percentageValue);const I=g?g[1]:null;return(!S||!I)&&n("Expected percentage value for saturation and lightness in HSL"),{type:"hsl",value:[c,S,I]}})}function Je(){return u(t.hslaColor,()=>{const s=B();y(t.comma);let c=y(t.percentageValue);const g=c?c[1]:null;y(t.comma),c=y(t.percentageValue);const S=c?c[1]:null;y(t.comma);const I=B();return(!g||!S)&&n("Expected percentage value for saturation and lightness in HSLA"),{type:"hsla",value:[s,g,S,I]}})}function Qe(){return y(t.variableName)[1]}function B(){return y(t.number)[1]}function Q(){return z("%",t.percentageValue,1)||tn()||en()||be()}function tn(){return z("position-keyword",t.positionKeywords,1)}function en(){return u(t.calcValue,()=>{let s=1,c=0;for(;s>0&&c<e.length;){const S=e.charAt(c);S==="("?s++:S===")"&&s--,c++}s>0&&n("Missing closing parenthesis in calc() expression");const g=e.substring(0,c-1);return gt(c-1),{type:"calc",value:g}})}function be(){return z("px",t.pixelValue,1)||z("em",t.emValue,1)}function z(s,c,g){const S=y(c);if(S)return{type:s,value:S[g]}}function y(s){let c,g;return g=/^\s+/.exec(e),g&&gt(g[0].length),c=s.exec(e),c&&gt(c[0].length),c}function gt(s){e=e.substr(s)}return function(s){return e=s.toString().trim(),e.endsWith(";")&&(e=e.slice(0,-1)),r()}})();const It=x.parse.bind(x);var q=q||{};q.stringify=(function(){var t={"visit_linear-gradient":function(e){return t.visit_gradient(e)},"visit_repeating-linear-gradient":function(e){return t.visit_gradient(e)},"visit_radial-gradient":function(e){return t.visit_gradient(e)},"visit_repeating-radial-gradient":function(e){return t.visit_gradient(e)},visit_gradient:function(e){var n=t.visit(e.orientation);return n&&(n+=", "),e.type+"("+n+t.visit(e.colorStops)+")"},visit_shape:function(e){var n=e.value,r=t.visit(e.at),i=t.visit(e.style);return i&&(n+=" "+i),r&&(n+=" at "+r),n},"visit_default-radial":function(e){var n="",r=t.visit(e.at);return r&&(n+=r),n},"visit_extent-keyword":function(e){var n=e.value,r=t.visit(e.at);return r&&(n+=" at "+r),n},"visit_position-keyword":function(e){return e.value},visit_position:function(e){return t.visit(e.value.x)+" "+t.visit(e.value.y)},"visit_%":function(e){return e.value+"%"},visit_em:function(e){return e.value+"em"},visit_px:function(e){return e.value+"px"},visit_calc:function(e){return"calc("+e.value+")"},visit_literal:function(e){return t.visit_color(e.value,e)},visit_hex:function(e){return t.visit_color("#"+e.value,e)},visit_rgb:function(e){return t.visit_color("rgb("+e.value.join(", ")+")",e)},visit_rgba:function(e){return t.visit_color("rgba("+e.value.join(", ")+")",e)},visit_hsl:function(e){return t.visit_color("hsl("+e.value[0]+", "+e.value[1]+"%, "+e.value[2]+"%)",e)},visit_hsla:function(e){return t.visit_color("hsla("+e.value[0]+", "+e.value[1]+"%, "+e.value[2]+"%, "+e.value[3]+")",e)},visit_var:function(e){return t.visit_color("var("+e.value+")",e)},visit_color:function(e,n){var r=e,i=t.visit(n.length);return i&&(r+=" "+i),r},visit_angular:function(e){return e.value+"deg"},visit_directional:function(e){return"to "+e.value},visit_array:function(e){var n="",r=e.length;return e.forEach(function(i,a){n+=t.visit(i),a<r-1&&(n+=", ")}),n},visit_object:function(e){return e.width&&e.height?t.visit(e.width)+" "+t.visit(e.height):""},visit:function(e){if(!e)return"";if(e instanceof Array)return t.visit_array(e);if(typeof e=="object"&&!e.type)return t.visit_object(e);if(e.type){var n=t["visit_"+e.type];if(n)return n(e);throw Error("Missing visitor visit_"+e.type)}else throw Error("Invalid node.")}};return function(e){return t.visit(e)}})();const Re=q.stringify.bind(q);function Gt(t){const e=t.length-1;return t.map((n,r)=>{const i=n.value;let a=A(r/e,3),l="#00000000";switch(n.type){case"rgb":l=C({r:Number(i[0]??0),g:Number(i[1]??0),b:Number(i[2]??0)});break;case"rgba":l=C({r:Number(i[0]??0),g:Number(i[1]??0),b:Number(i[2]??0),a:Number(i[3]??0)});break;case"literal":l=C(n.value);break;case"hex":l=C(`#${n.value}`);break}switch(n.length?.type){case"%":a=Number(n.length.value)/100;break}return{offset:a,color:l}})}function kt(t){let e=0;switch(t.orientation?.type){case"angular":e=Number(t.orientation.value);break}return{type:"linear-gradient",angle:e,stops:Gt(t.colorStops)}}function jt(t){return t.orientation?.map(e=>{switch(e?.type){case"shape":case"default-radial":case"extent-keyword":default:return null}}),{type:"radial-gradient",stops:Gt(t.colorStops)}}function $(t){return t.startsWith("linear-gradient(")||t.startsWith("radial-gradient(")}function Vt(t){return It(t).map(e=>{switch(e?.type){case"linear-gradient":return kt(e);case"repeating-linear-gradient":return{...kt(e),repeat:!0};case"radial-gradient":return jt(e);case"repeating-radial-gradient":return{...jt(e),repeat:!0};default:return}}).filter(Boolean)}function Mt(t){let e;return typeof t=="string"?e={color:t}:e=t,{color:C(e.color)}}function Tt(t){let e;if(typeof t=="string"?e={image:t}:e=t,e.image){const{type:n,...r}=Vt(e.image)[0]??{};switch(n){case"radial-gradient":return{radialGradient:r};case"linear-gradient":return{linearGradient:r}}}return e}function $t(t){let e;return typeof t=="string"?e={image:t}:e=t,e}function Ht(t){let e;return typeof t=="string"?e={preset:t}:e=t,{preset:e.preset,foregroundColor:h(e.foregroundColor)?void 0:C(e.foregroundColor),backgroundColor:h(e.backgroundColor)?void 0:C(e.backgroundColor)}}function Wt(t){return!h(t.color)}function Bt(t){return typeof t=="string"?Rt(t):Wt(t)}function Kt(t){return!h(t.image)&&$(t.image)||!!t.linearGradient||!!t.radialGradient}function Ut(t){return typeof t=="string"?$(t):Kt(t)}function Xt(t){return!h(t.image)&&!$(t.image)}function Yt(t){return typeof t=="string"?!$(t):Xt(t)}function xt(t){return!h(t.preset)}function qt(t){return typeof t=="string"?!1:xt(t)}function L(t){const e=t&&typeof t=="object"?t.enabled:void 0;return Bt(t)?w({enabled:e,...Mt(t)}):Ut(t)?w({enabled:e,...Tt(t)}):Yt(t)?w({enabled:e,...$t(t)}):qt(t)?w({enabled:e,...Ht(t)}):{}}function Zt(t){return typeof t=="string"?{...L(t)}:{...L(t),...U(t,["fillWithShape"])}}function at(){return{color:T,offsetX:0,offsetY:0,blurRadius:1}}function st(t){return{...at(),...w({...t,color:h(t.color)?T:C(t.color)})}}function Jt(){return{...at(),scaleX:1,scaleY:1}}function Qt(t){return{...Jt(),...st(t)}}function Ie(t){return t}function te(t){return w({...t,softEdge:h(t.softEdge)?void 0:t.softEdge,outerShadow:h(t.outerShadow)?void 0:Qt(t.outerShadow),innerShadow:h(t.innerShadow)?void 0:st(t.innerShadow)})}function ee(t){return typeof t=="string"?{...L(t)}:{...L(t),...U(t,["fillWithShape"])}}const Ge="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";let ke=(t=21)=>{let e="",n=crypto.getRandomValues(new Uint8Array(t|=0));for(;t--;)e+=Ge[n[t]&63];return e};const ne=()=>ke(10),re=ne;function H(t){return typeof t=="string"?{...L(t)}:{...L(t),...U(t,["width","style","lineCap","lineJoin","headEnd","tailEnd"])}}function ie(t){return typeof t=="string"?{color:C(t)}:{...t,color:h(t.color)?T:C(t.color)}}function oe(){return{boxShadow:"none"}}function ae(t){return typeof t=="string"?t.startsWith("<svg")?{svg:t}:{paths:[{data:t}]}:Array.isArray(t)?{paths:t.map(e=>typeof e=="string"?{data:e}:e)}:t}function se(){return{overflow:"visible",direction:void 0,display:void 0,boxSizing:void 0,width:void 0,height:void 0,maxHeight:void 0,maxWidth:void 0,minHeight:void 0,minWidth:void 0,position:void 0,left:0,top:0,right:void 0,bottom:void 0,borderTop:void 0,borderLeft:void 0,borderRight:void 0,borderBottom:void 0,borderWidth:0,border:void 0,flex:void 0,flexBasis:void 0,flexDirection:void 0,flexGrow:void 0,flexShrink:void 0,flexWrap:void 0,justifyContent:void 0,gap:void 0,alignContent:void 0,alignItems:void 0,alignSelf:void 0,marginTop:void 0,marginLeft:void 0,marginRight:void 0,marginBottom:void 0,margin:void 0,paddingTop:void 0,paddingLeft:void 0,paddingRight:void 0,paddingBottom:void 0,padding:void 0}}function le(){return{rotate:0,scaleX:1,scaleY:1,skewX:0,skewY:0,translateX:0,translateY:0,transform:"none",transformOrigin:"center"}}function ue(){return{...se(),...le(),...oe(),backgroundImage:"none",backgroundSize:"auto, auto",backgroundColor:"none",backgroundColormap:"none",borderRadius:0,borderColor:"none",borderStyle:"solid",outlineWidth:0,outlineOffset:0,outlineColor:"rgb(0, 0, 0)",outlineStyle:"none",visibility:"visible",filter:"none",opacity:1,pointerEvents:"auto",maskImage:"none"}}function ce(){return{highlight:{},highlightImage:"none",highlightReferImage:"none",highlightColormap:"none",highlightLine:"none",highlightSize:"cover",highlightThickness:"100%"}}function fe(){return{listStyle:{},listStyleType:"none",listStyleImage:"none",listStyleColormap:"none",listStyleSize:"cover",listStylePosition:"outside"}}function de(){return{...ce(),color:"rgb(0, 0, 0)",verticalAlign:"baseline",letterSpacing:0,wordSpacing:0,fontSize:14,fontWeight:"normal",fontFamily:"",fontStyle:"normal",fontKerning:"normal",textTransform:"none",textOrientation:"mixed",textDecoration:"none"}}function ge(){return{...fe(),writingMode:"horizontal-tb",textWrap:"wrap",textAlign:"start",textIndent:0,lineHeight:1.2}}function he(){return{...ge(),...de(),textStrokeWidth:0,textStrokeColor:"rgb(0, 0, 0)"}}function k(t){return w({...t,color:h(t.color)?void 0:C(t.color),backgroundColor:h(t.backgroundColor)?void 0:C(t.backgroundColor),borderColor:h(t.borderColor)?void 0:C(t.borderColor),outlineColor:h(t.outlineColor)?void 0:C(t.outlineColor),shadowColor:h(t.shadowColor)?void 0:C(t.shadowColor)})}function je(){return{...ue(),...he()}}const lt=/\r\n|\n\r|\n|\r/,Ve=new RegExp(`${lt.source}|<br\\/>`,"g"),Me=new RegExp(`^(${lt.source})$`),ut=`
2
- `;function Te(t){return lt.test(t)}function ct(t){return Me.test(t)}function pe(t){return t.replace(Ve,ut)}function Z(t){const e=[];function n(){return e[e.length-1]}function r(u,f,p){const v=u?k(u):{},d=f?L(f):void 0,m=p?H(p):void 0,_=w({...v,fill:d,outline:m,fragments:[]});return e[e.length-1]?.fragments.length===0?e[e.length-1]=_:e.push(_),_}function i(u="",f,p,v){const d=f?k(f):{},m=p?L(p):void 0,_=v?H(v):void 0;Array.from(u).forEach(N=>{if(ct(N)){const{fragments:F,fill:P,outline:R,...W}=n()||r();F.length||F.push(w({...d,fill:m,outline:_,content:ut})),r(W,P,R)}else{const F=n()||r(),P=F.fragments[F.fragments.length-1];if(P){const{content:R,fill:W,outline:j,...dt}=P;if(X(m,W)&&X(_,j)&&X(d,dt)){P.content=`${R}${N}`;return}}F.fragments.push(w({...d,fill:m,outline:_,content:N}))}})}(Array.isArray(t)?t:[t]).forEach(u=>{if(typeof u=="string")r(),i(u);else if(ft(u)){const{content:f,fill:p,outline:v,...d}=u;r(d,p,v),i(f)}else if(ve(u)){const{fragments:f,fill:p,outline:v,...d}=u;r(d,p,v),f.forEach(m=>{const{content:_,fill:N,outline:F,...P}=m;i(_,P,N,F)})}else Array.isArray(u)?(r(),u.forEach(f=>{if(typeof f=="string")i(f);else if(ft(f)){const{content:p,fill:v,outline:d,...m}=f;i(p,m,v,d)}})):console.warn("Failed to parse text content",u)});const l=n();return l&&!l.fragments.length&&l.fragments.push({content:""}),e}function ve(t){return t&&typeof t=="object"&&"fragments"in t&&Array.isArray(t.fragments)}function ft(t){return t&&typeof t=="object"&&"content"in t&&typeof t.content=="string"}function me(t){return typeof t=="string"||Array.isArray(t)?{content:Z(t)}:w({...t,content:Z(t.content??""),style:t.style?k(t.style):void 0,effects:t.effects?t.effects.map(e=>k(e)):void 0,measureDom:t.measureDom,fonts:t.fonts,fill:t.fill?L(t.fill):void 0,outline:t.outline?H(t.outline):void 0})}function $e(t){return Z(t).map(e=>{const n=pe(e.fragments.flatMap(r=>r.content).join(""));return ct(n)?"":n}).join(ut)}function ye(t){return typeof t=="string"?{src:t}:t}function J(t){return w({...t,id:t.id??re(),style:h(t.style)?void 0:k(t.style),text:h(t.text)?void 0:me(t.text),background:h(t.background)?void 0:Zt(t.background),shape:h(t.shape)?void 0:ae(t.shape),fill:h(t.fill)?void 0:L(t.fill),outline:h(t.outline)?void 0:H(t.outline),foreground:h(t.foreground)?void 0:ee(t.foreground),shadow:h(t.shadow)?void 0:ie(t.shadow),video:h(t.video)?void 0:ye(t.video),audio:h(t.audio)?void 0:G(t.audio),effect:h(t.effect)?void 0:te(t.effect),children:t.children?.map(e=>J(e))})}function He(t){return J(t)}function We(t){const e={};for(const n in t.children){const r=J(t.children[n]);delete r.children,e[n]=r}return{...t,children:e}}function Be(t){const{children:e,...n}=t;function r(f){const{parentId:p,childrenIds:v,...d}=f;return{...d,children:[]}}const i={},a=[],l={...n,children:a};function u(f){if(!e[f]||i[f])return;const p=e[f],v=r(p);i[f]=v;const d=p.parentId;if(d){u(d);const m=e[d],_=i[d];if(!_)return;m?.childrenIds&&_?.children&&(_.children[m.childrenIds.indexOf(f)]=v)}else a.push(v)}for(const f in e)u(f);return l}o.EventEmitter=Le,o.Observable=Ot,o.RawWeakMap=Pe,o.Reactivable=Ae,o.clearUndef=w,o.defaultColor=T,o.defineProperty=Nt,o.flatDocumentToDocument=Be,o.getDeclarations=M,o.getDefaultElementStyle=ue,o.getDefaultHighlightStyle=ce,o.getDefaultInnerShadow=at,o.getDefaultLayoutStyle=se,o.getDefaultListStyleStyle=fe,o.getDefaultOuterShadow=Jt,o.getDefaultShadowStyle=oe,o.getDefaultStyle=je,o.getDefaultTextInlineStyle=de,o.getDefaultTextLineStyle=ge,o.getDefaultTextStyle=he,o.getDefaultTransformStyle=le,o.getNestedValue=Et,o.getObjectValueByPath=Lt,o.getPropertyDescriptor=it,o.getPropertyInternalKey=At,o.hasCRLF=Te,o.idGenerator=re,o.isCRLF=ct,o.isColor=Rt,o.isColorFill=Bt,o.isColorFillObject=Wt,o.isEqualObject=X,o.isFragmentObject=ft,o.isGradient=$,o.isGradientFill=Ut,o.isGradientFillObject=Kt,o.isImageFill=Yt,o.isImageFillObject=Xt,o.isNone=h,o.isParagraphObject=ve,o.isPresetFill=qt,o.isPresetFillObject=xt,o.nanoid=ne,o.normalizeAudio=G,o.normalizeBackground=Zt,o.normalizeCRLF=pe,o.normalizeColor=C,o.normalizeColorFill=Mt,o.normalizeDocument=He,o.normalizeEffect=te,o.normalizeElement=J,o.normalizeFill=L,o.normalizeFlatDocument=We,o.normalizeForeground=ee,o.normalizeGradient=Vt,o.normalizeGradientFill=Tt,o.normalizeImageFill=$t,o.normalizeInnerShadow=st,o.normalizeOuterShadow=Qt,o.normalizeOutline=H,o.normalizePresetFill=Ht,o.normalizeShadow=ie,o.normalizeShape=ae,o.normalizeSoftEdge=Ie,o.normalizeStyle=k,o.normalizeText=me,o.normalizeTextContent=Z,o.normalizeVideo=ye,o.parseColor=ot,o.parseGradient=It,o.pick=U,o.property=Oe,o.property2=De,o.round=A,o.setNestedValue=Ft,o.setObjectValueByPath=Pt,o.stringifyGradient=Re,o.textContentToString=$e,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(o,G){typeof exports=="object"&&typeof module<"u"?G(exports):typeof define=="function"&&define.amd?define(["exports"],G):(o=typeof globalThis<"u"?globalThis:o||self,G(o.modernIdoc={}))})(this,(function(o){"use strict";function G(t){return typeof t=="string"?{src:t}:t}var Se={grad:.9,turn:360,rad:360/(2*Math.PI)},D=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},b=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=Math.pow(10,e)),Math.round(r*t)/r+0},z=function(t,e,r){return e===void 0&&(e=0),r===void 0&&(r=1),t>r?r:t>e?t:e},ht=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},pt=function(t){return{r:z(t.r,0,255),g:z(t.g,0,255),b:z(t.b,0,255),a:z(t.a)}},tt=function(t){return{r:b(t.r),g:b(t.g),b:b(t.b),a:b(t.a,3)}},_e=/^#([0-9a-f]{3,8})$/i,K=function(t){var e=t.toString(16);return e.length<2?"0"+e:e},vt=function(t){var e=t.r,r=t.g,n=t.b,i=t.a,a=Math.max(e,r,n),u=a-Math.min(e,r,n),l=u?a===e?(r-n)/u:a===r?2+(n-e)/u:4+(e-r)/u:0;return{h:60*(l<0?l+6:l),s:a?u/a*100:0,v:a/255*100,a:i}},mt=function(t){var e=t.h,r=t.s,n=t.v,i=t.a;e=e/360*6,r/=100,n/=100;var a=Math.floor(e),u=n*(1-r),l=n*(1-(e-a)*r),f=n*(1-(1-e+a)*r),p=a%6;return{r:255*[n,l,u,u,f,n][p],g:255*[f,n,n,l,u,u][p],b:255*[u,u,f,n,n,l][p],a:i}},yt=function(t){return{h:ht(t.h),s:z(t.s,0,100),l:z(t.l,0,100),a:z(t.a)}},bt=function(t){return{h:b(t.h),s:b(t.s),l:b(t.l),a:b(t.a,3)}},St=function(t){return mt((r=(e=t).s,{h:e.h,s:(r*=((n=e.l)<50?n:100-n)/100)>0?2*r/(n+r)*100:0,v:n+r,a:e.a}));var e,r,n},M=function(t){return{h:(e=vt(t)).h,s:(i=(200-(r=e.s))*(n=e.v)/100)>0&&i<200?r*n/100/(i<=100?i:200-i)*100:0,l:i/2,a:e.a};var e,r,n,i},we=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Ce=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Pe=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ze=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,_t={string:[[function(t){var e=_e.exec(t);return e?(t=e[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?b(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?b(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var e=Pe.exec(t)||ze.exec(t);return e?e[2]!==e[4]||e[4]!==e[6]?null:pt({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(t){var e=we.exec(t)||Ce.exec(t);if(!e)return null;var r,n,i=yt({h:(r=e[1],n=e[2],n===void 0&&(n="deg"),Number(r)*(Se[n]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return St(i)},"hsl"]],object:[[function(t){var e=t.r,r=t.g,n=t.b,i=t.a,a=i===void 0?1:i;return D(e)&&D(r)&&D(n)?pt({r:Number(e),g:Number(r),b:Number(n),a:Number(a)}):null},"rgb"],[function(t){var e=t.h,r=t.s,n=t.l,i=t.a,a=i===void 0?1:i;if(!D(e)||!D(r)||!D(n))return null;var u=yt({h:Number(e),s:Number(r),l:Number(n),a:Number(a)});return St(u)},"hsl"],[function(t){var e=t.h,r=t.s,n=t.v,i=t.a,a=i===void 0?1:i;if(!D(e)||!D(r)||!D(n))return null;var u=(function(l){return{h:ht(l.h),s:z(l.s,0,100),v:z(l.v,0,100),a:z(l.a)}})({h:Number(e),s:Number(r),v:Number(n),a:Number(a)});return mt(u)},"hsv"]]},wt=function(t,e){for(var r=0;r<e.length;r++){var n=e[r][0](t);if(n)return[n,e[r][1]]}return[null,void 0]},Ee=function(t){return typeof t=="string"?wt(t.trim(),_t.string):typeof t=="object"&&t!==null?wt(t,_t.object):[null,void 0]},et=function(t,e){var r=M(t);return{h:r.h,s:z(r.s+100*e,0,100),l:r.l,a:r.a}},rt=function(t){return(299*t.r+587*t.g+114*t.b)/1e3/255},Ct=function(t,e){var r=M(t);return{h:r.h,s:r.s,l:z(r.l+100*e,0,100),a:r.a}},Pt=(function(){function t(e){this.parsed=Ee(e)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return t.prototype.isValid=function(){return this.parsed!==null},t.prototype.brightness=function(){return b(rt(this.rgba),2)},t.prototype.isDark=function(){return rt(this.rgba)<.5},t.prototype.isLight=function(){return rt(this.rgba)>=.5},t.prototype.toHex=function(){return e=tt(this.rgba),r=e.r,n=e.g,i=e.b,u=(a=e.a)<1?K(b(255*a)):"","#"+K(r)+K(n)+K(i)+u;var e,r,n,i,a,u},t.prototype.toRgb=function(){return tt(this.rgba)},t.prototype.toRgbString=function(){return e=tt(this.rgba),r=e.r,n=e.g,i=e.b,(a=e.a)<1?"rgba("+r+", "+n+", "+i+", "+a+")":"rgb("+r+", "+n+", "+i+")";var e,r,n,i,a},t.prototype.toHsl=function(){return bt(M(this.rgba))},t.prototype.toHslString=function(){return e=bt(M(this.rgba)),r=e.h,n=e.s,i=e.l,(a=e.a)<1?"hsla("+r+", "+n+"%, "+i+"%, "+a+")":"hsl("+r+", "+n+"%, "+i+"%)";var e,r,n,i,a},t.prototype.toHsv=function(){return e=vt(this.rgba),{h:b(e.h),s:b(e.s),v:b(e.v),a:b(e.a,3)};var e},t.prototype.invert=function(){return L({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},t.prototype.saturate=function(e){return e===void 0&&(e=.1),L(et(this.rgba,e))},t.prototype.desaturate=function(e){return e===void 0&&(e=.1),L(et(this.rgba,-e))},t.prototype.grayscale=function(){return L(et(this.rgba,-1))},t.prototype.lighten=function(e){return e===void 0&&(e=.1),L(Ct(this.rgba,e))},t.prototype.darken=function(e){return e===void 0&&(e=.1),L(Ct(this.rgba,-e))},t.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},t.prototype.alpha=function(e){return typeof e=="number"?L({r:(r=this.rgba).r,g:r.g,b:r.b,a:e}):b(this.rgba.a,3);var r},t.prototype.hue=function(e){var r=M(this.rgba);return typeof e=="number"?L({h:e,s:r.s,l:r.l,a:r.a}):b(r.h)},t.prototype.isEqual=function(e){return this.toHex()===L(e).toHex()},t})(),L=function(t){return t instanceof Pt?t:new Pt(t)};class Fe{eventListeners=new Map;addEventListener(e,r,n){const i={value:r,options:n},a=this.eventListeners.get(e);return a?Array.isArray(a)?a.push(i):this.eventListeners.set(e,[a,i]):this.eventListeners.set(e,i),this}removeEventListener(e,r,n){if(!r)return this.eventListeners.delete(e),this;const i=this.eventListeners.get(e);if(!i)return this;if(Array.isArray(i)){const a=[];for(let u=0,l=i.length;u<l;u++){const f=i[u];(f.value!==r||typeof n=="object"&&n?.once&&(typeof f.options=="boolean"||!f.options?.once))&&a.push(f)}a.length?this.eventListeners.set(e,a.length===1?a[0]:a):this.eventListeners.delete(e)}else i.value===r&&(typeof n=="boolean"||!n?.once||typeof i.options=="boolean"||i.options?.once)&&this.eventListeners.delete(e);return this}removeAllListeners(){return this.eventListeners.clear(),this}hasEventListener(e){return this.eventListeners.has(e)}dispatchEvent(e,...r){const n=this.eventListeners.get(e);if(n){if(Array.isArray(n))for(let i=n.length,a=0;a<i;a++){const u=n[a];typeof u.options=="object"&&u.options?.once&&this.off(e,u.value,u.options),u.value.apply(this,r)}else typeof n.options=="object"&&n.options?.once&&this.off(e,n.value,n.options),n.value.apply(this,r);return!0}else return!1}on(e,r,n){return this.addEventListener(e,r,n)}once(e,r){return this.addEventListener(e,r,{once:!0})}off(e,r,n){return this.removeEventListener(e,r,n)}emit(e,...r){this.dispatchEvent(e,...r)}}function h(t){return t==null||t==="none"}function A(t,e=0,r=10**e){return Math.round(r*t)/r+0}function w(t,e=!1){if(typeof t!="object"||!t)return t;if(Array.isArray(t))return e?t.map(n=>w(n,e)):t;const r={};for(const n in t){const i=t[n];i!=null&&(e?r[n]=w(i,e):r[n]=i)}return r}function U(t,e){const r={};return e.forEach(n=>{n in t&&(r[n]=t[n])}),r}function q(t,e){if(t===e)return!0;if(t&&e&&typeof t=="object"&&typeof e=="object"){const r=Array.from(new Set([...Object.keys(t),...Object.keys(e)]));return!r.length||r.every(n=>t[n]===e[n])}return!1}function zt(t,e,r){const n=e.length-1;if(n<0)return t===void 0?r:t;for(let i=0;i<n;i++){if(t==null)return r;t=t[e[i]]}return t==null||t[e[n]]===void 0?r:t[e[n]]}function Et(t,e,r){const n=e.length-1;for(let i=0;i<n;i++)typeof t[e[i]]!="object"&&(t[e[i]]={}),t=t[e[i]];t[e[n]]=r}function Ft(t,e,r){return t==null||!e||typeof e!="string"?r:t[e]!==void 0?t[e]:(e=e.replace(/\[(\w+)\]/g,".$1"),e=e.replace(/^\./,""),zt(t,e.split("."),r))}function Ot(t,e,r){if(!(typeof t!="object"||!e))return e=e.replace(/\[(\w+)\]/g,".$1"),e=e.replace(/^\./,""),Et(t,e.split("."),r)}class Lt{_observers=new Map;on(e,r){let n=this._observers.get(e);return n===void 0&&this._observers.set(e,n=new Set),n.add(r),this}once(e,r){const n=(...i)=>{this.off(e,n),r(...i)};return this.on(e,n),this}off(e,r){const n=this._observers.get(e);return n!==void 0&&(n.delete(r),n.size===0&&this._observers.delete(e)),this}emit(e,...r){return Array.from((this._observers.get(e)||new Map).values()).forEach(n=>n(...r)),this}destroy(){this._observers=new Map}}class Oe{_map=new WeakMap;_toRaw(e){if(e&&typeof e=="object"){const r=e.__v_raw;r&&(e=this._toRaw(r))}return e}delete(e){return this._map.delete(this._toRaw(e))}get(e){return this._map.get(this._toRaw(e))}has(e){return this._map.has(this._toRaw(e))}set(e,r){return this._map.set(this._toRaw(e),this._toRaw(r)),this}}const nt=Symbol("properties"),Dt=Symbol("inited");function V(t){let e;if(Object.hasOwn(t,nt))e=t[nt];else{const r=Object.getPrototypeOf(t);e=new Map(r?V(r):void 0),t[nt]=e}return e}function At(t){return`__internal:${t}`}function it(t,e={}){const r=At(t),{default:n,fallback:i,alias:a,internal:u}=e,l=()=>typeof n=="function"?n():n,f=()=>typeof i=="function"?i():i;function p(){let d;if(a&&a!==t?d=Ft(this,a):!u&&typeof this.getProperty<"u"?d=this.getProperty(t):d=this[r],d=d??f(),d===void 0&&n!==void 0&&!this[Dt]){this[Dt]=!0;const m=l();m!==void 0&&(v.call(this,m),d=m)}return d}function v(d){a&&a!==t?Ot(this,a,d):!u&&typeof this.setProperty<"u"?this.setProperty(t,d):this[r]=d}return{get:p,set:v}}function Nt(t,e,r={}){V(t).set(e,r);const n=it(e,r);Object.defineProperty(t.prototype,e,{get(){return n.get.call(this)},set(i){n.set.call(this,i)},configurable:!0,enumerable:!0})}function Le(t){return function(e,r){if(typeof r!="string")throw new TypeError("Failed to @property decorator, prop name cannot be a symbol");Nt(e.constructor,r,t)}}function De(t={}){return function(e,r){const n=r.name;if(typeof n!="string")throw new TypeError("Failed to @property decorator, prop name cannot be a symbol");const i=it(n,t);return{init(a){return V(this.constructor).set(n,t),i.set.call(this,a),a},get(){return i.get.call(this)},set(a){i.set.call(this,a)}}}}class Ae extends Lt{_propertyAccessor;_properties=new Map;_updatedProperties=new Map;_changedProperties=new Set;_updatingPromise=Promise.resolve();_updating=!1;constructor(e){super(),this.setProperties(e)}isDirty(e){return e?this._updatedProperties.has(e):this._updatedProperties.size>0}offsetGet(e){return this[e]}offsetSet(e,r){this[e]=r}getProperty(e,r){return this._propertyAccessor?.getProperty?this._propertyAccessor.getProperty(e,r):this._properties.get(e)??r}setProperty(e,r){const n=this.offsetGet(e);Object.is(r,n)||(this._propertyAccessor?.setProperty?this._propertyAccessor.setProperty(e,r):this._properties.set(e,r),this.onUpdateProperty(e,r,n))}getProperties(e){const r={};for(const[n,i]of this.getPropertyDeclarations())!i.internal&&!i.alias&&(!e||e.includes(n))&&(r[n]=this.getProperty(n));return r}setProperties(e){if(e&&typeof e=="object")for(const[r]of this.getPropertyDeclarations())r in e&&this.offsetSet(r,e[r]);return this}resetProperties(){for(const[e,r]of this.getPropertyDeclarations())this.offsetSet(e,typeof r.default=="function"?r.default():r.default);return this}getPropertyDeclarations(){return V(this.constructor)}getPropertyDeclaration(e){return this.getPropertyDeclarations().get(e)}setPropertyAccessor(e){return this._propertyAccessor=e,this.getPropertyDeclarations().forEach((r,n)=>{const i=this.offsetGet(n),a=this._properties.get(n);i===void 0?a!==void 0&&this.offsetSet(n,a):i!==a&&this.offsetSet(n,i)}),this}async _nextTick(){return"requestAnimationFrame"in globalThis?new Promise(e=>globalThis.requestAnimationFrame(e)):Promise.resolve()}async _enqueueUpdate(){this._updating=!0;try{await this._updatingPromise}catch(e){Promise.reject(e)}await this._nextTick(),this._updating&&(this.onUpdate(),this._updating=!1)}onUpdate(){this._update(this._updatedProperties),this._updatedProperties=new Map}onUpdateProperty(e,r,n){this.requestUpdate(e,r,n)}requestUpdate(e,r,n){e!==void 0&&(this._updatedProperties.set(e,n),this._changedProperties.add(e),this._updateProperty(e,r,n),this.emit("updateProperty",e,r,n)),this._updating||(this._updatingPromise=this._enqueueUpdate())}_update(e){}_updateProperty(e,r,n){}toJSON(){const e={};return this._properties.forEach((r,n)=>{r!==void 0&&(r&&typeof r=="object"?"toJSON"in r&&typeof r.toJSON=="function"?e[n]=r.toJSON():Array.isArray(r)?e[n]=[...r]:e[n]={...r}:e[n]=r)}),e}clone(){return new this.constructor(this.toJSON())}}function ot(t){let e;return typeof t=="number"?e={r:t>>24&255,g:t>>16&255,b:t>>8&255,a:(t&255)/255}:e=t,L(e)}function Ne(t){return{r:A(t.r),g:A(t.g),b:A(t.b),a:A(t.a,3)}}function x(t){const e=t.toString(16);return e.length<2?`0${e}`:e}const k="#000000FF";function Rt(t){return ot(t).isValid()}function _(t,e=!1){const r=ot(t);if(!r.isValid()){if(typeof t=="string")return t;const l=`Failed to normalizeColor ${t}`;if(e)throw new Error(l);return console.warn(l),k}const{r:n,g:i,b:a,a:u}=Ne(r.rgba);return`#${x(n)}${x(i)}${x(a)}${x(A(u*255))}`}var J=J||{};J.parse=(function(){const t={linearGradient:/^(-(webkit|o|ms|moz)-)?(linear-gradient)/i,repeatingLinearGradient:/^(-(webkit|o|ms|moz)-)?(repeating-linear-gradient)/i,radialGradient:/^(-(webkit|o|ms|moz)-)?(radial-gradient)/i,repeatingRadialGradient:/^(-(webkit|o|ms|moz)-)?(repeating-radial-gradient)/i,sideOrCorner:/^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,extentKeywords:/^(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/,positionKeywords:/^(left|center|right|top|bottom)/i,pixelValue:/^(-?((\d*\.\d+)|(\d+\.?)))px/,percentageValue:/^(-?((\d*\.\d+)|(\d+\.?)))%/,emValue:/^(-?((\d*\.\d+)|(\d+\.?)))em/,angleValue:/^(-?((\d*\.\d+)|(\d+\.?)))deg/,radianValue:/^(-?((\d*\.\d+)|(\d+\.?)))rad/,startCall:/^\(/,endCall:/^\)/,comma:/^,/,hexColor:/^#([0-9a-f]+)/i,literalColor:/^([a-z]+)/i,rgbColor:/^rgb/i,rgbaColor:/^rgba/i,varColor:/^var/i,calcValue:/^calc/i,variableName:/^(--[a-z0-9-,\s#]+)/i,number:/^((\d*\.\d+)|(\d+\.?))/,hslColor:/^hsl/i,hslaColor:/^hsla/i};let e="";function r(s){const c=new Error(`${e}: ${s}`);throw c.source=e,c}function n(){const s=i();return e.length>0&&r("Invalid input not EOF"),s}function i(){return T(a)}function a(){return u("linear-gradient",t.linearGradient,f)||u("repeating-linear-gradient",t.repeatingLinearGradient,f)||u("radial-gradient",t.radialGradient,d)||u("repeating-radial-gradient",t.repeatingRadialGradient,d)}function u(s,c,g){return l(c,S=>{const I=g();return I&&(y(t.comma)||r("Missing comma before color stops")),{type:s,orientation:I,colorStops:T(dt)}})}function l(s,c){const g=y(s);if(g){y(t.startCall)||r("Missing (");const S=c(g);return y(t.endCall)||r("Missing )"),S}}function f(){const s=p();if(s)return s;const c=P("position-keyword",t.positionKeywords,1);return c?{type:"directional",value:c.value}:v()}function p(){return P("directional",t.sideOrCorner,1)}function v(){return P("angular",t.angleValue,1)||P("angular",t.radianValue,1)}function d(){let s,c=m(),g;return c&&(s=[],s.push(c),g=e,y(t.comma)&&(c=m(),c?s.push(c):e=g)),s}function m(){let s=C()||N();if(s)s.at=O();else{const c=E();if(c){s=c;const g=O();g&&(s.at=g)}else{const g=O();if(g)s={type:"default-radial",at:g};else{const S=R();S&&(s={type:"default-radial",at:S})}}}return s}function C(){const s=P("shape",/^(circle)/i,0);return s&&(s.style=be()||E()),s}function N(){const s=P("shape",/^(ellipse)/i,0);return s&&(s.style=R()||Q()||E()),s}function E(){return P("extent-keyword",t.extentKeywords,1)}function O(){if(P("position",/^at/,0)){const s=R();return s||r("Missing positioning value"),s}}function R(){const s=W();if(s.x||s.y)return{type:"position",value:s}}function W(){return{x:Q(),y:Q()}}function T(s){let c=s();const g=[];if(c)for(g.push(c);y(t.comma);)c=s(),c?g.push(c):r("One extra comma");return g}function dt(){const s=Ke();return s||r("Expected color definition"),s.length=Q(),s}function Ke(){return qe()||Ze()||Ye()||Je()||xe()||Xe()||Ue()}function Ue(){return P("literal",t.literalColor,0)}function qe(){return P("hex",t.hexColor,1)}function xe(){return l(t.rgbColor,()=>({type:"rgb",value:T(B)}))}function Je(){return l(t.rgbaColor,()=>({type:"rgba",value:T(B)}))}function Xe(){return l(t.varColor,()=>({type:"var",value:Qe()}))}function Ye(){return l(t.hslColor,()=>{y(t.percentageValue)&&r("HSL hue value must be a number in degrees (0-360) or normalized (-360 to 360), not a percentage");const c=B();y(t.comma);let g=y(t.percentageValue);const S=g?g[1]:null;y(t.comma),g=y(t.percentageValue);const I=g?g[1]:null;return(!S||!I)&&r("Expected percentage value for saturation and lightness in HSL"),{type:"hsl",value:[c,S,I]}})}function Ze(){return l(t.hslaColor,()=>{const s=B();y(t.comma);let c=y(t.percentageValue);const g=c?c[1]:null;y(t.comma),c=y(t.percentageValue);const S=c?c[1]:null;y(t.comma);const I=B();return(!g||!S)&&r("Expected percentage value for saturation and lightness in HSLA"),{type:"hsla",value:[s,g,S,I]}})}function Qe(){return y(t.variableName)[1]}function B(){return y(t.number)[1]}function Q(){return P("%",t.percentageValue,1)||tr()||er()||be()}function tr(){return P("position-keyword",t.positionKeywords,1)}function er(){return l(t.calcValue,()=>{let s=1,c=0;for(;s>0&&c<e.length;){const S=e.charAt(c);S==="("?s++:S===")"&&s--,c++}s>0&&r("Missing closing parenthesis in calc() expression");const g=e.substring(0,c-1);return gt(c-1),{type:"calc",value:g}})}function be(){return P("px",t.pixelValue,1)||P("em",t.emValue,1)}function P(s,c,g){const S=y(c);if(S)return{type:s,value:S[g]}}function y(s){let c,g;return g=/^\s+/.exec(e),g&&gt(g[0].length),c=s.exec(e),c&&gt(c[0].length),c}function gt(s){e=e.substr(s)}return function(s){return e=s.toString().trim(),e.endsWith(";")&&(e=e.slice(0,-1)),n()}})();const It=J.parse.bind(J);var X=X||{};X.stringify=(function(){var t={"visit_linear-gradient":function(e){return t.visit_gradient(e)},"visit_repeating-linear-gradient":function(e){return t.visit_gradient(e)},"visit_radial-gradient":function(e){return t.visit_gradient(e)},"visit_repeating-radial-gradient":function(e){return t.visit_gradient(e)},visit_gradient:function(e){var r=t.visit(e.orientation);return r&&(r+=", "),e.type+"("+r+t.visit(e.colorStops)+")"},visit_shape:function(e){var r=e.value,n=t.visit(e.at),i=t.visit(e.style);return i&&(r+=" "+i),n&&(r+=" at "+n),r},"visit_default-radial":function(e){var r="",n=t.visit(e.at);return n&&(r+=n),r},"visit_extent-keyword":function(e){var r=e.value,n=t.visit(e.at);return n&&(r+=" at "+n),r},"visit_position-keyword":function(e){return e.value},visit_position:function(e){return t.visit(e.value.x)+" "+t.visit(e.value.y)},"visit_%":function(e){return e.value+"%"},visit_em:function(e){return e.value+"em"},visit_px:function(e){return e.value+"px"},visit_calc:function(e){return"calc("+e.value+")"},visit_literal:function(e){return t.visit_color(e.value,e)},visit_hex:function(e){return t.visit_color("#"+e.value,e)},visit_rgb:function(e){return t.visit_color("rgb("+e.value.join(", ")+")",e)},visit_rgba:function(e){return t.visit_color("rgba("+e.value.join(", ")+")",e)},visit_hsl:function(e){return t.visit_color("hsl("+e.value[0]+", "+e.value[1]+"%, "+e.value[2]+"%)",e)},visit_hsla:function(e){return t.visit_color("hsla("+e.value[0]+", "+e.value[1]+"%, "+e.value[2]+"%, "+e.value[3]+")",e)},visit_var:function(e){return t.visit_color("var("+e.value+")",e)},visit_color:function(e,r){var n=e,i=t.visit(r.length);return i&&(n+=" "+i),n},visit_angular:function(e){return e.value+"deg"},visit_directional:function(e){return"to "+e.value},visit_array:function(e){var r="",n=e.length;return e.forEach(function(i,a){r+=t.visit(i),a<n-1&&(r+=", ")}),r},visit_object:function(e){return e.width&&e.height?t.visit(e.width)+" "+t.visit(e.height):""},visit:function(e){if(!e)return"";if(e instanceof Array)return t.visit_array(e);if(typeof e=="object"&&!e.type)return t.visit_object(e);if(e.type){var r=t["visit_"+e.type];if(r)return r(e);throw Error("Missing visitor visit_"+e.type)}else throw Error("Invalid node.")}};return function(e){return t.visit(e)}})();const Re=X.stringify.bind(X);function Gt(t){const e=t.length-1;return t.map((r,n)=>{const i=r.value;let a=A(n/e,3),u="#00000000";switch(r.type){case"rgb":u=_({r:Number(i[0]??0),g:Number(i[1]??0),b:Number(i[2]??0)});break;case"rgba":u=_({r:Number(i[0]??0),g:Number(i[1]??0),b:Number(i[2]??0),a:Number(i[3]??0)});break;case"literal":u=_(r.value);break;case"hex":u=_(`#${r.value}`);break}switch(r.length?.type){case"%":a=Number(r.length.value)/100;break}return{offset:a,color:u}})}function jt(t){let e=0;switch(t.orientation?.type){case"angular":e=Number(t.orientation.value);break}return{type:"linear-gradient",angle:e,stops:Gt(t.colorStops)}}function Tt(t){return t.orientation?.map(e=>{switch(e?.type){case"shape":case"default-radial":case"extent-keyword":default:return null}}),{type:"radial-gradient",stops:Gt(t.colorStops)}}function $(t){return t.startsWith("linear-gradient(")||t.startsWith("radial-gradient(")}function Mt(t){return It(t).map(e=>{switch(e?.type){case"linear-gradient":return jt(e);case"repeating-linear-gradient":return{...jt(e),repeat:!0};case"radial-gradient":return Tt(e);case"repeating-radial-gradient":return{...Tt(e),repeat:!0};default:return}}).filter(Boolean)}function Vt(t){let e;return typeof t=="string"?e={color:t}:e=t,{color:_(e.color)}}function kt(t){let e;if(typeof t=="string"?e={image:t}:e=t,e.image){const{type:r,...n}=Mt(e.image)[0]??{};switch(r){case"radial-gradient":return{radialGradient:n};case"linear-gradient":return{linearGradient:n}}}return e}function $t(t){let e;return typeof t=="string"?e={image:t}:e=t,e}function Ht(t){let e;return typeof t=="string"?e={preset:t}:e=t,{preset:e.preset,foregroundColor:h(e.foregroundColor)?void 0:_(e.foregroundColor),backgroundColor:h(e.backgroundColor)?void 0:_(e.backgroundColor)}}function Wt(t){return!h(t.color)}function Bt(t){return typeof t=="string"?Rt(t):Wt(t)}function Kt(t){return!h(t.image)&&$(t.image)||!!t.linearGradient||!!t.radialGradient}function Ut(t){return typeof t=="string"?$(t):Kt(t)}function qt(t){return!h(t.image)&&!$(t.image)}function xt(t){return typeof t=="string"?!$(t):qt(t)}function Jt(t){return!h(t.preset)}function Xt(t){return typeof t=="string"?!1:Jt(t)}function F(t){const e=t&&typeof t=="object"?t.enabled:void 0;return Bt(t)?w({enabled:e,...Vt(t)}):Ut(t)?w({enabled:e,...kt(t)}):xt(t)?w({enabled:e,...$t(t)}):Xt(t)?w({enabled:e,...Ht(t)}):{}}function Yt(t){return typeof t=="string"?{...F(t)}:{...F(t),...U(t,["fillWithShape"])}}function at(){return{color:k,offsetX:0,offsetY:0,blurRadius:1}}function st(t){return{...at(),...w({...t,color:h(t.color)?k:_(t.color)})}}function Zt(){return{...at(),scaleX:1,scaleY:1}}function Qt(t){return{...Zt(),...st(t)}}function Ie(t){return t}function te(t){return w({...t,softEdge:h(t.softEdge)?void 0:t.softEdge,outerShadow:h(t.outerShadow)?void 0:Qt(t.outerShadow),innerShadow:h(t.innerShadow)?void 0:st(t.innerShadow)})}function ee(t){return typeof t=="string"?{...F(t)}:{...F(t),...U(t,["fillWithShape"])}}const Ge="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";let je=(t=21)=>{let e="",r=crypto.getRandomValues(new Uint8Array(t|=0));for(;t--;)e+=Ge[r[t]&63];return e};const re=()=>je(10),ne=re;function H(t){return typeof t=="string"?{...F(t)}:{...F(t),...U(t,["width","style","lineCap","lineJoin","headEnd","tailEnd"])}}function ie(t){return typeof t=="string"?{color:_(t)}:{...t,color:h(t.color)?k:_(t.color)}}function oe(){return{boxShadow:"none"}}function ae(t){return typeof t=="string"?t.startsWith("<svg")?{svg:t}:{paths:[{data:t}]}:Array.isArray(t)?{paths:t.map(e=>typeof e=="string"?{data:e}:e)}:t}function se(){return{overflow:"visible",direction:void 0,display:void 0,boxSizing:void 0,width:void 0,height:void 0,maxHeight:void 0,maxWidth:void 0,minHeight:void 0,minWidth:void 0,position:void 0,left:0,top:0,right:void 0,bottom:void 0,borderTop:void 0,borderLeft:void 0,borderRight:void 0,borderBottom:void 0,borderWidth:0,border:void 0,flex:void 0,flexBasis:void 0,flexDirection:void 0,flexGrow:void 0,flexShrink:void 0,flexWrap:void 0,justifyContent:void 0,gap:void 0,alignContent:void 0,alignItems:void 0,alignSelf:void 0,marginTop:void 0,marginLeft:void 0,marginRight:void 0,marginBottom:void 0,margin:void 0,paddingTop:void 0,paddingLeft:void 0,paddingRight:void 0,paddingBottom:void 0,padding:void 0}}function ue(){return{rotate:0,scaleX:1,scaleY:1,skewX:0,skewY:0,translateX:0,translateY:0,transform:"none",transformOrigin:"center"}}function le(){return{...se(),...ue(),...oe(),backgroundImage:"none",backgroundSize:"auto, auto",backgroundColor:"none",backgroundColormap:"none",borderRadius:0,borderColor:"none",borderStyle:"solid",outlineWidth:0,outlineOffset:0,outlineColor:"rgb(0, 0, 0)",outlineStyle:"none",visibility:"visible",filter:"none",opacity:1,pointerEvents:"auto",maskImage:"none"}}function ce(){return{highlight:{},highlightImage:"none",highlightReferImage:"none",highlightColormap:"none",highlightLine:"none",highlightSize:"cover",highlightThickness:"100%"}}function fe(){return{listStyle:{},listStyleType:"none",listStyleImage:"none",listStyleColormap:"none",listStyleSize:"cover",listStylePosition:"outside"}}function de(){return{...ce(),color:"rgb(0, 0, 0)",verticalAlign:"baseline",letterSpacing:0,wordSpacing:0,fontSize:14,fontWeight:"normal",fontFamily:"",fontStyle:"normal",fontKerning:"normal",textTransform:"none",textOrientation:"mixed",textDecoration:"none"}}function ge(){return{...fe(),writingMode:"horizontal-tb",textWrap:"wrap",textAlign:"start",textIndent:0,lineHeight:1.2}}function he(){return{...ge(),...de(),textStrokeWidth:0,textStrokeColor:"rgb(0, 0, 0)"}}function j(t){return w({...t,color:h(t.color)?void 0:_(t.color),backgroundColor:h(t.backgroundColor)?void 0:_(t.backgroundColor),borderColor:h(t.borderColor)?void 0:_(t.borderColor),outlineColor:h(t.outlineColor)?void 0:_(t.outlineColor),shadowColor:h(t.shadowColor)?void 0:_(t.shadowColor)})}function Te(){return{...le(),...he()}}const ut=/\r\n|\n\r|\n|\r/,Me=new RegExp(`${ut.source}|<br\\/>`,"g"),Ve=new RegExp(`^(${ut.source})$`),lt=`
2
+ `;function ke(t){return ut.test(t)}function ct(t){return Ve.test(t)}function pe(t){return t.replace(Me,lt)}function Y(t){const e=[];function r(){return e[e.length-1]}function n(l,f,p){const v=l?j(l):{},d=f?F(f):void 0,m=p?H(p):void 0,C=w({...v,fill:d,outline:m,fragments:[]});return e[e.length-1]?.fragments.length===0?e[e.length-1]=C:e.push(C),C}function i(l="",f,p,v){const d=f?j(f):{},m=p?F(p):void 0,C=v?H(v):void 0;Array.from(l).forEach(N=>{if(ct(N)){const{fragments:E,fill:O,outline:R,...W}=r()||n();E.length||E.push(w({...d,fill:m,outline:C,content:lt})),n(W,O,R)}else{const E=r()||n(),O=E.fragments[E.fragments.length-1];if(O){const{content:R,fill:W,outline:T,...dt}=O;if(q(m,W)&&q(C,T)&&q(d,dt)){O.content=`${R}${N}`;return}}E.fragments.push(w({...d,fill:m,outline:C,content:N}))}})}(Array.isArray(t)?t:[t]).forEach(l=>{if(typeof l=="string")n(),i(l);else if(ft(l)){const{content:f,fill:p,outline:v,...d}=l;n(d,p,v),i(f)}else if(ve(l)){const{fragments:f,fill:p,outline:v,...d}=l;n(d,p,v),f.forEach(m=>{const{content:C,fill:N,outline:E,...O}=m;i(C,O,N,E)})}else Array.isArray(l)?(n(),l.forEach(f=>{if(typeof f=="string")i(f);else if(ft(f)){const{content:p,fill:v,outline:d,...m}=f;i(p,m,v,d)}})):console.warn("Failed to parse text content",l)});const u=r();return u&&!u.fragments.length&&u.fragments.push({content:""}),e}function ve(t){return t&&typeof t=="object"&&"fragments"in t&&Array.isArray(t.fragments)}function ft(t){return t&&typeof t=="object"&&"content"in t&&typeof t.content=="string"}function me(t){return typeof t=="string"||Array.isArray(t)?{content:Y(t)}:w({...t,content:Y(t.content??""),style:t.style?j(t.style):void 0,effects:t.effects?t.effects.map(e=>j(e)):void 0,measureDom:t.measureDom,fonts:t.fonts,fill:t.fill?F(t.fill):void 0,outline:t.outline?H(t.outline):void 0})}function $e(t){return Y(t).map(e=>{const r=pe(e.fragments.flatMap(n=>n.content).join(""));return ct(r)?"":r}).join(lt)}function ye(t){return typeof t=="string"?{src:t}:t}function Z(t){return w({...t,id:t.id??ne(),style:h(t.style)?void 0:j(t.style),text:h(t.text)?void 0:me(t.text),background:h(t.background)?void 0:Yt(t.background),shape:h(t.shape)?void 0:ae(t.shape),fill:h(t.fill)?void 0:F(t.fill),outline:h(t.outline)?void 0:H(t.outline),foreground:h(t.foreground)?void 0:ee(t.foreground),shadow:h(t.shadow)?void 0:ie(t.shadow),video:h(t.video)?void 0:ye(t.video),audio:h(t.audio)?void 0:G(t.audio),effect:h(t.effect)?void 0:te(t.effect),children:t.children?.map(e=>Z(e))})}function He(t){return Z(t)}function We(t){const e={};for(const r in t.children){const n=Z(t.children[r]);delete n.children,e[r]=n}return{...t,children:e}}function Be(t){const{children:e,...r}=t;function n(f){const{parentId:p,childrenIds:v,...d}=f;return{...d,children:[]}}const i={},a=[],u={...r,children:a};function l(f){if(!e[f]||i[f])return;const p=e[f],v=n(p);i[f]=v;const d=p.parentId;if(d){l(d);const m=e[d],C=i[d];if(!C)return;m?.childrenIds&&C?.children&&(C.children[m.childrenIds.indexOf(f)]=v)}else a.push(v)}for(const f in e)l(f);return u}o.EventEmitter=Fe,o.Observable=Lt,o.RawWeakMap=Oe,o.Reactivable=Ae,o.clearUndef=w,o.defaultColor=k,o.defineProperty=Nt,o.flatDocumentToDocument=Be,o.getDeclarations=V,o.getDefaultElementStyle=le,o.getDefaultHighlightStyle=ce,o.getDefaultInnerShadow=at,o.getDefaultLayoutStyle=se,o.getDefaultListStyleStyle=fe,o.getDefaultOuterShadow=Zt,o.getDefaultShadowStyle=oe,o.getDefaultStyle=Te,o.getDefaultTextInlineStyle=de,o.getDefaultTextLineStyle=ge,o.getDefaultTextStyle=he,o.getDefaultTransformStyle=ue,o.getNestedValue=zt,o.getObjectValueByPath=Ft,o.getPropertyDescriptor=it,o.getPropertyInternalKey=At,o.hasCRLF=ke,o.idGenerator=ne,o.isCRLF=ct,o.isColor=Rt,o.isColorFill=Bt,o.isColorFillObject=Wt,o.isEqualObject=q,o.isFragmentObject=ft,o.isGradient=$,o.isGradientFill=Ut,o.isGradientFillObject=Kt,o.isImageFill=xt,o.isImageFillObject=qt,o.isNone=h,o.isParagraphObject=ve,o.isPresetFill=Xt,o.isPresetFillObject=Jt,o.nanoid=re,o.normalizeAudio=G,o.normalizeBackground=Yt,o.normalizeCRLF=pe,o.normalizeColor=_,o.normalizeColorFill=Vt,o.normalizeDocument=He,o.normalizeEffect=te,o.normalizeElement=Z,o.normalizeFill=F,o.normalizeFlatDocument=We,o.normalizeForeground=ee,o.normalizeGradient=Mt,o.normalizeGradientFill=kt,o.normalizeImageFill=$t,o.normalizeInnerShadow=st,o.normalizeOuterShadow=Qt,o.normalizeOutline=H,o.normalizePresetFill=Ht,o.normalizeShadow=ie,o.normalizeShape=ae,o.normalizeSoftEdge=Ie,o.normalizeStyle=j,o.normalizeText=me,o.normalizeTextContent=Y,o.normalizeVideo=ye,o.parseColor=ot,o.parseGradient=It,o.pick=U,o.property=Le,o.property2=De,o.round=A,o.setNestedValue=Et,o.setObjectValueByPath=Ot,o.stringifyGradient=Re,o.textContentToString=$e,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})}));
package/dist/index.mjs CHANGED
@@ -361,6 +361,23 @@ function property2(declaration = {}) {
361
361
  class Reactivable extends Observable {
362
362
  _propertyAccessor;
363
363
  _properties = /* @__PURE__ */ new Map();
364
+ _updatedProperties = /* @__PURE__ */ new Map();
365
+ _changedProperties = /* @__PURE__ */ new Set();
366
+ _updatingPromise = Promise.resolve();
367
+ _updating = false;
368
+ constructor(properties) {
369
+ super();
370
+ this.setProperties(properties);
371
+ }
372
+ isDirty(key) {
373
+ return key ? this._updatedProperties.has(key) : this._updatedProperties.size > 0;
374
+ }
375
+ offsetGet(key) {
376
+ return this[key];
377
+ }
378
+ offsetSet(key, newValue) {
379
+ this[key] = newValue;
380
+ }
364
381
  getProperty(key, defaultValue) {
365
382
  if (this._propertyAccessor?.getProperty) {
366
383
  return this._propertyAccessor.getProperty(key, defaultValue);
@@ -369,7 +386,7 @@ class Reactivable extends Observable {
369
386
  }
370
387
  }
371
388
  setProperty(key, newValue) {
372
- const oldValue = this[key];
389
+ const oldValue = this.offsetGet(key);
373
390
  if (Object.is(newValue, oldValue)) {
374
391
  return;
375
392
  }
@@ -380,31 +397,121 @@ class Reactivable extends Observable {
380
397
  }
381
398
  this.onUpdateProperty(key, newValue, oldValue);
382
399
  }
400
+ getProperties(keys) {
401
+ const properties = {};
402
+ for (const [name, property] of this.getPropertyDeclarations()) {
403
+ if (!property.internal && !property.alias && (!keys || keys.includes(name))) {
404
+ properties[name] = this.getProperty(name);
405
+ }
406
+ }
407
+ return properties;
408
+ }
409
+ setProperties(properties) {
410
+ if (properties && typeof properties === "object") {
411
+ for (const [name] of this.getPropertyDeclarations()) {
412
+ if (name in properties) {
413
+ this.offsetSet(name, properties[name]);
414
+ }
415
+ }
416
+ }
417
+ return this;
418
+ }
419
+ resetProperties() {
420
+ for (const [name, property] of this.getPropertyDeclarations()) {
421
+ this.offsetSet(
422
+ name,
423
+ typeof property.default === "function" ? property.default() : property.default
424
+ );
425
+ }
426
+ return this;
427
+ }
383
428
  getPropertyDeclarations() {
384
429
  return getDeclarations(this.constructor);
385
430
  }
431
+ getPropertyDeclaration(key) {
432
+ return this.getPropertyDeclarations().get(key);
433
+ }
386
434
  setPropertyAccessor(accessor) {
387
435
  this._propertyAccessor = accessor;
388
436
  this.getPropertyDeclarations().forEach((_declaration, key) => {
389
- const newValue = this[key];
437
+ const newValue = this.offsetGet(key);
390
438
  const oldValue = this._properties.get(key);
391
439
  if (newValue === void 0) {
392
440
  if (oldValue !== void 0) {
393
- this[key] = oldValue;
441
+ this.offsetSet(key, oldValue);
394
442
  }
395
443
  } else if (newValue !== oldValue) {
396
- this[key] = newValue;
444
+ this.offsetSet(key, newValue);
397
445
  }
398
446
  });
399
447
  return this;
400
448
  }
449
+ async _nextTick() {
450
+ if ("requestAnimationFrame" in globalThis) {
451
+ return new Promise((r) => globalThis.requestAnimationFrame(r));
452
+ }
453
+ return Promise.resolve();
454
+ }
455
+ async _enqueueUpdate() {
456
+ this._updating = true;
457
+ try {
458
+ await this._updatingPromise;
459
+ } catch (e) {
460
+ Promise.reject(e);
461
+ }
462
+ await this._nextTick();
463
+ if (!this._updating)
464
+ return;
465
+ this.onUpdate();
466
+ this._updating = false;
467
+ }
468
+ onUpdate() {
469
+ this._update(this._updatedProperties);
470
+ this._updatedProperties = /* @__PURE__ */ new Map();
471
+ }
401
472
  onUpdateProperty(key, newValue, oldValue) {
402
- this._updateProperty(key, newValue, oldValue);
403
- this.emit("updateProperty", key, newValue, oldValue);
473
+ this.requestUpdate(key, newValue, oldValue);
474
+ }
475
+ requestUpdate(key, newValue, oldValue) {
476
+ if (key !== void 0) {
477
+ this._updatedProperties.set(key, oldValue);
478
+ this._changedProperties.add(key);
479
+ this._updateProperty(key, newValue, oldValue);
480
+ this.emit("updateProperty", key, newValue, oldValue);
481
+ }
482
+ if (!this._updating) {
483
+ this._updatingPromise = this._enqueueUpdate();
484
+ }
485
+ }
486
+ // eslint-disable-next-line unused-imports/no-unused-vars
487
+ _update(changed) {
404
488
  }
405
489
  // eslint-disable-next-line unused-imports/no-unused-vars
406
490
  _updateProperty(key, newValue, oldValue) {
407
491
  }
492
+ toJSON() {
493
+ const json = {};
494
+ this._properties.forEach((value, key) => {
495
+ if (value === void 0) {
496
+ return;
497
+ }
498
+ if (value && typeof value === "object") {
499
+ if ("toJSON" in value && typeof value.toJSON === "function") {
500
+ json[key] = value.toJSON();
501
+ } else if (Array.isArray(value)) {
502
+ json[key] = [...value];
503
+ } else {
504
+ json[key] = { ...value };
505
+ }
506
+ } else {
507
+ json[key] = value;
508
+ }
509
+ });
510
+ return json;
511
+ }
512
+ clone() {
513
+ return new this.constructor(this.toJSON());
514
+ }
408
515
  }
409
516
 
410
517
  function parseColor(color) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modern-idoc",
3
3
  "type": "module",
4
- "version": "0.9.0",
4
+ "version": "0.9.2",
5
5
  "packageManager": "pnpm@9.15.1",
6
6
  "description": "Intermediate document for modern codec libs",
7
7
  "author": "wxm",