modern-idoc 0.11.4 → 0.11.6

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
@@ -103,6 +103,16 @@ function isNone(value) {
103
103
  function round(number, digits = 0, base = 10 ** digits) {
104
104
  return Math.round(base * number) / base + 0;
105
105
  }
106
+ function normalizeNumber(value, fallback) {
107
+ if (typeof value === "number") {
108
+ return Number.isFinite(value) ? value : fallback;
109
+ }
110
+ if (typeof value === "string") {
111
+ const parsed = Number.parseFloat(value);
112
+ return Number.isFinite(parsed) ? parsed : fallback;
113
+ }
114
+ return fallback;
115
+ }
106
116
  function clearUndef(obj, deep = false) {
107
117
  if (typeof obj !== "object" || !obj) {
108
118
  return obj;
@@ -1436,7 +1446,8 @@ function getDefaultBackgroundStyle() {
1436
1446
  function normalizeConnection(connection) {
1437
1447
  return clearUndef({
1438
1448
  start: connection.start,
1439
- end: connection.end
1449
+ end: connection.end,
1450
+ mode: connection.mode ?? "straight"
1440
1451
  });
1441
1452
  }
1442
1453
 
@@ -1735,8 +1746,35 @@ function getDefaultTextStyle() {
1735
1746
  };
1736
1747
  }
1737
1748
 
1749
+ const NUMERIC_STYLE_KEYS = [
1750
+ // textLineStyle
1751
+ "textIndent",
1752
+ "lineHeight",
1753
+ // textInlineStyle
1754
+ "letterSpacing",
1755
+ "wordSpacing",
1756
+ "fontSize",
1757
+ // textStyle
1758
+ "textStrokeWidth",
1759
+ // elementStyle
1760
+ "borderRadius",
1761
+ "opacity",
1762
+ // transformStyle
1763
+ "rotate",
1764
+ "scaleX",
1765
+ "scaleY",
1766
+ "skewX",
1767
+ "skewY",
1768
+ "translateX",
1769
+ "translateY",
1770
+ // layoutStyle
1771
+ "borderWidth",
1772
+ "flex",
1773
+ "flexGrow",
1774
+ "flexShrink"
1775
+ ];
1738
1776
  function normalizeStyle(style) {
1739
- return clearUndef({
1777
+ const normalized = clearUndef({
1740
1778
  ...style,
1741
1779
  color: isNone(style.color) ? void 0 : normalizeColor(style.color),
1742
1780
  backgroundColor: isNone(style.backgroundColor) ? void 0 : normalizeColor(style.backgroundColor),
@@ -1745,6 +1783,17 @@ function normalizeStyle(style) {
1745
1783
  shadowColor: isNone(style.shadowColor) ? void 0 : normalizeColor(style.shadowColor),
1746
1784
  textStrokeColor: isNone(style.textStrokeColor) ? void 0 : normalizeColor(style.textStrokeColor)
1747
1785
  });
1786
+ for (const key of NUMERIC_STYLE_KEYS) {
1787
+ if (key in normalized) {
1788
+ const value = normalizeNumber(normalized[key]);
1789
+ if (value === void 0) {
1790
+ delete normalized[key];
1791
+ } else {
1792
+ normalized[key] = value;
1793
+ }
1794
+ }
1795
+ }
1796
+ return normalized;
1748
1797
  }
1749
1798
  function getDefaultStyle() {
1750
1799
  return {
@@ -1867,6 +1916,13 @@ function isParagraphObject(value) {
1867
1916
  function isFragmentObject(value) {
1868
1917
  return value && typeof value === "object" && "content" in value && typeof value.content === "string";
1869
1918
  }
1919
+ function normalizeTextDeformation(deformation) {
1920
+ return clearUndef({
1921
+ type: deformation.type,
1922
+ intensities: deformation.intensities,
1923
+ maxFontSize: deformation.maxFontSize ?? 100
1924
+ });
1925
+ }
1870
1926
  function normalizeText(value) {
1871
1927
  if (typeof value === "string" || Array.isArray(value)) {
1872
1928
  return {
@@ -1878,6 +1934,7 @@ function normalizeText(value) {
1878
1934
  enabled: value.enabled ?? true,
1879
1935
  content: normalizeTextContent(value.content ?? ""),
1880
1936
  style: value.style ? normalizeStyle(value.style) : void 0,
1937
+ deformation: value.deformation ? normalizeTextDeformation(value.deformation) : void 0,
1881
1938
  measureDom: value.measureDom,
1882
1939
  fonts: value.fonts,
1883
1940
  ...normalizeEffect(value),
@@ -2038,6 +2095,7 @@ exports.normalizeForeground = normalizeForeground;
2038
2095
  exports.normalizeGradient = normalizeGradient;
2039
2096
  exports.normalizeGradientFill = normalizeGradientFill;
2040
2097
  exports.normalizeImageFill = normalizeImageFill;
2098
+ exports.normalizeNumber = normalizeNumber;
2041
2099
  exports.normalizeOutline = normalizeOutline;
2042
2100
  exports.normalizePresetFill = normalizePresetFill;
2043
2101
  exports.normalizeShadow = normalizeShadow;
@@ -2045,6 +2103,7 @@ exports.normalizeShape = normalizeShape;
2045
2103
  exports.normalizeStyle = normalizeStyle;
2046
2104
  exports.normalizeText = normalizeText;
2047
2105
  exports.normalizeTextContent = normalizeTextContent;
2106
+ exports.normalizeTextDeformation = normalizeTextDeformation;
2048
2107
  exports.normalizeVideo = normalizeVideo;
2049
2108
  exports.parseColor = parseColor;
2050
2109
  exports.parseGradient = parseGradient;
package/dist/index.d.cts CHANGED
@@ -334,6 +334,7 @@ interface NormalizedBackgroundStyle {
334
334
  }
335
335
  declare function getDefaultBackgroundStyle(): NormalizedBackgroundStyle;
336
336
 
337
+ type ConnectionMode = 'straight' | 'orthogonal' | 'curved';
337
338
  interface ConnectionAnchor {
338
339
  id: string;
339
340
  idx?: number;
@@ -341,10 +342,12 @@ interface ConnectionAnchor {
341
342
  interface Connection {
342
343
  start?: ConnectionAnchor;
343
344
  end?: ConnectionAnchor;
345
+ mode?: ConnectionMode;
344
346
  }
345
347
  interface NormalizedConnection {
346
348
  start?: ConnectionAnchor;
347
349
  end?: ConnectionAnchor;
350
+ mode: ConnectionMode;
348
351
  }
349
352
  declare function normalizeConnection(connection: Connection): NormalizedConnection;
350
353
 
@@ -737,9 +740,20 @@ interface NormalizedParagraph extends NormalizedStyle {
737
740
  type FlatTextContent = string | FragmentObject | ParagraphObject | (string | FragmentObject)[];
738
741
  type TextContent = FlatTextContent | FlatTextContent[];
739
742
  type NormalizedTextContent = NormalizedParagraph[];
743
+ interface TextDeformation {
744
+ type: string;
745
+ intensities?: number[];
746
+ maxFontSize?: number;
747
+ }
748
+ interface NormalizedTextDeformation {
749
+ type: string;
750
+ intensities?: number[];
751
+ maxFontSize: number;
752
+ }
740
753
  interface TextObject extends Pick<Effect, 'fill' | 'outline'>, Partial<Toggleable> {
741
754
  content?: TextContent;
742
755
  style?: Style;
756
+ deformation?: TextDeformation;
743
757
  measureDom?: any;
744
758
  fonts?: any;
745
759
  effects?: Effect[];
@@ -747,6 +761,7 @@ interface TextObject extends Pick<Effect, 'fill' | 'outline'>, Partial<Toggleabl
747
761
  interface NormalizedText extends Pick<NormalizedEffect, 'fill' | 'outline'>, Toggleable {
748
762
  content: NormalizedTextContent;
749
763
  style?: NormalizedStyle;
764
+ deformation?: NormalizedTextDeformation;
750
765
  effects?: NormalizedEffect[];
751
766
  measureDom?: any;
752
767
  fonts?: any;
@@ -757,6 +772,7 @@ declare function normalizeCRLF(content: string): string;
757
772
  declare function normalizeTextContent(value: TextContent): NormalizedTextContent;
758
773
  declare function isParagraphObject(value: any): value is ParagraphObject;
759
774
  declare function isFragmentObject(value: any): value is FragmentObject;
775
+ declare function normalizeTextDeformation(deformation: TextDeformation): NormalizedTextDeformation;
760
776
  declare function normalizeText(value: Text): NormalizedText;
761
777
  declare function textContentToString(value: TextContent): string;
762
778
 
@@ -846,6 +862,13 @@ declare class EventEmitter<T extends Record<string, any> = Record<string, any>>
846
862
 
847
863
  declare function isNone<T>(value: T): value is Extract<T, null | undefined | '' | 'none'>;
848
864
  declare function round(number: number, digits?: number, base?: number): number;
865
+ /**
866
+ * Defensively coerce an unknown value to a finite number.
867
+ * - number: returned as-is when finite, otherwise `fallback`
868
+ * - string: parsed via parseFloat (e.g. '20' / '20px' -> 20), `fallback` when not finite
869
+ * - anything else: `fallback`
870
+ */
871
+ declare function normalizeNumber(value: unknown, fallback?: number): number | undefined;
849
872
  declare function clearUndef<T>(obj: T, deep?: boolean): T;
850
873
  declare function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
851
874
 
@@ -921,5 +944,5 @@ declare class Reactivable extends Observable implements PropertyAccessor {
921
944
  destroy(): void;
922
945
  }
923
946
 
924
- export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, colorFillFields, defaultColor, defineProperty, effectFields, flatDocumentToDocument, getDeclarations, getDefaultBackgroundStyle, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOutlineStyle, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, gradientFillFields, hasCRLF, idGenerator, imageFillFiedls, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeConnection, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, presetFillFiedls, property, property2, propertyOffsetFallback, propertyOffsetGet, propertyOffsetSet, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
925
- export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, Connection, ConnectionAnchor, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, 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, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBackgroundStyle, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedConnection, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOutline, NormalizedOutlineStyle, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, ObservableEvents, 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, ShapeConnectionPoint, ShapeNode, ShapePath, ShapePathStyle, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextObject, TextOrientation, TextTransform, TextWrap, Toggleable, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor, _EffectV0 };
947
+ export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, colorFillFields, defaultColor, defineProperty, effectFields, flatDocumentToDocument, getDeclarations, getDefaultBackgroundStyle, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOutlineStyle, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, gradientFillFields, hasCRLF, idGenerator, imageFillFiedls, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeConnection, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeNumber, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeStyle, normalizeText, normalizeTextContent, normalizeTextDeformation, normalizeVideo, parseColor, parseGradient, pick, presetFillFiedls, property, property2, propertyOffsetFallback, propertyOffsetGet, propertyOffsetSet, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
948
+ export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, Connection, ConnectionAnchor, ConnectionMode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, 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, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBackgroundStyle, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedConnection, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOutline, NormalizedOutlineStyle, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDeformation, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, ObservableEvents, 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, ShapeConnectionPoint, ShapeNode, ShapePath, ShapePathStyle, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextDeformation, TextObject, TextOrientation, TextTransform, TextWrap, Toggleable, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor, _EffectV0 };
package/dist/index.d.mts CHANGED
@@ -334,6 +334,7 @@ interface NormalizedBackgroundStyle {
334
334
  }
335
335
  declare function getDefaultBackgroundStyle(): NormalizedBackgroundStyle;
336
336
 
337
+ type ConnectionMode = 'straight' | 'orthogonal' | 'curved';
337
338
  interface ConnectionAnchor {
338
339
  id: string;
339
340
  idx?: number;
@@ -341,10 +342,12 @@ interface ConnectionAnchor {
341
342
  interface Connection {
342
343
  start?: ConnectionAnchor;
343
344
  end?: ConnectionAnchor;
345
+ mode?: ConnectionMode;
344
346
  }
345
347
  interface NormalizedConnection {
346
348
  start?: ConnectionAnchor;
347
349
  end?: ConnectionAnchor;
350
+ mode: ConnectionMode;
348
351
  }
349
352
  declare function normalizeConnection(connection: Connection): NormalizedConnection;
350
353
 
@@ -737,9 +740,20 @@ interface NormalizedParagraph extends NormalizedStyle {
737
740
  type FlatTextContent = string | FragmentObject | ParagraphObject | (string | FragmentObject)[];
738
741
  type TextContent = FlatTextContent | FlatTextContent[];
739
742
  type NormalizedTextContent = NormalizedParagraph[];
743
+ interface TextDeformation {
744
+ type: string;
745
+ intensities?: number[];
746
+ maxFontSize?: number;
747
+ }
748
+ interface NormalizedTextDeformation {
749
+ type: string;
750
+ intensities?: number[];
751
+ maxFontSize: number;
752
+ }
740
753
  interface TextObject extends Pick<Effect, 'fill' | 'outline'>, Partial<Toggleable> {
741
754
  content?: TextContent;
742
755
  style?: Style;
756
+ deformation?: TextDeformation;
743
757
  measureDom?: any;
744
758
  fonts?: any;
745
759
  effects?: Effect[];
@@ -747,6 +761,7 @@ interface TextObject extends Pick<Effect, 'fill' | 'outline'>, Partial<Toggleabl
747
761
  interface NormalizedText extends Pick<NormalizedEffect, 'fill' | 'outline'>, Toggleable {
748
762
  content: NormalizedTextContent;
749
763
  style?: NormalizedStyle;
764
+ deformation?: NormalizedTextDeformation;
750
765
  effects?: NormalizedEffect[];
751
766
  measureDom?: any;
752
767
  fonts?: any;
@@ -757,6 +772,7 @@ declare function normalizeCRLF(content: string): string;
757
772
  declare function normalizeTextContent(value: TextContent): NormalizedTextContent;
758
773
  declare function isParagraphObject(value: any): value is ParagraphObject;
759
774
  declare function isFragmentObject(value: any): value is FragmentObject;
775
+ declare function normalizeTextDeformation(deformation: TextDeformation): NormalizedTextDeformation;
760
776
  declare function normalizeText(value: Text): NormalizedText;
761
777
  declare function textContentToString(value: TextContent): string;
762
778
 
@@ -846,6 +862,13 @@ declare class EventEmitter<T extends Record<string, any> = Record<string, any>>
846
862
 
847
863
  declare function isNone<T>(value: T): value is Extract<T, null | undefined | '' | 'none'>;
848
864
  declare function round(number: number, digits?: number, base?: number): number;
865
+ /**
866
+ * Defensively coerce an unknown value to a finite number.
867
+ * - number: returned as-is when finite, otherwise `fallback`
868
+ * - string: parsed via parseFloat (e.g. '20' / '20px' -> 20), `fallback` when not finite
869
+ * - anything else: `fallback`
870
+ */
871
+ declare function normalizeNumber(value: unknown, fallback?: number): number | undefined;
849
872
  declare function clearUndef<T>(obj: T, deep?: boolean): T;
850
873
  declare function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
851
874
 
@@ -921,5 +944,5 @@ declare class Reactivable extends Observable implements PropertyAccessor {
921
944
  destroy(): void;
922
945
  }
923
946
 
924
- export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, colorFillFields, defaultColor, defineProperty, effectFields, flatDocumentToDocument, getDeclarations, getDefaultBackgroundStyle, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOutlineStyle, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, gradientFillFields, hasCRLF, idGenerator, imageFillFiedls, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeConnection, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, presetFillFiedls, property, property2, propertyOffsetFallback, propertyOffsetGet, propertyOffsetSet, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
925
- export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, Connection, ConnectionAnchor, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, 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, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBackgroundStyle, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedConnection, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOutline, NormalizedOutlineStyle, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, ObservableEvents, 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, ShapeConnectionPoint, ShapeNode, ShapePath, ShapePathStyle, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextObject, TextOrientation, TextTransform, TextWrap, Toggleable, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor, _EffectV0 };
947
+ export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, colorFillFields, defaultColor, defineProperty, effectFields, flatDocumentToDocument, getDeclarations, getDefaultBackgroundStyle, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOutlineStyle, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, gradientFillFields, hasCRLF, idGenerator, imageFillFiedls, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeConnection, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeNumber, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeStyle, normalizeText, normalizeTextContent, normalizeTextDeformation, normalizeVideo, parseColor, parseGradient, pick, presetFillFiedls, property, property2, propertyOffsetFallback, propertyOffsetGet, propertyOffsetSet, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
948
+ export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, Connection, ConnectionAnchor, ConnectionMode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, 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, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBackgroundStyle, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedConnection, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOutline, NormalizedOutlineStyle, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDeformation, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, ObservableEvents, 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, ShapeConnectionPoint, ShapeNode, ShapePath, ShapePathStyle, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextDeformation, TextObject, TextOrientation, TextTransform, TextWrap, Toggleable, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor, _EffectV0 };
package/dist/index.d.ts CHANGED
@@ -334,6 +334,7 @@ interface NormalizedBackgroundStyle {
334
334
  }
335
335
  declare function getDefaultBackgroundStyle(): NormalizedBackgroundStyle;
336
336
 
337
+ type ConnectionMode = 'straight' | 'orthogonal' | 'curved';
337
338
  interface ConnectionAnchor {
338
339
  id: string;
339
340
  idx?: number;
@@ -341,10 +342,12 @@ interface ConnectionAnchor {
341
342
  interface Connection {
342
343
  start?: ConnectionAnchor;
343
344
  end?: ConnectionAnchor;
345
+ mode?: ConnectionMode;
344
346
  }
345
347
  interface NormalizedConnection {
346
348
  start?: ConnectionAnchor;
347
349
  end?: ConnectionAnchor;
350
+ mode: ConnectionMode;
348
351
  }
349
352
  declare function normalizeConnection(connection: Connection): NormalizedConnection;
350
353
 
@@ -737,9 +740,20 @@ interface NormalizedParagraph extends NormalizedStyle {
737
740
  type FlatTextContent = string | FragmentObject | ParagraphObject | (string | FragmentObject)[];
738
741
  type TextContent = FlatTextContent | FlatTextContent[];
739
742
  type NormalizedTextContent = NormalizedParagraph[];
743
+ interface TextDeformation {
744
+ type: string;
745
+ intensities?: number[];
746
+ maxFontSize?: number;
747
+ }
748
+ interface NormalizedTextDeformation {
749
+ type: string;
750
+ intensities?: number[];
751
+ maxFontSize: number;
752
+ }
740
753
  interface TextObject extends Pick<Effect, 'fill' | 'outline'>, Partial<Toggleable> {
741
754
  content?: TextContent;
742
755
  style?: Style;
756
+ deformation?: TextDeformation;
743
757
  measureDom?: any;
744
758
  fonts?: any;
745
759
  effects?: Effect[];
@@ -747,6 +761,7 @@ interface TextObject extends Pick<Effect, 'fill' | 'outline'>, Partial<Toggleabl
747
761
  interface NormalizedText extends Pick<NormalizedEffect, 'fill' | 'outline'>, Toggleable {
748
762
  content: NormalizedTextContent;
749
763
  style?: NormalizedStyle;
764
+ deformation?: NormalizedTextDeformation;
750
765
  effects?: NormalizedEffect[];
751
766
  measureDom?: any;
752
767
  fonts?: any;
@@ -757,6 +772,7 @@ declare function normalizeCRLF(content: string): string;
757
772
  declare function normalizeTextContent(value: TextContent): NormalizedTextContent;
758
773
  declare function isParagraphObject(value: any): value is ParagraphObject;
759
774
  declare function isFragmentObject(value: any): value is FragmentObject;
775
+ declare function normalizeTextDeformation(deformation: TextDeformation): NormalizedTextDeformation;
760
776
  declare function normalizeText(value: Text): NormalizedText;
761
777
  declare function textContentToString(value: TextContent): string;
762
778
 
@@ -846,6 +862,13 @@ declare class EventEmitter<T extends Record<string, any> = Record<string, any>>
846
862
 
847
863
  declare function isNone<T>(value: T): value is Extract<T, null | undefined | '' | 'none'>;
848
864
  declare function round(number: number, digits?: number, base?: number): number;
865
+ /**
866
+ * Defensively coerce an unknown value to a finite number.
867
+ * - number: returned as-is when finite, otherwise `fallback`
868
+ * - string: parsed via parseFloat (e.g. '20' / '20px' -> 20), `fallback` when not finite
869
+ * - anything else: `fallback`
870
+ */
871
+ declare function normalizeNumber(value: unknown, fallback?: number): number | undefined;
849
872
  declare function clearUndef<T>(obj: T, deep?: boolean): T;
850
873
  declare function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
851
874
 
@@ -921,5 +944,5 @@ declare class Reactivable extends Observable implements PropertyAccessor {
921
944
  destroy(): void;
922
945
  }
923
946
 
924
- export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, colorFillFields, defaultColor, defineProperty, effectFields, flatDocumentToDocument, getDeclarations, getDefaultBackgroundStyle, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOutlineStyle, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, gradientFillFields, hasCRLF, idGenerator, imageFillFiedls, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeConnection, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, presetFillFiedls, property, property2, propertyOffsetFallback, propertyOffsetGet, propertyOffsetSet, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
925
- export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, Connection, ConnectionAnchor, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, 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, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBackgroundStyle, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedConnection, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOutline, NormalizedOutlineStyle, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, ObservableEvents, 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, ShapeConnectionPoint, ShapeNode, ShapePath, ShapePathStyle, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextObject, TextOrientation, TextTransform, TextWrap, Toggleable, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor, _EffectV0 };
947
+ export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, colorFillFields, defaultColor, defineProperty, effectFields, flatDocumentToDocument, getDeclarations, getDefaultBackgroundStyle, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOutlineStyle, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, gradientFillFields, hasCRLF, idGenerator, imageFillFiedls, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeConnection, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeNumber, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeStyle, normalizeText, normalizeTextContent, normalizeTextDeformation, normalizeVideo, parseColor, parseGradient, pick, presetFillFiedls, property, property2, propertyOffsetFallback, propertyOffsetGet, propertyOffsetSet, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
948
+ export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, Connection, ConnectionAnchor, ConnectionMode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, 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, Justify, LabColor, LabaColor, LchColor, LchaColor, LineCap, LineEndSize, LineEndType, LineJoin, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBackgroundStyle, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedConnection, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedFlatDocument, NormalizedFlatElement, NormalizedForeground, NormalizedFragment, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOutline, NormalizedOutlineStyle, NormalizedParagraph, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDeformation, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, ObservableEvents, 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, ShapeConnectionPoint, ShapeNode, ShapePath, ShapePathStyle, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextDeformation, TextObject, TextOrientation, TextTransform, TextWrap, Toggleable, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor, _EffectV0 };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.modernIdoc={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return typeof e==`string`?{src:e}:e}var n={grad:.9,turn:360,rad:360/(2*Math.PI)},r=function(e){return typeof e==`string`?e.length>0:typeof e==`number`},i=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=10**t),Math.round(n*e)/n+0},a=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e>t?e:t},o=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},s=function(e){return{r:a(e.r,0,255),g:a(e.g,0,255),b:a(e.b,0,255),a:a(e.a)}},c=function(e){return{r:i(e.r),g:i(e.g),b:i(e.b),a:i(e.a,3)}},l=/^#([0-9a-f]{3,8})$/i,u=function(e){var t=e.toString(16);return t.length<2?`0`+t:t},d=function(e){var t=e.r,n=e.g,r=e.b,i=e.a,a=Math.max(t,n,r),o=a-Math.min(t,n,r),s=o?a===t?(n-r)/o:a===n?2+(r-t)/o:4+(t-n)/o:0;return{h:60*(s<0?s+6:s),s:a?o/a*100:0,v:a/255*100,a:i}},f=function(e){var t=e.h,n=e.s,r=e.v,i=e.a;t=t/360*6,n/=100,r/=100;var a=Math.floor(t),o=r*(1-n),s=r*(1-(t-a)*n),c=r*(1-(1-t+a)*n),l=a%6;return{r:255*[r,s,o,o,c,r][l],g:255*[c,r,r,s,o,o][l],b:255*[o,o,c,r,r,s][l],a:i}},p=function(e){return{h:o(e.h),s:a(e.s,0,100),l:a(e.l,0,100),a:a(e.a)}},ee=function(e){return{h:i(e.h),s:i(e.s),l:i(e.l),a:i(e.a,3)}},m=function(e){return f((n=(t=e).s,{h:t.h,s:(n*=((r=t.l)<50?r:100-r)/100)>0?2*n/(r+n)*100:0,v:r+n,a:t.a}));var t,n,r},h=function(e){return{h:(t=d(e)).h,s:(i=(200-(n=t.s))*(r=t.v)/100)>0&&i<200?n*r/100/(i<=100?i:200-i)*100:0,l:i/2,a:t.a};var t,n,r,i},g=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,te=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,_=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ne=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,v={string:[[function(e){var t=l.exec(e);return t?(e=t[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?i(parseInt(e[3]+e[3],16)/255,2):1}:e.length===6||e.length===8?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:e.length===8?i(parseInt(e.substr(6,2),16)/255,2):1}:null:null},`hex`],[function(e){var t=_.exec(e)||ne.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:s({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):null},`rgb`],[function(e){var t=g.exec(e)||te.exec(e);if(!t)return null;var r,i;return m(p({h:(r=t[1],i=t[2],i===void 0&&(i=`deg`),Number(r)*(n[i]||1)),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)}))},`hsl`]],object:[[function(e){var t=e.r,n=e.g,i=e.b,a=e.a,o=a===void 0?1:a;return r(t)&&r(n)&&r(i)?s({r:Number(t),g:Number(n),b:Number(i),a:Number(o)}):null},`rgb`],[function(e){var t=e.h,n=e.s,i=e.l,a=e.a,o=a===void 0?1:a;return!r(t)||!r(n)||!r(i)?null:m(p({h:Number(t),s:Number(n),l:Number(i),a:Number(o)}))},`hsl`],[function(e){var t=e.h,n=e.s,i=e.v,s=e.a,c=s===void 0?1:s;return!r(t)||!r(n)||!r(i)?null:f(function(e){return{h:o(e.h),s:a(e.s,0,100),v:a(e.v,0,100),a:a(e.a)}}({h:Number(t),s:Number(n),v:Number(i),a:Number(c)}))},`hsv`]]},y=function(e,t){for(var n=0;n<t.length;n++){var r=t[n][0](e);if(r)return[r,t[n][1]]}return[null,void 0]},re=function(e){return typeof e==`string`?y(e.trim(),v.string):typeof e==`object`&&e?y(e,v.object):[null,void 0]},b=function(e,t){var n=h(e);return{h:n.h,s:a(n.s+100*t,0,100),l:n.l,a:n.a}},x=function(e){return(299*e.r+587*e.g+114*e.b)/1e3/255},S=function(e,t){var n=h(e);return{h:n.h,s:n.s,l:a(n.l+100*t,0,100),a:n.a}},ie=function(){function e(e){this.parsed=re(e)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return e.prototype.isValid=function(){return this.parsed!==null},e.prototype.brightness=function(){return i(x(this.rgba),2)},e.prototype.isDark=function(){return x(this.rgba)<.5},e.prototype.isLight=function(){return x(this.rgba)>=.5},e.prototype.toHex=function(){return e=c(this.rgba),t=e.r,n=e.g,r=e.b,o=(a=e.a)<1?u(i(255*a)):``,`#`+u(t)+u(n)+u(r)+o;var e,t,n,r,a,o},e.prototype.toRgb=function(){return c(this.rgba)},e.prototype.toRgbString=function(){return e=c(this.rgba),t=e.r,n=e.g,r=e.b,(i=e.a)<1?`rgba(`+t+`, `+n+`, `+r+`, `+i+`)`:`rgb(`+t+`, `+n+`, `+r+`)`;var e,t,n,r,i},e.prototype.toHsl=function(){return ee(h(this.rgba))},e.prototype.toHslString=function(){return e=ee(h(this.rgba)),t=e.h,n=e.s,r=e.l,(i=e.a)<1?`hsla(`+t+`, `+n+`%, `+r+`%, `+i+`)`:`hsl(`+t+`, `+n+`%, `+r+`%)`;var e,t,n,r,i},e.prototype.toHsv=function(){return e=d(this.rgba),{h:i(e.h),s:i(e.s),v:i(e.v),a:i(e.a,3)};var e},e.prototype.invert=function(){return C({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},e.prototype.saturate=function(e){return e===void 0&&(e=.1),C(b(this.rgba,e))},e.prototype.desaturate=function(e){return e===void 0&&(e=.1),C(b(this.rgba,-e))},e.prototype.grayscale=function(){return C(b(this.rgba,-1))},e.prototype.lighten=function(e){return e===void 0&&(e=.1),C(S(this.rgba,e))},e.prototype.darken=function(e){return e===void 0&&(e=.1),C(S(this.rgba,-e))},e.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},e.prototype.alpha=function(e){return typeof e==`number`?C({r:(t=this.rgba).r,g:t.g,b:t.b,a:e}):i(this.rgba.a,3);var t},e.prototype.hue=function(e){var t=h(this.rgba);return typeof e==`number`?C({h:e,s:t.s,l:t.l,a:t.a}):i(t.h)},e.prototype.isEqual=function(e){return this.toHex()===C(e).toHex()},e}(),C=function(e){return e instanceof ie?e:new ie(e)},ae=class{eventListeners=new Map;addEventListener(e,t,n){let r={value:t,options:n},i=this.eventListeners.get(e);return i?Array.isArray(i)?i.push(r):this.eventListeners.set(e,[i,r]):this.eventListeners.set(e,r),this}removeEventListener(e,t,n){if(!t)return this.eventListeners.delete(e),this;let r=this.eventListeners.get(e);if(!r)return this;if(Array.isArray(r)){let i=[];for(let e=0,a=r.length;e<a;e++){let a=r[e];(a.value!==t||typeof n==`object`&&n?.once&&(typeof a.options==`boolean`||!a.options?.once))&&i.push(a)}i.length?this.eventListeners.set(e,i.length===1?i[0]:i):this.eventListeners.delete(e)}else r.value===t&&(typeof n==`boolean`||!n?.once||typeof r.options==`boolean`||r.options?.once)&&this.eventListeners.delete(e);return this}removeAllListeners(){return this.eventListeners.clear(),this}hasEventListener(e){return this.eventListeners.has(e)}dispatchEvent(e,...t){let n=this.eventListeners.get(e);if(n){if(Array.isArray(n))for(let r=n.length,i=0;i<r;i++){let r=n[i];typeof r.options==`object`&&r.options?.once&&this.off(e,r.value,r.options),r.value.apply(this,t)}else typeof n.options==`object`&&n.options?.once&&this.off(e,n.value,n.options),n.value.apply(this,t);return!0}else return!1}on(e,t,n){return this.addEventListener(e,t,n)}once(e,t){return this.addEventListener(e,t,{once:!0})}off(e,t,n){return this.removeEventListener(e,t,n)}emit(e,...t){this.dispatchEvent(e,...t)}};function w(e){return e==null||e===``||e===`none`}function T(e,t=0,n=10**t){return Math.round(n*e)/n+0}function E(e,t=!1){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return t?e.map(e=>E(e,t)):e;let n={};for(let r in e){let i=e[r];i!=null&&(t?n[r]=E(i,t):n[r]=i)}return n}function D(e,t){let n={};return t.forEach(t=>{t in e&&(n[t]=e[t])}),n}function O(e,t){if(e===t)return!0;if(e&&t&&typeof e==`object`&&typeof t==`object`){let n=Array.from(new Set([...Object.keys(e),...Object.keys(t)]));return!n.length||n.every(n=>e[n]===t[n])}return!1}function k(e,t,n){let r=t.length-1;if(r<0)return e===void 0?n:e;for(let i=0;i<r;i++){if(e==null)return n;e=e[t[i]]}return e==null||e[t[r]]===void 0?n:e[t[r]]}function A(e,t,n){let r=t.length-1;for(let n=0;n<r;n++)typeof e[t[n]]!=`object`&&(e[t[n]]={}),e=e[t[n]];e[t[r]]=n}function j(e,t,n){return e==null||!t||typeof t!=`string`?n:e[t]===void 0?(t=t.replace(/\[(\w+)\]/g,`.$1`),t=t.replace(/^\./,``),k(e,t.split(`.`),n)):e[t]}function oe(e,t,n){if(!(typeof e!=`object`||!t))return t=t.replace(/\[(\w+)\]/g,`.$1`),t=t.replace(/^\./,``),A(e,t.split(`.`),n)}var se=class{_eventListeners={};on(e,t){let n=this._eventListeners[e];n===void 0&&(n=[],this._eventListeners[e]=n);let r=n.indexOf(t);return r>-1&&n.splice(r,1),n.push(t),this}once(e,t){let n=(...r)=>{this.off(e,n),t.apply(this,r)};return this.on(e,n),this}off(e,t){let n=this._eventListeners[e];if(n!==void 0){let e=n.indexOf(t);e>-1&&n.splice(e,1)}return this}emit(e,...t){let n=this._eventListeners[e];if(n!==void 0){let e=n.length;if(e>0)for(let r=0;r<e;r++)n[r].apply(this,t)}return this}removeAllListeners(){return this._eventListeners={},this}hasEventListener(e){return!!this._eventListeners[e]}destroy(){this.removeAllListeners()}},ce=class{_map=new WeakMap;_toRaw(e){if(e&&typeof e==`object`){let t=e.__v_raw;t&&(e=this._toRaw(t))}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,t){return this._map.set(this._toRaw(e),this._toRaw(t)),this}},le=Symbol.for(`declarations`),M=Symbol.for(`inited`);function N(e){let t;if(Object.hasOwn(e,le))t=e[le];else{let n=Object.getPrototypeOf(e);t={...n?N(n):{}},e[le]=t}return t}function P(e,t,n,r){let{alias:i,internalKey:a}=r,o=e[t];i?oe(e,i,n):e[a]=n,e.onUpdateProperty?.(t,n??I(e,t,r),o)}function F(e,t,n){let{alias:r,internalKey:i}=n,a;return a=r?j(e,r):e[i],a??=I(e,t,n),a}function I(e,t,n){let{default:r,fallback:i}=n,a;if(r!==void 0&&!e[M]?.[t]){e[M]||(e[M]={}),e[M][t]=!0;let n=typeof r==`function`?r():r;n!==void 0&&(e[t]=n,a=n)}return a===void 0&&i!==void 0&&(a=typeof i==`function`?i():i),a}function L(e,t){function n(){return this.getProperty?this.getProperty(e):F(this,e,t)}function r(n){this.setProperty?this.setProperty(e,n):P(this,e,n,t)}return{get:n,set:r}}function ue(e,t,n={}){let r={...n,internalKey:Symbol.for(t)},i=N(e);i[t]=r;let{get:a,set:o}=L(t,r);Object.defineProperty(e.prototype,t,{get(){return a.call(this)},set(e){o.call(this,e)},configurable:!0,enumerable:!0})}function de(e){return function(t,n){if(typeof n!=`string`)throw TypeError(`Failed to @property decorator, prop name cannot be a symbol`);ue(t.constructor,n,e)}}function fe(e={}){return function(t,n){let r=n.name;if(typeof r!=`string`)throw TypeError(`Failed to @property decorator, prop name cannot be a symbol`);let i={...e,internalKey:Symbol.for(r)},a=L(r,i);return{init(e){let t=N(this.constructor);return t[r]=i,a.set.call(this,e),e},get(){return a.get.call(this)},set(e){a.set.call(this,e)}}}}var pe=class extends se{_propertyAccessor;_properties={};_updatedProperties={};_changedProperties=new Set;_updatingPromise=Promise.resolve();_updating=!1;constructor(e){super(),this.setProperties(e)}isDirty(e){return e?!!this._updatedProperties[e]:Object.keys(this._updatedProperties).length>0}offsetGetProperty(e){return this._properties[e]}offsetSetProperty(e,t){this._properties[e]=t}offsetGetProperties(e){let t=this._properties,n=Object.keys(t),r={};for(let i,a,o=0;o<n.length;o++)i=n[o],a=t[i],a!==void 0&&(!e||e.includes(i))&&(a&&typeof a==`object`?`toJSON`in a?r[i]=a.toJSON():Array.isArray(a)?r[i]=[...a]:r[i]={...a}:r[i]=a);return r}offsetSetProperties(e){if(e&&typeof e==`object`){let t=Object.keys(e);for(let n,r=0;r<t.length;r++)n=t[r],this.offsetSetProperty(n,e[n])}return this}getProperty(e){let t=this.getPropertyDeclaration(e);if(t){if(t.internal||t.alias)return F(this,e,t);{let n=this._propertyAccessor,r;return r=n&&n.getProperty?n.getProperty(e):this.offsetGetProperty(e),r??I(this,e,t)}}}setProperty(e,t){let n=this.getPropertyDeclaration(e);if(n)if(n.internal||n.alias)P(this,e,t,n);else{let r=this.getProperty(e);this._propertyAccessor?.setProperty?.(e,t),this.offsetSetProperty(e,t),this.onUpdateProperty?.(e,t??I(this,e,n),r)}}getProperties(e){let t={},n=this.getPropertyDeclarations(),r=Object.keys(n);for(let i=0,a=r.length;i<a;i++){let a=r[i],o=n[a];o.internal||o.alias||(!e||e.includes(a))&&(t[a]=this.getProperty(a))}return t}setProperties(e){if(e&&typeof e==`object`)for(let t in e)this.setProperty(t,e[t]);return this}resetProperties(){let e=this.getPropertyDeclarations(),t=Object.keys(e);for(let n=0,r=t.length;n<r;n++){let r=t[n],i=e[r];this.setProperty(r,typeof i.default==`function`?i.default():i.default)}return this}getPropertyDeclarations(){return N(this.constructor)}getPropertyDeclaration(e){return this.getPropertyDeclarations()[e]}setPropertyAccessor(e){let t=this.getPropertyDeclarations(),n=[];if(e&&e.getProperty&&e.setProperty){let r=Object.keys(t);for(let i=0,a=r.length;i<a;i++){let a=r[i],o=t[a];if(o.internal||o.alias)continue;let s=this.offsetGetProperty(a),c=e.getProperty(a);c!==void 0&&!Object.is(s,c)&&(this.offsetSetProperty(a,c),n.push({key:a,newValue:c,oldValue:s}))}}this._propertyAccessor=e;for(let e=0,t=n.length;e<t;e++){let{key:t,newValue:r,oldValue:i}=n[e];this.requestUpdate(t,r,i)}return 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(),!1)}onUpdate(){this._update(this._updatedProperties),this._updatedProperties={}}onUpdateProperty(e,t,n){Object.is(t,n)||this.requestUpdate(e,t,n)}requestUpdate(e,t,n){e!==void 0&&(this._updatedProperties[e]=n,this._changedProperties.add(e),this._updateProperty(e,t,n),this.emit(`updateProperty`,e,t,n)),this._updating||(this._updatingPromise=this._enqueueUpdate())}_update(e){}_updateProperty(e,t,n){}toJSON(){return this.offsetGetProperties()}clone(){return new this.constructor(this.toJSON())}destroy(){this.emit(`destroy`),super.destroy()}};function R(e){let t;return t=typeof e==`number`?{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:(e&255)/255}:e,C(t)}function me(e){return{r:T(e.r),g:T(e.g),b:T(e.b),a:T(e.a,3)}}function z(e){let t=e.toString(16);return t.length<2?`0${t}`:t}var B=`#000000FF`;function V(e){return R(e).isValid()}function H(e,t=!1){let n=R(e);if(!n.isValid()){if(typeof e==`string`)return e;let n=`Failed to normalizeColor ${e}`;if(t)throw Error(n);return console.warn(n),B}let{r,g:i,b:a,a:o}=me(n.rgba);return`#${z(r)}${z(i)}${z(a)}${z(T(o*255))}`}var U=U||{};U.parse=(function(){let e={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},t=``;function n(e){let n=Error(`${t}: ${e}`);throw n.source=t,n}function r(){let e=i();return t.length>0&&n(`Invalid input not EOF`),e}function i(){return _(a)}function a(){return o(`linear-gradient`,e.linearGradient,c)||o(`repeating-linear-gradient`,e.repeatingLinearGradient,c)||o(`radial-gradient`,e.radialGradient,d)||o(`repeating-radial-gradient`,e.repeatingRadialGradient,d)}function o(t,r,i){return s(r,r=>{let a=i();return a&&(A(e.comma)||n(`Missing comma before color stops`)),{type:t,orientation:a,colorStops:_(ne)}})}function s(t,r){let i=A(t);if(i){A(e.startCall)||n(`Missing (`);let t=r(i);return A(e.endCall)||n(`Missing )`),t}}function c(){let t=l();if(t)return t;let n=k(`position-keyword`,e.positionKeywords,1);return n?{type:`directional`,value:n.value}:u()}function l(){return k(`directional`,e.sideOrCorner,1)}function u(){return k(`angular`,e.angleValue,1)||k(`angular`,e.radianValue,1)}function d(){let n,r=f(),i;return r&&(n=[],n.push(r),i=t,A(e.comma)&&(r=f(),r?n.push(r):t=i)),n}function f(){let e=p()||ee();if(e)e.at=h();else{let t=m();if(t){e=t;let n=h();n&&(e.at=n)}else{let t=h();if(t)e={type:`default-radial`,at:t};else{let t=g();t&&(e={type:`default-radial`,at:t})}}}return e}function p(){let e=k(`shape`,/^(circle)/i,0);return e&&(e.style=O()||m()),e}function ee(){let e=k(`shape`,/^(ellipse)/i,0);return e&&(e.style=g()||T()||m()),e}function m(){return k(`extent-keyword`,e.extentKeywords,1)}function h(){if(k(`position`,/^at/,0)){let e=g();return e||n(`Missing positioning value`),e}}function g(){let e=te();if(e.x||e.y)return{type:`position`,value:e}}function te(){return{x:T(),y:T()}}function _(t){let r=t(),i=[];if(r)for(i.push(r);A(e.comma);)r=t(),r?i.push(r):n(`One extra comma`);return i}function ne(){let e=v();return e||n(`Expected color definition`),e.length=T(),e}function v(){return re()||C()||ie()||x()||b()||S()||y()}function y(){return k(`literal`,e.literalColor,0)}function re(){return k(`hex`,e.hexColor,1)}function b(){return s(e.rgbColor,()=>({type:`rgb`,value:_(w)}))}function x(){return s(e.rgbaColor,()=>({type:`rgba`,value:_(w)}))}function S(){return s(e.varColor,()=>({type:`var`,value:ae()}))}function ie(){return s(e.hslColor,()=>{A(e.percentageValue)&&n(`HSL hue value must be a number in degrees (0-360) or normalized (-360 to 360), not a percentage`);let t=w();A(e.comma);let r=A(e.percentageValue),i=r?r[1]:null;A(e.comma),r=A(e.percentageValue);let a=r?r[1]:null;return(!i||!a)&&n(`Expected percentage value for saturation and lightness in HSL`),{type:`hsl`,value:[t,i,a]}})}function C(){return s(e.hslaColor,()=>{let t=w();A(e.comma);let r=A(e.percentageValue),i=r?r[1]:null;A(e.comma),r=A(e.percentageValue);let a=r?r[1]:null;A(e.comma);let o=w();return(!i||!a)&&n(`Expected percentage value for saturation and lightness in HSLA`),{type:`hsla`,value:[t,i,a,o]}})}function ae(){return A(e.variableName)[1]}function w(){return A(e.number)[1]}function T(){return k(`%`,e.percentageValue,1)||E()||D()||O()}function E(){return k(`position-keyword`,e.positionKeywords,1)}function D(){return s(e.calcValue,()=>{let e=1,r=0;for(;e>0&&r<t.length;){let n=t.charAt(r);n===`(`?e++:n===`)`&&e--,r++}e>0&&n(`Missing closing parenthesis in calc() expression`);let i=t.substring(0,r-1);return j(r-1),{type:`calc`,value:i}})}function O(){return k(`px`,e.pixelValue,1)||k(`em`,e.emValue,1)}function k(e,t,n){let r=A(t);if(r)return{type:e,value:r[n]}}function A(e){let n,r;return r=/^\s+/.exec(t),r&&j(r[0].length),n=e.exec(t),n&&j(n[0].length),n}function j(e){t=t.substr(e)}return function(e){return t=e.toString().trim(),t.endsWith(`;`)&&(t=t.slice(0,-1)),r()}})();var he=U.parse.bind(U),W=W||{};W.stringify=(function(){var e={"visit_linear-gradient":function(t){return e.visit_gradient(t)},"visit_repeating-linear-gradient":function(t){return e.visit_gradient(t)},"visit_radial-gradient":function(t){return e.visit_gradient(t)},"visit_repeating-radial-gradient":function(t){return e.visit_gradient(t)},visit_gradient:function(t){var n=e.visit(t.orientation);return n&&(n+=`, `),t.type+`(`+n+e.visit(t.colorStops)+`)`},visit_shape:function(t){var n=t.value,r=e.visit(t.at),i=e.visit(t.style);return i&&(n+=` `+i),r&&(n+=` at `+r),n},"visit_default-radial":function(t){var n=``,r=e.visit(t.at);return r&&(n+=r),n},"visit_extent-keyword":function(t){var n=t.value,r=e.visit(t.at);return r&&(n+=` at `+r),n},"visit_position-keyword":function(e){return e.value},visit_position:function(t){return e.visit(t.value.x)+` `+e.visit(t.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(t){return e.visit_color(t.value,t)},visit_hex:function(t){return e.visit_color(`#`+t.value,t)},visit_rgb:function(t){return e.visit_color(`rgb(`+t.value.join(`, `)+`)`,t)},visit_rgba:function(t){return e.visit_color(`rgba(`+t.value.join(`, `)+`)`,t)},visit_hsl:function(t){return e.visit_color(`hsl(`+t.value[0]+`, `+t.value[1]+`%, `+t.value[2]+`%)`,t)},visit_hsla:function(t){return e.visit_color(`hsla(`+t.value[0]+`, `+t.value[1]+`%, `+t.value[2]+`%, `+t.value[3]+`)`,t)},visit_var:function(t){return e.visit_color(`var(`+t.value+`)`,t)},visit_color:function(t,n){var r=t,i=e.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(t){var n=``,r=t.length;return t.forEach(function(t,i){n+=e.visit(t),i<r-1&&(n+=`, `)}),n},visit_object:function(t){return t.width&&t.height?e.visit(t.width)+` `+e.visit(t.height):``},visit:function(t){if(!t)return``;if(t instanceof Array)return e.visit_array(t);if(typeof t==`object`&&!t.type)return e.visit_object(t);if(t.type){var n=e[`visit_`+t.type];if(n)return n(t);throw Error(`Missing visitor visit_`+t.type)}else throw Error(`Invalid node.`)}};return function(t){return e.visit(t)}})();var ge=W.stringify.bind(W);function _e(e){let t=e.length-1;return e.map((e,n)=>{let r=e.value,i=T(n/t,3),a=`#00000000`;switch(e.type){case`rgb`:a=H({r:Number(r[0]??0),g:Number(r[1]??0),b:Number(r[2]??0)});break;case`rgba`:a=H({r:Number(r[0]??0),g:Number(r[1]??0),b:Number(r[2]??0),a:Number(r[3]??0)});break;case`literal`:a=H(e.value);break;case`hex`:a=H(`#${e.value}`);break}switch(e.length?.type){case`%`:i=Number(e.length.value)/100;break;case`px`:break;case`em`:break}return{offset:i,color:a}})}function ve(e){let t=0;switch(e.orientation?.type){case`angular`:t=Number(e.orientation.value);break;case`directional`:break}return{type:`linear-gradient`,angle:t,stops:_e(e.colorStops)}}function ye(e){return e.orientation?.map(e=>{switch(e?.type){default:return null}}),{type:`radial-gradient`,stops:_e(e.colorStops)}}function G(e){return e.startsWith(`linear-gradient(`)||e.startsWith(`radial-gradient(`)}function be(e){return he(e).map(e=>{switch(e?.type){case`linear-gradient`:return ve(e);case`repeating-linear-gradient`:return{...ve(e),repeat:!0};case`radial-gradient`:return ye(e);case`repeating-radial-gradient`:return{...ye(e),repeat:!0};default:return}}).filter(Boolean)}var K=[`color`];function xe(e){let t;return t=typeof e==`string`?{color:e}:{...e},t.color&&=H(t.color),D(t,K)}var q=[`linearGradient`,`radialGradient`,`rotateWithShape`];function Se(e){let t;if(t=typeof e==`string`?{image:e}:{...e},t.image){let{type:e,...n}=be(t.image)[0]??{};switch(e){case`radial-gradient`:return{radialGradient:n};case`linear-gradient`:return{linearGradient:n}}}return D(t,q)}var Ce=[`image`,`cropRect`,`stretchRect`,`tile`,`dpi`,`opacity`,`rotateWithShape`];function we(e){let t;return t=typeof e==`string`?{image:e}:{...e},D(t,Ce)}var Te=[`preset`,`foregroundColor`,`backgroundColor`];function Ee(e){let t;return t=typeof e==`string`?{preset:e}:{...e},w(t.foregroundColor)?delete t.foregroundColor:t.foregroundColor=H(t.foregroundColor),w(t.backgroundColor)?delete t.backgroundColor:t.backgroundColor=H(t.backgroundColor),D(t,Te)}function De(e){return!w(e.color)}function Oe(e){return typeof e==`string`?V(e):De(e)}function ke(e){return!w(e.image)&&G(e.image)||!!e.linearGradient||!!e.radialGradient}function Ae(e){return typeof e==`string`?G(e):ke(e)}function je(e){return!w(e.image)&&!G(e.image)}function Me(e){return typeof e==`string`?!V(e)&&!G(e):je(e)}function Ne(e){return!w(e.preset)}function Pe(e){return typeof e==`string`?!1:Ne(e)}function J(e){let t={enabled:e&&typeof e==`object`?e.enabled??!0:!0};return Oe(e)&&Object.assign(t,xe(e)),Ae(e)&&Object.assign(t,Se(e)),Me(e)&&Object.assign(t,we(e)),Pe(e)&&Object.assign(t,Ee(e)),D(E(t),Array.from(new Set([`enabled`,...K,...Ce,...q,...Te])))}function Fe(e){return typeof e==`string`?{...J(e)}:{...J(e),...D(e,[`fillWithShape`])}}function Ie(){return{backgroundImage:`none`,backgroundSize:`auto, auto`,backgroundColor:`none`,backgroundColormap:`none`}}function Le(e){return E({start:e.start,end:e.end})}function Y(e){return typeof e==`string`?{...J(e)}:{...J(e),...D(e,[`width`,`style`,`lineCap`,`lineJoin`,`headEnd`,`tailEnd`])}}function Re(){return{outlineWidth:0,outlineOffset:0,outlineColor:`none`,outlineStyle:`none`}}function ze(e){return typeof e==`string`?{enabled:!0,color:H(e)}:{...e,enabled:e.enabled??!0,color:w(e.color)?B:H(e.color)}}function Be(){return{boxShadow:`none`}}var Ve=[`fill`,`outline`,`shadow`,`transform`,`transformOrigin`];function He(e){let t=D(e,Ve),{rotate:n,scaleX:r,scaleY:i,skewX:a,skewY:o,translateX:s,translateY:c}=e,l=[];return(s||c)&&l.push(`translate(${s||0}, ${c||0})`),n&&l.push(`rotate(${n}deg)`),(r||i)&&l.push(`scale(${r??1}, ${i??1})`),a&&l.push(`skewX(${a}deg)`),o&&l.push(`skewY(${o}deg)`),l.length>0&&(t.transform=l.join(` `)),(e.textStrokeWidth||e.textStrokeColor)&&(t.outline={color:e.textStrokeColor,width:e.textStrokeWidth}),e.color&&(t.fill={color:e.color}),(e.shadowOffsetX||e.shadowOffsetY||e.shadowBlur||e.shadowColor)&&(t.shadow={offsetX:e.shadowOffsetX,offsetY:e.shadowOffsetY,blur:e.shadowBlur,color:e.shadowColor}),t}function X(e){let t=He(e);return E({fill:w(t.fill)?void 0:J(t.fill),outline:w(t.outline)?void 0:Y(t.outline),shadow:w(t.shadow)?void 0:ze(t.shadow),transform:w(t.transform)?void 0:t.transform,transformOrigin:t.transformOrigin})}function Ue(e){return typeof e==`string`?{...J(e)}:{...J(e),...D(e,[`fillWithShape`])}}var We=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`,Ge=(e=21)=>{let t=``,n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=We[n[e]&63];return t},Ke=()=>Ge(10),qe=Ke;function Je(e){return typeof e==`string`?e.startsWith(`<svg`)?{enabled:!0,svg:e}:{enabled:!0,paths:[{data:e}]}:Array.isArray(e)?{enabled:!0,paths:e.map(e=>typeof e==`string`?{data:e}:e)}:e}function Ye(){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 Xe(){return{rotate:0,scaleX:1,scaleY:1,skewX:0,skewY:0,translateX:0,translateY:0,transform:`none`,transformOrigin:`center`}}function Ze(){return{...Ye(),...Xe(),...Be(),...Ie(),...Re(),borderRadius:0,borderColor:`none`,borderStyle:`solid`,visibility:`visible`,filter:`none`,opacity:1,pointerEvents:`auto`,maskImage:`none`}}function Qe(){return{highlight:{},highlightImage:`none`,highlightReferImage:`none`,highlightColormap:`none`,highlightLine:`none`,highlightSize:`cover`,highlightThickness:`100%`}}function $e(){return{listStyle:{},listStyleType:`none`,listStyleImage:`none`,listStyleColormap:`none`,listStyleSize:`cover`,listStylePosition:`outside`}}function et(){return{...Qe(),color:`#000000`,verticalAlign:`baseline`,letterSpacing:0,wordSpacing:0,fontSize:14,fontWeight:`normal`,fontFamily:``,fontStyle:`normal`,fontKerning:`normal`,textTransform:`none`,textOrientation:`mixed`,textDecoration:`none`}}function tt(){return{...$e(),writingMode:`horizontal-tb`,textWrap:`wrap`,textAlign:`start`,textIndent:0,lineHeight:1.2}}function nt(){return{...tt(),...et(),textStrokeWidth:0,textStrokeColor:`none`}}function Z(e){return E({...e,color:w(e.color)?void 0:H(e.color),backgroundColor:w(e.backgroundColor)?void 0:H(e.backgroundColor),borderColor:w(e.borderColor)?void 0:H(e.borderColor),outlineColor:w(e.outlineColor)?void 0:H(e.outlineColor),shadowColor:w(e.shadowColor)?void 0:H(e.shadowColor),textStrokeColor:w(e.textStrokeColor)?void 0:H(e.textStrokeColor)})}function rt(){return{...Ze(),...nt()}}var it=/\r\n|\n\r|\n|\r/,at=RegExp(`${it.source}|<br\\/>`,`g`),ot=RegExp(`^(${it.source})$`),st=`
2
- `;function ct(e){return it.test(e)}function lt(e){return ot.test(e)}function ut(e){return e.replace(at,st)}function Q(e){let t=[];function n(){return t[t.length-1]}function r(e,n,r){let i=e?Z(e):{},a=n?J(n):void 0,o=r?Y(r):void 0,s=E({...i,fill:a,outline:o,fragments:[]});return t[t.length-1]?.fragments.length===0?t[t.length-1]=s:t.push(s),s}function i(e=``,t,i,a){let o=t?Z(t):{},s=i?J(i):void 0,c=a?Y(a):void 0;Array.from(e).forEach(e=>{if(lt(e)){let{fragments:e,fill:t,outline:i,...a}=n()||r();e.length||e.push(E({...o,fill:s,outline:c,content:st})),r(a,t,i)}else{let t=n()||r(),i=t.fragments[t.fragments.length-1];if(i){let{content:t,fill:n,outline:r,...a}=i;if(O(s,n)&&O(c,r)&&O(o,a)){i.content=`${t}${e}`;return}}t.fragments.push(E({...o,fill:s,outline:c,content:e}))}})}(Array.isArray(e)?e:[e]).forEach(e=>{if(typeof e==`string`)r(),i(e);else if(ft(e)){let{content:t,fill:n,outline:a,...o}=e;r(o,n,a),i(t)}else if(dt(e)){let{fragments:t,fill:n,outline:a,...o}=e;r(o,n,a),t.forEach(e=>{let{content:t,fill:n,outline:r,...a}=e;i(t,a,n,r)})}else Array.isArray(e)?(r(),e.forEach(e=>{if(typeof e==`string`)i(e);else if(ft(e)){let{content:t,fill:n,outline:r,...a}=e;i(t,a,n,r)}})):console.warn(`Failed to parse text content`,e)});let a=n();return a&&!a.fragments.length&&a.fragments.push({content:``}),t}function dt(e){return e&&typeof e==`object`&&`fragments`in e&&Array.isArray(e.fragments)}function ft(e){return e&&typeof e==`object`&&`content`in e&&typeof e.content==`string`}function pt(e){return typeof e==`string`||Array.isArray(e)?{enabled:!0,content:Q(e)}:E({enabled:e.enabled??!0,content:Q(e.content??``),style:e.style?Z(e.style):void 0,measureDom:e.measureDom,fonts:e.fonts,...X(e),effects:e.effects?e.effects.map(e=>X(e)):void 0})}function mt(e){return Q(e).map(e=>{let t=ut(e.fragments.flatMap(e=>e.content).join(``));return lt(t)?``:t}).join(st)}function ht(e){return typeof e==`string`?{src:e}:e}function $(e){return E({id:e.id??qe(),style:w(e.style)?void 0:Z(e.style),text:w(e.text)?void 0:pt(e.text),background:w(e.background)?void 0:Fe(e.background),shape:w(e.shape)?void 0:Je(e.shape),foreground:w(e.foreground)?void 0:Ue(e.foreground),video:w(e.video)?void 0:ht(e.video),audio:w(e.audio)?void 0:t(e.audio),connection:w(e.connection)?void 0:Le(e.connection),...X(e),children:e.children?.map(e=>$(e))})}function gt(e){return $(e)}function _t(e){let t={};for(let n in e.children){let r=$(e.children[n]);delete r.children,t[n]=r}return{...e,children:t}}function vt(e){let{children:t,...n}=e;function r(e){let{parentId:t,childrenIds:n,...r}=e;return{...r,children:[]}}let i={},a=[],o={...n,children:a};function s(e){if(!t[e]||i[e])return;let n=t[e],o=r(n);i[e]=o;let c=n.parentId;if(c){s(c);let n=t[c],r=i[c];if(!r)return;n?.childrenIds&&r?.children&&(r.children[n.childrenIds.indexOf(e)]=o)}else a.push(o)}for(let e in t)s(e);return o}e.EventEmitter=ae,e.Observable=se,e.RawWeakMap=ce,e.Reactivable=pe,e.clearUndef=E,e.colorFillFields=K,e.defaultColor=B,e.defineProperty=ue,e.effectFields=Ve,e.flatDocumentToDocument=vt,e.getDeclarations=N,e.getDefaultBackgroundStyle=Ie,e.getDefaultElementStyle=Ze,e.getDefaultHighlightStyle=Qe,e.getDefaultLayoutStyle=Ye,e.getDefaultListStyleStyle=$e,e.getDefaultOutlineStyle=Re,e.getDefaultShadowStyle=Be,e.getDefaultStyle=rt,e.getDefaultTextInlineStyle=et,e.getDefaultTextLineStyle=tt,e.getDefaultTextStyle=nt,e.getDefaultTransformStyle=Xe,e.getNestedValue=k,e.getObjectValueByPath=j,e.getPropertyDescriptor=L,e.gradientFillFields=q,e.hasCRLF=ct,e.idGenerator=qe,e.imageFillFiedls=Ce,e.isCRLF=lt,e.isColor=V,e.isColorFill=Oe,e.isColorFillObject=De,e.isEqualObject=O,e.isFragmentObject=ft,e.isGradient=G,e.isGradientFill=Ae,e.isGradientFillObject=ke,e.isImageFill=Me,e.isImageFillObject=je,e.isNone=w,e.isParagraphObject=dt,e.isPresetFill=Pe,e.isPresetFillObject=Ne,e.nanoid=Ke,e.normalizeAudio=t,e.normalizeBackground=Fe,e.normalizeCRLF=ut,e.normalizeColor=H,e.normalizeColorFill=xe,e.normalizeConnection=Le,e.normalizeDocument=gt,e.normalizeEffect=X,e.normalizeElement=$,e.normalizeFill=J,e.normalizeFlatDocument=_t,e.normalizeForeground=Ue,e.normalizeGradient=be,e.normalizeGradientFill=Se,e.normalizeImageFill=we,e.normalizeOutline=Y,e.normalizePresetFill=Ee,e.normalizeShadow=ze,e.normalizeShape=Je,e.normalizeStyle=Z,e.normalizeText=pt,e.normalizeTextContent=Q,e.normalizeVideo=ht,e.parseColor=R,e.parseGradient=he,e.pick=D,e.presetFillFiedls=Te,e.property=de,e.property2=fe,e.propertyOffsetFallback=I,e.propertyOffsetGet=F,e.propertyOffsetSet=P,e.round=T,e.setNestedValue=A,e.setObjectValueByPath=oe,e.stringifyGradient=ge,e.textContentToString=mt});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.modernIdoc={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return typeof e==`string`?{src:e}:e}var n={grad:.9,turn:360,rad:360/(2*Math.PI)},r=function(e){return typeof e==`string`?e.length>0:typeof e==`number`},i=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=10**t),Math.round(n*e)/n+0},a=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e>t?e:t},o=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},s=function(e){return{r:a(e.r,0,255),g:a(e.g,0,255),b:a(e.b,0,255),a:a(e.a)}},c=function(e){return{r:i(e.r),g:i(e.g),b:i(e.b),a:i(e.a,3)}},l=/^#([0-9a-f]{3,8})$/i,u=function(e){var t=e.toString(16);return t.length<2?`0`+t:t},d=function(e){var t=e.r,n=e.g,r=e.b,i=e.a,a=Math.max(t,n,r),o=a-Math.min(t,n,r),s=o?a===t?(n-r)/o:a===n?2+(r-t)/o:4+(t-n)/o:0;return{h:60*(s<0?s+6:s),s:a?o/a*100:0,v:a/255*100,a:i}},f=function(e){var t=e.h,n=e.s,r=e.v,i=e.a;t=t/360*6,n/=100,r/=100;var a=Math.floor(t),o=r*(1-n),s=r*(1-(t-a)*n),c=r*(1-(1-t+a)*n),l=a%6;return{r:255*[r,s,o,o,c,r][l],g:255*[c,r,r,s,o,o][l],b:255*[o,o,c,r,r,s][l],a:i}},ee=function(e){return{h:o(e.h),s:a(e.s,0,100),l:a(e.l,0,100),a:a(e.a)}},p=function(e){return{h:i(e.h),s:i(e.s),l:i(e.l),a:i(e.a,3)}},m=function(e){return f((n=(t=e).s,{h:t.h,s:(n*=((r=t.l)<50?r:100-r)/100)>0?2*n/(r+n)*100:0,v:r+n,a:t.a}));var t,n,r},h=function(e){return{h:(t=d(e)).h,s:(i=(200-(n=t.s))*(r=t.v)/100)>0&&i<200?n*r/100/(i<=100?i:200-i)*100:0,l:i/2,a:t.a};var t,n,r,i},g=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,te=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,_=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ne=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,v={string:[[function(e){var t=l.exec(e);return t?(e=t[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?i(parseInt(e[3]+e[3],16)/255,2):1}:e.length===6||e.length===8?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:e.length===8?i(parseInt(e.substr(6,2),16)/255,2):1}:null:null},`hex`],[function(e){var t=_.exec(e)||ne.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:s({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):null},`rgb`],[function(e){var t=g.exec(e)||te.exec(e);if(!t)return null;var r,i;return m(ee({h:(r=t[1],i=t[2],i===void 0&&(i=`deg`),Number(r)*(n[i]||1)),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)}))},`hsl`]],object:[[function(e){var t=e.r,n=e.g,i=e.b,a=e.a,o=a===void 0?1:a;return r(t)&&r(n)&&r(i)?s({r:Number(t),g:Number(n),b:Number(i),a:Number(o)}):null},`rgb`],[function(e){var t=e.h,n=e.s,i=e.l,a=e.a,o=a===void 0?1:a;return!r(t)||!r(n)||!r(i)?null:m(ee({h:Number(t),s:Number(n),l:Number(i),a:Number(o)}))},`hsl`],[function(e){var t=e.h,n=e.s,i=e.v,s=e.a,c=s===void 0?1:s;return!r(t)||!r(n)||!r(i)?null:f(function(e){return{h:o(e.h),s:a(e.s,0,100),v:a(e.v,0,100),a:a(e.a)}}({h:Number(t),s:Number(n),v:Number(i),a:Number(c)}))},`hsv`]]},y=function(e,t){for(var n=0;n<t.length;n++){var r=t[n][0](e);if(r)return[r,t[n][1]]}return[null,void 0]},re=function(e){return typeof e==`string`?y(e.trim(),v.string):typeof e==`object`&&e?y(e,v.object):[null,void 0]},b=function(e,t){var n=h(e);return{h:n.h,s:a(n.s+100*t,0,100),l:n.l,a:n.a}},x=function(e){return(299*e.r+587*e.g+114*e.b)/1e3/255},ie=function(e,t){var n=h(e);return{h:n.h,s:n.s,l:a(n.l+100*t,0,100),a:n.a}},S=function(){function e(e){this.parsed=re(e)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return e.prototype.isValid=function(){return this.parsed!==null},e.prototype.brightness=function(){return i(x(this.rgba),2)},e.prototype.isDark=function(){return x(this.rgba)<.5},e.prototype.isLight=function(){return x(this.rgba)>=.5},e.prototype.toHex=function(){return e=c(this.rgba),t=e.r,n=e.g,r=e.b,o=(a=e.a)<1?u(i(255*a)):``,`#`+u(t)+u(n)+u(r)+o;var e,t,n,r,a,o},e.prototype.toRgb=function(){return c(this.rgba)},e.prototype.toRgbString=function(){return e=c(this.rgba),t=e.r,n=e.g,r=e.b,(i=e.a)<1?`rgba(`+t+`, `+n+`, `+r+`, `+i+`)`:`rgb(`+t+`, `+n+`, `+r+`)`;var e,t,n,r,i},e.prototype.toHsl=function(){return p(h(this.rgba))},e.prototype.toHslString=function(){return e=p(h(this.rgba)),t=e.h,n=e.s,r=e.l,(i=e.a)<1?`hsla(`+t+`, `+n+`%, `+r+`%, `+i+`)`:`hsl(`+t+`, `+n+`%, `+r+`%)`;var e,t,n,r,i},e.prototype.toHsv=function(){return e=d(this.rgba),{h:i(e.h),s:i(e.s),v:i(e.v),a:i(e.a,3)};var e},e.prototype.invert=function(){return C({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},e.prototype.saturate=function(e){return e===void 0&&(e=.1),C(b(this.rgba,e))},e.prototype.desaturate=function(e){return e===void 0&&(e=.1),C(b(this.rgba,-e))},e.prototype.grayscale=function(){return C(b(this.rgba,-1))},e.prototype.lighten=function(e){return e===void 0&&(e=.1),C(ie(this.rgba,e))},e.prototype.darken=function(e){return e===void 0&&(e=.1),C(ie(this.rgba,-e))},e.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},e.prototype.alpha=function(e){return typeof e==`number`?C({r:(t=this.rgba).r,g:t.g,b:t.b,a:e}):i(this.rgba.a,3);var t},e.prototype.hue=function(e){var t=h(this.rgba);return typeof e==`number`?C({h:e,s:t.s,l:t.l,a:t.a}):i(t.h)},e.prototype.isEqual=function(e){return this.toHex()===C(e).toHex()},e}(),C=function(e){return e instanceof S?e:new S(e)},ae=class{eventListeners=new Map;addEventListener(e,t,n){let r={value:t,options:n},i=this.eventListeners.get(e);return i?Array.isArray(i)?i.push(r):this.eventListeners.set(e,[i,r]):this.eventListeners.set(e,r),this}removeEventListener(e,t,n){if(!t)return this.eventListeners.delete(e),this;let r=this.eventListeners.get(e);if(!r)return this;if(Array.isArray(r)){let i=[];for(let e=0,a=r.length;e<a;e++){let a=r[e];(a.value!==t||typeof n==`object`&&n?.once&&(typeof a.options==`boolean`||!a.options?.once))&&i.push(a)}i.length?this.eventListeners.set(e,i.length===1?i[0]:i):this.eventListeners.delete(e)}else r.value===t&&(typeof n==`boolean`||!n?.once||typeof r.options==`boolean`||r.options?.once)&&this.eventListeners.delete(e);return this}removeAllListeners(){return this.eventListeners.clear(),this}hasEventListener(e){return this.eventListeners.has(e)}dispatchEvent(e,...t){let n=this.eventListeners.get(e);if(n){if(Array.isArray(n))for(let r=n.length,i=0;i<r;i++){let r=n[i];typeof r.options==`object`&&r.options?.once&&this.off(e,r.value,r.options),r.value.apply(this,t)}else typeof n.options==`object`&&n.options?.once&&this.off(e,n.value,n.options),n.value.apply(this,t);return!0}else return!1}on(e,t,n){return this.addEventListener(e,t,n)}once(e,t){return this.addEventListener(e,t,{once:!0})}off(e,t,n){return this.removeEventListener(e,t,n)}emit(e,...t){this.dispatchEvent(e,...t)}};function w(e){return e==null||e===``||e===`none`}function T(e,t=0,n=10**t){return Math.round(n*e)/n+0}function E(e,t){if(typeof e==`number`)return Number.isFinite(e)?e:t;if(typeof e==`string`){let n=Number.parseFloat(e);return Number.isFinite(n)?n:t}return t}function D(e,t=!1){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return t?e.map(e=>D(e,t)):e;let n={};for(let r in e){let i=e[r];i!=null&&(t?n[r]=D(i,t):n[r]=i)}return n}function O(e,t){let n={};return t.forEach(t=>{t in e&&(n[t]=e[t])}),n}function k(e,t){if(e===t)return!0;if(e&&t&&typeof e==`object`&&typeof t==`object`){let n=Array.from(new Set([...Object.keys(e),...Object.keys(t)]));return!n.length||n.every(n=>e[n]===t[n])}return!1}function A(e,t,n){let r=t.length-1;if(r<0)return e===void 0?n:e;for(let i=0;i<r;i++){if(e==null)return n;e=e[t[i]]}return e==null||e[t[r]]===void 0?n:e[t[r]]}function j(e,t,n){let r=t.length-1;for(let n=0;n<r;n++)typeof e[t[n]]!=`object`&&(e[t[n]]={}),e=e[t[n]];e[t[r]]=n}function oe(e,t,n){return e==null||!t||typeof t!=`string`?n:e[t]===void 0?(t=t.replace(/\[(\w+)\]/g,`.$1`),t=t.replace(/^\./,``),A(e,t.split(`.`),n)):e[t]}function se(e,t,n){if(!(typeof e!=`object`||!t))return t=t.replace(/\[(\w+)\]/g,`.$1`),t=t.replace(/^\./,``),j(e,t.split(`.`),n)}var ce=class{_eventListeners={};on(e,t){let n=this._eventListeners[e];n===void 0&&(n=[],this._eventListeners[e]=n);let r=n.indexOf(t);return r>-1&&n.splice(r,1),n.push(t),this}once(e,t){let n=(...r)=>{this.off(e,n),t.apply(this,r)};return this.on(e,n),this}off(e,t){let n=this._eventListeners[e];if(n!==void 0){let e=n.indexOf(t);e>-1&&n.splice(e,1)}return this}emit(e,...t){let n=this._eventListeners[e];if(n!==void 0){let e=n.length;if(e>0)for(let r=0;r<e;r++)n[r].apply(this,t)}return this}removeAllListeners(){return this._eventListeners={},this}hasEventListener(e){return!!this._eventListeners[e]}destroy(){this.removeAllListeners()}},le=class{_map=new WeakMap;_toRaw(e){if(e&&typeof e==`object`){let t=e.__v_raw;t&&(e=this._toRaw(t))}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,t){return this._map.set(this._toRaw(e),this._toRaw(t)),this}},ue=Symbol.for(`declarations`),M=Symbol.for(`inited`);function N(e){let t;if(Object.hasOwn(e,ue))t=e[ue];else{let n=Object.getPrototypeOf(e);t={...n?N(n):{}},e[ue]=t}return t}function P(e,t,n,r){let{alias:i,internalKey:a}=r,o=e[t];i?se(e,i,n):e[a]=n,e.onUpdateProperty?.(t,n??I(e,t,r),o)}function F(e,t,n){let{alias:r,internalKey:i}=n,a;return a=r?oe(e,r):e[i],a??=I(e,t,n),a}function I(e,t,n){let{default:r,fallback:i}=n,a;if(r!==void 0&&!e[M]?.[t]){e[M]||(e[M]={}),e[M][t]=!0;let n=typeof r==`function`?r():r;n!==void 0&&(e[t]=n,a=n)}return a===void 0&&i!==void 0&&(a=typeof i==`function`?i():i),a}function L(e,t){function n(){return this.getProperty?this.getProperty(e):F(this,e,t)}function r(n){this.setProperty?this.setProperty(e,n):P(this,e,n,t)}return{get:n,set:r}}function de(e,t,n={}){let r={...n,internalKey:Symbol.for(t)},i=N(e);i[t]=r;let{get:a,set:o}=L(t,r);Object.defineProperty(e.prototype,t,{get(){return a.call(this)},set(e){o.call(this,e)},configurable:!0,enumerable:!0})}function fe(e){return function(t,n){if(typeof n!=`string`)throw TypeError(`Failed to @property decorator, prop name cannot be a symbol`);de(t.constructor,n,e)}}function pe(e={}){return function(t,n){let r=n.name;if(typeof r!=`string`)throw TypeError(`Failed to @property decorator, prop name cannot be a symbol`);let i={...e,internalKey:Symbol.for(r)},a=L(r,i);return{init(e){let t=N(this.constructor);return t[r]=i,a.set.call(this,e),e},get(){return a.get.call(this)},set(e){a.set.call(this,e)}}}}var me=class extends ce{_propertyAccessor;_properties={};_updatedProperties={};_changedProperties=new Set;_updatingPromise=Promise.resolve();_updating=!1;constructor(e){super(),this.setProperties(e)}isDirty(e){return e?!!this._updatedProperties[e]:Object.keys(this._updatedProperties).length>0}offsetGetProperty(e){return this._properties[e]}offsetSetProperty(e,t){this._properties[e]=t}offsetGetProperties(e){let t=this._properties,n=Object.keys(t),r={};for(let i,a,o=0;o<n.length;o++)i=n[o],a=t[i],a!==void 0&&(!e||e.includes(i))&&(a&&typeof a==`object`?`toJSON`in a?r[i]=a.toJSON():Array.isArray(a)?r[i]=[...a]:r[i]={...a}:r[i]=a);return r}offsetSetProperties(e){if(e&&typeof e==`object`){let t=Object.keys(e);for(let n,r=0;r<t.length;r++)n=t[r],this.offsetSetProperty(n,e[n])}return this}getProperty(e){let t=this.getPropertyDeclaration(e);if(t){if(t.internal||t.alias)return F(this,e,t);{let n=this._propertyAccessor,r;return r=n&&n.getProperty?n.getProperty(e):this.offsetGetProperty(e),r??I(this,e,t)}}}setProperty(e,t){let n=this.getPropertyDeclaration(e);if(n)if(n.internal||n.alias)P(this,e,t,n);else{let r=this.getProperty(e);this._propertyAccessor?.setProperty?.(e,t),this.offsetSetProperty(e,t),this.onUpdateProperty?.(e,t??I(this,e,n),r)}}getProperties(e){let t={},n=this.getPropertyDeclarations(),r=Object.keys(n);for(let i=0,a=r.length;i<a;i++){let a=r[i],o=n[a];o.internal||o.alias||(!e||e.includes(a))&&(t[a]=this.getProperty(a))}return t}setProperties(e){if(e&&typeof e==`object`)for(let t in e)this.setProperty(t,e[t]);return this}resetProperties(){let e=this.getPropertyDeclarations(),t=Object.keys(e);for(let n=0,r=t.length;n<r;n++){let r=t[n],i=e[r];this.setProperty(r,typeof i.default==`function`?i.default():i.default)}return this}getPropertyDeclarations(){return N(this.constructor)}getPropertyDeclaration(e){return this.getPropertyDeclarations()[e]}setPropertyAccessor(e){let t=this.getPropertyDeclarations(),n=[];if(e&&e.getProperty&&e.setProperty){let r=Object.keys(t);for(let i=0,a=r.length;i<a;i++){let a=r[i],o=t[a];if(o.internal||o.alias)continue;let s=this.offsetGetProperty(a),c=e.getProperty(a);c!==void 0&&!Object.is(s,c)&&(this.offsetSetProperty(a,c),n.push({key:a,newValue:c,oldValue:s}))}}this._propertyAccessor=e;for(let e=0,t=n.length;e<t;e++){let{key:t,newValue:r,oldValue:i}=n[e];this.requestUpdate(t,r,i)}return 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(),!1)}onUpdate(){this._update(this._updatedProperties),this._updatedProperties={}}onUpdateProperty(e,t,n){Object.is(t,n)||this.requestUpdate(e,t,n)}requestUpdate(e,t,n){e!==void 0&&(this._updatedProperties[e]=n,this._changedProperties.add(e),this._updateProperty(e,t,n),this.emit(`updateProperty`,e,t,n)),this._updating||(this._updatingPromise=this._enqueueUpdate())}_update(e){}_updateProperty(e,t,n){}toJSON(){return this.offsetGetProperties()}clone(){return new this.constructor(this.toJSON())}destroy(){this.emit(`destroy`),super.destroy()}};function R(e){let t;return t=typeof e==`number`?{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:(e&255)/255}:e,C(t)}function he(e){return{r:T(e.r),g:T(e.g),b:T(e.b),a:T(e.a,3)}}function z(e){let t=e.toString(16);return t.length<2?`0${t}`:t}var B=`#000000FF`;function V(e){return R(e).isValid()}function H(e,t=!1){let n=R(e);if(!n.isValid()){if(typeof e==`string`)return e;let n=`Failed to normalizeColor ${e}`;if(t)throw Error(n);return console.warn(n),B}let{r,g:i,b:a,a:o}=he(n.rgba);return`#${z(r)}${z(i)}${z(a)}${z(T(o*255))}`}var U=U||{};U.parse=(function(){let e={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},t=``;function n(e){let n=Error(`${t}: ${e}`);throw n.source=t,n}function r(){let e=i();return t.length>0&&n(`Invalid input not EOF`),e}function i(){return _(a)}function a(){return o(`linear-gradient`,e.linearGradient,c)||o(`repeating-linear-gradient`,e.repeatingLinearGradient,c)||o(`radial-gradient`,e.radialGradient,d)||o(`repeating-radial-gradient`,e.repeatingRadialGradient,d)}function o(t,r,i){return s(r,r=>{let a=i();return a&&(A(e.comma)||n(`Missing comma before color stops`)),{type:t,orientation:a,colorStops:_(ne)}})}function s(t,r){let i=A(t);if(i){A(e.startCall)||n(`Missing (`);let t=r(i);return A(e.endCall)||n(`Missing )`),t}}function c(){let t=l();if(t)return t;let n=k(`position-keyword`,e.positionKeywords,1);return n?{type:`directional`,value:n.value}:u()}function l(){return k(`directional`,e.sideOrCorner,1)}function u(){return k(`angular`,e.angleValue,1)||k(`angular`,e.radianValue,1)}function d(){let n,r=f(),i;return r&&(n=[],n.push(r),i=t,A(e.comma)&&(r=f(),r?n.push(r):t=i)),n}function f(){let e=ee()||p();if(e)e.at=h();else{let t=m();if(t){e=t;let n=h();n&&(e.at=n)}else{let t=h();if(t)e={type:`default-radial`,at:t};else{let t=g();t&&(e={type:`default-radial`,at:t})}}}return e}function ee(){let e=k(`shape`,/^(circle)/i,0);return e&&(e.style=O()||m()),e}function p(){let e=k(`shape`,/^(ellipse)/i,0);return e&&(e.style=g()||T()||m()),e}function m(){return k(`extent-keyword`,e.extentKeywords,1)}function h(){if(k(`position`,/^at/,0)){let e=g();return e||n(`Missing positioning value`),e}}function g(){let e=te();if(e.x||e.y)return{type:`position`,value:e}}function te(){return{x:T(),y:T()}}function _(t){let r=t(),i=[];if(r)for(i.push(r);A(e.comma);)r=t(),r?i.push(r):n(`One extra comma`);return i}function ne(){let e=v();return e||n(`Expected color definition`),e.length=T(),e}function v(){return re()||C()||S()||x()||b()||ie()||y()}function y(){return k(`literal`,e.literalColor,0)}function re(){return k(`hex`,e.hexColor,1)}function b(){return s(e.rgbColor,()=>({type:`rgb`,value:_(w)}))}function x(){return s(e.rgbaColor,()=>({type:`rgba`,value:_(w)}))}function ie(){return s(e.varColor,()=>({type:`var`,value:ae()}))}function S(){return s(e.hslColor,()=>{A(e.percentageValue)&&n(`HSL hue value must be a number in degrees (0-360) or normalized (-360 to 360), not a percentage`);let t=w();A(e.comma);let r=A(e.percentageValue),i=r?r[1]:null;A(e.comma),r=A(e.percentageValue);let a=r?r[1]:null;return(!i||!a)&&n(`Expected percentage value for saturation and lightness in HSL`),{type:`hsl`,value:[t,i,a]}})}function C(){return s(e.hslaColor,()=>{let t=w();A(e.comma);let r=A(e.percentageValue),i=r?r[1]:null;A(e.comma),r=A(e.percentageValue);let a=r?r[1]:null;A(e.comma);let o=w();return(!i||!a)&&n(`Expected percentage value for saturation and lightness in HSLA`),{type:`hsla`,value:[t,i,a,o]}})}function ae(){return A(e.variableName)[1]}function w(){return A(e.number)[1]}function T(){return k(`%`,e.percentageValue,1)||E()||D()||O()}function E(){return k(`position-keyword`,e.positionKeywords,1)}function D(){return s(e.calcValue,()=>{let e=1,r=0;for(;e>0&&r<t.length;){let n=t.charAt(r);n===`(`?e++:n===`)`&&e--,r++}e>0&&n(`Missing closing parenthesis in calc() expression`);let i=t.substring(0,r-1);return j(r-1),{type:`calc`,value:i}})}function O(){return k(`px`,e.pixelValue,1)||k(`em`,e.emValue,1)}function k(e,t,n){let r=A(t);if(r)return{type:e,value:r[n]}}function A(e){let n,r;return r=/^\s+/.exec(t),r&&j(r[0].length),n=e.exec(t),n&&j(n[0].length),n}function j(e){t=t.substr(e)}return function(e){return t=e.toString().trim(),t.endsWith(`;`)&&(t=t.slice(0,-1)),r()}})();var ge=U.parse.bind(U),W=W||{};W.stringify=(function(){var e={"visit_linear-gradient":function(t){return e.visit_gradient(t)},"visit_repeating-linear-gradient":function(t){return e.visit_gradient(t)},"visit_radial-gradient":function(t){return e.visit_gradient(t)},"visit_repeating-radial-gradient":function(t){return e.visit_gradient(t)},visit_gradient:function(t){var n=e.visit(t.orientation);return n&&(n+=`, `),t.type+`(`+n+e.visit(t.colorStops)+`)`},visit_shape:function(t){var n=t.value,r=e.visit(t.at),i=e.visit(t.style);return i&&(n+=` `+i),r&&(n+=` at `+r),n},"visit_default-radial":function(t){var n=``,r=e.visit(t.at);return r&&(n+=r),n},"visit_extent-keyword":function(t){var n=t.value,r=e.visit(t.at);return r&&(n+=` at `+r),n},"visit_position-keyword":function(e){return e.value},visit_position:function(t){return e.visit(t.value.x)+` `+e.visit(t.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(t){return e.visit_color(t.value,t)},visit_hex:function(t){return e.visit_color(`#`+t.value,t)},visit_rgb:function(t){return e.visit_color(`rgb(`+t.value.join(`, `)+`)`,t)},visit_rgba:function(t){return e.visit_color(`rgba(`+t.value.join(`, `)+`)`,t)},visit_hsl:function(t){return e.visit_color(`hsl(`+t.value[0]+`, `+t.value[1]+`%, `+t.value[2]+`%)`,t)},visit_hsla:function(t){return e.visit_color(`hsla(`+t.value[0]+`, `+t.value[1]+`%, `+t.value[2]+`%, `+t.value[3]+`)`,t)},visit_var:function(t){return e.visit_color(`var(`+t.value+`)`,t)},visit_color:function(t,n){var r=t,i=e.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(t){var n=``,r=t.length;return t.forEach(function(t,i){n+=e.visit(t),i<r-1&&(n+=`, `)}),n},visit_object:function(t){return t.width&&t.height?e.visit(t.width)+` `+e.visit(t.height):``},visit:function(t){if(!t)return``;if(t instanceof Array)return e.visit_array(t);if(typeof t==`object`&&!t.type)return e.visit_object(t);if(t.type){var n=e[`visit_`+t.type];if(n)return n(t);throw Error(`Missing visitor visit_`+t.type)}else throw Error(`Invalid node.`)}};return function(t){return e.visit(t)}})();var _e=W.stringify.bind(W);function ve(e){let t=e.length-1;return e.map((e,n)=>{let r=e.value,i=T(n/t,3),a=`#00000000`;switch(e.type){case`rgb`:a=H({r:Number(r[0]??0),g:Number(r[1]??0),b:Number(r[2]??0)});break;case`rgba`:a=H({r:Number(r[0]??0),g:Number(r[1]??0),b:Number(r[2]??0),a:Number(r[3]??0)});break;case`literal`:a=H(e.value);break;case`hex`:a=H(`#${e.value}`);break}switch(e.length?.type){case`%`:i=Number(e.length.value)/100;break;case`px`:break;case`em`:break}return{offset:i,color:a}})}function ye(e){let t=0;switch(e.orientation?.type){case`angular`:t=Number(e.orientation.value);break;case`directional`:break}return{type:`linear-gradient`,angle:t,stops:ve(e.colorStops)}}function be(e){return e.orientation?.map(e=>{switch(e?.type){default:return null}}),{type:`radial-gradient`,stops:ve(e.colorStops)}}function G(e){return e.startsWith(`linear-gradient(`)||e.startsWith(`radial-gradient(`)}function xe(e){return ge(e).map(e=>{switch(e?.type){case`linear-gradient`:return ye(e);case`repeating-linear-gradient`:return{...ye(e),repeat:!0};case`radial-gradient`:return be(e);case`repeating-radial-gradient`:return{...be(e),repeat:!0};default:return}}).filter(Boolean)}var K=[`color`];function Se(e){let t;return t=typeof e==`string`?{color:e}:{...e},t.color&&=H(t.color),O(t,K)}var Ce=[`linearGradient`,`radialGradient`,`rotateWithShape`];function we(e){let t;if(t=typeof e==`string`?{image:e}:{...e},t.image){let{type:e,...n}=xe(t.image)[0]??{};switch(e){case`radial-gradient`:return{radialGradient:n};case`linear-gradient`:return{linearGradient:n}}}return O(t,Ce)}var Te=[`image`,`cropRect`,`stretchRect`,`tile`,`dpi`,`opacity`,`rotateWithShape`];function Ee(e){let t;return t=typeof e==`string`?{image:e}:{...e},O(t,Te)}var De=[`preset`,`foregroundColor`,`backgroundColor`];function Oe(e){let t;return t=typeof e==`string`?{preset:e}:{...e},w(t.foregroundColor)?delete t.foregroundColor:t.foregroundColor=H(t.foregroundColor),w(t.backgroundColor)?delete t.backgroundColor:t.backgroundColor=H(t.backgroundColor),O(t,De)}function ke(e){return!w(e.color)}function Ae(e){return typeof e==`string`?V(e):ke(e)}function je(e){return!w(e.image)&&G(e.image)||!!e.linearGradient||!!e.radialGradient}function Me(e){return typeof e==`string`?G(e):je(e)}function Ne(e){return!w(e.image)&&!G(e.image)}function Pe(e){return typeof e==`string`?!V(e)&&!G(e):Ne(e)}function Fe(e){return!w(e.preset)}function Ie(e){return typeof e==`string`?!1:Fe(e)}function q(e){let t={enabled:e&&typeof e==`object`?e.enabled??!0:!0};return Ae(e)&&Object.assign(t,Se(e)),Me(e)&&Object.assign(t,we(e)),Pe(e)&&Object.assign(t,Ee(e)),Ie(e)&&Object.assign(t,Oe(e)),O(D(t),Array.from(new Set([`enabled`,...K,...Te,...Ce,...De])))}function Le(e){return typeof e==`string`?{...q(e)}:{...q(e),...O(e,[`fillWithShape`])}}function Re(){return{backgroundImage:`none`,backgroundSize:`auto, auto`,backgroundColor:`none`,backgroundColormap:`none`}}function ze(e){return D({start:e.start,end:e.end,mode:e.mode??`straight`})}function J(e){return typeof e==`string`?{...q(e)}:{...q(e),...O(e,[`width`,`style`,`lineCap`,`lineJoin`,`headEnd`,`tailEnd`])}}function Be(){return{outlineWidth:0,outlineOffset:0,outlineColor:`none`,outlineStyle:`none`}}function Ve(e){return typeof e==`string`?{enabled:!0,color:H(e)}:{...e,enabled:e.enabled??!0,color:w(e.color)?B:H(e.color)}}function He(){return{boxShadow:`none`}}var Ue=[`fill`,`outline`,`shadow`,`transform`,`transformOrigin`];function We(e){let t=O(e,Ue),{rotate:n,scaleX:r,scaleY:i,skewX:a,skewY:o,translateX:s,translateY:c}=e,l=[];return(s||c)&&l.push(`translate(${s||0}, ${c||0})`),n&&l.push(`rotate(${n}deg)`),(r||i)&&l.push(`scale(${r??1}, ${i??1})`),a&&l.push(`skewX(${a}deg)`),o&&l.push(`skewY(${o}deg)`),l.length>0&&(t.transform=l.join(` `)),(e.textStrokeWidth||e.textStrokeColor)&&(t.outline={color:e.textStrokeColor,width:e.textStrokeWidth}),e.color&&(t.fill={color:e.color}),(e.shadowOffsetX||e.shadowOffsetY||e.shadowBlur||e.shadowColor)&&(t.shadow={offsetX:e.shadowOffsetX,offsetY:e.shadowOffsetY,blur:e.shadowBlur,color:e.shadowColor}),t}function Y(e){let t=We(e);return D({fill:w(t.fill)?void 0:q(t.fill),outline:w(t.outline)?void 0:J(t.outline),shadow:w(t.shadow)?void 0:Ve(t.shadow),transform:w(t.transform)?void 0:t.transform,transformOrigin:t.transformOrigin})}function Ge(e){return typeof e==`string`?{...q(e)}:{...q(e),...O(e,[`fillWithShape`])}}var Ke=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`,qe=(e=21)=>{let t=``,n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=Ke[n[e]&63];return t},Je=()=>qe(10),Ye=Je;function Xe(e){return typeof e==`string`?e.startsWith(`<svg`)?{enabled:!0,svg:e}:{enabled:!0,paths:[{data:e}]}:Array.isArray(e)?{enabled:!0,paths:e.map(e=>typeof e==`string`?{data:e}:e)}:e}function Ze(){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 Qe(){return{rotate:0,scaleX:1,scaleY:1,skewX:0,skewY:0,translateX:0,translateY:0,transform:`none`,transformOrigin:`center`}}function $e(){return{...Ze(),...Qe(),...He(),...Re(),...Be(),borderRadius:0,borderColor:`none`,borderStyle:`solid`,visibility:`visible`,filter:`none`,opacity:1,pointerEvents:`auto`,maskImage:`none`}}function et(){return{highlight:{},highlightImage:`none`,highlightReferImage:`none`,highlightColormap:`none`,highlightLine:`none`,highlightSize:`cover`,highlightThickness:`100%`}}function tt(){return{listStyle:{},listStyleType:`none`,listStyleImage:`none`,listStyleColormap:`none`,listStyleSize:`cover`,listStylePosition:`outside`}}function nt(){return{...et(),color:`#000000`,verticalAlign:`baseline`,letterSpacing:0,wordSpacing:0,fontSize:14,fontWeight:`normal`,fontFamily:``,fontStyle:`normal`,fontKerning:`normal`,textTransform:`none`,textOrientation:`mixed`,textDecoration:`none`}}function rt(){return{...tt(),writingMode:`horizontal-tb`,textWrap:`wrap`,textAlign:`start`,textIndent:0,lineHeight:1.2}}function it(){return{...rt(),...nt(),textStrokeWidth:0,textStrokeColor:`none`}}var at=[`textIndent`,`lineHeight`,`letterSpacing`,`wordSpacing`,`fontSize`,`textStrokeWidth`,`borderRadius`,`opacity`,`rotate`,`scaleX`,`scaleY`,`skewX`,`skewY`,`translateX`,`translateY`,`borderWidth`,`flex`,`flexGrow`,`flexShrink`];function X(e){let t=D({...e,color:w(e.color)?void 0:H(e.color),backgroundColor:w(e.backgroundColor)?void 0:H(e.backgroundColor),borderColor:w(e.borderColor)?void 0:H(e.borderColor),outlineColor:w(e.outlineColor)?void 0:H(e.outlineColor),shadowColor:w(e.shadowColor)?void 0:H(e.shadowColor),textStrokeColor:w(e.textStrokeColor)?void 0:H(e.textStrokeColor)});for(let e of at)if(e in t){let n=E(t[e]);n===void 0?delete t[e]:t[e]=n}return t}function ot(){return{...$e(),...it()}}var Z=/\r\n|\n\r|\n|\r/,st=RegExp(`${Z.source}|<br\\/>`,`g`),ct=RegExp(`^(${Z.source})$`),lt=`
2
+ `;function ut(e){return Z.test(e)}function dt(e){return ct.test(e)}function ft(e){return e.replace(st,lt)}function Q(e){let t=[];function n(){return t[t.length-1]}function r(e,n,r){let i=e?X(e):{},a=n?q(n):void 0,o=r?J(r):void 0,s=D({...i,fill:a,outline:o,fragments:[]});return t[t.length-1]?.fragments.length===0?t[t.length-1]=s:t.push(s),s}function i(e=``,t,i,a){let o=t?X(t):{},s=i?q(i):void 0,c=a?J(a):void 0;Array.from(e).forEach(e=>{if(dt(e)){let{fragments:e,fill:t,outline:i,...a}=n()||r();e.length||e.push(D({...o,fill:s,outline:c,content:lt})),r(a,t,i)}else{let t=n()||r(),i=t.fragments[t.fragments.length-1];if(i){let{content:t,fill:n,outline:r,...a}=i;if(k(s,n)&&k(c,r)&&k(o,a)){i.content=`${t}${e}`;return}}t.fragments.push(D({...o,fill:s,outline:c,content:e}))}})}(Array.isArray(e)?e:[e]).forEach(e=>{if(typeof e==`string`)r(),i(e);else if(mt(e)){let{content:t,fill:n,outline:a,...o}=e;r(o,n,a),i(t)}else if(pt(e)){let{fragments:t,fill:n,outline:a,...o}=e;r(o,n,a),t.forEach(e=>{let{content:t,fill:n,outline:r,...a}=e;i(t,a,n,r)})}else Array.isArray(e)?(r(),e.forEach(e=>{if(typeof e==`string`)i(e);else if(mt(e)){let{content:t,fill:n,outline:r,...a}=e;i(t,a,n,r)}})):console.warn(`Failed to parse text content`,e)});let a=n();return a&&!a.fragments.length&&a.fragments.push({content:``}),t}function pt(e){return e&&typeof e==`object`&&`fragments`in e&&Array.isArray(e.fragments)}function mt(e){return e&&typeof e==`object`&&`content`in e&&typeof e.content==`string`}function ht(e){return D({type:e.type,intensities:e.intensities,maxFontSize:e.maxFontSize??100})}function gt(e){return typeof e==`string`||Array.isArray(e)?{enabled:!0,content:Q(e)}:D({enabled:e.enabled??!0,content:Q(e.content??``),style:e.style?X(e.style):void 0,deformation:e.deformation?ht(e.deformation):void 0,measureDom:e.measureDom,fonts:e.fonts,...Y(e),effects:e.effects?e.effects.map(e=>Y(e)):void 0})}function _t(e){return Q(e).map(e=>{let t=ft(e.fragments.flatMap(e=>e.content).join(``));return dt(t)?``:t}).join(lt)}function vt(e){return typeof e==`string`?{src:e}:e}function $(e){return D({id:e.id??Ye(),style:w(e.style)?void 0:X(e.style),text:w(e.text)?void 0:gt(e.text),background:w(e.background)?void 0:Le(e.background),shape:w(e.shape)?void 0:Xe(e.shape),foreground:w(e.foreground)?void 0:Ge(e.foreground),video:w(e.video)?void 0:vt(e.video),audio:w(e.audio)?void 0:t(e.audio),connection:w(e.connection)?void 0:ze(e.connection),...Y(e),children:e.children?.map(e=>$(e))})}function yt(e){return $(e)}function bt(e){let t={};for(let n in e.children){let r=$(e.children[n]);delete r.children,t[n]=r}return{...e,children:t}}function xt(e){let{children:t,...n}=e;function r(e){let{parentId:t,childrenIds:n,...r}=e;return{...r,children:[]}}let i={},a=[],o={...n,children:a};function s(e){if(!t[e]||i[e])return;let n=t[e],o=r(n);i[e]=o;let c=n.parentId;if(c){s(c);let n=t[c],r=i[c];if(!r)return;n?.childrenIds&&r?.children&&(r.children[n.childrenIds.indexOf(e)]=o)}else a.push(o)}for(let e in t)s(e);return o}e.EventEmitter=ae,e.Observable=ce,e.RawWeakMap=le,e.Reactivable=me,e.clearUndef=D,e.colorFillFields=K,e.defaultColor=B,e.defineProperty=de,e.effectFields=Ue,e.flatDocumentToDocument=xt,e.getDeclarations=N,e.getDefaultBackgroundStyle=Re,e.getDefaultElementStyle=$e,e.getDefaultHighlightStyle=et,e.getDefaultLayoutStyle=Ze,e.getDefaultListStyleStyle=tt,e.getDefaultOutlineStyle=Be,e.getDefaultShadowStyle=He,e.getDefaultStyle=ot,e.getDefaultTextInlineStyle=nt,e.getDefaultTextLineStyle=rt,e.getDefaultTextStyle=it,e.getDefaultTransformStyle=Qe,e.getNestedValue=A,e.getObjectValueByPath=oe,e.getPropertyDescriptor=L,e.gradientFillFields=Ce,e.hasCRLF=ut,e.idGenerator=Ye,e.imageFillFiedls=Te,e.isCRLF=dt,e.isColor=V,e.isColorFill=Ae,e.isColorFillObject=ke,e.isEqualObject=k,e.isFragmentObject=mt,e.isGradient=G,e.isGradientFill=Me,e.isGradientFillObject=je,e.isImageFill=Pe,e.isImageFillObject=Ne,e.isNone=w,e.isParagraphObject=pt,e.isPresetFill=Ie,e.isPresetFillObject=Fe,e.nanoid=Je,e.normalizeAudio=t,e.normalizeBackground=Le,e.normalizeCRLF=ft,e.normalizeColor=H,e.normalizeColorFill=Se,e.normalizeConnection=ze,e.normalizeDocument=yt,e.normalizeEffect=Y,e.normalizeElement=$,e.normalizeFill=q,e.normalizeFlatDocument=bt,e.normalizeForeground=Ge,e.normalizeGradient=xe,e.normalizeGradientFill=we,e.normalizeImageFill=Ee,e.normalizeNumber=E,e.normalizeOutline=J,e.normalizePresetFill=Oe,e.normalizeShadow=Ve,e.normalizeShape=Xe,e.normalizeStyle=X,e.normalizeText=gt,e.normalizeTextContent=Q,e.normalizeTextDeformation=ht,e.normalizeVideo=vt,e.parseColor=R,e.parseGradient=ge,e.pick=O,e.presetFillFiedls=De,e.property=fe,e.property2=pe,e.propertyOffsetFallback=I,e.propertyOffsetGet=F,e.propertyOffsetSet=P,e.round=T,e.setNestedValue=j,e.setObjectValueByPath=se,e.stringifyGradient=_e,e.textContentToString=_t});
package/dist/index.mjs CHANGED
@@ -101,6 +101,16 @@ function isNone(value) {
101
101
  function round(number, digits = 0, base = 10 ** digits) {
102
102
  return Math.round(base * number) / base + 0;
103
103
  }
104
+ function normalizeNumber(value, fallback) {
105
+ if (typeof value === "number") {
106
+ return Number.isFinite(value) ? value : fallback;
107
+ }
108
+ if (typeof value === "string") {
109
+ const parsed = Number.parseFloat(value);
110
+ return Number.isFinite(parsed) ? parsed : fallback;
111
+ }
112
+ return fallback;
113
+ }
104
114
  function clearUndef(obj, deep = false) {
105
115
  if (typeof obj !== "object" || !obj) {
106
116
  return obj;
@@ -1434,7 +1444,8 @@ function getDefaultBackgroundStyle() {
1434
1444
  function normalizeConnection(connection) {
1435
1445
  return clearUndef({
1436
1446
  start: connection.start,
1437
- end: connection.end
1447
+ end: connection.end,
1448
+ mode: connection.mode ?? "straight"
1438
1449
  });
1439
1450
  }
1440
1451
 
@@ -1733,8 +1744,35 @@ function getDefaultTextStyle() {
1733
1744
  };
1734
1745
  }
1735
1746
 
1747
+ const NUMERIC_STYLE_KEYS = [
1748
+ // textLineStyle
1749
+ "textIndent",
1750
+ "lineHeight",
1751
+ // textInlineStyle
1752
+ "letterSpacing",
1753
+ "wordSpacing",
1754
+ "fontSize",
1755
+ // textStyle
1756
+ "textStrokeWidth",
1757
+ // elementStyle
1758
+ "borderRadius",
1759
+ "opacity",
1760
+ // transformStyle
1761
+ "rotate",
1762
+ "scaleX",
1763
+ "scaleY",
1764
+ "skewX",
1765
+ "skewY",
1766
+ "translateX",
1767
+ "translateY",
1768
+ // layoutStyle
1769
+ "borderWidth",
1770
+ "flex",
1771
+ "flexGrow",
1772
+ "flexShrink"
1773
+ ];
1736
1774
  function normalizeStyle(style) {
1737
- return clearUndef({
1775
+ const normalized = clearUndef({
1738
1776
  ...style,
1739
1777
  color: isNone(style.color) ? void 0 : normalizeColor(style.color),
1740
1778
  backgroundColor: isNone(style.backgroundColor) ? void 0 : normalizeColor(style.backgroundColor),
@@ -1743,6 +1781,17 @@ function normalizeStyle(style) {
1743
1781
  shadowColor: isNone(style.shadowColor) ? void 0 : normalizeColor(style.shadowColor),
1744
1782
  textStrokeColor: isNone(style.textStrokeColor) ? void 0 : normalizeColor(style.textStrokeColor)
1745
1783
  });
1784
+ for (const key of NUMERIC_STYLE_KEYS) {
1785
+ if (key in normalized) {
1786
+ const value = normalizeNumber(normalized[key]);
1787
+ if (value === void 0) {
1788
+ delete normalized[key];
1789
+ } else {
1790
+ normalized[key] = value;
1791
+ }
1792
+ }
1793
+ }
1794
+ return normalized;
1746
1795
  }
1747
1796
  function getDefaultStyle() {
1748
1797
  return {
@@ -1865,6 +1914,13 @@ function isParagraphObject(value) {
1865
1914
  function isFragmentObject(value) {
1866
1915
  return value && typeof value === "object" && "content" in value && typeof value.content === "string";
1867
1916
  }
1917
+ function normalizeTextDeformation(deformation) {
1918
+ return clearUndef({
1919
+ type: deformation.type,
1920
+ intensities: deformation.intensities,
1921
+ maxFontSize: deformation.maxFontSize ?? 100
1922
+ });
1923
+ }
1868
1924
  function normalizeText(value) {
1869
1925
  if (typeof value === "string" || Array.isArray(value)) {
1870
1926
  return {
@@ -1876,6 +1932,7 @@ function normalizeText(value) {
1876
1932
  enabled: value.enabled ?? true,
1877
1933
  content: normalizeTextContent(value.content ?? ""),
1878
1934
  style: value.style ? normalizeStyle(value.style) : void 0,
1935
+ deformation: value.deformation ? normalizeTextDeformation(value.deformation) : void 0,
1879
1936
  measureDom: value.measureDom,
1880
1937
  fonts: value.fonts,
1881
1938
  ...normalizeEffect(value),
@@ -1975,4 +2032,4 @@ function flatDocumentToDocument(flatDoc) {
1975
2032
  return doc;
1976
2033
  }
1977
2034
 
1978
- export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, colorFillFields, defaultColor, defineProperty, effectFields, flatDocumentToDocument, getDeclarations, getDefaultBackgroundStyle, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOutlineStyle, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, gradientFillFields, hasCRLF, idGenerator, imageFillFiedls, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeConnection, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, presetFillFiedls, property, property2, propertyOffsetFallback, propertyOffsetGet, propertyOffsetSet, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
2035
+ export { EventEmitter, Observable, RawWeakMap, Reactivable, clearUndef, colorFillFields, defaultColor, defineProperty, effectFields, flatDocumentToDocument, getDeclarations, getDefaultBackgroundStyle, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOutlineStyle, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, getNestedValue, getObjectValueByPath, getPropertyDescriptor, gradientFillFields, hasCRLF, idGenerator, imageFillFiedls, isCRLF, isColor, isColorFill, isColorFillObject, isEqualObject, isFragmentObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isParagraphObject, isPresetFill, isPresetFillObject, nanoid, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeConnection, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeFlatDocument, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeNumber, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeStyle, normalizeText, normalizeTextContent, normalizeTextDeformation, normalizeVideo, parseColor, parseGradient, pick, presetFillFiedls, property, property2, propertyOffsetFallback, propertyOffsetGet, propertyOffsetSet, round, setNestedValue, setObjectValueByPath, stringifyGradient, textContentToString };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modern-idoc",
3
3
  "type": "module",
4
- "version": "0.11.4",
4
+ "version": "0.11.6",
5
5
  "packageManager": "pnpm@10.18.1",
6
6
  "description": "Intermediate document for modern codec libs",
7
7
  "author": "wxm",