modern-idoc 0.6.11 → 0.6.12

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
@@ -1116,12 +1116,16 @@ function isCRLF(char) {
1116
1116
  function normalizeCRLF(content) {
1117
1117
  return content.replace(NORMALIZE_CRLF_RE, NORMALIZED_CRLF);
1118
1118
  }
1119
+ function isEqualStyle(style1, style2) {
1120
+ const keys = Array.from(/* @__PURE__ */ new Set([...Object.keys(style1), ...Object.keys(style2)]));
1121
+ return !keys.length || keys.every((key) => style1[key] === style2[key]);
1122
+ }
1119
1123
  function normalizeTextContent(value) {
1120
1124
  const paragraphs = [];
1121
1125
  function getParagraph() {
1122
1126
  return paragraphs[paragraphs.length - 1] || addParagraph();
1123
1127
  }
1124
- function addParagraph(style) {
1128
+ function addParagraph(style = {}) {
1125
1129
  let paragraph = paragraphs[paragraphs.length - 1];
1126
1130
  if (paragraph?.fragments.length === 0) {
1127
1131
  paragraph = { ...style, fragments: [] };
@@ -1132,21 +1136,31 @@ function normalizeTextContent(value) {
1132
1136
  }
1133
1137
  return paragraph;
1134
1138
  }
1135
- function addFragment(content, style) {
1139
+ function addFragment(content = "", style = {}) {
1136
1140
  Array.from(content).forEach((c) => {
1137
1141
  if (isCRLF(c)) {
1138
1142
  const { fragments, ...pStyle } = getParagraph();
1139
1143
  if (!fragments.length) {
1140
- fragments.push({ ...style, content: NORMALIZED_CRLF });
1144
+ fragments.push({
1145
+ ...style,
1146
+ content: NORMALIZED_CRLF
1147
+ });
1141
1148
  }
1142
1149
  addParagraph(pStyle);
1143
1150
  } else {
1144
1151
  const paragraph = getParagraph();
1145
- if (paragraph.fragments[paragraph.fragments.length - 1]) {
1146
- paragraph.fragments[paragraph.fragments.length - 1].content += c;
1147
- } else {
1148
- paragraph.fragments.push({ ...style, content: c });
1152
+ const fragment = paragraph.fragments[paragraph.fragments.length - 1];
1153
+ if (fragment) {
1154
+ const { content: content2, ...fStyle } = fragment;
1155
+ if (isEqualStyle(style, fStyle)) {
1156
+ fragment.content = `${content2}${c}`;
1157
+ return;
1158
+ }
1149
1159
  }
1160
+ paragraph.fragments.push({
1161
+ ...style,
1162
+ content: c
1163
+ });
1150
1164
  }
1151
1165
  });
1152
1166
  }
@@ -1155,24 +1169,25 @@ function normalizeTextContent(value) {
1155
1169
  if (typeof p === "string") {
1156
1170
  addFragment(p);
1157
1171
  } else if ("content" in p) {
1158
- addFragment(p.content, normalizeStyle(p));
1172
+ const { content, ...pStyle } = p;
1173
+ addFragment(content, normalizeStyle(pStyle));
1159
1174
  } else if ("fragments" in p) {
1160
1175
  addParagraph(normalizeStyle(p));
1161
1176
  p.fragments.forEach((f) => {
1162
- addFragment(f.content, normalizeStyle(f));
1177
+ const { content, ...fStyle } = f;
1178
+ addFragment(content, normalizeStyle(fStyle));
1163
1179
  });
1164
1180
  } else if (Array.isArray(p)) {
1165
1181
  p.forEach((f) => {
1166
1182
  if (typeof f === "string") {
1167
1183
  addFragment(f);
1168
1184
  } else {
1169
- addFragment(f.content, normalizeStyle(f));
1185
+ const { content, ...fStyle } = f;
1186
+ addFragment(content, normalizeStyle(fStyle));
1170
1187
  }
1171
1188
  });
1172
1189
  } else {
1173
- paragraphs.push({
1174
- fragments: []
1175
- });
1190
+ console.warn("Failed to parse text content", p);
1176
1191
  }
1177
1192
  });
1178
1193
  if (!getParagraph().fragments.length) {
@@ -1257,6 +1272,7 @@ exports.isCRLF = isCRLF;
1257
1272
  exports.isColor = isColor;
1258
1273
  exports.isColorFill = isColorFill;
1259
1274
  exports.isColorFillObject = isColorFillObject;
1275
+ exports.isEqualStyle = isEqualStyle;
1260
1276
  exports.isGradient = isGradient;
1261
1277
  exports.isGradientFill = isGradientFill;
1262
1278
  exports.isGradientFillObject = isGradientFillObject;
package/dist/index.d.cts CHANGED
@@ -680,6 +680,7 @@ type Text = string | TextContent | (NormalizedText & {
680
680
  declare function hasCRLF(content: string): boolean;
681
681
  declare function isCRLF(char: string): boolean;
682
682
  declare function normalizeCRLF(content: string): string;
683
+ declare function isEqualStyle(style1: Record<string, any>, style2: Record<string, any>): boolean;
683
684
  declare function normalizeTextContent(value: TextContent): NormalizedTextContent;
684
685
  declare function normalizeText(value: Text): NormalizedText;
685
686
  declare function textContentToString(value: TextContent): string;
@@ -733,5 +734,5 @@ declare function round(number: number, digits?: number, base?: number): number;
733
734
  declare function clearUndef<T>(obj: T, deep?: boolean): T;
734
735
  declare function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
735
736
 
736
- export { clearUndef, defaultColor, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, hasCRLF, isCRLF, isColor, isColorFill, isColorFillObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isPresetFill, isPresetFillObject, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, round, stringifyGradient, textContentToString };
737
+ export { clearUndef, defaultColor, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, hasCRLF, isCRLF, isColor, isColorFill, isColorFillObject, isEqualStyle, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isPresetFill, isPresetFillObject, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, round, stringifyGradient, textContentToString };
737
738
  export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, EffectObject, Element, EmNode, ExtentKeywordNode, Fill, FillObject, FillRule, FlatTextContent, FlexDirection, FlexWrap, FontKerning, FontStyle, FontWeight, Foreground, ForegroundObject, FragmentObject, GradientFill, GradientFillObject, GradientNode, HeadEnd, Hex8Color, HexNode, HighlightColormap, HighlightImage, HighlightLine, HighlightReferImage, HighlightSize, HighlightThickness, HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, ImageFill, ImageFillCropRect, ImageFillObject, ImageFillStretchRect, ImageFillTile, InnerShadow, InnerShadowObject, Justify, LabColor, LabaColor, LchColor, LchaColor, LineEndSize, LineEndType, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOuterShadow, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedForeground, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedInnerShadow, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOuterShadow, NormalizedOutline, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedSoftEdge, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, OuterShadow, OuterShadowObject, Outline, OutlineObject, OutlineStyle, Overflow, ParagraphObject, PercentNode, PointerEvents, Position, PositionKeywordNode, PositionNode, PresetFill, PresetFillObject, PxNode, RadialGradient, RadialGradientNode, RadialGradientWithType, RepeatingLinearGradientNode, RepeatingRadialGradientNode, RgbColor, RgbNode, RgbaColor, RgbaNode, SVGPathData, Shadow, ShadowObject, Shape, ShapeNode, ShapePath, ShapePathStyle, SoftEdge, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextOrientation, TextTransform, TextWrap, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor };
package/dist/index.d.mts CHANGED
@@ -680,6 +680,7 @@ type Text = string | TextContent | (NormalizedText & {
680
680
  declare function hasCRLF(content: string): boolean;
681
681
  declare function isCRLF(char: string): boolean;
682
682
  declare function normalizeCRLF(content: string): string;
683
+ declare function isEqualStyle(style1: Record<string, any>, style2: Record<string, any>): boolean;
683
684
  declare function normalizeTextContent(value: TextContent): NormalizedTextContent;
684
685
  declare function normalizeText(value: Text): NormalizedText;
685
686
  declare function textContentToString(value: TextContent): string;
@@ -733,5 +734,5 @@ declare function round(number: number, digits?: number, base?: number): number;
733
734
  declare function clearUndef<T>(obj: T, deep?: boolean): T;
734
735
  declare function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
735
736
 
736
- export { clearUndef, defaultColor, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, hasCRLF, isCRLF, isColor, isColorFill, isColorFillObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isPresetFill, isPresetFillObject, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, round, stringifyGradient, textContentToString };
737
+ export { clearUndef, defaultColor, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, hasCRLF, isCRLF, isColor, isColorFill, isColorFillObject, isEqualStyle, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isPresetFill, isPresetFillObject, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, round, stringifyGradient, textContentToString };
737
738
  export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, EffectObject, Element, EmNode, ExtentKeywordNode, Fill, FillObject, FillRule, FlatTextContent, FlexDirection, FlexWrap, FontKerning, FontStyle, FontWeight, Foreground, ForegroundObject, FragmentObject, GradientFill, GradientFillObject, GradientNode, HeadEnd, Hex8Color, HexNode, HighlightColormap, HighlightImage, HighlightLine, HighlightReferImage, HighlightSize, HighlightThickness, HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, ImageFill, ImageFillCropRect, ImageFillObject, ImageFillStretchRect, ImageFillTile, InnerShadow, InnerShadowObject, Justify, LabColor, LabaColor, LchColor, LchaColor, LineEndSize, LineEndType, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOuterShadow, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedForeground, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedInnerShadow, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOuterShadow, NormalizedOutline, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedSoftEdge, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, OuterShadow, OuterShadowObject, Outline, OutlineObject, OutlineStyle, Overflow, ParagraphObject, PercentNode, PointerEvents, Position, PositionKeywordNode, PositionNode, PresetFill, PresetFillObject, PxNode, RadialGradient, RadialGradientNode, RadialGradientWithType, RepeatingLinearGradientNode, RepeatingRadialGradientNode, RgbColor, RgbNode, RgbaColor, RgbaNode, SVGPathData, Shadow, ShadowObject, Shape, ShapeNode, ShapePath, ShapePathStyle, SoftEdge, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextOrientation, TextTransform, TextWrap, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor };
package/dist/index.d.ts CHANGED
@@ -680,6 +680,7 @@ type Text = string | TextContent | (NormalizedText & {
680
680
  declare function hasCRLF(content: string): boolean;
681
681
  declare function isCRLF(char: string): boolean;
682
682
  declare function normalizeCRLF(content: string): string;
683
+ declare function isEqualStyle(style1: Record<string, any>, style2: Record<string, any>): boolean;
683
684
  declare function normalizeTextContent(value: TextContent): NormalizedTextContent;
684
685
  declare function normalizeText(value: Text): NormalizedText;
685
686
  declare function textContentToString(value: TextContent): string;
@@ -733,5 +734,5 @@ declare function round(number: number, digits?: number, base?: number): number;
733
734
  declare function clearUndef<T>(obj: T, deep?: boolean): T;
734
735
  declare function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
735
736
 
736
- export { clearUndef, defaultColor, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, hasCRLF, isCRLF, isColor, isColorFill, isColorFillObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isPresetFill, isPresetFillObject, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, round, stringifyGradient, textContentToString };
737
+ export { clearUndef, defaultColor, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, hasCRLF, isCRLF, isColor, isColorFill, isColorFillObject, isEqualStyle, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isPresetFill, isPresetFillObject, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, round, stringifyGradient, textContentToString };
737
738
  export type { Align, AngularNode, Audio, Background, BackgroundObject, BackgroundSize, BorderStyle, BoxShadow, BoxSizing, CmykColor, CmykaColor, Color, ColorFill, ColorFillObject, ColorStop, ColorStopNode, DefaultRadialNode, Direction, DirectionalNode, Display, Document, Effect, EffectObject, Element, EmNode, ExtentKeywordNode, Fill, FillObject, FillRule, FlatTextContent, FlexDirection, FlexWrap, FontKerning, FontStyle, FontWeight, Foreground, ForegroundObject, FragmentObject, GradientFill, GradientFillObject, GradientNode, HeadEnd, Hex8Color, HexNode, HighlightColormap, HighlightImage, HighlightLine, HighlightReferImage, HighlightSize, HighlightThickness, HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, ImageFill, ImageFillCropRect, ImageFillObject, ImageFillStretchRect, ImageFillTile, InnerShadow, InnerShadowObject, Justify, LabColor, LabaColor, LchColor, LchaColor, LineEndSize, LineEndType, LinearGradient, LinearGradientNode, LinearGradientWithType, ListStyleColormap, ListStyleImage, ListStylePosition, ListStyleSize, ListStyleType, LiteralNode, Meta, Node, None, NormalizedAudio, NormalizedBackground, NormalizedBaseBackground, NormalizedBaseForeground, NormalizedBaseOuterShadow, NormalizedBaseOutline, NormalizedColor, NormalizedColorFill, NormalizedDocument, NormalizedEffect, NormalizedElement, NormalizedElementStyle, NormalizedFill, NormalizedForeground, NormalizedGradientFill, NormalizedHighlight, NormalizedHighlightStyle, NormalizedImageFill, NormalizedInnerShadow, NormalizedLayoutStyle, NormalizedListStyle, NormalizedListStyleStyle, NormalizedOuterShadow, NormalizedOutline, NormalizedPresetFill, NormalizedShadow, NormalizedShadowStyle, NormalizedShape, NormalizedSoftEdge, NormalizedStyle, NormalizedText, NormalizedTextContent, NormalizedTextDrawStyle, NormalizedTextInlineStyle, NormalizedTextLineStyle, NormalizedTextStyle, NormalizedTransformStyle, NormalizedVideo, ObjectColor, OuterShadow, OuterShadowObject, Outline, OutlineObject, OutlineStyle, Overflow, ParagraphObject, PercentNode, PointerEvents, Position, PositionKeywordNode, PositionNode, PresetFill, PresetFillObject, PxNode, RadialGradient, RadialGradientNode, RadialGradientWithType, RepeatingLinearGradientNode, RepeatingRadialGradientNode, RgbColor, RgbNode, RgbaColor, RgbaNode, SVGPathData, Shadow, ShadowObject, Shape, ShapeNode, ShapePath, ShapePathStyle, SoftEdge, StrokeLinecap, StrokeLinejoin, Style, StyleObject, StyleUnit, TailEnd, Text, TextAlign, TextContent, TextDecoration, TextOrientation, TextTransform, TextWrap, Uint32Color, VerticalAlign, Video, Visibility, WithNone, WithStyleNone, WritingMode, XyzColor, XyzaColor };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(o,N){typeof exports=="object"&&typeof module<"u"?N(exports):typeof define=="function"&&define.amd?define(["exports"],N):(o=typeof globalThis<"u"?globalThis:o||self,N(o.modernIdoc={}))})(this,function(o){"use strict";function N(t){return typeof t=="string"?{src:t}:t}var tn={grad:.9,turn:360,rad:360/(2*Math.PI)},w=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},h=function(t,n,e){return n===void 0&&(n=0),e===void 0&&(e=Math.pow(10,n)),Math.round(e*t)/e+0},y=function(t,n,e){return n===void 0&&(n=0),e===void 0&&(e=1),t>e?e:t>n?t:n},et=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},rt=function(t){return{r:y(t.r,0,255),g:y(t.g,0,255),b:y(t.b,0,255),a:y(t.a)}},H=function(t){return{r:h(t.r),g:h(t.g),b:h(t.b),a:h(t.a,3)}},nn=/^#([0-9a-f]{3,8})$/i,O=function(t){var n=t.toString(16);return n.length<2?"0"+n:n},it=function(t){var n=t.r,e=t.g,r=t.b,i=t.a,c=Math.max(n,e,r),u=c-Math.min(n,e,r),l=u?c===n?(e-r)/u:c===e?2+(r-n)/u:4+(n-e)/u:0;return{h:60*(l<0?l+6:l),s:c?u/c*100:0,v:c/255*100,a:i}},ot=function(t){var n=t.h,e=t.s,r=t.v,i=t.a;n=n/360*6,e/=100,r/=100;var c=Math.floor(n),u=r*(1-e),l=r*(1-(n-c)*e),S=r*(1-(1-n+c)*e),p=c%6;return{r:255*[r,l,u,u,S,r][p],g:255*[S,r,r,l,u,u][p],b:255*[u,u,S,r,r,l][p],a:i}},at=function(t){return{h:et(t.h),s:y(t.s,0,100),l:y(t.l,0,100),a:y(t.a)}},ut=function(t){return{h:h(t.h),s:h(t.s),l:h(t.l),a:h(t.a,3)}},lt=function(t){return ot((e=(n=t).s,{h:n.h,s:(e*=((r=n.l)<50?r:100-r)/100)>0?2*e/(r+e)*100:0,v:r+e,a:n.a}));var n,e,r},L=function(t){return{h:(n=it(t)).h,s:(i=(200-(e=n.s))*(r=n.v)/100)>0&&i<200?e*r/100/(i<=100?i:200-i)*100:0,l:i/2,a:n.a};var n,e,r,i},en=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,rn=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,on=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,an=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,st={string:[[function(t){var n=nn.exec(t);return n?(t=n[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?h(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?h(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var n=on.exec(t)||an.exec(t);return n?n[2]!==n[4]||n[4]!==n[6]?null:rt({r:Number(n[1])/(n[2]?100/255:1),g:Number(n[3])/(n[4]?100/255:1),b:Number(n[5])/(n[6]?100/255:1),a:n[7]===void 0?1:Number(n[7])/(n[8]?100:1)}):null},"rgb"],[function(t){var n=en.exec(t)||rn.exec(t);if(!n)return null;var e,r,i=at({h:(e=n[1],r=n[2],r===void 0&&(r="deg"),Number(e)*(tn[r]||1)),s:Number(n[3]),l:Number(n[4]),a:n[5]===void 0?1:Number(n[5])/(n[6]?100:1)});return lt(i)},"hsl"]],object:[[function(t){var n=t.r,e=t.g,r=t.b,i=t.a,c=i===void 0?1:i;return w(n)&&w(e)&&w(r)?rt({r:Number(n),g:Number(e),b:Number(r),a:Number(c)}):null},"rgb"],[function(t){var n=t.h,e=t.s,r=t.l,i=t.a,c=i===void 0?1:i;if(!w(n)||!w(e)||!w(r))return null;var u=at({h:Number(n),s:Number(e),l:Number(r),a:Number(c)});return lt(u)},"hsl"],[function(t){var n=t.h,e=t.s,r=t.v,i=t.a,c=i===void 0?1:i;if(!w(n)||!w(e)||!w(r))return null;var u=function(l){return{h:et(l.h),s:y(l.s,0,100),v:y(l.v,0,100),a:y(l.a)}}({h:Number(n),s:Number(e),v:Number(r),a:Number(c)});return ot(u)},"hsv"]]},ct=function(t,n){for(var e=0;e<n.length;e++){var r=n[e][0](t);if(r)return[r,n[e][1]]}return[null,void 0]},un=function(t){return typeof t=="string"?ct(t.trim(),st.string):typeof t=="object"&&t!==null?ct(t,st.object):[null,void 0]},j=function(t,n){var e=L(t);return{h:e.h,s:y(e.s+100*n,0,100),l:e.l,a:e.a}},W=function(t){return(299*t.r+587*t.g+114*t.b)/1e3/255},ft=function(t,n){var e=L(t);return{h:e.h,s:e.s,l:y(e.l+100*n,0,100),a:e.a}},dt=function(){function t(n){this.parsed=un(n)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return t.prototype.isValid=function(){return this.parsed!==null},t.prototype.brightness=function(){return h(W(this.rgba),2)},t.prototype.isDark=function(){return W(this.rgba)<.5},t.prototype.isLight=function(){return W(this.rgba)>=.5},t.prototype.toHex=function(){return n=H(this.rgba),e=n.r,r=n.g,i=n.b,u=(c=n.a)<1?O(h(255*c)):"","#"+O(e)+O(r)+O(i)+u;var n,e,r,i,c,u},t.prototype.toRgb=function(){return H(this.rgba)},t.prototype.toRgbString=function(){return n=H(this.rgba),e=n.r,r=n.g,i=n.b,(c=n.a)<1?"rgba("+e+", "+r+", "+i+", "+c+")":"rgb("+e+", "+r+", "+i+")";var n,e,r,i,c},t.prototype.toHsl=function(){return ut(L(this.rgba))},t.prototype.toHslString=function(){return n=ut(L(this.rgba)),e=n.h,r=n.s,i=n.l,(c=n.a)<1?"hsla("+e+", "+r+"%, "+i+"%, "+c+")":"hsl("+e+", "+r+"%, "+i+"%)";var n,e,r,i,c},t.prototype.toHsv=function(){return n=it(this.rgba),{h:h(n.h),s:h(n.s),v:h(n.v),a:h(n.a,3)};var n},t.prototype.invert=function(){return C({r:255-(n=this.rgba).r,g:255-n.g,b:255-n.b,a:n.a});var n},t.prototype.saturate=function(n){return n===void 0&&(n=.1),C(j(this.rgba,n))},t.prototype.desaturate=function(n){return n===void 0&&(n=.1),C(j(this.rgba,-n))},t.prototype.grayscale=function(){return C(j(this.rgba,-1))},t.prototype.lighten=function(n){return n===void 0&&(n=.1),C(ft(this.rgba,n))},t.prototype.darken=function(n){return n===void 0&&(n=.1),C(ft(this.rgba,-n))},t.prototype.rotate=function(n){return n===void 0&&(n=15),this.hue(this.hue()+n)},t.prototype.alpha=function(n){return typeof n=="number"?C({r:(e=this.rgba).r,g:e.g,b:e.b,a:n}):h(this.rgba.a,3);var e},t.prototype.hue=function(n){var e=L(this.rgba);return typeof n=="number"?C({h:n,s:e.s,l:e.l,a:e.a}):h(e.h)},t.prototype.isEqual=function(n){return this.toHex()===C(n).toHex()},t}(),C=function(t){return t instanceof dt?t:new dt(t)};function d(t){return t==null||t==="none"}function _(t,n=0,e=10**n){return Math.round(e*t)/e+0}function F(t,n=!1){if(typeof t!="object"||!t)return t;if(Array.isArray(t))return n?t.map(r=>F(r,n)):t;const e={};for(const r in t){const i=t[r];i!=null&&(n?e[r]=F(i,n):e[r]=i)}return e}function A(t,n){const e={};return n.forEach(r=>{r in t&&(e[r]=t[r])}),e}function B(t){let n;return typeof t=="number"?n={r:t>>24&255,g:t>>16&255,b:t>>8&255,a:(t&255)/255}:n=t,C(n)}function ln(t){return{r:_(t.r),g:_(t.g),b:_(t.b),a:_(t.a,3)}}function T(t){const n=t.toString(16);return n.length<2?`0${n}`:n}const D="#000000FF";function gt(t){return B(t).isValid()}function m(t,n=!1){const e=B(t);if(!e.isValid()){if(typeof t=="string")return t;const l=`Failed to normalizeColor ${t}`;if(n)throw new Error(l);return console.warn(l),D}const{r,g:i,b:c,a:u}=ln(e.rgba);return`#${T(r)}${T(i)}${T(c)}${T(_(u*255))}`}var V=V||{};V.parse=function(){const t={linearGradient:/^(-(webkit|o|ms|moz)-)?(linear-gradient)/i,repeatingLinearGradient:/^(-(webkit|o|ms|moz)-)?(repeating-linear-gradient)/i,radialGradient:/^(-(webkit|o|ms|moz)-)?(radial-gradient)/i,repeatingRadialGradient:/^(-(webkit|o|ms|moz)-)?(repeating-radial-gradient)/i,sideOrCorner:/^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,extentKeywords:/^(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/,positionKeywords:/^(left|center|right|top|bottom)/i,pixelValue:/^(-?((\d*\.\d+)|(\d+\.?)))px/,percentageValue:/^(-?((\d*\.\d+)|(\d+\.?)))%/,emValue:/^(-?((\d*\.\d+)|(\d+\.?)))em/,angleValue:/^(-?((\d*\.\d+)|(\d+\.?)))deg/,radianValue:/^(-?((\d*\.\d+)|(\d+\.?)))rad/,startCall:/^\(/,endCall:/^\)/,comma:/^,/,hexColor:/^#([0-9a-f]+)/i,literalColor:/^([a-z]+)/i,rgbColor:/^rgb/i,rgbaColor:/^rgba/i,varColor:/^var/i,calcValue:/^calc/i,variableName:/^(--[a-z0-9-,\s#]+)/i,number:/^((\d*\.\d+)|(\d+\.?))/,hslColor:/^hsl/i,hslaColor:/^hsla/i};let n="";function e(a){const s=new Error(`${n}: ${a}`);throw s.source=n,s}function r(){const a=i();return n.length>0&&e("Invalid input not EOF"),a}function i(){return P(c)}function c(){return u("linear-gradient",t.linearGradient,S)||u("repeating-linear-gradient",t.repeatingLinearGradient,S)||u("radial-gradient",t.radialGradient,qt)||u("repeating-radial-gradient",t.repeatingRadialGradient,qt)}function u(a,s,f){return l(s,v=>{const k=f();return k&&(g(t.comma)||e("Missing comma before color stops")),{type:a,orientation:k,colorStops:P(Cn)}})}function l(a,s){const f=g(a);if(f){g(t.startCall)||e("Missing (");const v=s(f);return g(t.endCall)||e("Missing )"),v}}function S(){const a=p();if(a)return a;const s=b("position-keyword",t.positionKeywords,1);return s?{type:"directional",value:s.value}:q()}function p(){return b("directional",t.sideOrCorner,1)}function q(){return b("angular",t.angleValue,1)||b("angular",t.radianValue,1)}function qt(){let a,s=Jt(),f;return s&&(a=[],a.push(s),f=n,g(t.comma)&&(s=Jt(),s?a.push(s):n=f)),a}function Jt(){let a=pn()||bn();if(a)a.at=Q();else{const s=J();if(s){a=s;const f=Q();f&&(a.at=f)}else{const f=Q();if(f)a={type:"default-radial",at:f};else{const v=tt();v&&(a={type:"default-radial",at:v})}}}return a}function pn(){const a=b("shape",/^(circle)/i,0);return a&&(a.style=Qt()||J()),a}function bn(){const a=b("shape",/^(ellipse)/i,0);return a&&(a.style=tt()||$()||J()),a}function J(){return b("extent-keyword",t.extentKeywords,1)}function Q(){if(b("position",/^at/,0)){const a=tt();return a||e("Missing positioning value"),a}}function tt(){const a=yn();if(a.x||a.y)return{type:"position",value:a}}function yn(){return{x:$(),y:$()}}function P(a){let s=a();const f=[];if(s)for(f.push(s);g(t.comma);)s=a(),s?f.push(s):e("One extra comma");return f}function Cn(){const a=Sn();return a||e("Expected color definition"),a.length=$(),a}function Sn(){return zn()||En()||Nn()||Fn()||_n()||kn()||wn()}function wn(){return b("literal",t.literalColor,0)}function zn(){return b("hex",t.hexColor,1)}function _n(){return l(t.rgbColor,()=>({type:"rgb",value:P(R)}))}function Fn(){return l(t.rgbaColor,()=>({type:"rgba",value:P(R)}))}function kn(){return l(t.varColor,()=>({type:"var",value:Ln()}))}function Nn(){return l(t.hslColor,()=>{g(t.percentageValue)&&e("HSL hue value must be a number in degrees (0-360) or normalized (-360 to 360), not a percentage");const s=R();g(t.comma);let f=g(t.percentageValue);const v=f?f[1]:null;g(t.comma),f=g(t.percentageValue);const k=f?f[1]:null;return(!v||!k)&&e("Expected percentage value for saturation and lightness in HSL"),{type:"hsl",value:[s,v,k]}})}function En(){return l(t.hslaColor,()=>{const a=R();g(t.comma);let s=g(t.percentageValue);const f=s?s[1]:null;g(t.comma),s=g(t.percentageValue);const v=s?s[1]:null;g(t.comma);const k=R();return(!f||!v)&&e("Expected percentage value for saturation and lightness in HSLA"),{type:"hsla",value:[a,f,v,k]}})}function Ln(){return g(t.variableName)[1]}function R(){return g(t.number)[1]}function $(){return b("%",t.percentageValue,1)||Dn()||Gn()||Qt()}function Dn(){return b("position-keyword",t.positionKeywords,1)}function Gn(){return l(t.calcValue,()=>{let a=1,s=0;for(;a>0&&s<n.length;){const v=n.charAt(s);v==="("?a++:v===")"&&a--,s++}a>0&&e("Missing closing parenthesis in calc() expression");const f=n.substring(0,s-1);return nt(s-1),{type:"calc",value:f}})}function Qt(){return b("px",t.pixelValue,1)||b("em",t.emValue,1)}function b(a,s,f){const v=g(s);if(v)return{type:a,value:v[f]}}function g(a){let s,f;return f=/^\s+/.exec(n),f&&nt(f[0].length),s=a.exec(n),s&&nt(s[0].length),s}function nt(a){n=n.substr(a)}return function(a){return n=a.toString().trim(),n.endsWith(";")&&(n=n.slice(0,-1)),r()}}();const ht=V.parse.bind(V);var x=x||{};x.stringify=function(){var t={"visit_linear-gradient":function(n){return t.visit_gradient(n)},"visit_repeating-linear-gradient":function(n){return t.visit_gradient(n)},"visit_radial-gradient":function(n){return t.visit_gradient(n)},"visit_repeating-radial-gradient":function(n){return t.visit_gradient(n)},visit_gradient:function(n){var e=t.visit(n.orientation);return e&&(e+=", "),n.type+"("+e+t.visit(n.colorStops)+")"},visit_shape:function(n){var e=n.value,r=t.visit(n.at),i=t.visit(n.style);return i&&(e+=" "+i),r&&(e+=" at "+r),e},"visit_default-radial":function(n){var e="",r=t.visit(n.at);return r&&(e+=r),e},"visit_extent-keyword":function(n){var e=n.value,r=t.visit(n.at);return r&&(e+=" at "+r),e},"visit_position-keyword":function(n){return n.value},visit_position:function(n){return t.visit(n.value.x)+" "+t.visit(n.value.y)},"visit_%":function(n){return n.value+"%"},visit_em:function(n){return n.value+"em"},visit_px:function(n){return n.value+"px"},visit_calc:function(n){return"calc("+n.value+")"},visit_literal:function(n){return t.visit_color(n.value,n)},visit_hex:function(n){return t.visit_color("#"+n.value,n)},visit_rgb:function(n){return t.visit_color("rgb("+n.value.join(", ")+")",n)},visit_rgba:function(n){return t.visit_color("rgba("+n.value.join(", ")+")",n)},visit_hsl:function(n){return t.visit_color("hsl("+n.value[0]+", "+n.value[1]+"%, "+n.value[2]+"%)",n)},visit_hsla:function(n){return t.visit_color("hsla("+n.value[0]+", "+n.value[1]+"%, "+n.value[2]+"%, "+n.value[3]+")",n)},visit_var:function(n){return t.visit_color("var("+n.value+")",n)},visit_color:function(n,e){var r=n,i=t.visit(e.length);return i&&(r+=" "+i),r},visit_angular:function(n){return n.value+"deg"},visit_directional:function(n){return"to "+n.value},visit_array:function(n){var e="",r=n.length;return n.forEach(function(i,c){e+=t.visit(i),c<r-1&&(e+=", ")}),e},visit_object:function(n){return n.width&&n.height?t.visit(n.width)+" "+t.visit(n.height):""},visit:function(n){if(!n)return"";if(n instanceof Array)return t.visit_array(n);if(typeof n=="object"&&!n.type)return t.visit_object(n);if(n.type){var e=t["visit_"+n.type];if(e)return e(n);throw Error("Missing visitor visit_"+n.type)}else throw Error("Invalid node.")}};return function(n){return t.visit(n)}}();const sn=x.stringify.bind(x);function vt(t){const n=t.length-1;return t.map((e,r)=>{var l;const i=e.value;let c=_(r/n,3),u="#00000000";switch(e.type){case"rgb":u=m({r:Number(i[0]??0),g:Number(i[1]??0),b:Number(i[2]??0)});break;case"rgba":u=m({r:Number(i[0]??0),g:Number(i[1]??0),b:Number(i[2]??0),a:Number(i[3]??0)});break;case"literal":u=m(e.value);break;case"hex":u=m(`#${e.value}`);break}switch((l=e.length)==null?void 0:l.type){case"%":c=Number(e.length.value)/100;break}return{offset:c,color:u}})}function mt(t){var e;let n=0;switch((e=t.orientation)==null?void 0:e.type){case"angular":n=Number(t.orientation.value);break}return{type:"linear-gradient",angle:n,stops:vt(t.colorStops)}}function pt(t){var n;return(n=t.orientation)==null||n.map(e=>{switch(e==null?void 0:e.type){case"shape":case"default-radial":case"extent-keyword":default:return null}}),{type:"radial-gradient",stops:vt(t.colorStops)}}function G(t){return t.startsWith("linear-gradient(")||t.startsWith("radial-gradient(")}function bt(t){return ht(t).map(n=>{switch(n==null?void 0:n.type){case"linear-gradient":return mt(n);case"repeating-linear-gradient":return{...mt(n),repeat:!0};case"radial-gradient":return pt(n);case"repeating-radial-gradient":return{...pt(n),repeat:!0};default:return}}).filter(Boolean)}function yt(t){let n;return typeof t=="string"?n={color:t}:n=t,{color:m(n.color)}}function Ct(t){let n;if(typeof t=="string"?n={image:t}:n=t,n.image){const{type:e,...r}=bt(n.image)[0]??{};switch(e){case"radial-gradient":return{radialGradient:r};case"linear-gradient":return{linearGradient:r}}}return n}function St(t){let n;return typeof t=="string"?n={image:t}:n=t,n}function wt(t){let n;return typeof t=="string"?n={preset:t}:n=t,{preset:n.preset,foregroundColor:d(n.foregroundColor)?void 0:m(n.foregroundColor),backgroundColor:d(n.backgroundColor)?void 0:m(n.backgroundColor)}}function zt(t){return!d(t.color)}function _t(t){return typeof t=="string"?gt(t):zt(t)}function Ft(t){return!d(t.image)&&G(t.image)||!!t.linearGradient||!!t.radialGradient}function kt(t){return typeof t=="string"?G(t):Ft(t)}function Nt(t){return!d(t.image)&&!G(t.image)}function Et(t){return typeof t=="string"?!G(t):Nt(t)}function Lt(t){return!d(t.preset)}function Dt(t){return typeof t=="string"?!1:Lt(t)}function z(t){return _t(t)?yt(t):kt(t)?Ct(t):Et(t)?St(t):Dt(t)?wt(t):{}}function Gt(t){return typeof t=="string"?{...z(t)}:{...z(t),...A(t,["fillWithShape"])}}function K(){return{color:D,offsetX:0,offsetY:0,blurRadius:1}}function X(t){return{...K(),...F({...t,color:d(t.color)?D:m(t.color)})}}function It(){return{...K(),scaleX:1,scaleY:1}}function Rt(t){return{...It(),...X(t)}}function cn(t){return t}function Ot(t){return F({...t,softEdge:d(t.softEdge)?void 0:t.softEdge,outerShadow:d(t.outerShadow)?void 0:Rt(t.outerShadow),innerShadow:d(t.innerShadow)?void 0:X(t.innerShadow)})}function At(t){return typeof t=="string"?{...z(t)}:{...z(t),...A(t,["fillWithShape"])}}function Tt(t){return typeof t=="string"?{...z(t)}:{...z(t),...A(t,["width","style","headEnd","tailEnd"])}}function Vt(t){return typeof t=="string"?{color:m(t)}:{...t,color:d(t.color)?D:m(t.color)}}function xt(){return{boxShadow:"none"}}function Mt(t){return typeof t=="string"?t.startsWith("<svg")?{svg:t}:{paths:[{data:t}]}:Array.isArray(t)?{paths:t.map(n=>typeof n=="string"?{data:n}:n)}:t}function Pt(){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 $t(){return{rotate:0,scaleX:1,scaleY:1,skewX:0,skewY:0,translateX:0,translateY:0,transform:"none",transformOrigin:"center"}}function Ht(){return{...Pt(),...$t(),...xt(),backgroundImage:"none",backgroundSize:"auto, auto",backgroundColor:"none",backgroundColormap:"none",borderRadius:0,borderColor:"none",borderStyle:"solid",outlineWidth:0,outlineOffset:0,outlineColor:"rgb(0, 0, 0)",outlineStyle:"none",visibility:"visible",filter:"none",opacity:1,pointerEvents:"auto",maskImage:"none"}}function jt(){return{highlight:{},highlightImage:"none",highlightReferImage:"none",highlightColormap:"none",highlightLine:"none",highlightSize:"cover",highlightThickness:"100%"}}function Wt(){return{listStyle:{},listStyleType:"none",listStyleImage:"none",listStyleColormap:"none",listStyleSize:"cover",listStylePosition:"outside"}}function Bt(){return{...jt(),color:"rgb(0, 0, 0)",verticalAlign:"baseline",letterSpacing:0,wordSpacing:0,fontSize:14,fontWeight:"normal",fontFamily:"",fontStyle:"normal",fontKerning:"normal",textTransform:"none",textOrientation:"mixed",textDecoration:"none"}}function Kt(){return{...Wt(),writingMode:"horizontal-tb",textWrap:"wrap",textAlign:"start",textIndent:0,lineHeight:1.2}}function Xt(){return{...Kt(),...Bt(),textStrokeWidth:0,textStrokeColor:"rgb(0, 0, 0)"}}function E(t){return F({...t,color:d(t.color)?void 0:m(t.color),backgroundColor:d(t.backgroundColor)?void 0:m(t.backgroundColor),borderColor:d(t.borderColor)?void 0:m(t.borderColor),outlineColor:d(t.outlineColor)?void 0:m(t.outlineColor),shadowColor:d(t.shadowColor)?void 0:m(t.shadowColor)})}function fn(){return{...Ht(),...Xt()}}const Y=/\r\n|\n\r|\n|\r/,dn=new RegExp(`${Y.source}|<br\\/>`,"g"),gn=new RegExp(`^(${Y.source})$`),M=`
2
- `;function hn(t){return Y.test(t)}function U(t){return gn.test(t)}function Yt(t){return t.replace(dn,M)}function I(t){const n=[];function e(){return n[n.length-1]||r()}function r(u){let l=n[n.length-1];return(l==null?void 0:l.fragments.length)===0?(l={...u,fragments:[]},n[n.length-1]=l):(l={...u,fragments:[]},n.push(l)),l}function i(u,l){Array.from(u).forEach(S=>{if(U(S)){const{fragments:p,...q}=e();p.length||p.push({...l,content:M}),r(q)}else{const p=e();p.fragments[p.fragments.length-1]?p.fragments[p.fragments.length-1].content+=S:p.fragments.push({...l,content:S})}})}return(Array.isArray(t)?t:[t]).forEach(u=>{typeof u=="string"?i(u):"content"in u?i(u.content,E(u)):"fragments"in u?(r(E(u)),u.fragments.forEach(l=>{i(l.content,E(l))})):Array.isArray(u)?u.forEach(l=>{typeof l=="string"?i(l):i(l.content,E(l))}):n.push({fragments:[]})}),e().fragments.length||i(M),n}function Ut(t){return typeof t=="string"?{content:I(t)}:"content"in t?{...t,content:I(t.content)}:{content:I(t)}}function vn(t){return I(t).map(n=>{const e=Yt(n.fragments.flatMap(r=>r.content).join(""));return U(e)?"":e}).join(M)}function Zt(t){return typeof t=="string"?{src:t}:t}function Z(t){var n;return F({...t,style:d(t.style)?void 0:E(t.style),text:d(t.text)?void 0:Ut(t.text),background:d(t.background)?void 0:Gt(t.background),shape:d(t.shape)?void 0:Mt(t.shape),fill:d(t.fill)?void 0:z(t.fill),outline:d(t.outline)?void 0:Tt(t.outline),foreground:d(t.foreground)?void 0:At(t.foreground),shadow:d(t.shadow)?void 0:Vt(t.shadow),video:d(t.video)?void 0:Zt(t.video),audio:d(t.audio)?void 0:N(t.audio),effect:d(t.effect)?void 0:Ot(t.effect),children:(n=t.children)==null?void 0:n.map(e=>Z(e))})}function mn(t){return Z(t)}o.clearUndef=F,o.defaultColor=D,o.getDefaultElementStyle=Ht,o.getDefaultHighlightStyle=jt,o.getDefaultInnerShadow=K,o.getDefaultLayoutStyle=Pt,o.getDefaultListStyleStyle=Wt,o.getDefaultOuterShadow=It,o.getDefaultShadowStyle=xt,o.getDefaultStyle=fn,o.getDefaultTextInlineStyle=Bt,o.getDefaultTextLineStyle=Kt,o.getDefaultTextStyle=Xt,o.getDefaultTransformStyle=$t,o.hasCRLF=hn,o.isCRLF=U,o.isColor=gt,o.isColorFill=_t,o.isColorFillObject=zt,o.isGradient=G,o.isGradientFill=kt,o.isGradientFillObject=Ft,o.isImageFill=Et,o.isImageFillObject=Nt,o.isNone=d,o.isPresetFill=Dt,o.isPresetFillObject=Lt,o.normalizeAudio=N,o.normalizeBackground=Gt,o.normalizeCRLF=Yt,o.normalizeColor=m,o.normalizeColorFill=yt,o.normalizeDocument=mn,o.normalizeEffect=Ot,o.normalizeElement=Z,o.normalizeFill=z,o.normalizeForeground=At,o.normalizeGradient=bt,o.normalizeGradientFill=Ct,o.normalizeImageFill=St,o.normalizeInnerShadow=X,o.normalizeOuterShadow=Rt,o.normalizeOutline=Tt,o.normalizePresetFill=wt,o.normalizeShadow=Vt,o.normalizeShape=Mt,o.normalizeSoftEdge=cn,o.normalizeStyle=E,o.normalizeText=Ut,o.normalizeTextContent=I,o.normalizeVideo=Zt,o.parseColor=B,o.parseGradient=ht,o.pick=A,o.round=_,o.stringifyGradient=sn,o.textContentToString=vn,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
1
+ (function(o,E){typeof exports=="object"&&typeof module<"u"?E(exports):typeof define=="function"&&define.amd?define(["exports"],E):(o=typeof globalThis<"u"?globalThis:o||self,E(o.modernIdoc={}))})(this,function(o){"use strict";function E(t){return typeof t=="string"?{src:t}:t}var nn={grad:.9,turn:360,rad:360/(2*Math.PI)},w=function(t){return typeof t=="string"?t.length>0:typeof t=="number"},h=function(t,n,e){return n===void 0&&(n=0),e===void 0&&(e=Math.pow(10,n)),Math.round(e*t)/e+0},S=function(t,n,e){return n===void 0&&(n=0),e===void 0&&(e=1),t>e?e:t>n?t:n},it=function(t){return(t=isFinite(t)?t%360:0)>0?t:t+360},ot=function(t){return{r:S(t.r,0,255),g:S(t.g,0,255),b:S(t.b,0,255),a:S(t.a)}},B=function(t){return{r:h(t.r),g:h(t.g),b:h(t.b),a:h(t.a,3)}},en=/^#([0-9a-f]{3,8})$/i,A=function(t){var n=t.toString(16);return n.length<2?"0"+n:n},at=function(t){var n=t.r,e=t.g,r=t.b,i=t.a,c=Math.max(n,e,r),u=c-Math.min(n,e,r),l=u?c===n?(e-r)/u:c===e?2+(r-n)/u:4+(n-e)/u:0;return{h:60*(l<0?l+6:l),s:c?u/c*100:0,v:c/255*100,a:i}},ut=function(t){var n=t.h,e=t.s,r=t.v,i=t.a;n=n/360*6,e/=100,r/=100;var c=Math.floor(n),u=r*(1-e),l=r*(1-(n-c)*e),p=r*(1-(1-n+c)*e),b=c%6;return{r:255*[r,l,u,u,p,r][b],g:255*[p,r,r,l,u,u][b],b:255*[u,u,p,r,r,l][b],a:i}},lt=function(t){return{h:it(t.h),s:S(t.s,0,100),l:S(t.l,0,100),a:S(t.a)}},st=function(t){return{h:h(t.h),s:h(t.s),l:h(t.l),a:h(t.a,3)}},ct=function(t){return ut((e=(n=t).s,{h:n.h,s:(e*=((r=n.l)<50?r:100-r)/100)>0?2*e/(r+e)*100:0,v:r+e,a:n.a}));var n,e,r},D=function(t){return{h:(n=at(t)).h,s:(i=(200-(e=n.s))*(r=n.v)/100)>0&&i<200?e*r/100/(i<=100?i:200-i)*100:0,l:i/2,a:n.a};var n,e,r,i},rn=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,on=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,an=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,un=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ft={string:[[function(t){var n=en.exec(t);return n?(t=n[1]).length<=4?{r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16),a:t.length===4?h(parseInt(t[3]+t[3],16)/255,2):1}:t.length===6||t.length===8?{r:parseInt(t.substr(0,2),16),g:parseInt(t.substr(2,2),16),b:parseInt(t.substr(4,2),16),a:t.length===8?h(parseInt(t.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(t){var n=an.exec(t)||un.exec(t);return n?n[2]!==n[4]||n[4]!==n[6]?null:ot({r:Number(n[1])/(n[2]?100/255:1),g:Number(n[3])/(n[4]?100/255:1),b:Number(n[5])/(n[6]?100/255:1),a:n[7]===void 0?1:Number(n[7])/(n[8]?100:1)}):null},"rgb"],[function(t){var n=rn.exec(t)||on.exec(t);if(!n)return null;var e,r,i=lt({h:(e=n[1],r=n[2],r===void 0&&(r="deg"),Number(e)*(nn[r]||1)),s:Number(n[3]),l:Number(n[4]),a:n[5]===void 0?1:Number(n[5])/(n[6]?100:1)});return ct(i)},"hsl"]],object:[[function(t){var n=t.r,e=t.g,r=t.b,i=t.a,c=i===void 0?1:i;return w(n)&&w(e)&&w(r)?ot({r:Number(n),g:Number(e),b:Number(r),a:Number(c)}):null},"rgb"],[function(t){var n=t.h,e=t.s,r=t.l,i=t.a,c=i===void 0?1:i;if(!w(n)||!w(e)||!w(r))return null;var u=lt({h:Number(n),s:Number(e),l:Number(r),a:Number(c)});return ct(u)},"hsl"],[function(t){var n=t.h,e=t.s,r=t.v,i=t.a,c=i===void 0?1:i;if(!w(n)||!w(e)||!w(r))return null;var u=function(l){return{h:it(l.h),s:S(l.s,0,100),v:S(l.v,0,100),a:S(l.a)}}({h:Number(n),s:Number(e),v:Number(r),a:Number(c)});return ut(u)},"hsv"]]},dt=function(t,n){for(var e=0;e<n.length;e++){var r=n[e][0](t);if(r)return[r,n[e][1]]}return[null,void 0]},ln=function(t){return typeof t=="string"?dt(t.trim(),ft.string):typeof t=="object"&&t!==null?dt(t,ft.object):[null,void 0]},K=function(t,n){var e=D(t);return{h:e.h,s:S(e.s+100*n,0,100),l:e.l,a:e.a}},X=function(t){return(299*t.r+587*t.g+114*t.b)/1e3/255},gt=function(t,n){var e=D(t);return{h:e.h,s:e.s,l:S(e.l+100*n,0,100),a:e.a}},ht=function(){function t(n){this.parsed=ln(n)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return t.prototype.isValid=function(){return this.parsed!==null},t.prototype.brightness=function(){return h(X(this.rgba),2)},t.prototype.isDark=function(){return X(this.rgba)<.5},t.prototype.isLight=function(){return X(this.rgba)>=.5},t.prototype.toHex=function(){return n=B(this.rgba),e=n.r,r=n.g,i=n.b,u=(c=n.a)<1?A(h(255*c)):"","#"+A(e)+A(r)+A(i)+u;var n,e,r,i,c,u},t.prototype.toRgb=function(){return B(this.rgba)},t.prototype.toRgbString=function(){return n=B(this.rgba),e=n.r,r=n.g,i=n.b,(c=n.a)<1?"rgba("+e+", "+r+", "+i+", "+c+")":"rgb("+e+", "+r+", "+i+")";var n,e,r,i,c},t.prototype.toHsl=function(){return st(D(this.rgba))},t.prototype.toHslString=function(){return n=st(D(this.rgba)),e=n.h,r=n.s,i=n.l,(c=n.a)<1?"hsla("+e+", "+r+"%, "+i+"%, "+c+")":"hsl("+e+", "+r+"%, "+i+"%)";var n,e,r,i,c},t.prototype.toHsv=function(){return n=at(this.rgba),{h:h(n.h),s:h(n.s),v:h(n.v),a:h(n.a,3)};var n},t.prototype.invert=function(){return C({r:255-(n=this.rgba).r,g:255-n.g,b:255-n.b,a:n.a});var n},t.prototype.saturate=function(n){return n===void 0&&(n=.1),C(K(this.rgba,n))},t.prototype.desaturate=function(n){return n===void 0&&(n=.1),C(K(this.rgba,-n))},t.prototype.grayscale=function(){return C(K(this.rgba,-1))},t.prototype.lighten=function(n){return n===void 0&&(n=.1),C(gt(this.rgba,n))},t.prototype.darken=function(n){return n===void 0&&(n=.1),C(gt(this.rgba,-n))},t.prototype.rotate=function(n){return n===void 0&&(n=15),this.hue(this.hue()+n)},t.prototype.alpha=function(n){return typeof n=="number"?C({r:(e=this.rgba).r,g:e.g,b:e.b,a:n}):h(this.rgba.a,3);var e},t.prototype.hue=function(n){var e=D(this.rgba);return typeof n=="number"?C({h:n,s:e.s,l:e.l,a:e.a}):h(e.h)},t.prototype.isEqual=function(n){return this.toHex()===C(n).toHex()},t}(),C=function(t){return t instanceof ht?t:new ht(t)};function d(t){return t==null||t==="none"}function _(t,n=0,e=10**n){return Math.round(e*t)/e+0}function F(t,n=!1){if(typeof t!="object"||!t)return t;if(Array.isArray(t))return n?t.map(r=>F(r,n)):t;const e={};for(const r in t){const i=t[r];i!=null&&(n?e[r]=F(i,n):e[r]=i)}return e}function T(t,n){const e={};return n.forEach(r=>{r in t&&(e[r]=t[r])}),e}function Y(t){let n;return typeof t=="number"?n={r:t>>24&255,g:t>>16&255,b:t>>8&255,a:(t&255)/255}:n=t,C(n)}function sn(t){return{r:_(t.r),g:_(t.g),b:_(t.b),a:_(t.a,3)}}function V(t){const n=t.toString(16);return n.length<2?`0${n}`:n}const G="#000000FF";function vt(t){return Y(t).isValid()}function m(t,n=!1){const e=Y(t);if(!e.isValid()){if(typeof t=="string")return t;const l=`Failed to normalizeColor ${t}`;if(n)throw new Error(l);return console.warn(l),G}const{r,g:i,b:c,a:u}=sn(e.rgba);return`#${V(r)}${V(i)}${V(c)}${V(_(u*255))}`}var x=x||{};x.parse=function(){const t={linearGradient:/^(-(webkit|o|ms|moz)-)?(linear-gradient)/i,repeatingLinearGradient:/^(-(webkit|o|ms|moz)-)?(repeating-linear-gradient)/i,radialGradient:/^(-(webkit|o|ms|moz)-)?(radial-gradient)/i,repeatingRadialGradient:/^(-(webkit|o|ms|moz)-)?(repeating-radial-gradient)/i,sideOrCorner:/^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,extentKeywords:/^(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/,positionKeywords:/^(left|center|right|top|bottom)/i,pixelValue:/^(-?((\d*\.\d+)|(\d+\.?)))px/,percentageValue:/^(-?((\d*\.\d+)|(\d+\.?)))%/,emValue:/^(-?((\d*\.\d+)|(\d+\.?)))em/,angleValue:/^(-?((\d*\.\d+)|(\d+\.?)))deg/,radianValue:/^(-?((\d*\.\d+)|(\d+\.?)))rad/,startCall:/^\(/,endCall:/^\)/,comma:/^,/,hexColor:/^#([0-9a-f]+)/i,literalColor:/^([a-z]+)/i,rgbColor:/^rgb/i,rgbaColor:/^rgba/i,varColor:/^var/i,calcValue:/^calc/i,variableName:/^(--[a-z0-9-,\s#]+)/i,number:/^((\d*\.\d+)|(\d+\.?))/,hslColor:/^hsl/i,hslaColor:/^hsla/i};let n="";function e(a){const s=new Error(`${n}: ${a}`);throw s.source=n,s}function r(){const a=i();return n.length>0&&e("Invalid input not EOF"),a}function i(){return H(c)}function c(){return u("linear-gradient",t.linearGradient,p)||u("repeating-linear-gradient",t.repeatingLinearGradient,p)||u("radial-gradient",t.radialGradient,M)||u("repeating-radial-gradient",t.repeatingRadialGradient,M)}function u(a,s,f){return l(s,v=>{const N=f();return N&&(g(t.comma)||e("Missing comma before color stops")),{type:a,orientation:N,colorStops:H(Cn)}})}function l(a,s){const f=g(a);if(f){g(t.startCall)||e("Missing (");const v=s(f);return g(t.endCall)||e("Missing )"),v}}function p(){const a=b();if(a)return a;const s=y("position-keyword",t.positionKeywords,1);return s?{type:"directional",value:s.value}:k()}function b(){return y("directional",t.sideOrCorner,1)}function k(){return y("angular",t.angleValue,1)||y("angular",t.radianValue,1)}function M(){let a,s=P(),f;return s&&(a=[],a.push(s),f=n,g(t.comma)&&(s=P(),s?a.push(s):n=f)),a}function P(){let a=bn()||yn();if(a)a.at=nt();else{const s=tt();if(s){a=s;const f=nt();f&&(a.at=f)}else{const f=nt();if(f)a={type:"default-radial",at:f};else{const v=et();v&&(a={type:"default-radial",at:v})}}}return a}function bn(){const a=y("shape",/^(circle)/i,0);return a&&(a.style=tn()||tt()),a}function yn(){const a=y("shape",/^(ellipse)/i,0);return a&&(a.style=et()||W()||tt()),a}function tt(){return y("extent-keyword",t.extentKeywords,1)}function nt(){if(y("position",/^at/,0)){const a=et();return a||e("Missing positioning value"),a}}function et(){const a=Sn();if(a.x||a.y)return{type:"position",value:a}}function Sn(){return{x:W(),y:W()}}function H(a){let s=a();const f=[];if(s)for(f.push(s);g(t.comma);)s=a(),s?f.push(s):e("One extra comma");return f}function Cn(){const a=wn();return a||e("Expected color definition"),a.length=W(),a}function wn(){return _n()||Ln()||En()||kn()||Fn()||Nn()||zn()}function zn(){return y("literal",t.literalColor,0)}function _n(){return y("hex",t.hexColor,1)}function Fn(){return l(t.rgbColor,()=>({type:"rgb",value:H(R)}))}function kn(){return l(t.rgbaColor,()=>({type:"rgba",value:H(R)}))}function Nn(){return l(t.varColor,()=>({type:"var",value:Dn()}))}function En(){return l(t.hslColor,()=>{g(t.percentageValue)&&e("HSL hue value must be a number in degrees (0-360) or normalized (-360 to 360), not a percentage");const s=R();g(t.comma);let f=g(t.percentageValue);const v=f?f[1]:null;g(t.comma),f=g(t.percentageValue);const N=f?f[1]:null;return(!v||!N)&&e("Expected percentage value for saturation and lightness in HSL"),{type:"hsl",value:[s,v,N]}})}function Ln(){return l(t.hslaColor,()=>{const a=R();g(t.comma);let s=g(t.percentageValue);const f=s?s[1]:null;g(t.comma),s=g(t.percentageValue);const v=s?s[1]:null;g(t.comma);const N=R();return(!f||!v)&&e("Expected percentage value for saturation and lightness in HSLA"),{type:"hsla",value:[a,f,v,N]}})}function Dn(){return g(t.variableName)[1]}function R(){return g(t.number)[1]}function W(){return y("%",t.percentageValue,1)||Gn()||In()||tn()}function Gn(){return y("position-keyword",t.positionKeywords,1)}function In(){return l(t.calcValue,()=>{let a=1,s=0;for(;a>0&&s<n.length;){const v=n.charAt(s);v==="("?a++:v===")"&&a--,s++}a>0&&e("Missing closing parenthesis in calc() expression");const f=n.substring(0,s-1);return rt(s-1),{type:"calc",value:f}})}function tn(){return y("px",t.pixelValue,1)||y("em",t.emValue,1)}function y(a,s,f){const v=g(s);if(v)return{type:a,value:v[f]}}function g(a){let s,f;return f=/^\s+/.exec(n),f&&rt(f[0].length),s=a.exec(n),s&&rt(s[0].length),s}function rt(a){n=n.substr(a)}return function(a){return n=a.toString().trim(),n.endsWith(";")&&(n=n.slice(0,-1)),r()}}();const mt=x.parse.bind(x);var $=$||{};$.stringify=function(){var t={"visit_linear-gradient":function(n){return t.visit_gradient(n)},"visit_repeating-linear-gradient":function(n){return t.visit_gradient(n)},"visit_radial-gradient":function(n){return t.visit_gradient(n)},"visit_repeating-radial-gradient":function(n){return t.visit_gradient(n)},visit_gradient:function(n){var e=t.visit(n.orientation);return e&&(e+=", "),n.type+"("+e+t.visit(n.colorStops)+")"},visit_shape:function(n){var e=n.value,r=t.visit(n.at),i=t.visit(n.style);return i&&(e+=" "+i),r&&(e+=" at "+r),e},"visit_default-radial":function(n){var e="",r=t.visit(n.at);return r&&(e+=r),e},"visit_extent-keyword":function(n){var e=n.value,r=t.visit(n.at);return r&&(e+=" at "+r),e},"visit_position-keyword":function(n){return n.value},visit_position:function(n){return t.visit(n.value.x)+" "+t.visit(n.value.y)},"visit_%":function(n){return n.value+"%"},visit_em:function(n){return n.value+"em"},visit_px:function(n){return n.value+"px"},visit_calc:function(n){return"calc("+n.value+")"},visit_literal:function(n){return t.visit_color(n.value,n)},visit_hex:function(n){return t.visit_color("#"+n.value,n)},visit_rgb:function(n){return t.visit_color("rgb("+n.value.join(", ")+")",n)},visit_rgba:function(n){return t.visit_color("rgba("+n.value.join(", ")+")",n)},visit_hsl:function(n){return t.visit_color("hsl("+n.value[0]+", "+n.value[1]+"%, "+n.value[2]+"%)",n)},visit_hsla:function(n){return t.visit_color("hsla("+n.value[0]+", "+n.value[1]+"%, "+n.value[2]+"%, "+n.value[3]+")",n)},visit_var:function(n){return t.visit_color("var("+n.value+")",n)},visit_color:function(n,e){var r=n,i=t.visit(e.length);return i&&(r+=" "+i),r},visit_angular:function(n){return n.value+"deg"},visit_directional:function(n){return"to "+n.value},visit_array:function(n){var e="",r=n.length;return n.forEach(function(i,c){e+=t.visit(i),c<r-1&&(e+=", ")}),e},visit_object:function(n){return n.width&&n.height?t.visit(n.width)+" "+t.visit(n.height):""},visit:function(n){if(!n)return"";if(n instanceof Array)return t.visit_array(n);if(typeof n=="object"&&!n.type)return t.visit_object(n);if(n.type){var e=t["visit_"+n.type];if(e)return e(n);throw Error("Missing visitor visit_"+n.type)}else throw Error("Invalid node.")}};return function(n){return t.visit(n)}}();const cn=$.stringify.bind($);function pt(t){const n=t.length-1;return t.map((e,r)=>{var l;const i=e.value;let c=_(r/n,3),u="#00000000";switch(e.type){case"rgb":u=m({r:Number(i[0]??0),g:Number(i[1]??0),b:Number(i[2]??0)});break;case"rgba":u=m({r:Number(i[0]??0),g:Number(i[1]??0),b:Number(i[2]??0),a:Number(i[3]??0)});break;case"literal":u=m(e.value);break;case"hex":u=m(`#${e.value}`);break}switch((l=e.length)==null?void 0:l.type){case"%":c=Number(e.length.value)/100;break}return{offset:c,color:u}})}function bt(t){var e;let n=0;switch((e=t.orientation)==null?void 0:e.type){case"angular":n=Number(t.orientation.value);break}return{type:"linear-gradient",angle:n,stops:pt(t.colorStops)}}function yt(t){var n;return(n=t.orientation)==null||n.map(e=>{switch(e==null?void 0:e.type){case"shape":case"default-radial":case"extent-keyword":default:return null}}),{type:"radial-gradient",stops:pt(t.colorStops)}}function I(t){return t.startsWith("linear-gradient(")||t.startsWith("radial-gradient(")}function St(t){return mt(t).map(n=>{switch(n==null?void 0:n.type){case"linear-gradient":return bt(n);case"repeating-linear-gradient":return{...bt(n),repeat:!0};case"radial-gradient":return yt(n);case"repeating-radial-gradient":return{...yt(n),repeat:!0};default:return}}).filter(Boolean)}function Ct(t){let n;return typeof t=="string"?n={color:t}:n=t,{color:m(n.color)}}function wt(t){let n;if(typeof t=="string"?n={image:t}:n=t,n.image){const{type:e,...r}=St(n.image)[0]??{};switch(e){case"radial-gradient":return{radialGradient:r};case"linear-gradient":return{linearGradient:r}}}return n}function zt(t){let n;return typeof t=="string"?n={image:t}:n=t,n}function _t(t){let n;return typeof t=="string"?n={preset:t}:n=t,{preset:n.preset,foregroundColor:d(n.foregroundColor)?void 0:m(n.foregroundColor),backgroundColor:d(n.backgroundColor)?void 0:m(n.backgroundColor)}}function Ft(t){return!d(t.color)}function kt(t){return typeof t=="string"?vt(t):Ft(t)}function Nt(t){return!d(t.image)&&I(t.image)||!!t.linearGradient||!!t.radialGradient}function Et(t){return typeof t=="string"?I(t):Nt(t)}function Lt(t){return!d(t.image)&&!I(t.image)}function Dt(t){return typeof t=="string"?!I(t):Lt(t)}function Gt(t){return!d(t.preset)}function It(t){return typeof t=="string"?!1:Gt(t)}function z(t){return kt(t)?Ct(t):Et(t)?wt(t):Dt(t)?zt(t):It(t)?_t(t):{}}function Ot(t){return typeof t=="string"?{...z(t)}:{...z(t),...T(t,["fillWithShape"])}}function q(){return{color:G,offsetX:0,offsetY:0,blurRadius:1}}function U(t){return{...q(),...F({...t,color:d(t.color)?G:m(t.color)})}}function Rt(){return{...q(),scaleX:1,scaleY:1}}function At(t){return{...Rt(),...U(t)}}function fn(t){return t}function Tt(t){return F({...t,softEdge:d(t.softEdge)?void 0:t.softEdge,outerShadow:d(t.outerShadow)?void 0:At(t.outerShadow),innerShadow:d(t.innerShadow)?void 0:U(t.innerShadow)})}function Vt(t){return typeof t=="string"?{...z(t)}:{...z(t),...T(t,["fillWithShape"])}}function xt(t){return typeof t=="string"?{...z(t)}:{...z(t),...T(t,["width","style","headEnd","tailEnd"])}}function $t(t){return typeof t=="string"?{color:m(t)}:{...t,color:d(t.color)?G:m(t.color)}}function jt(){return{boxShadow:"none"}}function Mt(t){return typeof t=="string"?t.startsWith("<svg")?{svg:t}:{paths:[{data:t}]}:Array.isArray(t)?{paths:t.map(n=>typeof n=="string"?{data:n}:n)}:t}function Pt(){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 Ht(){return{rotate:0,scaleX:1,scaleY:1,skewX:0,skewY:0,translateX:0,translateY:0,transform:"none",transformOrigin:"center"}}function Wt(){return{...Pt(),...Ht(),...jt(),backgroundImage:"none",backgroundSize:"auto, auto",backgroundColor:"none",backgroundColormap:"none",borderRadius:0,borderColor:"none",borderStyle:"solid",outlineWidth:0,outlineOffset:0,outlineColor:"rgb(0, 0, 0)",outlineStyle:"none",visibility:"visible",filter:"none",opacity:1,pointerEvents:"auto",maskImage:"none"}}function Bt(){return{highlight:{},highlightImage:"none",highlightReferImage:"none",highlightColormap:"none",highlightLine:"none",highlightSize:"cover",highlightThickness:"100%"}}function Kt(){return{listStyle:{},listStyleType:"none",listStyleImage:"none",listStyleColormap:"none",listStyleSize:"cover",listStylePosition:"outside"}}function Xt(){return{...Bt(),color:"rgb(0, 0, 0)",verticalAlign:"baseline",letterSpacing:0,wordSpacing:0,fontSize:14,fontWeight:"normal",fontFamily:"",fontStyle:"normal",fontKerning:"normal",textTransform:"none",textOrientation:"mixed",textDecoration:"none"}}function Yt(){return{...Kt(),writingMode:"horizontal-tb",textWrap:"wrap",textAlign:"start",textIndent:0,lineHeight:1.2}}function qt(){return{...Yt(),...Xt(),textStrokeWidth:0,textStrokeColor:"rgb(0, 0, 0)"}}function L(t){return F({...t,color:d(t.color)?void 0:m(t.color),backgroundColor:d(t.backgroundColor)?void 0:m(t.backgroundColor),borderColor:d(t.borderColor)?void 0:m(t.borderColor),outlineColor:d(t.outlineColor)?void 0:m(t.outlineColor),shadowColor:d(t.shadowColor)?void 0:m(t.shadowColor)})}function dn(){return{...Wt(),...qt()}}const Z=/\r\n|\n\r|\n|\r/,gn=new RegExp(`${Z.source}|<br\\/>`,"g"),hn=new RegExp(`^(${Z.source})$`),j=`
2
+ `;function vn(t){return Z.test(t)}function J(t){return hn.test(t)}function Ut(t){return t.replace(gn,j)}function Zt(t,n){const e=Array.from(new Set([...Object.keys(t),...Object.keys(n)]));return!e.length||e.every(r=>t[r]===n[r])}function O(t){const n=[];function e(){return n[n.length-1]||r()}function r(u={}){let l=n[n.length-1];return(l==null?void 0:l.fragments.length)===0?(l={...u,fragments:[]},n[n.length-1]=l):(l={...u,fragments:[]},n.push(l)),l}function i(u="",l={}){Array.from(u).forEach(p=>{if(J(p)){const{fragments:b,...k}=e();b.length||b.push({...l,content:j}),r(k)}else{const b=e(),k=b.fragments[b.fragments.length-1];if(k){const{content:M,...P}=k;if(Zt(l,P)){k.content=`${M}${p}`;return}}b.fragments.push({...l,content:p})}})}return(Array.isArray(t)?t:[t]).forEach(u=>{if(typeof u=="string")i(u);else if("content"in u){const{content:l,...p}=u;i(l,L(p))}else"fragments"in u?(r(L(u)),u.fragments.forEach(l=>{const{content:p,...b}=l;i(p,L(b))})):Array.isArray(u)?u.forEach(l=>{if(typeof l=="string")i(l);else{const{content:p,...b}=l;i(p,L(b))}}):console.warn("Failed to parse text content",u)}),e().fragments.length||i(j),n}function Jt(t){return typeof t=="string"?{content:O(t)}:"content"in t?{...t,content:O(t.content)}:{content:O(t)}}function mn(t){return O(t).map(n=>{const e=Ut(n.fragments.flatMap(r=>r.content).join(""));return J(e)?"":e}).join(j)}function Qt(t){return typeof t=="string"?{src:t}:t}function Q(t){var n;return F({...t,style:d(t.style)?void 0:L(t.style),text:d(t.text)?void 0:Jt(t.text),background:d(t.background)?void 0:Ot(t.background),shape:d(t.shape)?void 0:Mt(t.shape),fill:d(t.fill)?void 0:z(t.fill),outline:d(t.outline)?void 0:xt(t.outline),foreground:d(t.foreground)?void 0:Vt(t.foreground),shadow:d(t.shadow)?void 0:$t(t.shadow),video:d(t.video)?void 0:Qt(t.video),audio:d(t.audio)?void 0:E(t.audio),effect:d(t.effect)?void 0:Tt(t.effect),children:(n=t.children)==null?void 0:n.map(e=>Q(e))})}function pn(t){return Q(t)}o.clearUndef=F,o.defaultColor=G,o.getDefaultElementStyle=Wt,o.getDefaultHighlightStyle=Bt,o.getDefaultInnerShadow=q,o.getDefaultLayoutStyle=Pt,o.getDefaultListStyleStyle=Kt,o.getDefaultOuterShadow=Rt,o.getDefaultShadowStyle=jt,o.getDefaultStyle=dn,o.getDefaultTextInlineStyle=Xt,o.getDefaultTextLineStyle=Yt,o.getDefaultTextStyle=qt,o.getDefaultTransformStyle=Ht,o.hasCRLF=vn,o.isCRLF=J,o.isColor=vt,o.isColorFill=kt,o.isColorFillObject=Ft,o.isEqualStyle=Zt,o.isGradient=I,o.isGradientFill=Et,o.isGradientFillObject=Nt,o.isImageFill=Dt,o.isImageFillObject=Lt,o.isNone=d,o.isPresetFill=It,o.isPresetFillObject=Gt,o.normalizeAudio=E,o.normalizeBackground=Ot,o.normalizeCRLF=Ut,o.normalizeColor=m,o.normalizeColorFill=Ct,o.normalizeDocument=pn,o.normalizeEffect=Tt,o.normalizeElement=Q,o.normalizeFill=z,o.normalizeForeground=Vt,o.normalizeGradient=St,o.normalizeGradientFill=wt,o.normalizeImageFill=zt,o.normalizeInnerShadow=U,o.normalizeOuterShadow=At,o.normalizeOutline=xt,o.normalizePresetFill=_t,o.normalizeShadow=$t,o.normalizeShape=Mt,o.normalizeSoftEdge=fn,o.normalizeStyle=L,o.normalizeText=Jt,o.normalizeTextContent=O,o.normalizeVideo=Qt,o.parseColor=Y,o.parseGradient=mt,o.pick=T,o.round=_,o.stringifyGradient=cn,o.textContentToString=mn,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
package/dist/index.mjs CHANGED
@@ -1114,12 +1114,16 @@ function isCRLF(char) {
1114
1114
  function normalizeCRLF(content) {
1115
1115
  return content.replace(NORMALIZE_CRLF_RE, NORMALIZED_CRLF);
1116
1116
  }
1117
+ function isEqualStyle(style1, style2) {
1118
+ const keys = Array.from(/* @__PURE__ */ new Set([...Object.keys(style1), ...Object.keys(style2)]));
1119
+ return !keys.length || keys.every((key) => style1[key] === style2[key]);
1120
+ }
1117
1121
  function normalizeTextContent(value) {
1118
1122
  const paragraphs = [];
1119
1123
  function getParagraph() {
1120
1124
  return paragraphs[paragraphs.length - 1] || addParagraph();
1121
1125
  }
1122
- function addParagraph(style) {
1126
+ function addParagraph(style = {}) {
1123
1127
  let paragraph = paragraphs[paragraphs.length - 1];
1124
1128
  if (paragraph?.fragments.length === 0) {
1125
1129
  paragraph = { ...style, fragments: [] };
@@ -1130,21 +1134,31 @@ function normalizeTextContent(value) {
1130
1134
  }
1131
1135
  return paragraph;
1132
1136
  }
1133
- function addFragment(content, style) {
1137
+ function addFragment(content = "", style = {}) {
1134
1138
  Array.from(content).forEach((c) => {
1135
1139
  if (isCRLF(c)) {
1136
1140
  const { fragments, ...pStyle } = getParagraph();
1137
1141
  if (!fragments.length) {
1138
- fragments.push({ ...style, content: NORMALIZED_CRLF });
1142
+ fragments.push({
1143
+ ...style,
1144
+ content: NORMALIZED_CRLF
1145
+ });
1139
1146
  }
1140
1147
  addParagraph(pStyle);
1141
1148
  } else {
1142
1149
  const paragraph = getParagraph();
1143
- if (paragraph.fragments[paragraph.fragments.length - 1]) {
1144
- paragraph.fragments[paragraph.fragments.length - 1].content += c;
1145
- } else {
1146
- paragraph.fragments.push({ ...style, content: c });
1150
+ const fragment = paragraph.fragments[paragraph.fragments.length - 1];
1151
+ if (fragment) {
1152
+ const { content: content2, ...fStyle } = fragment;
1153
+ if (isEqualStyle(style, fStyle)) {
1154
+ fragment.content = `${content2}${c}`;
1155
+ return;
1156
+ }
1147
1157
  }
1158
+ paragraph.fragments.push({
1159
+ ...style,
1160
+ content: c
1161
+ });
1148
1162
  }
1149
1163
  });
1150
1164
  }
@@ -1153,24 +1167,25 @@ function normalizeTextContent(value) {
1153
1167
  if (typeof p === "string") {
1154
1168
  addFragment(p);
1155
1169
  } else if ("content" in p) {
1156
- addFragment(p.content, normalizeStyle(p));
1170
+ const { content, ...pStyle } = p;
1171
+ addFragment(content, normalizeStyle(pStyle));
1157
1172
  } else if ("fragments" in p) {
1158
1173
  addParagraph(normalizeStyle(p));
1159
1174
  p.fragments.forEach((f) => {
1160
- addFragment(f.content, normalizeStyle(f));
1175
+ const { content, ...fStyle } = f;
1176
+ addFragment(content, normalizeStyle(fStyle));
1161
1177
  });
1162
1178
  } else if (Array.isArray(p)) {
1163
1179
  p.forEach((f) => {
1164
1180
  if (typeof f === "string") {
1165
1181
  addFragment(f);
1166
1182
  } else {
1167
- addFragment(f.content, normalizeStyle(f));
1183
+ const { content, ...fStyle } = f;
1184
+ addFragment(content, normalizeStyle(fStyle));
1168
1185
  }
1169
1186
  });
1170
1187
  } else {
1171
- paragraphs.push({
1172
- fragments: []
1173
- });
1188
+ console.warn("Failed to parse text content", p);
1174
1189
  }
1175
1190
  });
1176
1191
  if (!getParagraph().fragments.length) {
@@ -1236,4 +1251,4 @@ function normalizeDocument(doc) {
1236
1251
  return normalizeElement(doc);
1237
1252
  }
1238
1253
 
1239
- export { clearUndef, defaultColor, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, hasCRLF, isCRLF, isColor, isColorFill, isColorFillObject, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isPresetFill, isPresetFillObject, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, round, stringifyGradient, textContentToString };
1254
+ export { clearUndef, defaultColor, getDefaultElementStyle, getDefaultHighlightStyle, getDefaultInnerShadow, getDefaultLayoutStyle, getDefaultListStyleStyle, getDefaultOuterShadow, getDefaultShadowStyle, getDefaultStyle, getDefaultTextInlineStyle, getDefaultTextLineStyle, getDefaultTextStyle, getDefaultTransformStyle, hasCRLF, isCRLF, isColor, isColorFill, isColorFillObject, isEqualStyle, isGradient, isGradientFill, isGradientFillObject, isImageFill, isImageFillObject, isNone, isPresetFill, isPresetFillObject, normalizeAudio, normalizeBackground, normalizeCRLF, normalizeColor, normalizeColorFill, normalizeDocument, normalizeEffect, normalizeElement, normalizeFill, normalizeForeground, normalizeGradient, normalizeGradientFill, normalizeImageFill, normalizeInnerShadow, normalizeOuterShadow, normalizeOutline, normalizePresetFill, normalizeShadow, normalizeShape, normalizeSoftEdge, normalizeStyle, normalizeText, normalizeTextContent, normalizeVideo, parseColor, parseGradient, pick, round, stringifyGradient, textContentToString };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modern-idoc",
3
3
  "type": "module",
4
- "version": "0.6.11",
4
+ "version": "0.6.12",
5
5
  "packageManager": "pnpm@9.15.1",
6
6
  "description": "Intermediate document for modern codec libs",
7
7
  "author": "wxm",
@@ -57,17 +57,17 @@
57
57
  "colord": "^2.9.3"
58
58
  },
59
59
  "devDependencies": {
60
- "@antfu/eslint-config": "^4.13.1",
61
- "@types/node": "^22.15.19",
60
+ "@antfu/eslint-config": "^4.14.1",
61
+ "@types/node": "^24.0.0",
62
62
  "bumpp": "^10.1.1",
63
63
  "conventional-changelog-cli": "^5.0.0",
64
- "eslint": "^9.27.0",
65
- "lint-staged": "^16.0.0",
64
+ "eslint": "^9.28.0",
65
+ "lint-staged": "^16.1.0",
66
66
  "simple-git-hooks": "^2.13.0",
67
67
  "typescript": "^5.8.3",
68
68
  "unbuild": "^3.5.0",
69
69
  "vite": "^6.3.5",
70
- "vitest": "^3.1.4"
70
+ "vitest": "^3.2.3"
71
71
  },
72
72
  "simple-git-hooks": {
73
73
  "pre-commit": "pnpm lint-staged"