@superdoc-dev/cli 0.2.0-next.75 → 0.2.0-next.76

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.
Files changed (2) hide show
  1. package/dist/index.js +1988 -1000
  2. package/package.json +7 -7
package/dist/index.js CHANGED
@@ -3577,6 +3577,655 @@ var init_paragraphs = __esm(() => {
3577
3577
  CLEAR_SHADING_KEYS = new Set(["target"]);
3578
3578
  });
3579
3579
 
3580
+ // ../../packages/document-api/src/inline-semantics/token-sets.ts
3581
+ var ST_ON_OFF_VALUES, ST_ON_OFF_VALUE_SET, ST_ON_OFF_ON_VALUES, ST_ON_OFF_OFF_VALUES, ST_UNDERLINE_VALUES, ST_UNDERLINE_VALUE_SET, ST_THEME_COLOR_VALUES, ST_THEME_COLOR_VALUE_SET;
3582
+ var init_token_sets = __esm(() => {
3583
+ ST_ON_OFF_VALUES = ["true", "false", "1", "0", "on", "off"];
3584
+ ST_ON_OFF_VALUE_SET = new Set(ST_ON_OFF_VALUES);
3585
+ ST_ON_OFF_ON_VALUES = new Set(["true", "1", "on"]);
3586
+ ST_ON_OFF_OFF_VALUES = new Set(["false", "0", "off"]);
3587
+ ST_UNDERLINE_VALUES = [
3588
+ "single",
3589
+ "double",
3590
+ "thick",
3591
+ "dotted",
3592
+ "dottedHeavy",
3593
+ "dash",
3594
+ "dashedHeavy",
3595
+ "dashLong",
3596
+ "dashLongHeavy",
3597
+ "dotDash",
3598
+ "dashDotHeavy",
3599
+ "dotDotDash",
3600
+ "dashDotDotHeavy",
3601
+ "wave",
3602
+ "wavyHeavy",
3603
+ "wavyDouble",
3604
+ "words",
3605
+ "none"
3606
+ ];
3607
+ ST_UNDERLINE_VALUE_SET = new Set(ST_UNDERLINE_VALUES);
3608
+ ST_THEME_COLOR_VALUES = [
3609
+ "dark1",
3610
+ "light1",
3611
+ "dark2",
3612
+ "light2",
3613
+ "accent1",
3614
+ "accent2",
3615
+ "accent3",
3616
+ "accent4",
3617
+ "accent5",
3618
+ "accent6",
3619
+ "hyperlink",
3620
+ "followedHyperlink",
3621
+ "background1",
3622
+ "text1",
3623
+ "background2",
3624
+ "text2",
3625
+ "none"
3626
+ ];
3627
+ ST_THEME_COLOR_VALUE_SET = new Set(ST_THEME_COLOR_VALUES);
3628
+ });
3629
+
3630
+ // ../../packages/document-api/src/styles/registry.ts
3631
+ function getPropertyDefinition(key, channel) {
3632
+ return PROPERTY_INDEX.get(`${channel}:${key}`);
3633
+ }
3634
+ var ST_VERTICAL_ALIGN_RUN, ST_EM, ST_TEXT_ALIGNMENT, ST_TEXT_DIRECTION, ST_TEXTBOX_TIGHT_WRAP, ST_TEXT_TRANSFORM, ST_JUSTIFICATION, FONT_FAMILY_SCHEMA, COLOR_SCHEMA, SPACING_SCHEMA, INDENT_SCHEMA, UNDERLINE_SCHEMA, BORDER_PROPERTIES_SCHEMA, SHADING_SCHEMA, LANG_SCHEMA, EAST_ASIAN_LAYOUT_SCHEMA, FIT_TEXT_SCHEMA, NUMBERING_PROPERTIES_SCHEMA, FRAME_PR_SCHEMA, PARAGRAPH_BORDERS_SCHEMA, TAB_STOP_SCHEMA, PROPERTY_REGISTRY, ALLOWED_KEYS_BY_CHANNEL, PROPERTY_INDEX, EXCLUDED_KEYS;
3635
+ var init_registry = __esm(() => {
3636
+ init_token_sets();
3637
+ ST_VERTICAL_ALIGN_RUN = ["superscript", "subscript", "baseline"];
3638
+ ST_EM = ["none", "dot", "comma", "circle", "sesame"];
3639
+ ST_TEXT_ALIGNMENT = ["top", "center", "baseline", "bottom", "auto"];
3640
+ ST_TEXT_DIRECTION = ["lrTb", "tbRl", "btLr", "lrTbV", "tbRlV", "tbLrV"];
3641
+ ST_TEXTBOX_TIGHT_WRAP = ["none", "allLines", "firstAndLastLine", "firstLineOnly", "lastLineOnly"];
3642
+ ST_TEXT_TRANSFORM = ["uppercase", "none"];
3643
+ ST_JUSTIFICATION = ["left", "center", "right", "justify", "distribute"];
3644
+ FONT_FAMILY_SCHEMA = {
3645
+ kind: "object",
3646
+ children: {
3647
+ hint: { kind: "string" },
3648
+ ascii: { kind: "string" },
3649
+ hAnsi: { kind: "string" },
3650
+ eastAsia: { kind: "string" },
3651
+ cs: { kind: "string" },
3652
+ val: { kind: "string" },
3653
+ asciiTheme: { kind: "string" },
3654
+ hAnsiTheme: { kind: "string" },
3655
+ eastAsiaTheme: { kind: "string" },
3656
+ cstheme: { kind: "string" }
3657
+ }
3658
+ };
3659
+ COLOR_SCHEMA = {
3660
+ kind: "object",
3661
+ children: {
3662
+ val: { kind: "string" },
3663
+ themeColor: { kind: "string" },
3664
+ themeTint: { kind: "string" },
3665
+ themeShade: { kind: "string" }
3666
+ }
3667
+ };
3668
+ SPACING_SCHEMA = {
3669
+ kind: "object",
3670
+ children: {
3671
+ after: { kind: "integer" },
3672
+ afterAutospacing: { kind: "boolean" },
3673
+ afterLines: { kind: "integer" },
3674
+ before: { kind: "integer" },
3675
+ beforeAutospacing: { kind: "boolean" },
3676
+ beforeLines: { kind: "integer" },
3677
+ line: { kind: "integer" },
3678
+ lineRule: { kind: "enum", values: ["auto", "exact", "atLeast"] }
3679
+ }
3680
+ };
3681
+ INDENT_SCHEMA = {
3682
+ kind: "object",
3683
+ children: {
3684
+ end: { kind: "integer" },
3685
+ endChars: { kind: "integer" },
3686
+ firstLine: { kind: "integer" },
3687
+ firstLineChars: { kind: "integer" },
3688
+ hanging: { kind: "integer" },
3689
+ hangingChars: { kind: "integer" },
3690
+ left: { kind: "integer" },
3691
+ leftChars: { kind: "integer" },
3692
+ right: { kind: "integer" },
3693
+ rightChars: { kind: "integer" },
3694
+ start: { kind: "integer" },
3695
+ startChars: { kind: "integer" }
3696
+ }
3697
+ };
3698
+ UNDERLINE_SCHEMA = {
3699
+ kind: "object",
3700
+ children: {
3701
+ val: { kind: "enum", values: [...ST_UNDERLINE_VALUES] },
3702
+ color: { kind: "string" },
3703
+ themeColor: { kind: "string" },
3704
+ themeTint: { kind: "string" },
3705
+ themeShade: { kind: "string" }
3706
+ }
3707
+ };
3708
+ BORDER_PROPERTIES_SCHEMA = {
3709
+ kind: "object",
3710
+ children: {
3711
+ val: { kind: "string" },
3712
+ color: { kind: "string" },
3713
+ themeColor: { kind: "string" },
3714
+ themeTint: { kind: "string" },
3715
+ themeShade: { kind: "string" },
3716
+ size: { kind: "integer" },
3717
+ space: { kind: "integer" },
3718
+ shadow: { kind: "boolean" },
3719
+ frame: { kind: "boolean" }
3720
+ }
3721
+ };
3722
+ SHADING_SCHEMA = {
3723
+ kind: "object",
3724
+ children: {
3725
+ color: { kind: "string" },
3726
+ fill: { kind: "string" },
3727
+ themeColor: { kind: "string" },
3728
+ themeFill: { kind: "string" },
3729
+ themeFillShade: { kind: "string" },
3730
+ themeFillTint: { kind: "string" },
3731
+ themeShade: { kind: "string" },
3732
+ themeTint: { kind: "string" },
3733
+ val: { kind: "string" }
3734
+ }
3735
+ };
3736
+ LANG_SCHEMA = {
3737
+ kind: "object",
3738
+ children: {
3739
+ val: { kind: "string" },
3740
+ eastAsia: { kind: "string" },
3741
+ bidi: { kind: "string" }
3742
+ }
3743
+ };
3744
+ EAST_ASIAN_LAYOUT_SCHEMA = {
3745
+ kind: "object",
3746
+ children: {
3747
+ id: { kind: "integer" },
3748
+ combine: { kind: "boolean" },
3749
+ combineBrackets: { kind: "string" },
3750
+ vert: { kind: "boolean" },
3751
+ vertCompress: { kind: "boolean" }
3752
+ }
3753
+ };
3754
+ FIT_TEXT_SCHEMA = {
3755
+ kind: "object",
3756
+ children: {
3757
+ val: { kind: "integer" },
3758
+ id: { kind: "integer" }
3759
+ }
3760
+ };
3761
+ NUMBERING_PROPERTIES_SCHEMA = {
3762
+ kind: "object",
3763
+ children: {
3764
+ ilvl: { kind: "integer" },
3765
+ numId: { kind: "integer" }
3766
+ }
3767
+ };
3768
+ FRAME_PR_SCHEMA = {
3769
+ kind: "object",
3770
+ children: {
3771
+ anchorLock: { kind: "boolean" },
3772
+ dropCap: { kind: "string" },
3773
+ h: { kind: "integer" },
3774
+ hAnchor: { kind: "string" },
3775
+ hRule: { kind: "string" },
3776
+ hSpace: { kind: "integer" },
3777
+ lines: { kind: "integer" },
3778
+ vAnchor: { kind: "string" },
3779
+ vSpace: { kind: "integer" },
3780
+ w: { kind: "integer" },
3781
+ wrap: { kind: "string" },
3782
+ x: { kind: "integer" },
3783
+ xAlign: { kind: "string" },
3784
+ y: { kind: "integer" },
3785
+ yAlign: { kind: "string" }
3786
+ }
3787
+ };
3788
+ PARAGRAPH_BORDERS_SCHEMA = {
3789
+ kind: "object",
3790
+ children: {
3791
+ top: BORDER_PROPERTIES_SCHEMA,
3792
+ bottom: BORDER_PROPERTIES_SCHEMA,
3793
+ left: BORDER_PROPERTIES_SCHEMA,
3794
+ right: BORDER_PROPERTIES_SCHEMA,
3795
+ between: BORDER_PROPERTIES_SCHEMA,
3796
+ bar: BORDER_PROPERTIES_SCHEMA
3797
+ }
3798
+ };
3799
+ TAB_STOP_SCHEMA = {
3800
+ kind: "array",
3801
+ item: {
3802
+ kind: "object",
3803
+ children: {
3804
+ tab: {
3805
+ kind: "object",
3806
+ children: {
3807
+ tabType: { kind: "string" },
3808
+ pos: { kind: "integer" },
3809
+ leader: { kind: "string" }
3810
+ }
3811
+ }
3812
+ }
3813
+ }
3814
+ };
3815
+ PROPERTY_REGISTRY = [
3816
+ { key: "bold", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3817
+ { key: "boldCs", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3818
+ { key: "italic", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3819
+ { key: "iCs", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3820
+ { key: "smallCaps", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3821
+ { key: "strike", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3822
+ { key: "dstrike", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3823
+ { key: "emboss", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3824
+ { key: "imprint", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3825
+ { key: "outline", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3826
+ { key: "shadow", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3827
+ { key: "vanish", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3828
+ { key: "webHidden", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3829
+ { key: "specVanish", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3830
+ { key: "snapToGrid", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3831
+ { key: "noProof", channel: "run", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3832
+ { key: "fontSize", channel: "run", schema: { kind: "integer" }, mergeStrategy: "replace" },
3833
+ { key: "fontSizeCs", channel: "run", schema: { kind: "integer" }, mergeStrategy: "replace" },
3834
+ { key: "letterSpacing", channel: "run", schema: { kind: "integer" }, mergeStrategy: "replace" },
3835
+ { key: "kern", channel: "run", schema: { kind: "integer" }, mergeStrategy: "replace" },
3836
+ { key: "position", channel: "run", schema: { kind: "integer" }, mergeStrategy: "replace" },
3837
+ { key: "w", channel: "run", schema: { kind: "integer", min: 1, max: 600 }, mergeStrategy: "replace" },
3838
+ {
3839
+ key: "textTransform",
3840
+ channel: "run",
3841
+ schema: { kind: "enum", values: [...ST_TEXT_TRANSFORM] },
3842
+ mergeStrategy: "replace"
3843
+ },
3844
+ {
3845
+ key: "vertAlign",
3846
+ channel: "run",
3847
+ schema: { kind: "enum", values: [...ST_VERTICAL_ALIGN_RUN] },
3848
+ mergeStrategy: "replace"
3849
+ },
3850
+ { key: "em", channel: "run", schema: { kind: "enum", values: [...ST_EM] }, mergeStrategy: "replace" },
3851
+ { key: "effect", channel: "run", schema: { kind: "string" }, mergeStrategy: "replace" },
3852
+ { key: "fontFamily", channel: "run", schema: FONT_FAMILY_SCHEMA, mergeStrategy: "shallowMerge" },
3853
+ { key: "color", channel: "run", schema: COLOR_SCHEMA, mergeStrategy: "shallowMerge" },
3854
+ { key: "underline", channel: "run", schema: UNDERLINE_SCHEMA, mergeStrategy: "shallowMerge" },
3855
+ { key: "borders", channel: "run", schema: BORDER_PROPERTIES_SCHEMA, mergeStrategy: "shallowMerge" },
3856
+ { key: "shading", channel: "run", schema: SHADING_SCHEMA, mergeStrategy: "shallowMerge" },
3857
+ { key: "lang", channel: "run", schema: LANG_SCHEMA, mergeStrategy: "shallowMerge" },
3858
+ { key: "eastAsianLayout", channel: "run", schema: EAST_ASIAN_LAYOUT_SCHEMA, mergeStrategy: "shallowMerge" },
3859
+ { key: "fitText", channel: "run", schema: FIT_TEXT_SCHEMA, mergeStrategy: "shallowMerge" },
3860
+ { key: "keepLines", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3861
+ { key: "keepNext", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3862
+ { key: "widowControl", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3863
+ { key: "contextualSpacing", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3864
+ { key: "pageBreakBefore", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3865
+ { key: "suppressAutoHyphens", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3866
+ { key: "suppressLineNumbers", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3867
+ { key: "suppressOverlap", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3868
+ { key: "mirrorIndents", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3869
+ { key: "wordWrap", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3870
+ { key: "kinsoku", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3871
+ { key: "overflowPunct", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3872
+ { key: "topLinePunct", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3873
+ { key: "autoSpaceDE", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3874
+ { key: "autoSpaceDN", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3875
+ { key: "adjustRightInd", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3876
+ { key: "rightToLeft", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3877
+ { key: "snapToGrid", channel: "paragraph", schema: { kind: "boolean" }, mergeStrategy: "replace" },
3878
+ { key: "outlineLvl", channel: "paragraph", schema: { kind: "integer", min: 0, max: 9 }, mergeStrategy: "replace" },
3879
+ {
3880
+ key: "justification",
3881
+ channel: "paragraph",
3882
+ schema: { kind: "enum", values: [...ST_JUSTIFICATION] },
3883
+ mergeStrategy: "replace"
3884
+ },
3885
+ {
3886
+ key: "textAlignment",
3887
+ channel: "paragraph",
3888
+ schema: { kind: "enum", values: [...ST_TEXT_ALIGNMENT] },
3889
+ mergeStrategy: "replace"
3890
+ },
3891
+ {
3892
+ key: "textDirection",
3893
+ channel: "paragraph",
3894
+ schema: { kind: "enum", values: [...ST_TEXT_DIRECTION] },
3895
+ mergeStrategy: "replace"
3896
+ },
3897
+ {
3898
+ key: "textboxTightWrap",
3899
+ channel: "paragraph",
3900
+ schema: { kind: "enum", values: [...ST_TEXTBOX_TIGHT_WRAP] },
3901
+ mergeStrategy: "replace"
3902
+ },
3903
+ { key: "spacing", channel: "paragraph", schema: SPACING_SCHEMA, mergeStrategy: "shallowMerge" },
3904
+ { key: "indent", channel: "paragraph", schema: INDENT_SCHEMA, mergeStrategy: "shallowMerge" },
3905
+ { key: "shading", channel: "paragraph", schema: SHADING_SCHEMA, mergeStrategy: "shallowMerge" },
3906
+ {
3907
+ key: "numberingProperties",
3908
+ channel: "paragraph",
3909
+ schema: NUMBERING_PROPERTIES_SCHEMA,
3910
+ mergeStrategy: "shallowMerge"
3911
+ },
3912
+ { key: "framePr", channel: "paragraph", schema: FRAME_PR_SCHEMA, mergeStrategy: "shallowMerge" },
3913
+ { key: "borders", channel: "paragraph", schema: PARAGRAPH_BORDERS_SCHEMA, mergeStrategy: "edgeMerge" },
3914
+ { key: "tabStops", channel: "paragraph", schema: TAB_STOP_SCHEMA, mergeStrategy: "replace" }
3915
+ ];
3916
+ ALLOWED_KEYS_BY_CHANNEL = {
3917
+ run: new Set(PROPERTY_REGISTRY.filter((d) => d.channel === "run").map((d) => d.key)),
3918
+ paragraph: new Set(PROPERTY_REGISTRY.filter((d) => d.channel === "paragraph").map((d) => d.key))
3919
+ };
3920
+ PROPERTY_INDEX = new Map(PROPERTY_REGISTRY.map((d) => [`${d.channel}:${d.key}`, d]));
3921
+ EXCLUDED_KEYS = {
3922
+ run: new Map([
3923
+ ["cs", "w:cs"],
3924
+ ["highlight", "w:highlight"],
3925
+ ["oMath", "w:oMath"],
3926
+ ["rPrChange", "w:rPrChange"],
3927
+ ["rStyle", "w:rStyle"],
3928
+ ["rtl", "w:rtl"]
3929
+ ]),
3930
+ paragraph: new Map([
3931
+ ["cnfStyle", "w:cnfStyle"],
3932
+ ["divId", "w:divId"],
3933
+ ["pPrChange", "w:pPrChange"],
3934
+ ["pStyle", "w:pStyle"],
3935
+ ["runProperties", "w:pPr/w:rPr"],
3936
+ ["sectPr", "w:sectPr"]
3937
+ ])
3938
+ };
3939
+ });
3940
+
3941
+ // ../../packages/document-api/src/styles/schema.ts
3942
+ function toJsonSchema(schema) {
3943
+ switch (schema.kind) {
3944
+ case "boolean":
3945
+ return { type: "boolean" };
3946
+ case "integer": {
3947
+ const s = { type: "integer" };
3948
+ if (schema.min !== undefined)
3949
+ s.minimum = schema.min;
3950
+ if (schema.max !== undefined)
3951
+ s.maximum = schema.max;
3952
+ return s;
3953
+ }
3954
+ case "enum":
3955
+ return { enum: [...schema.values] };
3956
+ case "string":
3957
+ return { type: "string", minLength: 1 };
3958
+ case "object": {
3959
+ const properties = {};
3960
+ for (const [key, childSchema] of Object.entries(schema.children)) {
3961
+ properties[key] = toJsonSchema(childSchema);
3962
+ }
3963
+ return {
3964
+ type: "object",
3965
+ properties,
3966
+ additionalProperties: false,
3967
+ minProperties: 1
3968
+ };
3969
+ }
3970
+ case "array":
3971
+ return {
3972
+ type: "array",
3973
+ items: toJsonSchema(schema.item)
3974
+ };
3975
+ }
3976
+ }
3977
+ function buildPatchSchema(channel) {
3978
+ const properties = {};
3979
+ for (const def of PROPERTY_REGISTRY) {
3980
+ if (def.channel !== channel)
3981
+ continue;
3982
+ properties[def.key] = toJsonSchema(def.schema);
3983
+ }
3984
+ return {
3985
+ type: "object",
3986
+ properties,
3987
+ additionalProperties: false,
3988
+ minProperties: 1
3989
+ };
3990
+ }
3991
+ function buildStateSchema() {
3992
+ const properties = {};
3993
+ for (const def of PROPERTY_REGISTRY) {
3994
+ const schema = def.schema;
3995
+ switch (schema.kind) {
3996
+ case "boolean":
3997
+ properties[def.key] = { enum: ["on", "off", "inherit"] };
3998
+ break;
3999
+ case "integer":
4000
+ properties[def.key] = { oneOf: [{ type: "number" }, { const: "inherit" }] };
4001
+ break;
4002
+ case "enum":
4003
+ case "string":
4004
+ properties[def.key] = { oneOf: [{ type: "string" }, { const: "inherit" }] };
4005
+ break;
4006
+ case "object":
4007
+ properties[def.key] = { oneOf: [{ type: "object" }, { const: "inherit" }] };
4008
+ break;
4009
+ case "array":
4010
+ properties[def.key] = { oneOf: [{ type: "array" }, { const: "inherit" }] };
4011
+ break;
4012
+ }
4013
+ }
4014
+ return {
4015
+ type: "object",
4016
+ properties,
4017
+ additionalProperties: false
4018
+ };
4019
+ }
4020
+ var init_schema = __esm(() => {
4021
+ init_registry();
4022
+ });
4023
+
4024
+ // ../../packages/document-api/src/styles/validation.ts
4025
+ function validateValue(path, value, schema) {
4026
+ switch (schema.kind) {
4027
+ case "boolean":
4028
+ if (typeof value !== "boolean") {
4029
+ throw new DocumentApiValidationError("INVALID_INPUT", `${path} must be a boolean, got ${typeof value}.`, {
4030
+ field: path,
4031
+ value
4032
+ });
4033
+ }
4034
+ return;
4035
+ case "integer": {
4036
+ if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value)) {
4037
+ throw new DocumentApiValidationError("INVALID_INPUT", `${path} must be a finite integer, got ${JSON.stringify(value)}.`, { field: path, value });
4038
+ }
4039
+ if (schema.min !== undefined && value < schema.min) {
4040
+ throw new DocumentApiValidationError("INVALID_INPUT", `${path} must be >= ${schema.min}, got ${value}.`, {
4041
+ field: path,
4042
+ value
4043
+ });
4044
+ }
4045
+ if (schema.max !== undefined && value > schema.max) {
4046
+ throw new DocumentApiValidationError("INVALID_INPUT", `${path} must be <= ${schema.max}, got ${value}.`, {
4047
+ field: path,
4048
+ value
4049
+ });
4050
+ }
4051
+ return;
4052
+ }
4053
+ case "enum":
4054
+ if (typeof value !== "string" || !schema.values.includes(value)) {
4055
+ throw new DocumentApiValidationError("INVALID_INPUT", `${path} must be one of: ${schema.values.join(", ")}. Got ${JSON.stringify(value)}.`, { field: path, value });
4056
+ }
4057
+ return;
4058
+ case "string":
4059
+ if (typeof value !== "string" || value.length === 0) {
4060
+ throw new DocumentApiValidationError("INVALID_INPUT", `${path} must be a non-empty string, got ${JSON.stringify(value)}.`, { field: path, value });
4061
+ }
4062
+ return;
4063
+ case "object":
4064
+ validateObjectValue(path, value, schema.children);
4065
+ return;
4066
+ case "array":
4067
+ validateArrayValue(path, value, schema.item);
4068
+ return;
4069
+ }
4070
+ }
4071
+ function validateObjectValue(path, value, children) {
4072
+ if (!isRecord(value)) {
4073
+ throw new DocumentApiValidationError("INVALID_INPUT", `${path} must be a non-null object, got ${typeof value}.`, {
4074
+ field: path,
4075
+ value
4076
+ });
4077
+ }
4078
+ const allowedKeys = new Set(Object.keys(children));
4079
+ const keys = Object.keys(value);
4080
+ if (keys.length === 0) {
4081
+ throw new DocumentApiValidationError("INVALID_INPUT", `${path} must include at least one property.`, {
4082
+ field: path
4083
+ });
4084
+ }
4085
+ for (const key of keys) {
4086
+ if (!allowedKeys.has(key)) {
4087
+ throw new DocumentApiValidationError("INVALID_INPUT", `Unknown key "${key}" on ${path}. Allowed keys: ${[...allowedKeys].join(", ")}.`, { field: path, key });
4088
+ }
4089
+ validateValue(`${path}.${key}`, value[key], children[key]);
4090
+ }
4091
+ }
4092
+ function validateArrayValue(path, value, itemSchema) {
4093
+ if (!Array.isArray(value)) {
4094
+ throw new DocumentApiValidationError("INVALID_INPUT", `${path} must be an array, got ${typeof value}.`, {
4095
+ field: path,
4096
+ value
4097
+ });
4098
+ }
4099
+ for (let i = 0;i < value.length; i++) {
4100
+ validateValue(`${path}[${i}]`, value[i], itemSchema);
4101
+ }
4102
+ }
4103
+ function validateStylesApplyInput(input) {
4104
+ if (!isRecord(input)) {
4105
+ throw new DocumentApiValidationError("INVALID_INPUT", "styles.apply input must be a non-null object.");
4106
+ }
4107
+ assertNoUnknownFields2(input, INPUT_ALLOWED_KEYS);
4108
+ const { target, patch } = input;
4109
+ if (target === undefined || target === null) {
4110
+ throw new DocumentApiValidationError("INVALID_TARGET", "styles.apply requires a target object.");
4111
+ }
4112
+ if (!isRecord(target)) {
4113
+ throw new DocumentApiValidationError("INVALID_TARGET", "target must be a non-null object.", {
4114
+ field: "target",
4115
+ value: target
4116
+ });
4117
+ }
4118
+ assertNoUnknownFields2(target, TARGET_ALLOWED_KEYS, "target");
4119
+ if (target.scope !== "docDefaults") {
4120
+ throw new DocumentApiValidationError("INVALID_TARGET", `target.scope must be "docDefaults", got ${JSON.stringify(target.scope)}.`, { field: "target.scope", value: target.scope });
4121
+ }
4122
+ if (!VALID_CHANNELS.has(target.channel)) {
4123
+ throw new DocumentApiValidationError("INVALID_TARGET", `target.channel must be "run" or "paragraph", got ${JSON.stringify(target.channel)}.`, { field: "target.channel", value: target.channel });
4124
+ }
4125
+ const channel = target.channel;
4126
+ if (patch === undefined || patch === null) {
4127
+ throw new DocumentApiValidationError("INVALID_INPUT", "styles.apply requires a patch object.");
4128
+ }
4129
+ if (!isRecord(patch)) {
4130
+ throw new DocumentApiValidationError("INVALID_INPUT", "patch must be a non-null object.", {
4131
+ field: "patch",
4132
+ value: patch
4133
+ });
4134
+ }
4135
+ const patchKeys = Object.keys(patch);
4136
+ if (patchKeys.length === 0) {
4137
+ throw new DocumentApiValidationError("INVALID_INPUT", "patch must include at least one property.");
4138
+ }
4139
+ const allowedKeys = ALLOWED_KEYS_BY_CHANNEL[channel];
4140
+ const otherChannel = channel === "run" ? "paragraph" : "run";
4141
+ for (const key of patchKeys) {
4142
+ const excludedEntry = EXCLUDED_KEYS[channel].get(key);
4143
+ if (excludedEntry !== undefined) {
4144
+ throw new DocumentApiValidationError("INVALID_INPUT", `patch key '${key}' is not valid in Word docDefaults (${excludedEntry}). This is an intentional restriction per MS-OI29500.`, { field: "patch", key, reason: "excluded_docdefaults_key" });
4145
+ }
4146
+ if (!allowedKeys.has(key)) {
4147
+ const belongsToOther = ALLOWED_KEYS_BY_CHANNEL[otherChannel].has(key);
4148
+ if (belongsToOther) {
4149
+ throw new DocumentApiValidationError("INVALID_INPUT", `Unknown patch key "${key}" for channel "${channel}". "${key}" is a ${otherChannel}-channel property. Allowed keys: ${[...allowedKeys].join(", ")}.`, { field: "patch", key });
4150
+ }
4151
+ const otherExcluded = EXCLUDED_KEYS[otherChannel].get(key);
4152
+ if (otherExcluded !== undefined) {
4153
+ throw new DocumentApiValidationError("INVALID_INPUT", `patch key '${key}' is not valid in Word docDefaults (${otherExcluded}). This is an intentional restriction per MS-OI29500.`, { field: "patch", key, reason: "excluded_docdefaults_key" });
4154
+ }
4155
+ throw new DocumentApiValidationError("INVALID_INPUT", `Unknown patch key "${key}" for channel "${channel}". Allowed keys: ${[...allowedKeys].join(", ")}.`, { field: "patch", key });
4156
+ }
4157
+ const def = getPropertyDefinition(key, channel);
4158
+ if (def)
4159
+ validateValue(`patch.${key}`, patch[key], def.schema);
4160
+ }
4161
+ }
4162
+ function validateStylesApplyOptions(options) {
4163
+ if (options === undefined || options === null)
4164
+ return;
4165
+ if (!isRecord(options)) {
4166
+ throw new DocumentApiValidationError("INVALID_INPUT", "styles.apply options must be a non-null object.");
4167
+ }
4168
+ for (const key of Object.keys(options)) {
4169
+ if (!OPTIONS_ALLOWED_KEYS.has(key)) {
4170
+ throw new DocumentApiValidationError("INVALID_INPUT", `Unknown options key "${key}". Allowed keys: ${[...OPTIONS_ALLOWED_KEYS].join(", ")}.`, { field: "options", key });
4171
+ }
4172
+ }
4173
+ if (options.dryRun !== undefined && typeof options.dryRun !== "boolean") {
4174
+ throw new DocumentApiValidationError("INVALID_INPUT", "options.dryRun must be a boolean.", {
4175
+ field: "options.dryRun",
4176
+ value: options.dryRun
4177
+ });
4178
+ }
4179
+ if (options.expectedRevision !== undefined && typeof options.expectedRevision !== "string") {
4180
+ throw new DocumentApiValidationError("INVALID_INPUT", "options.expectedRevision must be a string.", {
4181
+ field: "options.expectedRevision",
4182
+ value: options.expectedRevision
4183
+ });
4184
+ }
4185
+ }
4186
+ function assertNoUnknownFields2(obj, allowlist, prefix) {
4187
+ for (const key of Object.keys(obj)) {
4188
+ if (!allowlist.has(key)) {
4189
+ const location2 = prefix ? `${prefix}.${key}` : key;
4190
+ throw new DocumentApiValidationError("INVALID_INPUT", `Unknown field "${location2}" on styles.apply input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: location2 });
4191
+ }
4192
+ }
4193
+ }
4194
+ var INPUT_ALLOWED_KEYS, TARGET_ALLOWED_KEYS, OPTIONS_ALLOWED_KEYS, VALID_CHANNELS;
4195
+ var init_validation = __esm(() => {
4196
+ init_errors2();
4197
+ init_validation_primitives();
4198
+ init_registry();
4199
+ INPUT_ALLOWED_KEYS = new Set(["target", "patch"]);
4200
+ TARGET_ALLOWED_KEYS = new Set(["scope", "channel"]);
4201
+ OPTIONS_ALLOWED_KEYS = new Set(["dryRun", "expectedRevision"]);
4202
+ VALID_CHANNELS = new Set(["run", "paragraph"]);
4203
+ });
4204
+
4205
+ // ../../packages/document-api/src/styles/apply.ts
4206
+ function normalizeOptions(options) {
4207
+ return {
4208
+ dryRun: options?.dryRun ?? false,
4209
+ expectedRevision: options?.expectedRevision
4210
+ };
4211
+ }
4212
+ function executeStylesApply(adapter, input, options) {
4213
+ validateStylesApplyInput(input);
4214
+ validateStylesApplyOptions(options);
4215
+ return adapter.apply(input, normalizeOptions(options));
4216
+ }
4217
+ var init_apply = __esm(() => {
4218
+ init_validation();
4219
+ });
4220
+
4221
+ // ../../packages/document-api/src/styles/index.ts
4222
+ var init_styles = __esm(() => {
4223
+ init_registry();
4224
+ init_schema();
4225
+ init_apply();
4226
+ init_validation();
4227
+ });
4228
+
3580
4229
  // ../../packages/document-api/src/contract/schemas.ts
3581
4230
  function objectSchema(properties, required = []) {
3582
4231
  const schema = {
@@ -3825,6 +4474,7 @@ var init_schemas = __esm(() => {
3825
4474
  init_inline_run_patch();
3826
4475
  init_style_policy_types();
3827
4476
  init_paragraphs();
4477
+ init_styles();
3828
4478
  nodeTypeValues = NODE_TYPES;
3829
4479
  blockNodeTypeValues = BLOCK_NODE_TYPES;
3830
4480
  deletableBlockNodeTypeValues = DELETABLE_BLOCK_NODE_TYPES;
@@ -4852,88 +5502,16 @@ var init_schemas = __esm(() => {
4852
5502
  failure: paragraphMutationFailureSchemaFor("format.paragraph.clearShading")
4853
5503
  },
4854
5504
  "styles.apply": (() => {
4855
- const fontFamilySchema = {
4856
- ...objectSchema({
4857
- hint: { type: "string" },
4858
- ascii: { type: "string" },
4859
- hAnsi: { type: "string" },
4860
- eastAsia: { type: "string" },
4861
- cs: { type: "string" },
4862
- val: { type: "string" },
4863
- asciiTheme: { type: "string" },
4864
- hAnsiTheme: { type: "string" },
4865
- eastAsiaTheme: { type: "string" },
4866
- cstheme: { type: "string" }
4867
- }, []),
4868
- minProperties: 1
4869
- };
4870
- const colorSchema = {
4871
- ...objectSchema({
4872
- val: { type: "string" },
4873
- themeColor: { type: "string" },
4874
- themeTint: { type: "string" },
4875
- themeShade: { type: "string" }
4876
- }, []),
4877
- minProperties: 1
4878
- };
4879
- const spacingSchema = {
4880
- ...objectSchema({
4881
- after: { type: "integer" },
4882
- afterAutospacing: { type: "boolean" },
4883
- afterLines: { type: "integer" },
4884
- before: { type: "integer" },
4885
- beforeAutospacing: { type: "boolean" },
4886
- beforeLines: { type: "integer" },
4887
- line: { type: "integer" },
4888
- lineRule: { enum: ["auto", "exact", "atLeast"] }
4889
- }, []),
4890
- minProperties: 1
4891
- };
4892
- const indentSchema = {
4893
- ...objectSchema({
4894
- end: { type: "integer" },
4895
- endChars: { type: "integer" },
4896
- firstLine: { type: "integer" },
4897
- firstLineChars: { type: "integer" },
4898
- hanging: { type: "integer" },
4899
- hangingChars: { type: "integer" },
4900
- left: { type: "integer" },
4901
- leftChars: { type: "integer" },
4902
- right: { type: "integer" },
4903
- rightChars: { type: "integer" },
4904
- start: { type: "integer" },
4905
- startChars: { type: "integer" }
4906
- }, []),
4907
- minProperties: 1
4908
- };
4909
5505
  const runInputSchema = objectSchema({
4910
5506
  target: objectSchema({ scope: { const: "docDefaults" }, channel: { const: "run" } }, ["scope", "channel"]),
4911
- patch: {
4912
- ...objectSchema({
4913
- bold: { type: "boolean" },
4914
- italic: { type: "boolean" },
4915
- fontSize: { type: "integer" },
4916
- fontSizeCs: { type: "integer" },
4917
- letterSpacing: { type: "integer" },
4918
- fontFamily: fontFamilySchema,
4919
- color: colorSchema
4920
- }, []),
4921
- minProperties: 1
4922
- }
5507
+ patch: buildPatchSchema("run")
4923
5508
  }, ["target", "patch"]);
4924
5509
  const paragraphInputSchema = objectSchema({
4925
5510
  target: objectSchema({ scope: { const: "docDefaults" }, channel: { const: "paragraph" } }, [
4926
5511
  "scope",
4927
5512
  "channel"
4928
5513
  ]),
4929
- patch: {
4930
- ...objectSchema({
4931
- justification: { enum: ["left", "center", "right", "justify", "distribute"] },
4932
- spacing: spacingSchema,
4933
- indent: indentSchema
4934
- }, []),
4935
- minProperties: 1
4936
- }
5514
+ patch: buildPatchSchema("paragraph")
4937
5515
  }, ["target", "patch"]);
4938
5516
  const stylesTargetResolutionSchema = objectSchema({
4939
5517
  scope: { const: "docDefaults" },
@@ -4941,26 +5519,7 @@ var init_schemas = __esm(() => {
4941
5519
  xmlPart: { const: "word/styles.xml" },
4942
5520
  xmlPath: { enum: ["w:styles/w:docDefaults/w:rPrDefault/w:rPr", "w:styles/w:docDefaults/w:pPrDefault/w:pPr"] }
4943
5521
  }, ["scope", "channel", "xmlPart", "xmlPath"]);
4944
- const booleanStateSchema = { enum: ["on", "off", "inherit"] };
4945
- const numberOrInheritSchema = { oneOf: [{ type: "number" }, { const: "inherit" }] };
4946
- const stringOrInheritSchema = { oneOf: [{ type: "string" }, { const: "inherit" }] };
4947
- const objectOrInheritSchema = { oneOf: [{ type: "object" }, { const: "inherit" }] };
4948
- const stylesStateSchema = {
4949
- type: "object",
4950
- properties: {
4951
- bold: booleanStateSchema,
4952
- italic: booleanStateSchema,
4953
- fontSize: numberOrInheritSchema,
4954
- fontSizeCs: numberOrInheritSchema,
4955
- letterSpacing: numberOrInheritSchema,
4956
- fontFamily: objectOrInheritSchema,
4957
- color: objectOrInheritSchema,
4958
- justification: stringOrInheritSchema,
4959
- spacing: objectOrInheritSchema,
4960
- indent: objectOrInheritSchema
4961
- },
4962
- additionalProperties: false
4963
- };
5522
+ const stylesStateSchema = buildStateSchema();
4964
5523
  const stylesSuccessSchema = objectSchema({
4965
5524
  success: { const: true },
4966
5525
  changed: { type: "boolean" },
@@ -6653,56 +7212,6 @@ var init_capabilities = __esm(() => {
6653
7212
  ];
6654
7213
  });
6655
7214
 
6656
- // ../../packages/document-api/src/inline-semantics/token-sets.ts
6657
- var ST_ON_OFF_VALUES, ST_ON_OFF_VALUE_SET, ST_ON_OFF_ON_VALUES, ST_ON_OFF_OFF_VALUES, ST_UNDERLINE_VALUES, ST_UNDERLINE_VALUE_SET, ST_THEME_COLOR_VALUES, ST_THEME_COLOR_VALUE_SET;
6658
- var init_token_sets = __esm(() => {
6659
- ST_ON_OFF_VALUES = ["true", "false", "1", "0", "on", "off"];
6660
- ST_ON_OFF_VALUE_SET = new Set(ST_ON_OFF_VALUES);
6661
- ST_ON_OFF_ON_VALUES = new Set(["true", "1", "on"]);
6662
- ST_ON_OFF_OFF_VALUES = new Set(["false", "0", "off"]);
6663
- ST_UNDERLINE_VALUES = [
6664
- "single",
6665
- "double",
6666
- "thick",
6667
- "dotted",
6668
- "dottedHeavy",
6669
- "dash",
6670
- "dashedHeavy",
6671
- "dashLong",
6672
- "dashLongHeavy",
6673
- "dotDash",
6674
- "dashDotHeavy",
6675
- "dotDotDash",
6676
- "dashDotDotHeavy",
6677
- "wave",
6678
- "wavyHeavy",
6679
- "wavyDouble",
6680
- "words",
6681
- "none"
6682
- ];
6683
- ST_UNDERLINE_VALUE_SET = new Set(ST_UNDERLINE_VALUES);
6684
- ST_THEME_COLOR_VALUES = [
6685
- "dark1",
6686
- "light1",
6687
- "dark2",
6688
- "light2",
6689
- "accent1",
6690
- "accent2",
6691
- "accent3",
6692
- "accent4",
6693
- "accent5",
6694
- "accent6",
6695
- "hyperlink",
6696
- "followedHyperlink",
6697
- "background1",
6698
- "text1",
6699
- "background2",
6700
- "text2",
6701
- "none"
6702
- ];
6703
- ST_THEME_COLOR_VALUE_SET = new Set(ST_THEME_COLOR_VALUES);
6704
- });
6705
-
6706
7215
  // ../../packages/document-api/src/inline-semantics/token-parsers.ts
6707
7216
  var init_token_parsers = __esm(() => {
6708
7217
  init_token_sets();
@@ -6959,250 +7468,6 @@ var init_format = __esm(() => {
6959
7468
  INLINE_ALIAS_INPUT_ALLOWED_KEYS = new Set(["target", "value"]);
6960
7469
  });
6961
7470
 
6962
- // ../../packages/document-api/src/styles/styles.ts
6963
- function getPropertyDefinition(key, channel) {
6964
- return PROPERTY_REGISTRY.find((d) => d.key === key && d.channel === channel);
6965
- }
6966
- function validateBooleanValue(key, value) {
6967
- if (typeof value !== "boolean") {
6968
- throw new DocumentApiValidationError("INVALID_INPUT", `patch.${key} must be a boolean, got ${typeof value}.`, {
6969
- field: "patch",
6970
- key,
6971
- value
6972
- });
6973
- }
6974
- }
6975
- function validateIntegerValue(key, value) {
6976
- if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value)) {
6977
- throw new DocumentApiValidationError("INVALID_INPUT", `patch.${key} must be a finite integer, got ${JSON.stringify(value)}.`, { field: "patch", key, value });
6978
- }
6979
- }
6980
- function validateEnumValue(key, value, allowed) {
6981
- if (typeof value !== "string" || !allowed.includes(value)) {
6982
- throw new DocumentApiValidationError("INVALID_INPUT", `patch.${key} must be one of: ${allowed.join(", ")}. Got ${JSON.stringify(value)}.`, { field: "patch", key, value });
6983
- }
6984
- }
6985
- function validateSubKeyValue(objectKey, subKey, value, subKeyType) {
6986
- if (subKeyType === "string") {
6987
- if (typeof value !== "string") {
6988
- throw new DocumentApiValidationError("INVALID_INPUT", `patch.${objectKey}.${subKey} must be a string, got ${typeof value}.`, { field: `patch.${objectKey}`, key: subKey, value });
6989
- }
6990
- return;
6991
- }
6992
- if (subKeyType === "integer") {
6993
- if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value)) {
6994
- throw new DocumentApiValidationError("INVALID_INPUT", `patch.${objectKey}.${subKey} must be a finite integer, got ${JSON.stringify(value)}.`, { field: `patch.${objectKey}`, key: subKey, value });
6995
- }
6996
- return;
6997
- }
6998
- if (subKeyType === "boolean") {
6999
- if (typeof value !== "boolean") {
7000
- throw new DocumentApiValidationError("INVALID_INPUT", `patch.${objectKey}.${subKey} must be a boolean, got ${typeof value}.`, { field: `patch.${objectKey}`, key: subKey, value });
7001
- }
7002
- return;
7003
- }
7004
- if (subKeyType.startsWith("enum:")) {
7005
- const allowed = subKeyType.slice(5).split(",");
7006
- if (typeof value !== "string" || !allowed.includes(value)) {
7007
- throw new DocumentApiValidationError("INVALID_INPUT", `patch.${objectKey}.${subKey} must be one of: ${allowed.join(", ")}. Got ${JSON.stringify(value)}.`, { field: `patch.${objectKey}`, key: subKey, value });
7008
- }
7009
- }
7010
- }
7011
- function validateObjectValue(key, value, schema) {
7012
- if (!isRecord(value)) {
7013
- throw new DocumentApiValidationError("INVALID_INPUT", `patch.${key} must be a non-null object, got ${typeof value}.`, { field: "patch", key, value });
7014
- }
7015
- const allowedSubKeys = new Set(Object.keys(schema));
7016
- const subKeys = Object.keys(value);
7017
- if (subKeys.length === 0) {
7018
- throw new DocumentApiValidationError("INVALID_INPUT", `patch.${key} must include at least one property.`, {
7019
- field: `patch.${key}`
7020
- });
7021
- }
7022
- for (const subKey of subKeys) {
7023
- if (!allowedSubKeys.has(subKey)) {
7024
- throw new DocumentApiValidationError("INVALID_INPUT", `Unknown key "${subKey}" on patch.${key}. Allowed keys: ${[...allowedSubKeys].join(", ")}.`, { field: `patch.${key}`, key: subKey });
7025
- }
7026
- validateSubKeyValue(key, subKey, value[subKey], schema[subKey]);
7027
- }
7028
- }
7029
- function validatePropertyValue(def, value) {
7030
- switch (def.type) {
7031
- case "boolean":
7032
- return validateBooleanValue(def.key, value);
7033
- case "integer":
7034
- return validateIntegerValue(def.key, value);
7035
- case "enum":
7036
- return validateEnumValue(def.key, value, def.values);
7037
- case "object":
7038
- return validateObjectValue(def.key, value, def.schema);
7039
- }
7040
- }
7041
- function validateStylesApplyInput(input) {
7042
- if (!isRecord(input)) {
7043
- throw new DocumentApiValidationError("INVALID_INPUT", "styles.apply input must be a non-null object.");
7044
- }
7045
- assertNoUnknownInputFields(input, STYLES_APPLY_INPUT_ALLOWED_KEYS);
7046
- const { target, patch } = input;
7047
- if (target === undefined || target === null) {
7048
- throw new DocumentApiValidationError("INVALID_TARGET", "styles.apply requires a target object.");
7049
- }
7050
- if (!isRecord(target)) {
7051
- throw new DocumentApiValidationError("INVALID_TARGET", "target must be a non-null object.", {
7052
- field: "target",
7053
- value: target
7054
- });
7055
- }
7056
- assertNoUnknownInputFields(target, STYLES_APPLY_TARGET_ALLOWED_KEYS, "target");
7057
- if (target.scope !== "docDefaults") {
7058
- throw new DocumentApiValidationError("INVALID_TARGET", `target.scope must be "docDefaults", got ${JSON.stringify(target.scope)}.`, { field: "target.scope", value: target.scope });
7059
- }
7060
- if (!VALID_CHANNELS.has(target.channel)) {
7061
- throw new DocumentApiValidationError("INVALID_TARGET", `target.channel must be "run" or "paragraph", got ${JSON.stringify(target.channel)}.`, { field: "target.channel", value: target.channel });
7062
- }
7063
- const channel = target.channel;
7064
- if (patch === undefined || patch === null) {
7065
- throw new DocumentApiValidationError("INVALID_INPUT", "styles.apply requires a patch object.");
7066
- }
7067
- if (!isRecord(patch)) {
7068
- throw new DocumentApiValidationError("INVALID_INPUT", "patch must be a non-null object.", {
7069
- field: "patch",
7070
- value: patch
7071
- });
7072
- }
7073
- const patchKeys = Object.keys(patch);
7074
- const allowedKeys = ALLOWED_KEYS_BY_CHANNEL[channel];
7075
- if (patchKeys.length === 0) {
7076
- throw new DocumentApiValidationError("INVALID_INPUT", "patch must include at least one property.");
7077
- }
7078
- for (const key of patchKeys) {
7079
- if (!allowedKeys.has(key)) {
7080
- const otherChannel = channel === "run" ? "paragraph" : "run";
7081
- const belongsToOther = ALLOWED_KEYS_BY_CHANNEL[otherChannel].has(key);
7082
- const detail = belongsToOther ? ` "${key}" is a ${otherChannel}-channel property.` : "";
7083
- throw new DocumentApiValidationError("INVALID_INPUT", `Unknown patch key "${key}" for channel "${channel}".${detail} Allowed keys: ${[...allowedKeys].join(", ")}.`, { field: "patch", key });
7084
- }
7085
- const def = getPropertyDefinition(key, channel);
7086
- if (def)
7087
- validatePropertyValue(def, patch[key]);
7088
- }
7089
- }
7090
- function validateStylesApplyOptions(options) {
7091
- if (options === undefined || options === null)
7092
- return;
7093
- if (!isRecord(options)) {
7094
- throw new DocumentApiValidationError("INVALID_INPUT", "styles.apply options must be a non-null object.");
7095
- }
7096
- for (const key of Object.keys(options)) {
7097
- if (!STYLES_APPLY_OPTIONS_ALLOWED_KEYS.has(key)) {
7098
- throw new DocumentApiValidationError("INVALID_INPUT", `Unknown options key "${key}". Allowed keys: ${[...STYLES_APPLY_OPTIONS_ALLOWED_KEYS].join(", ")}.`, { field: "options", key });
7099
- }
7100
- }
7101
- if (options.dryRun !== undefined && typeof options.dryRun !== "boolean") {
7102
- throw new DocumentApiValidationError("INVALID_INPUT", "options.dryRun must be a boolean.", {
7103
- field: "options.dryRun",
7104
- value: options.dryRun
7105
- });
7106
- }
7107
- if (options.expectedRevision !== undefined && typeof options.expectedRevision !== "string") {
7108
- throw new DocumentApiValidationError("INVALID_INPUT", "options.expectedRevision must be a string.", {
7109
- field: "options.expectedRevision",
7110
- value: options.expectedRevision
7111
- });
7112
- }
7113
- }
7114
- function assertNoUnknownInputFields(obj, allowlist, prefix) {
7115
- for (const key of Object.keys(obj)) {
7116
- if (!allowlist.has(key)) {
7117
- const location2 = prefix ? `${prefix}.${key}` : key;
7118
- throw new DocumentApiValidationError("INVALID_INPUT", `Unknown field "${location2}" on styles.apply input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: location2 });
7119
- }
7120
- }
7121
- }
7122
- function normalizeStylesApplyOptions(options) {
7123
- return {
7124
- dryRun: options?.dryRun ?? false,
7125
- expectedRevision: options?.expectedRevision
7126
- };
7127
- }
7128
- function executeStylesApply(adapter, input, options) {
7129
- validateStylesApplyInput(input);
7130
- validateStylesApplyOptions(options);
7131
- return adapter.apply(input, normalizeStylesApplyOptions(options));
7132
- }
7133
- var FONT_FAMILY_SCHEMA, COLOR_SCHEMA, SPACING_SCHEMA, INDENT_SCHEMA, PROPERTY_REGISTRY, ALLOWED_KEYS_BY_CHANNEL, STYLES_APPLY_INPUT_ALLOWED_KEYS, STYLES_APPLY_TARGET_ALLOWED_KEYS, STYLES_APPLY_OPTIONS_ALLOWED_KEYS, VALID_CHANNELS;
7134
- var init_styles = __esm(() => {
7135
- init_errors2();
7136
- init_validation_primitives();
7137
- FONT_FAMILY_SCHEMA = {
7138
- hint: "string",
7139
- ascii: "string",
7140
- hAnsi: "string",
7141
- eastAsia: "string",
7142
- cs: "string",
7143
- val: "string",
7144
- asciiTheme: "string",
7145
- hAnsiTheme: "string",
7146
- eastAsiaTheme: "string",
7147
- cstheme: "string"
7148
- };
7149
- COLOR_SCHEMA = {
7150
- val: "string",
7151
- themeColor: "string",
7152
- themeTint: "string",
7153
- themeShade: "string"
7154
- };
7155
- SPACING_SCHEMA = {
7156
- after: "integer",
7157
- afterAutospacing: "boolean",
7158
- afterLines: "integer",
7159
- before: "integer",
7160
- beforeAutospacing: "boolean",
7161
- beforeLines: "integer",
7162
- line: "integer",
7163
- lineRule: "enum:auto,exact,atLeast"
7164
- };
7165
- INDENT_SCHEMA = {
7166
- end: "integer",
7167
- endChars: "integer",
7168
- firstLine: "integer",
7169
- firstLineChars: "integer",
7170
- hanging: "integer",
7171
- hangingChars: "integer",
7172
- left: "integer",
7173
- leftChars: "integer",
7174
- right: "integer",
7175
- rightChars: "integer",
7176
- start: "integer",
7177
- startChars: "integer"
7178
- };
7179
- PROPERTY_REGISTRY = [
7180
- { key: "bold", channel: "run", type: "boolean" },
7181
- { key: "italic", channel: "run", type: "boolean" },
7182
- { key: "fontSize", channel: "run", type: "integer" },
7183
- { key: "fontSizeCs", channel: "run", type: "integer" },
7184
- { key: "letterSpacing", channel: "run", type: "integer" },
7185
- { key: "fontFamily", channel: "run", type: "object", schema: FONT_FAMILY_SCHEMA },
7186
- { key: "color", channel: "run", type: "object", schema: COLOR_SCHEMA },
7187
- {
7188
- key: "justification",
7189
- channel: "paragraph",
7190
- type: "enum",
7191
- values: ["left", "center", "right", "justify", "distribute"]
7192
- },
7193
- { key: "spacing", channel: "paragraph", type: "object", schema: SPACING_SCHEMA },
7194
- { key: "indent", channel: "paragraph", type: "object", schema: INDENT_SCHEMA }
7195
- ];
7196
- ALLOWED_KEYS_BY_CHANNEL = {
7197
- run: new Set(PROPERTY_REGISTRY.filter((d) => d.channel === "run").map((d) => d.key)),
7198
- paragraph: new Set(PROPERTY_REGISTRY.filter((d) => d.channel === "paragraph").map((d) => d.key))
7199
- };
7200
- STYLES_APPLY_INPUT_ALLOWED_KEYS = new Set(["target", "patch"]);
7201
- STYLES_APPLY_TARGET_ALLOWED_KEYS = new Set(["scope", "channel"]);
7202
- STYLES_APPLY_OPTIONS_ALLOWED_KEYS = new Set(["dryRun", "expectedRevision"]);
7203
- VALID_CHANNELS = new Set(["run", "paragraph"]);
7204
- });
7205
-
7206
7471
  // ../../packages/document-api/src/get-node/get-node.ts
7207
7472
  function executeGetNode(adapter, address2) {
7208
7473
  return adapter.getNode(address2);
@@ -30728,7 +30993,7 @@ var init_remark_gfm_z_sDF4ss_es = __esm(() => {
30728
30993
  emptyOptions2 = {};
30729
30994
  });
30730
30995
 
30731
- // ../../packages/superdoc/dist/chunks/SuperConverter-CDs2fwu4.es.js
30996
+ // ../../packages/superdoc/dist/chunks/SuperConverter-CoCZX_fP.es.js
30732
30997
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
30733
30998
  const fieldValue = extension$1.config[field];
30734
30999
  if (typeof fieldValue === "function")
@@ -31542,7 +31807,7 @@ function isTextAddress2(value) {
31542
31807
  return false;
31543
31808
  return range.start <= range.end;
31544
31809
  }
31545
- function assertNoUnknownFields2(input, allowlist, operationName) {
31810
+ function assertNoUnknownFields3(input, allowlist, operationName) {
31546
31811
  for (const key of Object.keys(input))
31547
31812
  if (!allowlist.has(key))
31548
31813
  throw new DocumentApiValidationError2("INVALID_TARGET", `Unknown field "${key}" on ${operationName} input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: key });
@@ -31917,20 +32182,20 @@ function assertNotEmptyPatch2(input, patchKeys, operation) {
31917
32182
  }
31918
32183
  function validateSetStyle2(input) {
31919
32184
  assertParagraphTarget2(input, "styles.paragraph.setStyle");
31920
- assertNoUnknownFields2(input, SET_STYLE_KEYS2, "styles.paragraph.setStyle");
32185
+ assertNoUnknownFields3(input, SET_STYLE_KEYS2, "styles.paragraph.setStyle");
31921
32186
  assertNonEmptyString$1(input.styleId, "styleId", "styles.paragraph.setStyle");
31922
32187
  }
31923
32188
  function validateClearStyle2(input) {
31924
32189
  assertParagraphTarget2(input, "styles.paragraph.clearStyle");
31925
- assertNoUnknownFields2(input, CLEAR_STYLE_KEYS2, "styles.paragraph.clearStyle");
32190
+ assertNoUnknownFields3(input, CLEAR_STYLE_KEYS2, "styles.paragraph.clearStyle");
31926
32191
  }
31927
32192
  function validateResetDirectFormatting2(input) {
31928
32193
  assertParagraphTarget2(input, "format.paragraph.resetDirectFormatting");
31929
- assertNoUnknownFields2(input, RESET_DIRECT_FORMATTING_KEYS2, "format.paragraph.resetDirectFormatting");
32194
+ assertNoUnknownFields3(input, RESET_DIRECT_FORMATTING_KEYS2, "format.paragraph.resetDirectFormatting");
31930
32195
  }
31931
32196
  function validateSetAlignment2(input) {
31932
32197
  assertParagraphTarget2(input, "format.paragraph.setAlignment");
31933
- assertNoUnknownFields2(input, SET_ALIGNMENT_KEYS2, "format.paragraph.setAlignment");
32198
+ assertNoUnknownFields3(input, SET_ALIGNMENT_KEYS2, "format.paragraph.setAlignment");
31934
32199
  const rec = input;
31935
32200
  if (rec.alignment === undefined)
31936
32201
  throw new DocumentApiValidationError2("INVALID_INPUT", "format.paragraph.setAlignment requires an alignment field.");
@@ -31938,12 +32203,12 @@ function validateSetAlignment2(input) {
31938
32203
  }
31939
32204
  function validateClearAlignment2(input) {
31940
32205
  assertParagraphTarget2(input, "format.paragraph.clearAlignment");
31941
- assertNoUnknownFields2(input, CLEAR_ALIGNMENT_KEYS2, "format.paragraph.clearAlignment");
32206
+ assertNoUnknownFields3(input, CLEAR_ALIGNMENT_KEYS2, "format.paragraph.clearAlignment");
31942
32207
  }
31943
32208
  function validateSetIndentation2(input) {
31944
32209
  const op = "format.paragraph.setIndentation";
31945
32210
  assertParagraphTarget2(input, op);
31946
- assertNoUnknownFields2(input, SET_INDENTATION_KEYS2, op);
32211
+ assertNoUnknownFields3(input, SET_INDENTATION_KEYS2, op);
31947
32212
  const rec = input;
31948
32213
  assertNotEmptyPatch2(rec, [
31949
32214
  "left",
@@ -31964,12 +32229,12 @@ function validateSetIndentation2(input) {
31964
32229
  }
31965
32230
  function validateClearIndentation2(input) {
31966
32231
  assertParagraphTarget2(input, "format.paragraph.clearIndentation");
31967
- assertNoUnknownFields2(input, CLEAR_INDENTATION_KEYS2, "format.paragraph.clearIndentation");
32232
+ assertNoUnknownFields3(input, CLEAR_INDENTATION_KEYS2, "format.paragraph.clearIndentation");
31968
32233
  }
31969
32234
  function validateSetSpacing2(input) {
31970
32235
  const op = "format.paragraph.setSpacing";
31971
32236
  assertParagraphTarget2(input, op);
31972
- assertNoUnknownFields2(input, SET_SPACING_KEYS2, op);
32237
+ assertNoUnknownFields3(input, SET_SPACING_KEYS2, op);
31973
32238
  const rec = input;
31974
32239
  assertNotEmptyPatch2(rec, [
31975
32240
  "before",
@@ -31991,12 +32256,12 @@ function validateSetSpacing2(input) {
31991
32256
  }
31992
32257
  function validateClearSpacing2(input) {
31993
32258
  assertParagraphTarget2(input, "format.paragraph.clearSpacing");
31994
- assertNoUnknownFields2(input, CLEAR_SPACING_KEYS2, "format.paragraph.clearSpacing");
32259
+ assertNoUnknownFields3(input, CLEAR_SPACING_KEYS2, "format.paragraph.clearSpacing");
31995
32260
  }
31996
32261
  function validateSetKeepOptions2(input) {
31997
32262
  const op = "format.paragraph.setKeepOptions";
31998
32263
  assertParagraphTarget2(input, op);
31999
- assertNoUnknownFields2(input, SET_KEEP_OPTIONS_KEYS2, op);
32264
+ assertNoUnknownFields3(input, SET_KEEP_OPTIONS_KEYS2, op);
32000
32265
  const rec = input;
32001
32266
  assertNotEmptyPatch2(rec, [
32002
32267
  "keepNext",
@@ -32013,7 +32278,7 @@ function validateSetKeepOptions2(input) {
32013
32278
  function validateSetOutlineLevel2(input) {
32014
32279
  const op = "format.paragraph.setOutlineLevel";
32015
32280
  assertParagraphTarget2(input, op);
32016
- assertNoUnknownFields2(input, SET_OUTLINE_LEVEL_KEYS2, op);
32281
+ assertNoUnknownFields3(input, SET_OUTLINE_LEVEL_KEYS2, op);
32017
32282
  const rec = input;
32018
32283
  if (rec.outlineLevel === undefined)
32019
32284
  throw new DocumentApiValidationError2("INVALID_INPUT", `${op} requires an outlineLevel field.`);
@@ -32028,7 +32293,7 @@ function validateSetOutlineLevel2(input) {
32028
32293
  function validateSetFlowOptions2(input) {
32029
32294
  const op = "format.paragraph.setFlowOptions";
32030
32295
  assertParagraphTarget2(input, op);
32031
- assertNoUnknownFields2(input, SET_FLOW_OPTIONS_KEYS2, op);
32296
+ assertNoUnknownFields3(input, SET_FLOW_OPTIONS_KEYS2, op);
32032
32297
  const rec = input;
32033
32298
  assertNotEmptyPatch2(rec, [
32034
32299
  "contextualSpacing",
@@ -32045,7 +32310,7 @@ function validateSetFlowOptions2(input) {
32045
32310
  function validateSetTabStop2(input) {
32046
32311
  const op = "format.paragraph.setTabStop";
32047
32312
  assertParagraphTarget2(input, op);
32048
- assertNoUnknownFields2(input, SET_TAB_STOP_KEYS2, op);
32313
+ assertNoUnknownFields3(input, SET_TAB_STOP_KEYS2, op);
32049
32314
  const rec = input;
32050
32315
  if (rec.position === undefined)
32051
32316
  throw new DocumentApiValidationError2("INVALID_INPUT", `${op} requires a position field.`);
@@ -32059,7 +32324,7 @@ function validateSetTabStop2(input) {
32059
32324
  function validateClearTabStop2(input) {
32060
32325
  const op = "format.paragraph.clearTabStop";
32061
32326
  assertParagraphTarget2(input, op);
32062
- assertNoUnknownFields2(input, CLEAR_TAB_STOP_KEYS2, op);
32327
+ assertNoUnknownFields3(input, CLEAR_TAB_STOP_KEYS2, op);
32063
32328
  const rec = input;
32064
32329
  if (rec.position === undefined)
32065
32330
  throw new DocumentApiValidationError2("INVALID_INPUT", `${op} requires a position field.`);
@@ -32067,12 +32332,12 @@ function validateClearTabStop2(input) {
32067
32332
  }
32068
32333
  function validateClearAllTabStops2(input) {
32069
32334
  assertParagraphTarget2(input, "format.paragraph.clearAllTabStops");
32070
- assertNoUnknownFields2(input, CLEAR_ALL_TAB_STOPS_KEYS2, "format.paragraph.clearAllTabStops");
32335
+ assertNoUnknownFields3(input, CLEAR_ALL_TAB_STOPS_KEYS2, "format.paragraph.clearAllTabStops");
32071
32336
  }
32072
32337
  function validateSetBorder2(input) {
32073
32338
  const op = "format.paragraph.setBorder";
32074
32339
  assertParagraphTarget2(input, op);
32075
- assertNoUnknownFields2(input, SET_BORDER_KEYS2, op);
32340
+ assertNoUnknownFields3(input, SET_BORDER_KEYS2, op);
32076
32341
  const rec = input;
32077
32342
  if (rec.side === undefined)
32078
32343
  throw new DocumentApiValidationError2("INVALID_INPUT", `${op} requires a side field.`);
@@ -32090,7 +32355,7 @@ function validateSetBorder2(input) {
32090
32355
  function validateClearBorder2(input) {
32091
32356
  const op = "format.paragraph.clearBorder";
32092
32357
  assertParagraphTarget2(input, op);
32093
- assertNoUnknownFields2(input, CLEAR_BORDER_KEYS2, op);
32358
+ assertNoUnknownFields3(input, CLEAR_BORDER_KEYS2, op);
32094
32359
  const rec = input;
32095
32360
  if (rec.side === undefined)
32096
32361
  throw new DocumentApiValidationError2("INVALID_INPUT", `${op} requires a side field.`);
@@ -32099,7 +32364,7 @@ function validateClearBorder2(input) {
32099
32364
  function validateSetShading2(input) {
32100
32365
  const op = "format.paragraph.setShading";
32101
32366
  assertParagraphTarget2(input, op);
32102
- assertNoUnknownFields2(input, SET_SHADING_KEYS2, op);
32367
+ assertNoUnknownFields3(input, SET_SHADING_KEYS2, op);
32103
32368
  const rec = input;
32104
32369
  assertNotEmptyPatch2(rec, [
32105
32370
  "fill",
@@ -32115,7 +32380,7 @@ function validateSetShading2(input) {
32115
32380
  }
32116
32381
  function validateClearShading2(input) {
32117
32382
  assertParagraphTarget2(input, "format.paragraph.clearShading");
32118
- assertNoUnknownFields2(input, CLEAR_SHADING_KEYS2, "format.paragraph.clearShading");
32383
+ assertNoUnknownFields3(input, CLEAR_SHADING_KEYS2, "format.paragraph.clearShading");
32119
32384
  }
32120
32385
  function executeParagraphsSetStyle2(adapter, input, options) {
32121
32386
  validateSetStyle2(input);
@@ -32193,6 +32458,274 @@ function executeParagraphsClearShading2(adapter, input, options) {
32193
32458
  validateClearShading2(input);
32194
32459
  return adapter.clearShading(input, normalizeMutationOptions2(options));
32195
32460
  }
32461
+ function getPropertyDefinition2(key, channel) {
32462
+ return PROPERTY_INDEX2.get(`${channel}:${key}`);
32463
+ }
32464
+ function toJsonSchema2(schema) {
32465
+ switch (schema.kind) {
32466
+ case "boolean":
32467
+ return { type: "boolean" };
32468
+ case "integer": {
32469
+ const s = { type: "integer" };
32470
+ if (schema.min !== undefined)
32471
+ s.minimum = schema.min;
32472
+ if (schema.max !== undefined)
32473
+ s.maximum = schema.max;
32474
+ return s;
32475
+ }
32476
+ case "enum":
32477
+ return { enum: [...schema.values] };
32478
+ case "string":
32479
+ return {
32480
+ type: "string",
32481
+ minLength: 1
32482
+ };
32483
+ case "object": {
32484
+ const properties = {};
32485
+ for (const [key, childSchema] of Object.entries(schema.children))
32486
+ properties[key] = toJsonSchema2(childSchema);
32487
+ return {
32488
+ type: "object",
32489
+ properties,
32490
+ additionalProperties: false,
32491
+ minProperties: 1
32492
+ };
32493
+ }
32494
+ case "array":
32495
+ return {
32496
+ type: "array",
32497
+ items: toJsonSchema2(schema.item)
32498
+ };
32499
+ }
32500
+ }
32501
+ function buildPatchSchema2(channel) {
32502
+ const properties = {};
32503
+ for (const def of PROPERTY_REGISTRY3) {
32504
+ if (def.channel !== channel)
32505
+ continue;
32506
+ properties[def.key] = toJsonSchema2(def.schema);
32507
+ }
32508
+ return {
32509
+ type: "object",
32510
+ properties,
32511
+ additionalProperties: false,
32512
+ minProperties: 1
32513
+ };
32514
+ }
32515
+ function buildStateSchema2() {
32516
+ const properties = {};
32517
+ for (const def of PROPERTY_REGISTRY3)
32518
+ switch (def.schema.kind) {
32519
+ case "boolean":
32520
+ properties[def.key] = { enum: [
32521
+ "on",
32522
+ "off",
32523
+ "inherit"
32524
+ ] };
32525
+ break;
32526
+ case "integer":
32527
+ properties[def.key] = { oneOf: [{ type: "number" }, { const: "inherit" }] };
32528
+ break;
32529
+ case "enum":
32530
+ case "string":
32531
+ properties[def.key] = { oneOf: [{ type: "string" }, { const: "inherit" }] };
32532
+ break;
32533
+ case "object":
32534
+ properties[def.key] = { oneOf: [{ type: "object" }, { const: "inherit" }] };
32535
+ break;
32536
+ case "array":
32537
+ properties[def.key] = { oneOf: [{ type: "array" }, { const: "inherit" }] };
32538
+ break;
32539
+ }
32540
+ return {
32541
+ type: "object",
32542
+ properties,
32543
+ additionalProperties: false
32544
+ };
32545
+ }
32546
+ function validateValue2(path2, value, schema) {
32547
+ switch (schema.kind) {
32548
+ case "boolean":
32549
+ if (typeof value !== "boolean")
32550
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${path2} must be a boolean, got ${typeof value}.`, {
32551
+ field: path2,
32552
+ value
32553
+ });
32554
+ return;
32555
+ case "integer":
32556
+ if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value))
32557
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${path2} must be a finite integer, got ${JSON.stringify(value)}.`, {
32558
+ field: path2,
32559
+ value
32560
+ });
32561
+ if (schema.min !== undefined && value < schema.min)
32562
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${path2} must be >= ${schema.min}, got ${value}.`, {
32563
+ field: path2,
32564
+ value
32565
+ });
32566
+ if (schema.max !== undefined && value > schema.max)
32567
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${path2} must be <= ${schema.max}, got ${value}.`, {
32568
+ field: path2,
32569
+ value
32570
+ });
32571
+ return;
32572
+ case "enum":
32573
+ if (typeof value !== "string" || !schema.values.includes(value))
32574
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${path2} must be one of: ${schema.values.join(", ")}. Got ${JSON.stringify(value)}.`, {
32575
+ field: path2,
32576
+ value
32577
+ });
32578
+ return;
32579
+ case "string":
32580
+ if (typeof value !== "string" || value.length === 0)
32581
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${path2} must be a non-empty string, got ${JSON.stringify(value)}.`, {
32582
+ field: path2,
32583
+ value
32584
+ });
32585
+ return;
32586
+ case "object":
32587
+ validateObjectValue2(path2, value, schema.children);
32588
+ return;
32589
+ case "array":
32590
+ validateArrayValue2(path2, value, schema.item);
32591
+ return;
32592
+ }
32593
+ }
32594
+ function validateObjectValue2(path2, value, children) {
32595
+ if (!isRecord3(value))
32596
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${path2} must be a non-null object, got ${typeof value}.`, {
32597
+ field: path2,
32598
+ value
32599
+ });
32600
+ const allowedKeys = new Set(Object.keys(children));
32601
+ const keys$1 = Object.keys(value);
32602
+ if (keys$1.length === 0)
32603
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${path2} must include at least one property.`, { field: path2 });
32604
+ for (const key of keys$1) {
32605
+ if (!allowedKeys.has(key))
32606
+ throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown key "${key}" on ${path2}. Allowed keys: ${[...allowedKeys].join(", ")}.`, {
32607
+ field: path2,
32608
+ key
32609
+ });
32610
+ validateValue2(`${path2}.${key}`, value[key], children[key]);
32611
+ }
32612
+ }
32613
+ function validateArrayValue2(path2, value, itemSchema) {
32614
+ if (!Array.isArray(value))
32615
+ throw new DocumentApiValidationError2("INVALID_INPUT", `${path2} must be an array, got ${typeof value}.`, {
32616
+ field: path2,
32617
+ value
32618
+ });
32619
+ for (let i2 = 0;i2 < value.length; i2++)
32620
+ validateValue2(`${path2}[${i2}]`, value[i2], itemSchema);
32621
+ }
32622
+ function validateStylesApplyInput2(input) {
32623
+ if (!isRecord3(input))
32624
+ throw new DocumentApiValidationError2("INVALID_INPUT", "styles.apply input must be a non-null object.");
32625
+ assertNoUnknownFields$1(input, INPUT_ALLOWED_KEYS2);
32626
+ const { target, patch } = input;
32627
+ if (target === undefined || target === null)
32628
+ throw new DocumentApiValidationError2("INVALID_TARGET", "styles.apply requires a target object.");
32629
+ if (!isRecord3(target))
32630
+ throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a non-null object.", {
32631
+ field: "target",
32632
+ value: target
32633
+ });
32634
+ assertNoUnknownFields$1(target, TARGET_ALLOWED_KEYS2, "target");
32635
+ if (target.scope !== "docDefaults")
32636
+ throw new DocumentApiValidationError2("INVALID_TARGET", `target.scope must be "docDefaults", got ${JSON.stringify(target.scope)}.`, {
32637
+ field: "target.scope",
32638
+ value: target.scope
32639
+ });
32640
+ if (!VALID_CHANNELS2.has(target.channel))
32641
+ throw new DocumentApiValidationError2("INVALID_TARGET", `target.channel must be "run" or "paragraph", got ${JSON.stringify(target.channel)}.`, {
32642
+ field: "target.channel",
32643
+ value: target.channel
32644
+ });
32645
+ const channel = target.channel;
32646
+ if (patch === undefined || patch === null)
32647
+ throw new DocumentApiValidationError2("INVALID_INPUT", "styles.apply requires a patch object.");
32648
+ if (!isRecord3(patch))
32649
+ throw new DocumentApiValidationError2("INVALID_INPUT", "patch must be a non-null object.", {
32650
+ field: "patch",
32651
+ value: patch
32652
+ });
32653
+ const patchKeys = Object.keys(patch);
32654
+ if (patchKeys.length === 0)
32655
+ throw new DocumentApiValidationError2("INVALID_INPUT", "patch must include at least one property.");
32656
+ const allowedKeys = ALLOWED_KEYS_BY_CHANNEL2[channel];
32657
+ const otherChannel = channel === "run" ? "paragraph" : "run";
32658
+ for (const key of patchKeys) {
32659
+ const excludedEntry = EXCLUDED_KEYS2[channel].get(key);
32660
+ if (excludedEntry !== undefined)
32661
+ throw new DocumentApiValidationError2("INVALID_INPUT", `patch key '${key}' is not valid in Word docDefaults (${excludedEntry}). This is an intentional restriction per MS-OI29500.`, {
32662
+ field: "patch",
32663
+ key,
32664
+ reason: "excluded_docdefaults_key"
32665
+ });
32666
+ if (!allowedKeys.has(key)) {
32667
+ if (ALLOWED_KEYS_BY_CHANNEL2[otherChannel].has(key))
32668
+ throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown patch key "${key}" for channel "${channel}". "${key}" is a ${otherChannel}-channel property. Allowed keys: ${[...allowedKeys].join(", ")}.`, {
32669
+ field: "patch",
32670
+ key
32671
+ });
32672
+ const otherExcluded = EXCLUDED_KEYS2[otherChannel].get(key);
32673
+ if (otherExcluded !== undefined)
32674
+ throw new DocumentApiValidationError2("INVALID_INPUT", `patch key '${key}' is not valid in Word docDefaults (${otherExcluded}). This is an intentional restriction per MS-OI29500.`, {
32675
+ field: "patch",
32676
+ key,
32677
+ reason: "excluded_docdefaults_key"
32678
+ });
32679
+ throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown patch key "${key}" for channel "${channel}". Allowed keys: ${[...allowedKeys].join(", ")}.`, {
32680
+ field: "patch",
32681
+ key
32682
+ });
32683
+ }
32684
+ const def = getPropertyDefinition2(key, channel);
32685
+ if (def)
32686
+ validateValue2(`patch.${key}`, patch[key], def.schema);
32687
+ }
32688
+ }
32689
+ function validateStylesApplyOptions2(options) {
32690
+ if (options === undefined || options === null)
32691
+ return;
32692
+ if (!isRecord3(options))
32693
+ throw new DocumentApiValidationError2("INVALID_INPUT", "styles.apply options must be a non-null object.");
32694
+ for (const key of Object.keys(options))
32695
+ if (!OPTIONS_ALLOWED_KEYS2.has(key))
32696
+ throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown options key "${key}". Allowed keys: ${[...OPTIONS_ALLOWED_KEYS2].join(", ")}.`, {
32697
+ field: "options",
32698
+ key
32699
+ });
32700
+ if (options.dryRun !== undefined && typeof options.dryRun !== "boolean")
32701
+ throw new DocumentApiValidationError2("INVALID_INPUT", "options.dryRun must be a boolean.", {
32702
+ field: "options.dryRun",
32703
+ value: options.dryRun
32704
+ });
32705
+ if (options.expectedRevision !== undefined && typeof options.expectedRevision !== "string")
32706
+ throw new DocumentApiValidationError2("INVALID_INPUT", "options.expectedRevision must be a string.", {
32707
+ field: "options.expectedRevision",
32708
+ value: options.expectedRevision
32709
+ });
32710
+ }
32711
+ function assertNoUnknownFields$1(obj, allowlist, prefix) {
32712
+ for (const key of Object.keys(obj))
32713
+ if (!allowlist.has(key)) {
32714
+ const location2 = prefix ? `${prefix}.${key}` : key;
32715
+ throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown field "${location2}" on styles.apply input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: location2 });
32716
+ }
32717
+ }
32718
+ function normalizeOptions2(options) {
32719
+ return {
32720
+ dryRun: options?.dryRun ?? false,
32721
+ expectedRevision: options?.expectedRevision
32722
+ };
32723
+ }
32724
+ function executeStylesApply2(adapter, input, options) {
32725
+ validateStylesApplyInput2(input);
32726
+ validateStylesApplyOptions2(options);
32727
+ return adapter.apply(input, normalizeOptions2(options));
32728
+ }
32196
32729
  function objectSchema2(properties, required = []) {
32197
32730
  const schema = {
32198
32731
  type: "object",
@@ -32446,7 +32979,7 @@ function derivePropertyStateFromDirect2(direct) {
32446
32979
  function validateCreateCommentInput2(input) {
32447
32980
  if (!isRecord3(input))
32448
32981
  throw new DocumentApiValidationError2("INVALID_TARGET", "comments.create input must be a non-null object.");
32449
- assertNoUnknownFields2(input, CREATE_COMMENT_ALLOWED_KEYS2, "comments.create");
32982
+ assertNoUnknownFields3(input, CREATE_COMMENT_ALLOWED_KEYS2, "comments.create");
32450
32983
  const { target, text: text$2, parentCommentId } = input;
32451
32984
  const hasTarget = target !== undefined;
32452
32985
  const isReply = parentCommentId !== undefined;
@@ -32476,7 +33009,7 @@ function validateCreateCommentInput2(input) {
32476
33009
  function validatePatchCommentInput2(input) {
32477
33010
  if (!isRecord3(input))
32478
33011
  throw new DocumentApiValidationError2("INVALID_TARGET", "comments.patch input must be a non-null object.");
32479
- assertNoUnknownFields2(input, PATCH_COMMENT_ALLOWED_KEYS2, "comments.patch");
33012
+ assertNoUnknownFields3(input, PATCH_COMMENT_ALLOWED_KEYS2, "comments.patch");
32480
33013
  const { commentId, target } = input;
32481
33014
  const hasTarget = target !== undefined;
32482
33015
  if (typeof commentId !== "string")
@@ -32595,7 +33128,7 @@ function executeFind2(adapter, selectorOrQuery, options) {
32595
33128
  function validateStyleApplyInput2(input) {
32596
33129
  if (!isRecord3(input))
32597
33130
  throw new DocumentApiValidationError2("INVALID_INPUT", "format.apply input must be a non-null object.");
32598
- assertNoUnknownFields2(input, STYLE_APPLY_INPUT_ALLOWED_KEYS2, "format.apply");
33131
+ assertNoUnknownFields3(input, STYLE_APPLY_INPUT_ALLOWED_KEYS2, "format.apply");
32599
33132
  if (input.target === undefined)
32600
33133
  throw new DocumentApiValidationError2("INVALID_TARGET", "format.apply requires a target.");
32601
33134
  if (!isTextAddress2(input.target))
@@ -32624,7 +33157,7 @@ function normalizeInlineAliasValue2(key, value) {
32624
33157
  function validateInlineAliasInput2(key, input) {
32625
33158
  const operation = `format.${key}`;
32626
33159
  const candidate = isRecord3(input) ? input : {};
32627
- assertNoUnknownFields2(candidate, INLINE_ALIAS_INPUT_ALLOWED_KEYS2, operation);
33160
+ assertNoUnknownFields3(candidate, INLINE_ALIAS_INPUT_ALLOWED_KEYS2, operation);
32628
33161
  validateTarget2(candidate, operation);
32629
33162
  }
32630
33163
  function executeInlineAlias2(adapter, key, input, options) {
@@ -32648,191 +33181,6 @@ function validateTarget2(input, operation) {
32648
33181
  value: input.target
32649
33182
  });
32650
33183
  }
32651
- function getPropertyDefinition2(key, channel) {
32652
- return PROPERTY_REGISTRY2.find((d) => d.key === key && d.channel === channel);
32653
- }
32654
- function validateBooleanValue2(key, value) {
32655
- if (typeof value !== "boolean")
32656
- throw new DocumentApiValidationError2("INVALID_INPUT", `patch.${key} must be a boolean, got ${typeof value}.`, {
32657
- field: "patch",
32658
- key,
32659
- value
32660
- });
32661
- }
32662
- function validateIntegerValue2(key, value) {
32663
- if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value))
32664
- throw new DocumentApiValidationError2("INVALID_INPUT", `patch.${key} must be a finite integer, got ${JSON.stringify(value)}.`, {
32665
- field: "patch",
32666
- key,
32667
- value
32668
- });
32669
- }
32670
- function validateEnumValue2(key, value, allowed) {
32671
- if (typeof value !== "string" || !allowed.includes(value))
32672
- throw new DocumentApiValidationError2("INVALID_INPUT", `patch.${key} must be one of: ${allowed.join(", ")}. Got ${JSON.stringify(value)}.`, {
32673
- field: "patch",
32674
- key,
32675
- value
32676
- });
32677
- }
32678
- function validateSubKeyValue2(objectKey, subKey, value, subKeyType) {
32679
- if (subKeyType === "string") {
32680
- if (typeof value !== "string")
32681
- throw new DocumentApiValidationError2("INVALID_INPUT", `patch.${objectKey}.${subKey} must be a string, got ${typeof value}.`, {
32682
- field: `patch.${objectKey}`,
32683
- key: subKey,
32684
- value
32685
- });
32686
- return;
32687
- }
32688
- if (subKeyType === "integer") {
32689
- if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value))
32690
- throw new DocumentApiValidationError2("INVALID_INPUT", `patch.${objectKey}.${subKey} must be a finite integer, got ${JSON.stringify(value)}.`, {
32691
- field: `patch.${objectKey}`,
32692
- key: subKey,
32693
- value
32694
- });
32695
- return;
32696
- }
32697
- if (subKeyType === "boolean") {
32698
- if (typeof value !== "boolean")
32699
- throw new DocumentApiValidationError2("INVALID_INPUT", `patch.${objectKey}.${subKey} must be a boolean, got ${typeof value}.`, {
32700
- field: `patch.${objectKey}`,
32701
- key: subKey,
32702
- value
32703
- });
32704
- return;
32705
- }
32706
- if (subKeyType.startsWith("enum:")) {
32707
- const allowed = subKeyType.slice(5).split(",");
32708
- if (typeof value !== "string" || !allowed.includes(value))
32709
- throw new DocumentApiValidationError2("INVALID_INPUT", `patch.${objectKey}.${subKey} must be one of: ${allowed.join(", ")}. Got ${JSON.stringify(value)}.`, {
32710
- field: `patch.${objectKey}`,
32711
- key: subKey,
32712
- value
32713
- });
32714
- }
32715
- }
32716
- function validateObjectValue2(key, value, schema) {
32717
- if (!isRecord3(value))
32718
- throw new DocumentApiValidationError2("INVALID_INPUT", `patch.${key} must be a non-null object, got ${typeof value}.`, {
32719
- field: "patch",
32720
- key,
32721
- value
32722
- });
32723
- const allowedSubKeys = new Set(Object.keys(schema));
32724
- const subKeys = Object.keys(value);
32725
- if (subKeys.length === 0)
32726
- throw new DocumentApiValidationError2("INVALID_INPUT", `patch.${key} must include at least one property.`, { field: `patch.${key}` });
32727
- for (const subKey of subKeys) {
32728
- if (!allowedSubKeys.has(subKey))
32729
- throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown key "${subKey}" on patch.${key}. Allowed keys: ${[...allowedSubKeys].join(", ")}.`, {
32730
- field: `patch.${key}`,
32731
- key: subKey
32732
- });
32733
- validateSubKeyValue2(key, subKey, value[subKey], schema[subKey]);
32734
- }
32735
- }
32736
- function validatePropertyValue2(def, value) {
32737
- switch (def.type) {
32738
- case "boolean":
32739
- return validateBooleanValue2(def.key, value);
32740
- case "integer":
32741
- return validateIntegerValue2(def.key, value);
32742
- case "enum":
32743
- return validateEnumValue2(def.key, value, def.values);
32744
- case "object":
32745
- return validateObjectValue2(def.key, value, def.schema);
32746
- }
32747
- }
32748
- function validateStylesApplyInput2(input) {
32749
- if (!isRecord3(input))
32750
- throw new DocumentApiValidationError2("INVALID_INPUT", "styles.apply input must be a non-null object.");
32751
- assertNoUnknownInputFields2(input, STYLES_APPLY_INPUT_ALLOWED_KEYS2);
32752
- const { target, patch } = input;
32753
- if (target === undefined || target === null)
32754
- throw new DocumentApiValidationError2("INVALID_TARGET", "styles.apply requires a target object.");
32755
- if (!isRecord3(target))
32756
- throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a non-null object.", {
32757
- field: "target",
32758
- value: target
32759
- });
32760
- assertNoUnknownInputFields2(target, STYLES_APPLY_TARGET_ALLOWED_KEYS2, "target");
32761
- if (target.scope !== "docDefaults")
32762
- throw new DocumentApiValidationError2("INVALID_TARGET", `target.scope must be "docDefaults", got ${JSON.stringify(target.scope)}.`, {
32763
- field: "target.scope",
32764
- value: target.scope
32765
- });
32766
- if (!VALID_CHANNELS2.has(target.channel))
32767
- throw new DocumentApiValidationError2("INVALID_TARGET", `target.channel must be "run" or "paragraph", got ${JSON.stringify(target.channel)}.`, {
32768
- field: "target.channel",
32769
- value: target.channel
32770
- });
32771
- const channel = target.channel;
32772
- if (patch === undefined || patch === null)
32773
- throw new DocumentApiValidationError2("INVALID_INPUT", "styles.apply requires a patch object.");
32774
- if (!isRecord3(patch))
32775
- throw new DocumentApiValidationError2("INVALID_INPUT", "patch must be a non-null object.", {
32776
- field: "patch",
32777
- value: patch
32778
- });
32779
- const patchKeys = Object.keys(patch);
32780
- const allowedKeys = ALLOWED_KEYS_BY_CHANNEL2[channel];
32781
- if (patchKeys.length === 0)
32782
- throw new DocumentApiValidationError2("INVALID_INPUT", "patch must include at least one property.");
32783
- for (const key of patchKeys) {
32784
- if (!allowedKeys.has(key)) {
32785
- const otherChannel = channel === "run" ? "paragraph" : "run";
32786
- throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown patch key "${key}" for channel "${channel}".${ALLOWED_KEYS_BY_CHANNEL2[otherChannel].has(key) ? ` "${key}" is a ${otherChannel}-channel property.` : ""} Allowed keys: ${[...allowedKeys].join(", ")}.`, {
32787
- field: "patch",
32788
- key
32789
- });
32790
- }
32791
- const def = getPropertyDefinition2(key, channel);
32792
- if (def)
32793
- validatePropertyValue2(def, patch[key]);
32794
- }
32795
- }
32796
- function validateStylesApplyOptions2(options) {
32797
- if (options === undefined || options === null)
32798
- return;
32799
- if (!isRecord3(options))
32800
- throw new DocumentApiValidationError2("INVALID_INPUT", "styles.apply options must be a non-null object.");
32801
- for (const key of Object.keys(options))
32802
- if (!STYLES_APPLY_OPTIONS_ALLOWED_KEYS2.has(key))
32803
- throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown options key "${key}". Allowed keys: ${[...STYLES_APPLY_OPTIONS_ALLOWED_KEYS2].join(", ")}.`, {
32804
- field: "options",
32805
- key
32806
- });
32807
- if (options.dryRun !== undefined && typeof options.dryRun !== "boolean")
32808
- throw new DocumentApiValidationError2("INVALID_INPUT", "options.dryRun must be a boolean.", {
32809
- field: "options.dryRun",
32810
- value: options.dryRun
32811
- });
32812
- if (options.expectedRevision !== undefined && typeof options.expectedRevision !== "string")
32813
- throw new DocumentApiValidationError2("INVALID_INPUT", "options.expectedRevision must be a string.", {
32814
- field: "options.expectedRevision",
32815
- value: options.expectedRevision
32816
- });
32817
- }
32818
- function assertNoUnknownInputFields2(obj, allowlist, prefix) {
32819
- for (const key of Object.keys(obj))
32820
- if (!allowlist.has(key)) {
32821
- const location2 = prefix ? `${prefix}.${key}` : key;
32822
- throw new DocumentApiValidationError2("INVALID_INPUT", `Unknown field "${location2}" on styles.apply input. Allowed fields: ${[...allowlist].join(", ")}.`, { field: location2 });
32823
- }
32824
- }
32825
- function normalizeStylesApplyOptions2(options) {
32826
- return {
32827
- dryRun: options?.dryRun ?? false,
32828
- expectedRevision: options?.expectedRevision
32829
- };
32830
- }
32831
- function executeStylesApply2(adapter, input, options) {
32832
- validateStylesApplyInput2(input);
32833
- validateStylesApplyOptions2(options);
32834
- return adapter.apply(input, normalizeStylesApplyOptions2(options));
32835
- }
32836
33184
  function executeGetNode2(adapter, address2) {
32837
33185
  return adapter.getNode(address2);
32838
33186
  }
@@ -32854,7 +33202,7 @@ function executeInfo2(adapter, input) {
32854
33202
  function validateDeleteInput2(input) {
32855
33203
  if (!isRecord3(input))
32856
33204
  throw new DocumentApiValidationError2("INVALID_TARGET", "Delete input must be a non-null object.");
32857
- assertNoUnknownFields2(input, DELETE_INPUT_ALLOWED_KEYS2, "delete");
33205
+ assertNoUnknownFields3(input, DELETE_INPUT_ALLOWED_KEYS2, "delete");
32858
33206
  const { target } = input;
32859
33207
  if (target === undefined)
32860
33208
  throw new DocumentApiValidationError2("INVALID_TARGET", "Delete requires a target.");
@@ -32875,7 +33223,7 @@ function executeDelete2(adapter, input, options) {
32875
33223
  function validateInsertInput2(input) {
32876
33224
  if (!isRecord3(input))
32877
33225
  throw new DocumentApiValidationError2("INVALID_TARGET", "Insert input must be a non-null object.");
32878
- assertNoUnknownFields2(input, INSERT_INPUT_ALLOWED_KEYS2, "insert");
33226
+ assertNoUnknownFields3(input, INSERT_INPUT_ALLOWED_KEYS2, "insert");
32879
33227
  const { target, value, type } = input;
32880
33228
  if (target !== undefined && !isTextAddress2(target))
32881
33229
  throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a text address object.", {
@@ -32979,7 +33327,7 @@ function executeListsConvertToText2(adapter, input, options) {
32979
33327
  function validateReplaceInput2(input) {
32980
33328
  if (!isRecord3(input))
32981
33329
  throw new DocumentApiValidationError2("INVALID_TARGET", "Replace input must be a non-null object.");
32982
- assertNoUnknownFields2(input, REPLACE_INPUT_ALLOWED_KEYS2, "replace");
33330
+ assertNoUnknownFields3(input, REPLACE_INPUT_ALLOWED_KEYS2, "replace");
32983
33331
  const { target, text: text$2 } = input;
32984
33332
  if (target === undefined)
32985
33333
  throw new DocumentApiValidationError2("INVALID_TARGET", "Replace requires a target.");
@@ -50160,7 +50508,7 @@ var isRegExp = (value) => {
50160
50508
  tracked: false,
50161
50509
  carrier: runAttributeCarrier2(runPropertyKey ?? key),
50162
50510
  schema
50163
- }), INLINE_PROPERTY_REGISTRY2, INLINE_PROPERTY_KEY_SET2, INLINE_PROPERTY_BY_KEY2, UNDERLINE_OBJECT_ALLOWED_KEYS2, SHADING_ALLOWED_KEYS2, BORDER_ALLOWED_KEYS2, FIT_TEXT_ALLOWED_KEYS2, LANG_ALLOWED_KEYS2, RFONTS_ALLOWED_KEYS2, EAST_ASIAN_LAYOUT_ALLOWED_KEYS2, STYLISTIC_SET_ALLOWED_KEYS2, VERT_ALIGN_VALUES2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_NOT_FOUND_COMMAND2, T_NOT_FOUND_COMMAND_TRACKED2, T_QUERY_MATCH2, T_SECTION_CREATE2, T_SECTION_READ2, T_PARAGRAPH_MUTATION2, T_SECTION_MUTATION2, T_SECTION_SETTINGS_MUTATION2, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG2, PARAGRAPH_ALIGNMENTS2, TAB_STOP_ALIGNMENTS2, TAB_STOP_LEADERS2, BORDER_SIDES2, CLEAR_BORDER_SIDES2, LINE_RULES2, PARAGRAPH_BLOCK_TYPES2, SET_STYLE_KEYS2, CLEAR_STYLE_KEYS2, RESET_DIRECT_FORMATTING_KEYS2, SET_ALIGNMENT_KEYS2, CLEAR_ALIGNMENT_KEYS2, SET_INDENTATION_KEYS2, CLEAR_INDENTATION_KEYS2, SET_SPACING_KEYS2, CLEAR_SPACING_KEYS2, SET_KEEP_OPTIONS_KEYS2, SET_OUTLINE_LEVEL_KEYS2, SET_FLOW_OPTIONS_KEYS2, SET_TAB_STOP_KEYS2, CLEAR_TAB_STOP_KEYS2, CLEAR_ALL_TAB_STOPS_KEYS2, SET_BORDER_KEYS2, CLEAR_BORDER_KEYS2, SET_SHADING_KEYS2, CLEAR_SHADING_KEYS2, nodeTypeValues2, blockNodeTypeValues2, deletableBlockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, deletableBlockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, paragraphTargetSchema2, sectionAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, entityAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, nodeSummarySchema2, nodeInfoSchema2, matchContextSchema2, unknownNodeDiagnosticSchema2, textSelectorSchema2, nodeSelectorSchema2, findItemDomainSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, sectionBreakTypeSchema2, sectionOrientationSchema2, sectionVerticalAlignSchema2, sectionDirectionSchema2, sectionHeaderFooterKindSchema2, sectionHeaderFooterVariantSchema2, sectionLineNumberRestartSchema2, sectionPageNumberFormatSchema2, sectionRangeDomainSchema2, sectionPageMarginsSchema2, sectionHeaderFooterMarginsSchema2, sectionPageSetupSchema2, sectionColumnsSchema2, sectionLineNumberingSchema2, sectionPageNumberingSchema2, sectionHeaderFooterRefsSchema2, sectionBorderSpecSchema2, sectionPageBordersSchema2, sectionMutationSuccessSchema2, documentMutationSuccessSchema2, paragraphMutationTargetSchema2, paragraphMutationSuccessSchema2, createSectionBreakSuccessSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, inlinePropertyCapabilitySchema2, formatCapabilitiesSchema2, planEngineCapabilitiesSchema2, tableCreateLocationSchema2, formatInlineAliasOperationSchemas2, tocMutationFailureSchema2, tocMutationSuccessSchema2, tocEntryMutationFailureSchema2, tocEntryMutationSuccessSchema2, GROUP_METADATA2, STEP_OP_CATALOG_UNFROZEN2, PUBLIC_STEP_OP_CATALOG_UNFROZEN2, PUBLIC_MUTATION_STEP_OP_IDS2, PUBLIC_MUTATION_STEP_OP_SET2, CAPABILITY_REASON_CODES2, ST_ON_OFF_ON_VALUES2, ST_ON_OFF_OFF_VALUES2, ST_UNDERLINE_VALUE_SET2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, INLINE_ALIAS_INPUT_ALLOWED_KEYS2, PROPERTY_REGISTRY2, ALLOWED_KEYS_BY_CHANNEL2, STYLES_APPLY_INPUT_ALLOWED_KEYS2, STYLES_APPLY_TARGET_ALLOWED_KEYS2, STYLES_APPLY_OPTIONS_ALLOWED_KEYS2, VALID_CHANNELS2, DELETE_INPUT_ALLOWED_KEYS2, INSERT_INPUT_ALLOWED_KEYS2, VALID_INSERT_TYPES2, REPLACE_INPUT_ALLOWED_KEYS2, SECTION_BREAK_TYPES$1, SUPPORTED_DELETE_NODE_TYPES2, REJECTED_DELETE_NODE_TYPES2, TABLE_LOCATOR_OPS2, ROW_LOCATOR_OPS2, COLUMN_LOCATOR_OPS2, MERGE_RANGE_LOCATOR_OPS2, DEFAULT_SECTIONS_LIST_LIMIT2 = 250, SECTION_BREAK_TYPES3, SECTION_ORIENTATIONS2, SECTION_VERTICAL_ALIGNS2, SECTION_DIRECTIONS2, HEADER_FOOTER_KINDS2, HEADER_FOOTER_VARIANTS2, LINE_NUMBER_RESTARTS2, PAGE_NUMBER_FORMATS2, PAGE_BORDER_DISPLAYS2, PAGE_BORDER_OFFSET_FROM_VALUES2, PAGE_BORDER_Z_ORDER_VALUES2, _buffers, _defaultCollectionId = null, _nextCollectionId = 1, generateV2HandlerEntity = (handlerName, translator$208) => ({
50511
+ }), INLINE_PROPERTY_REGISTRY2, INLINE_PROPERTY_KEY_SET2, INLINE_PROPERTY_BY_KEY2, UNDERLINE_OBJECT_ALLOWED_KEYS2, SHADING_ALLOWED_KEYS2, BORDER_ALLOWED_KEYS2, FIT_TEXT_ALLOWED_KEYS2, LANG_ALLOWED_KEYS2, RFONTS_ALLOWED_KEYS2, EAST_ASIAN_LAYOUT_ALLOWED_KEYS2, STYLISTIC_SET_ALLOWED_KEYS2, VERT_ALIGN_VALUES2, NONE_FAILURES2, NONE_THROWS2, T_NOT_FOUND2, T_NOT_FOUND_CAPABLE2, T_PLAN_ENGINE2, T_NOT_FOUND_COMMAND2, T_NOT_FOUND_COMMAND_TRACKED2, T_QUERY_MATCH2, T_SECTION_CREATE2, T_SECTION_READ2, T_PARAGRAPH_MUTATION2, T_SECTION_MUTATION2, T_SECTION_SETTINGS_MUTATION2, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS2, OPERATION_DEFINITIONS2, OPERATION_IDS2, COMMAND_CATALOG2, PARAGRAPH_ALIGNMENTS2, TAB_STOP_ALIGNMENTS2, TAB_STOP_LEADERS2, BORDER_SIDES2, CLEAR_BORDER_SIDES2, LINE_RULES2, PARAGRAPH_BLOCK_TYPES2, SET_STYLE_KEYS2, CLEAR_STYLE_KEYS2, RESET_DIRECT_FORMATTING_KEYS2, SET_ALIGNMENT_KEYS2, CLEAR_ALIGNMENT_KEYS2, SET_INDENTATION_KEYS2, CLEAR_INDENTATION_KEYS2, SET_SPACING_KEYS2, CLEAR_SPACING_KEYS2, SET_KEEP_OPTIONS_KEYS2, SET_OUTLINE_LEVEL_KEYS2, SET_FLOW_OPTIONS_KEYS2, SET_TAB_STOP_KEYS2, CLEAR_TAB_STOP_KEYS2, CLEAR_ALL_TAB_STOPS_KEYS2, SET_BORDER_KEYS2, CLEAR_BORDER_KEYS2, SET_SHADING_KEYS2, CLEAR_SHADING_KEYS2, ST_ON_OFF_ON_VALUES2, ST_ON_OFF_OFF_VALUES2, ST_UNDERLINE_VALUES2, ST_UNDERLINE_VALUE_SET2, ST_VERTICAL_ALIGN_RUN2, ST_EM2, ST_TEXT_ALIGNMENT2, ST_TEXT_DIRECTION2, ST_TEXTBOX_TIGHT_WRAP2, ST_TEXT_TRANSFORM2, ST_JUSTIFICATION2, FONT_FAMILY_SCHEMA2, COLOR_SCHEMA2, SPACING_SCHEMA2, INDENT_SCHEMA2, UNDERLINE_SCHEMA2, BORDER_PROPERTIES_SCHEMA2, SHADING_SCHEMA2, LANG_SCHEMA2, EAST_ASIAN_LAYOUT_SCHEMA2, FIT_TEXT_SCHEMA2, NUMBERING_PROPERTIES_SCHEMA2, FRAME_PR_SCHEMA2, PARAGRAPH_BORDERS_SCHEMA2, TAB_STOP_SCHEMA2, PROPERTY_REGISTRY3, ALLOWED_KEYS_BY_CHANNEL2, PROPERTY_INDEX2, EXCLUDED_KEYS2, INPUT_ALLOWED_KEYS2, TARGET_ALLOWED_KEYS2, OPTIONS_ALLOWED_KEYS2, VALID_CHANNELS2, nodeTypeValues2, blockNodeTypeValues2, deletableBlockNodeTypeValues2, inlineNodeTypeValues2, rangeSchema2, textAddressSchema2, textTargetSchema2, blockNodeAddressSchema2, deletableBlockNodeAddressSchema2, paragraphAddressSchema2, headingAddressSchema2, listItemAddressSchema2, paragraphTargetSchema2, sectionAddressSchema2, nodeAddressSchema2, commentAddressSchema2, trackedChangeAddressSchema2, entityAddressSchema2, resolvedHandleSchema2, pageInfoSchema2, receiptSuccessSchema2, textMutationResolutionSchema2, textMutationSuccessSchema2, matchBlockSchema2, trackChangeRefSchema2, createParagraphSuccessSchema2, createHeadingSuccessSchema2, headingLevelSchema2, listsInsertSuccessSchema2, listsMutateItemSuccessSchema2, nodeSummarySchema2, nodeInfoSchema2, matchContextSchema2, unknownNodeDiagnosticSchema2, textSelectorSchema2, nodeSelectorSchema2, findItemDomainSchema2, documentInfoCountsSchema2, documentInfoOutlineItemSchema2, documentInfoCapabilitiesSchema2, listKindSchema2, listInsertPositionSchema2, sectionBreakTypeSchema2, sectionOrientationSchema2, sectionVerticalAlignSchema2, sectionDirectionSchema2, sectionHeaderFooterKindSchema2, sectionHeaderFooterVariantSchema2, sectionLineNumberRestartSchema2, sectionPageNumberFormatSchema2, sectionRangeDomainSchema2, sectionPageMarginsSchema2, sectionHeaderFooterMarginsSchema2, sectionPageSetupSchema2, sectionColumnsSchema2, sectionLineNumberingSchema2, sectionPageNumberingSchema2, sectionHeaderFooterRefsSchema2, sectionBorderSpecSchema2, sectionPageBordersSchema2, sectionMutationSuccessSchema2, documentMutationSuccessSchema2, paragraphMutationTargetSchema2, paragraphMutationSuccessSchema2, createSectionBreakSuccessSchema2, capabilityReasonsSchema2, capabilityFlagSchema2, operationRuntimeCapabilitySchema2, operationCapabilitiesSchema2, inlinePropertyCapabilitySchema2, formatCapabilitiesSchema2, planEngineCapabilitiesSchema2, tableCreateLocationSchema2, formatInlineAliasOperationSchemas2, tocMutationFailureSchema2, tocMutationSuccessSchema2, tocEntryMutationFailureSchema2, tocEntryMutationSuccessSchema2, GROUP_METADATA2, STEP_OP_CATALOG_UNFROZEN2, PUBLIC_STEP_OP_CATALOG_UNFROZEN2, PUBLIC_MUTATION_STEP_OP_IDS2, PUBLIC_MUTATION_STEP_OP_SET2, CAPABILITY_REASON_CODES2, CREATE_COMMENT_ALLOWED_KEYS2, PATCH_COMMENT_ALLOWED_KEYS2, STYLE_APPLY_INPUT_ALLOWED_KEYS2, INLINE_ALIAS_INPUT_ALLOWED_KEYS2, DELETE_INPUT_ALLOWED_KEYS2, INSERT_INPUT_ALLOWED_KEYS2, VALID_INSERT_TYPES2, REPLACE_INPUT_ALLOWED_KEYS2, SECTION_BREAK_TYPES$1, SUPPORTED_DELETE_NODE_TYPES2, REJECTED_DELETE_NODE_TYPES2, TABLE_LOCATOR_OPS2, ROW_LOCATOR_OPS2, COLUMN_LOCATOR_OPS2, MERGE_RANGE_LOCATOR_OPS2, DEFAULT_SECTIONS_LIST_LIMIT2 = 250, SECTION_BREAK_TYPES3, SECTION_ORIENTATIONS2, SECTION_VERTICAL_ALIGNS2, SECTION_DIRECTIONS2, HEADER_FOOTER_KINDS2, HEADER_FOOTER_VARIANTS2, LINE_NUMBER_RESTARTS2, PAGE_NUMBER_FORMATS2, PAGE_BORDER_DISPLAYS2, PAGE_BORDER_OFFSET_FROM_VALUES2, PAGE_BORDER_Z_ORDER_VALUES2, _buffers, _defaultCollectionId = null, _nextCollectionId = 1, generateV2HandlerEntity = (handlerName, translator$208) => ({
50164
50512
  handlerName,
50165
50513
  handler: (params) => {
50166
50514
  const { nodes } = params;
@@ -61544,7 +61892,7 @@ var isRegExp = (value) => {
61544
61892
  state.kern = kernNode.attributes["w:val"];
61545
61893
  }
61546
61894
  }, SuperConverter;
61547
- var init_SuperConverter_CDs2fwu4_es = __esm(() => {
61895
+ var init_SuperConverter_CoCZX_fP_es = __esm(() => {
61548
61896
  init_rolldown_runtime_B2q5OVn9_es();
61549
61897
  init_jszip_ChlR43oI_es();
61550
61898
  init_xml_js_DLE8mr0n_es();
@@ -66626,6 +66974,700 @@ var init_SuperConverter_CDs2fwu4_es = __esm(() => {
66626
66974
  "pattern"
66627
66975
  ]);
66628
66976
  CLEAR_SHADING_KEYS2 = new Set(["target"]);
66977
+ ST_ON_OFF_ON_VALUES2 = new Set([
66978
+ "true",
66979
+ "1",
66980
+ "on"
66981
+ ]);
66982
+ ST_ON_OFF_OFF_VALUES2 = new Set([
66983
+ "false",
66984
+ "0",
66985
+ "off"
66986
+ ]);
66987
+ ST_UNDERLINE_VALUES2 = [
66988
+ "single",
66989
+ "double",
66990
+ "thick",
66991
+ "dotted",
66992
+ "dottedHeavy",
66993
+ "dash",
66994
+ "dashedHeavy",
66995
+ "dashLong",
66996
+ "dashLongHeavy",
66997
+ "dotDash",
66998
+ "dashDotHeavy",
66999
+ "dotDotDash",
67000
+ "dashDotDotHeavy",
67001
+ "wave",
67002
+ "wavyHeavy",
67003
+ "wavyDouble",
67004
+ "words",
67005
+ "none"
67006
+ ];
67007
+ ST_UNDERLINE_VALUE_SET2 = new Set(ST_UNDERLINE_VALUES2);
67008
+ ST_VERTICAL_ALIGN_RUN2 = [
67009
+ "superscript",
67010
+ "subscript",
67011
+ "baseline"
67012
+ ];
67013
+ ST_EM2 = [
67014
+ "none",
67015
+ "dot",
67016
+ "comma",
67017
+ "circle",
67018
+ "sesame"
67019
+ ];
67020
+ ST_TEXT_ALIGNMENT2 = [
67021
+ "top",
67022
+ "center",
67023
+ "baseline",
67024
+ "bottom",
67025
+ "auto"
67026
+ ];
67027
+ ST_TEXT_DIRECTION2 = [
67028
+ "lrTb",
67029
+ "tbRl",
67030
+ "btLr",
67031
+ "lrTbV",
67032
+ "tbRlV",
67033
+ "tbLrV"
67034
+ ];
67035
+ ST_TEXTBOX_TIGHT_WRAP2 = [
67036
+ "none",
67037
+ "allLines",
67038
+ "firstAndLastLine",
67039
+ "firstLineOnly",
67040
+ "lastLineOnly"
67041
+ ];
67042
+ ST_TEXT_TRANSFORM2 = ["uppercase", "none"];
67043
+ ST_JUSTIFICATION2 = [
67044
+ "left",
67045
+ "center",
67046
+ "right",
67047
+ "justify",
67048
+ "distribute"
67049
+ ];
67050
+ FONT_FAMILY_SCHEMA2 = {
67051
+ kind: "object",
67052
+ children: {
67053
+ hint: { kind: "string" },
67054
+ ascii: { kind: "string" },
67055
+ hAnsi: { kind: "string" },
67056
+ eastAsia: { kind: "string" },
67057
+ cs: { kind: "string" },
67058
+ val: { kind: "string" },
67059
+ asciiTheme: { kind: "string" },
67060
+ hAnsiTheme: { kind: "string" },
67061
+ eastAsiaTheme: { kind: "string" },
67062
+ cstheme: { kind: "string" }
67063
+ }
67064
+ };
67065
+ COLOR_SCHEMA2 = {
67066
+ kind: "object",
67067
+ children: {
67068
+ val: { kind: "string" },
67069
+ themeColor: { kind: "string" },
67070
+ themeTint: { kind: "string" },
67071
+ themeShade: { kind: "string" }
67072
+ }
67073
+ };
67074
+ SPACING_SCHEMA2 = {
67075
+ kind: "object",
67076
+ children: {
67077
+ after: { kind: "integer" },
67078
+ afterAutospacing: { kind: "boolean" },
67079
+ afterLines: { kind: "integer" },
67080
+ before: { kind: "integer" },
67081
+ beforeAutospacing: { kind: "boolean" },
67082
+ beforeLines: { kind: "integer" },
67083
+ line: { kind: "integer" },
67084
+ lineRule: {
67085
+ kind: "enum",
67086
+ values: [
67087
+ "auto",
67088
+ "exact",
67089
+ "atLeast"
67090
+ ]
67091
+ }
67092
+ }
67093
+ };
67094
+ INDENT_SCHEMA2 = {
67095
+ kind: "object",
67096
+ children: {
67097
+ end: { kind: "integer" },
67098
+ endChars: { kind: "integer" },
67099
+ firstLine: { kind: "integer" },
67100
+ firstLineChars: { kind: "integer" },
67101
+ hanging: { kind: "integer" },
67102
+ hangingChars: { kind: "integer" },
67103
+ left: { kind: "integer" },
67104
+ leftChars: { kind: "integer" },
67105
+ right: { kind: "integer" },
67106
+ rightChars: { kind: "integer" },
67107
+ start: { kind: "integer" },
67108
+ startChars: { kind: "integer" }
67109
+ }
67110
+ };
67111
+ UNDERLINE_SCHEMA2 = {
67112
+ kind: "object",
67113
+ children: {
67114
+ val: {
67115
+ kind: "enum",
67116
+ values: [...ST_UNDERLINE_VALUES2]
67117
+ },
67118
+ color: { kind: "string" },
67119
+ themeColor: { kind: "string" },
67120
+ themeTint: { kind: "string" },
67121
+ themeShade: { kind: "string" }
67122
+ }
67123
+ };
67124
+ BORDER_PROPERTIES_SCHEMA2 = {
67125
+ kind: "object",
67126
+ children: {
67127
+ val: { kind: "string" },
67128
+ color: { kind: "string" },
67129
+ themeColor: { kind: "string" },
67130
+ themeTint: { kind: "string" },
67131
+ themeShade: { kind: "string" },
67132
+ size: { kind: "integer" },
67133
+ space: { kind: "integer" },
67134
+ shadow: { kind: "boolean" },
67135
+ frame: { kind: "boolean" }
67136
+ }
67137
+ };
67138
+ SHADING_SCHEMA2 = {
67139
+ kind: "object",
67140
+ children: {
67141
+ color: { kind: "string" },
67142
+ fill: { kind: "string" },
67143
+ themeColor: { kind: "string" },
67144
+ themeFill: { kind: "string" },
67145
+ themeFillShade: { kind: "string" },
67146
+ themeFillTint: { kind: "string" },
67147
+ themeShade: { kind: "string" },
67148
+ themeTint: { kind: "string" },
67149
+ val: { kind: "string" }
67150
+ }
67151
+ };
67152
+ LANG_SCHEMA2 = {
67153
+ kind: "object",
67154
+ children: {
67155
+ val: { kind: "string" },
67156
+ eastAsia: { kind: "string" },
67157
+ bidi: { kind: "string" }
67158
+ }
67159
+ };
67160
+ EAST_ASIAN_LAYOUT_SCHEMA2 = {
67161
+ kind: "object",
67162
+ children: {
67163
+ id: { kind: "integer" },
67164
+ combine: { kind: "boolean" },
67165
+ combineBrackets: { kind: "string" },
67166
+ vert: { kind: "boolean" },
67167
+ vertCompress: { kind: "boolean" }
67168
+ }
67169
+ };
67170
+ FIT_TEXT_SCHEMA2 = {
67171
+ kind: "object",
67172
+ children: {
67173
+ val: { kind: "integer" },
67174
+ id: { kind: "integer" }
67175
+ }
67176
+ };
67177
+ NUMBERING_PROPERTIES_SCHEMA2 = {
67178
+ kind: "object",
67179
+ children: {
67180
+ ilvl: { kind: "integer" },
67181
+ numId: { kind: "integer" }
67182
+ }
67183
+ };
67184
+ FRAME_PR_SCHEMA2 = {
67185
+ kind: "object",
67186
+ children: {
67187
+ anchorLock: { kind: "boolean" },
67188
+ dropCap: { kind: "string" },
67189
+ h: { kind: "integer" },
67190
+ hAnchor: { kind: "string" },
67191
+ hRule: { kind: "string" },
67192
+ hSpace: { kind: "integer" },
67193
+ lines: { kind: "integer" },
67194
+ vAnchor: { kind: "string" },
67195
+ vSpace: { kind: "integer" },
67196
+ w: { kind: "integer" },
67197
+ wrap: { kind: "string" },
67198
+ x: { kind: "integer" },
67199
+ xAlign: { kind: "string" },
67200
+ y: { kind: "integer" },
67201
+ yAlign: { kind: "string" }
67202
+ }
67203
+ };
67204
+ PARAGRAPH_BORDERS_SCHEMA2 = {
67205
+ kind: "object",
67206
+ children: {
67207
+ top: BORDER_PROPERTIES_SCHEMA2,
67208
+ bottom: BORDER_PROPERTIES_SCHEMA2,
67209
+ left: BORDER_PROPERTIES_SCHEMA2,
67210
+ right: BORDER_PROPERTIES_SCHEMA2,
67211
+ between: BORDER_PROPERTIES_SCHEMA2,
67212
+ bar: BORDER_PROPERTIES_SCHEMA2
67213
+ }
67214
+ };
67215
+ TAB_STOP_SCHEMA2 = {
67216
+ kind: "array",
67217
+ item: {
67218
+ kind: "object",
67219
+ children: { tab: {
67220
+ kind: "object",
67221
+ children: {
67222
+ tabType: { kind: "string" },
67223
+ pos: { kind: "integer" },
67224
+ leader: { kind: "string" }
67225
+ }
67226
+ } }
67227
+ }
67228
+ };
67229
+ PROPERTY_REGISTRY3 = [
67230
+ {
67231
+ key: "bold",
67232
+ channel: "run",
67233
+ schema: { kind: "boolean" },
67234
+ mergeStrategy: "replace"
67235
+ },
67236
+ {
67237
+ key: "boldCs",
67238
+ channel: "run",
67239
+ schema: { kind: "boolean" },
67240
+ mergeStrategy: "replace"
67241
+ },
67242
+ {
67243
+ key: "italic",
67244
+ channel: "run",
67245
+ schema: { kind: "boolean" },
67246
+ mergeStrategy: "replace"
67247
+ },
67248
+ {
67249
+ key: "iCs",
67250
+ channel: "run",
67251
+ schema: { kind: "boolean" },
67252
+ mergeStrategy: "replace"
67253
+ },
67254
+ {
67255
+ key: "smallCaps",
67256
+ channel: "run",
67257
+ schema: { kind: "boolean" },
67258
+ mergeStrategy: "replace"
67259
+ },
67260
+ {
67261
+ key: "strike",
67262
+ channel: "run",
67263
+ schema: { kind: "boolean" },
67264
+ mergeStrategy: "replace"
67265
+ },
67266
+ {
67267
+ key: "dstrike",
67268
+ channel: "run",
67269
+ schema: { kind: "boolean" },
67270
+ mergeStrategy: "replace"
67271
+ },
67272
+ {
67273
+ key: "emboss",
67274
+ channel: "run",
67275
+ schema: { kind: "boolean" },
67276
+ mergeStrategy: "replace"
67277
+ },
67278
+ {
67279
+ key: "imprint",
67280
+ channel: "run",
67281
+ schema: { kind: "boolean" },
67282
+ mergeStrategy: "replace"
67283
+ },
67284
+ {
67285
+ key: "outline",
67286
+ channel: "run",
67287
+ schema: { kind: "boolean" },
67288
+ mergeStrategy: "replace"
67289
+ },
67290
+ {
67291
+ key: "shadow",
67292
+ channel: "run",
67293
+ schema: { kind: "boolean" },
67294
+ mergeStrategy: "replace"
67295
+ },
67296
+ {
67297
+ key: "vanish",
67298
+ channel: "run",
67299
+ schema: { kind: "boolean" },
67300
+ mergeStrategy: "replace"
67301
+ },
67302
+ {
67303
+ key: "webHidden",
67304
+ channel: "run",
67305
+ schema: { kind: "boolean" },
67306
+ mergeStrategy: "replace"
67307
+ },
67308
+ {
67309
+ key: "specVanish",
67310
+ channel: "run",
67311
+ schema: { kind: "boolean" },
67312
+ mergeStrategy: "replace"
67313
+ },
67314
+ {
67315
+ key: "snapToGrid",
67316
+ channel: "run",
67317
+ schema: { kind: "boolean" },
67318
+ mergeStrategy: "replace"
67319
+ },
67320
+ {
67321
+ key: "noProof",
67322
+ channel: "run",
67323
+ schema: { kind: "boolean" },
67324
+ mergeStrategy: "replace"
67325
+ },
67326
+ {
67327
+ key: "fontSize",
67328
+ channel: "run",
67329
+ schema: { kind: "integer" },
67330
+ mergeStrategy: "replace"
67331
+ },
67332
+ {
67333
+ key: "fontSizeCs",
67334
+ channel: "run",
67335
+ schema: { kind: "integer" },
67336
+ mergeStrategy: "replace"
67337
+ },
67338
+ {
67339
+ key: "letterSpacing",
67340
+ channel: "run",
67341
+ schema: { kind: "integer" },
67342
+ mergeStrategy: "replace"
67343
+ },
67344
+ {
67345
+ key: "kern",
67346
+ channel: "run",
67347
+ schema: { kind: "integer" },
67348
+ mergeStrategy: "replace"
67349
+ },
67350
+ {
67351
+ key: "position",
67352
+ channel: "run",
67353
+ schema: { kind: "integer" },
67354
+ mergeStrategy: "replace"
67355
+ },
67356
+ {
67357
+ key: "w",
67358
+ channel: "run",
67359
+ schema: {
67360
+ kind: "integer",
67361
+ min: 1,
67362
+ max: 600
67363
+ },
67364
+ mergeStrategy: "replace"
67365
+ },
67366
+ {
67367
+ key: "textTransform",
67368
+ channel: "run",
67369
+ schema: {
67370
+ kind: "enum",
67371
+ values: [...ST_TEXT_TRANSFORM2]
67372
+ },
67373
+ mergeStrategy: "replace"
67374
+ },
67375
+ {
67376
+ key: "vertAlign",
67377
+ channel: "run",
67378
+ schema: {
67379
+ kind: "enum",
67380
+ values: [...ST_VERTICAL_ALIGN_RUN2]
67381
+ },
67382
+ mergeStrategy: "replace"
67383
+ },
67384
+ {
67385
+ key: "em",
67386
+ channel: "run",
67387
+ schema: {
67388
+ kind: "enum",
67389
+ values: [...ST_EM2]
67390
+ },
67391
+ mergeStrategy: "replace"
67392
+ },
67393
+ {
67394
+ key: "effect",
67395
+ channel: "run",
67396
+ schema: { kind: "string" },
67397
+ mergeStrategy: "replace"
67398
+ },
67399
+ {
67400
+ key: "fontFamily",
67401
+ channel: "run",
67402
+ schema: FONT_FAMILY_SCHEMA2,
67403
+ mergeStrategy: "shallowMerge"
67404
+ },
67405
+ {
67406
+ key: "color",
67407
+ channel: "run",
67408
+ schema: COLOR_SCHEMA2,
67409
+ mergeStrategy: "shallowMerge"
67410
+ },
67411
+ {
67412
+ key: "underline",
67413
+ channel: "run",
67414
+ schema: UNDERLINE_SCHEMA2,
67415
+ mergeStrategy: "shallowMerge"
67416
+ },
67417
+ {
67418
+ key: "borders",
67419
+ channel: "run",
67420
+ schema: BORDER_PROPERTIES_SCHEMA2,
67421
+ mergeStrategy: "shallowMerge"
67422
+ },
67423
+ {
67424
+ key: "shading",
67425
+ channel: "run",
67426
+ schema: SHADING_SCHEMA2,
67427
+ mergeStrategy: "shallowMerge"
67428
+ },
67429
+ {
67430
+ key: "lang",
67431
+ channel: "run",
67432
+ schema: LANG_SCHEMA2,
67433
+ mergeStrategy: "shallowMerge"
67434
+ },
67435
+ {
67436
+ key: "eastAsianLayout",
67437
+ channel: "run",
67438
+ schema: EAST_ASIAN_LAYOUT_SCHEMA2,
67439
+ mergeStrategy: "shallowMerge"
67440
+ },
67441
+ {
67442
+ key: "fitText",
67443
+ channel: "run",
67444
+ schema: FIT_TEXT_SCHEMA2,
67445
+ mergeStrategy: "shallowMerge"
67446
+ },
67447
+ {
67448
+ key: "keepLines",
67449
+ channel: "paragraph",
67450
+ schema: { kind: "boolean" },
67451
+ mergeStrategy: "replace"
67452
+ },
67453
+ {
67454
+ key: "keepNext",
67455
+ channel: "paragraph",
67456
+ schema: { kind: "boolean" },
67457
+ mergeStrategy: "replace"
67458
+ },
67459
+ {
67460
+ key: "widowControl",
67461
+ channel: "paragraph",
67462
+ schema: { kind: "boolean" },
67463
+ mergeStrategy: "replace"
67464
+ },
67465
+ {
67466
+ key: "contextualSpacing",
67467
+ channel: "paragraph",
67468
+ schema: { kind: "boolean" },
67469
+ mergeStrategy: "replace"
67470
+ },
67471
+ {
67472
+ key: "pageBreakBefore",
67473
+ channel: "paragraph",
67474
+ schema: { kind: "boolean" },
67475
+ mergeStrategy: "replace"
67476
+ },
67477
+ {
67478
+ key: "suppressAutoHyphens",
67479
+ channel: "paragraph",
67480
+ schema: { kind: "boolean" },
67481
+ mergeStrategy: "replace"
67482
+ },
67483
+ {
67484
+ key: "suppressLineNumbers",
67485
+ channel: "paragraph",
67486
+ schema: { kind: "boolean" },
67487
+ mergeStrategy: "replace"
67488
+ },
67489
+ {
67490
+ key: "suppressOverlap",
67491
+ channel: "paragraph",
67492
+ schema: { kind: "boolean" },
67493
+ mergeStrategy: "replace"
67494
+ },
67495
+ {
67496
+ key: "mirrorIndents",
67497
+ channel: "paragraph",
67498
+ schema: { kind: "boolean" },
67499
+ mergeStrategy: "replace"
67500
+ },
67501
+ {
67502
+ key: "wordWrap",
67503
+ channel: "paragraph",
67504
+ schema: { kind: "boolean" },
67505
+ mergeStrategy: "replace"
67506
+ },
67507
+ {
67508
+ key: "kinsoku",
67509
+ channel: "paragraph",
67510
+ schema: { kind: "boolean" },
67511
+ mergeStrategy: "replace"
67512
+ },
67513
+ {
67514
+ key: "overflowPunct",
67515
+ channel: "paragraph",
67516
+ schema: { kind: "boolean" },
67517
+ mergeStrategy: "replace"
67518
+ },
67519
+ {
67520
+ key: "topLinePunct",
67521
+ channel: "paragraph",
67522
+ schema: { kind: "boolean" },
67523
+ mergeStrategy: "replace"
67524
+ },
67525
+ {
67526
+ key: "autoSpaceDE",
67527
+ channel: "paragraph",
67528
+ schema: { kind: "boolean" },
67529
+ mergeStrategy: "replace"
67530
+ },
67531
+ {
67532
+ key: "autoSpaceDN",
67533
+ channel: "paragraph",
67534
+ schema: { kind: "boolean" },
67535
+ mergeStrategy: "replace"
67536
+ },
67537
+ {
67538
+ key: "adjustRightInd",
67539
+ channel: "paragraph",
67540
+ schema: { kind: "boolean" },
67541
+ mergeStrategy: "replace"
67542
+ },
67543
+ {
67544
+ key: "rightToLeft",
67545
+ channel: "paragraph",
67546
+ schema: { kind: "boolean" },
67547
+ mergeStrategy: "replace"
67548
+ },
67549
+ {
67550
+ key: "snapToGrid",
67551
+ channel: "paragraph",
67552
+ schema: { kind: "boolean" },
67553
+ mergeStrategy: "replace"
67554
+ },
67555
+ {
67556
+ key: "outlineLvl",
67557
+ channel: "paragraph",
67558
+ schema: {
67559
+ kind: "integer",
67560
+ min: 0,
67561
+ max: 9
67562
+ },
67563
+ mergeStrategy: "replace"
67564
+ },
67565
+ {
67566
+ key: "justification",
67567
+ channel: "paragraph",
67568
+ schema: {
67569
+ kind: "enum",
67570
+ values: [...ST_JUSTIFICATION2]
67571
+ },
67572
+ mergeStrategy: "replace"
67573
+ },
67574
+ {
67575
+ key: "textAlignment",
67576
+ channel: "paragraph",
67577
+ schema: {
67578
+ kind: "enum",
67579
+ values: [...ST_TEXT_ALIGNMENT2]
67580
+ },
67581
+ mergeStrategy: "replace"
67582
+ },
67583
+ {
67584
+ key: "textDirection",
67585
+ channel: "paragraph",
67586
+ schema: {
67587
+ kind: "enum",
67588
+ values: [...ST_TEXT_DIRECTION2]
67589
+ },
67590
+ mergeStrategy: "replace"
67591
+ },
67592
+ {
67593
+ key: "textboxTightWrap",
67594
+ channel: "paragraph",
67595
+ schema: {
67596
+ kind: "enum",
67597
+ values: [...ST_TEXTBOX_TIGHT_WRAP2]
67598
+ },
67599
+ mergeStrategy: "replace"
67600
+ },
67601
+ {
67602
+ key: "spacing",
67603
+ channel: "paragraph",
67604
+ schema: SPACING_SCHEMA2,
67605
+ mergeStrategy: "shallowMerge"
67606
+ },
67607
+ {
67608
+ key: "indent",
67609
+ channel: "paragraph",
67610
+ schema: INDENT_SCHEMA2,
67611
+ mergeStrategy: "shallowMerge"
67612
+ },
67613
+ {
67614
+ key: "shading",
67615
+ channel: "paragraph",
67616
+ schema: SHADING_SCHEMA2,
67617
+ mergeStrategy: "shallowMerge"
67618
+ },
67619
+ {
67620
+ key: "numberingProperties",
67621
+ channel: "paragraph",
67622
+ schema: NUMBERING_PROPERTIES_SCHEMA2,
67623
+ mergeStrategy: "shallowMerge"
67624
+ },
67625
+ {
67626
+ key: "framePr",
67627
+ channel: "paragraph",
67628
+ schema: FRAME_PR_SCHEMA2,
67629
+ mergeStrategy: "shallowMerge"
67630
+ },
67631
+ {
67632
+ key: "borders",
67633
+ channel: "paragraph",
67634
+ schema: PARAGRAPH_BORDERS_SCHEMA2,
67635
+ mergeStrategy: "edgeMerge"
67636
+ },
67637
+ {
67638
+ key: "tabStops",
67639
+ channel: "paragraph",
67640
+ schema: TAB_STOP_SCHEMA2,
67641
+ mergeStrategy: "replace"
67642
+ }
67643
+ ];
67644
+ ALLOWED_KEYS_BY_CHANNEL2 = {
67645
+ run: new Set(PROPERTY_REGISTRY3.filter((d) => d.channel === "run").map((d) => d.key)),
67646
+ paragraph: new Set(PROPERTY_REGISTRY3.filter((d) => d.channel === "paragraph").map((d) => d.key))
67647
+ };
67648
+ PROPERTY_INDEX2 = new Map(PROPERTY_REGISTRY3.map((d) => [`${d.channel}:${d.key}`, d]));
67649
+ EXCLUDED_KEYS2 = {
67650
+ run: new Map([
67651
+ ["cs", "w:cs"],
67652
+ ["highlight", "w:highlight"],
67653
+ ["oMath", "w:oMath"],
67654
+ ["rPrChange", "w:rPrChange"],
67655
+ ["rStyle", "w:rStyle"],
67656
+ ["rtl", "w:rtl"]
67657
+ ]),
67658
+ paragraph: new Map([
67659
+ ["cnfStyle", "w:cnfStyle"],
67660
+ ["divId", "w:divId"],
67661
+ ["pPrChange", "w:pPrChange"],
67662
+ ["pStyle", "w:pStyle"],
67663
+ ["runProperties", "w:pPr/w:rPr"],
67664
+ ["sectPr", "w:sectPr"]
67665
+ ])
67666
+ };
67667
+ INPUT_ALLOWED_KEYS2 = new Set(["target", "patch"]);
67668
+ TARGET_ALLOWED_KEYS2 = new Set(["scope", "channel"]);
67669
+ OPTIONS_ALLOWED_KEYS2 = new Set(["dryRun", "expectedRevision"]);
67670
+ VALID_CHANNELS2 = new Set(["run", "paragraph"]);
66629
67671
  nodeTypeValues2 = NODE_TYPES2;
66630
67672
  blockNodeTypeValues2 = BLOCK_NODE_TYPES2;
66631
67673
  deletableBlockNodeTypeValues2 = DELETABLE_BLOCK_NODE_TYPES2;
@@ -67747,101 +68789,19 @@ var init_SuperConverter_CDs2fwu4_es = __esm(() => {
67747
68789
  minLength: 1
67748
68790
  }
67749
68791
  }, ["target"]) }, paragraphMutationResultSchemaFor2("format.paragraph.setShading"), paragraphMutationFailureSchemaFor2("format.paragraph.setShading"), objectSchema2({ target: paragraphTargetSchema2 }, ["target"]), paragraphMutationResultSchemaFor2("format.paragraph.clearShading"), paragraphMutationFailureSchemaFor2("format.paragraph.clearShading"), (() => {
67750
- const fontFamilySchema = {
67751
- ...objectSchema2({
67752
- hint: { type: "string" },
67753
- ascii: { type: "string" },
67754
- hAnsi: { type: "string" },
67755
- eastAsia: { type: "string" },
67756
- cs: { type: "string" },
67757
- val: { type: "string" },
67758
- asciiTheme: { type: "string" },
67759
- hAnsiTheme: { type: "string" },
67760
- eastAsiaTheme: { type: "string" },
67761
- cstheme: { type: "string" }
67762
- }, []),
67763
- minProperties: 1
67764
- };
67765
- const colorSchema = {
67766
- ...objectSchema2({
67767
- val: { type: "string" },
67768
- themeColor: { type: "string" },
67769
- themeTint: { type: "string" },
67770
- themeShade: { type: "string" }
67771
- }, []),
67772
- minProperties: 1
67773
- };
67774
- const spacingSchema = {
67775
- ...objectSchema2({
67776
- after: { type: "integer" },
67777
- afterAutospacing: { type: "boolean" },
67778
- afterLines: { type: "integer" },
67779
- before: { type: "integer" },
67780
- beforeAutospacing: { type: "boolean" },
67781
- beforeLines: { type: "integer" },
67782
- line: { type: "integer" },
67783
- lineRule: { enum: [
67784
- "auto",
67785
- "exact",
67786
- "atLeast"
67787
- ] }
67788
- }, []),
67789
- minProperties: 1
67790
- };
67791
- const indentSchema = {
67792
- ...objectSchema2({
67793
- end: { type: "integer" },
67794
- endChars: { type: "integer" },
67795
- firstLine: { type: "integer" },
67796
- firstLineChars: { type: "integer" },
67797
- hanging: { type: "integer" },
67798
- hangingChars: { type: "integer" },
67799
- left: { type: "integer" },
67800
- leftChars: { type: "integer" },
67801
- right: { type: "integer" },
67802
- rightChars: { type: "integer" },
67803
- start: { type: "integer" },
67804
- startChars: { type: "integer" }
67805
- }, []),
67806
- minProperties: 1
67807
- };
67808
68792
  const runInputSchema = objectSchema2({
67809
68793
  target: objectSchema2({
67810
68794
  scope: { const: "docDefaults" },
67811
68795
  channel: { const: "run" }
67812
68796
  }, ["scope", "channel"]),
67813
- patch: {
67814
- ...objectSchema2({
67815
- bold: { type: "boolean" },
67816
- italic: { type: "boolean" },
67817
- fontSize: { type: "integer" },
67818
- fontSizeCs: { type: "integer" },
67819
- letterSpacing: { type: "integer" },
67820
- fontFamily: fontFamilySchema,
67821
- color: colorSchema
67822
- }, []),
67823
- minProperties: 1
67824
- }
68797
+ patch: buildPatchSchema2("run")
67825
68798
  }, ["target", "patch"]);
67826
68799
  const paragraphInputSchema = objectSchema2({
67827
68800
  target: objectSchema2({
67828
68801
  scope: { const: "docDefaults" },
67829
68802
  channel: { const: "paragraph" }
67830
68803
  }, ["scope", "channel"]),
67831
- patch: {
67832
- ...objectSchema2({
67833
- justification: { enum: [
67834
- "left",
67835
- "center",
67836
- "right",
67837
- "justify",
67838
- "distribute"
67839
- ] },
67840
- spacing: spacingSchema,
67841
- indent: indentSchema
67842
- }, []),
67843
- minProperties: 1
67844
- }
68804
+ patch: buildPatchSchema2("paragraph")
67845
68805
  }, ["target", "patch"]);
67846
68806
  const stylesTargetResolutionSchema = objectSchema2({
67847
68807
  scope: { const: "docDefaults" },
@@ -67854,30 +68814,7 @@ var init_SuperConverter_CDs2fwu4_es = __esm(() => {
67854
68814
  "xmlPart",
67855
68815
  "xmlPath"
67856
68816
  ]);
67857
- const booleanStateSchema = { enum: [
67858
- "on",
67859
- "off",
67860
- "inherit"
67861
- ] };
67862
- const numberOrInheritSchema = { oneOf: [{ type: "number" }, { const: "inherit" }] };
67863
- const stringOrInheritSchema = { oneOf: [{ type: "string" }, { const: "inherit" }] };
67864
- const objectOrInheritSchema = { oneOf: [{ type: "object" }, { const: "inherit" }] };
67865
- const stylesStateSchema = {
67866
- type: "object",
67867
- properties: {
67868
- bold: booleanStateSchema,
67869
- italic: booleanStateSchema,
67870
- fontSize: numberOrInheritSchema,
67871
- fontSizeCs: numberOrInheritSchema,
67872
- letterSpacing: numberOrInheritSchema,
67873
- fontFamily: objectOrInheritSchema,
67874
- color: objectOrInheritSchema,
67875
- justification: stringOrInheritSchema,
67876
- spacing: objectOrInheritSchema,
67877
- indent: objectOrInheritSchema
67878
- },
67879
- additionalProperties: false
67880
- };
68817
+ const stylesStateSchema = buildStateSchema2();
67881
68818
  const stylesSuccessSchema = objectSchema2({
67882
68819
  success: { const: true },
67883
68820
  changed: { type: "boolean" },
@@ -69162,36 +70099,6 @@ var init_SuperConverter_CDs2fwu4_es = __esm(() => {
69162
70099
  "STYLES_PART_MISSING",
69163
70100
  "COLLABORATION_ACTIVE"
69164
70101
  ];
69165
- ST_ON_OFF_ON_VALUES2 = new Set([
69166
- "true",
69167
- "1",
69168
- "on"
69169
- ]);
69170
- ST_ON_OFF_OFF_VALUES2 = new Set([
69171
- "false",
69172
- "0",
69173
- "off"
69174
- ]);
69175
- ST_UNDERLINE_VALUE_SET2 = new Set([
69176
- "single",
69177
- "double",
69178
- "thick",
69179
- "dotted",
69180
- "dottedHeavy",
69181
- "dash",
69182
- "dashedHeavy",
69183
- "dashLong",
69184
- "dashLongHeavy",
69185
- "dotDash",
69186
- "dashDotHeavy",
69187
- "dotDotDash",
69188
- "dashDotDotHeavy",
69189
- "wave",
69190
- "wavyHeavy",
69191
- "wavyDouble",
69192
- "words",
69193
- "none"
69194
- ]);
69195
70102
  CREATE_COMMENT_ALLOWED_KEYS2 = new Set([
69196
70103
  "target",
69197
70104
  "text",
@@ -69206,115 +70113,6 @@ var init_SuperConverter_CDs2fwu4_es = __esm(() => {
69206
70113
  ]);
69207
70114
  STYLE_APPLY_INPUT_ALLOWED_KEYS2 = new Set(["target", "inline"]);
69208
70115
  INLINE_ALIAS_INPUT_ALLOWED_KEYS2 = new Set(["target", "value"]);
69209
- PROPERTY_REGISTRY2 = [
69210
- {
69211
- key: "bold",
69212
- channel: "run",
69213
- type: "boolean"
69214
- },
69215
- {
69216
- key: "italic",
69217
- channel: "run",
69218
- type: "boolean"
69219
- },
69220
- {
69221
- key: "fontSize",
69222
- channel: "run",
69223
- type: "integer"
69224
- },
69225
- {
69226
- key: "fontSizeCs",
69227
- channel: "run",
69228
- type: "integer"
69229
- },
69230
- {
69231
- key: "letterSpacing",
69232
- channel: "run",
69233
- type: "integer"
69234
- },
69235
- {
69236
- key: "fontFamily",
69237
- channel: "run",
69238
- type: "object",
69239
- schema: {
69240
- hint: "string",
69241
- ascii: "string",
69242
- hAnsi: "string",
69243
- eastAsia: "string",
69244
- cs: "string",
69245
- val: "string",
69246
- asciiTheme: "string",
69247
- hAnsiTheme: "string",
69248
- eastAsiaTheme: "string",
69249
- cstheme: "string"
69250
- }
69251
- },
69252
- {
69253
- key: "color",
69254
- channel: "run",
69255
- type: "object",
69256
- schema: {
69257
- val: "string",
69258
- themeColor: "string",
69259
- themeTint: "string",
69260
- themeShade: "string"
69261
- }
69262
- },
69263
- {
69264
- key: "justification",
69265
- channel: "paragraph",
69266
- type: "enum",
69267
- values: [
69268
- "left",
69269
- "center",
69270
- "right",
69271
- "justify",
69272
- "distribute"
69273
- ]
69274
- },
69275
- {
69276
- key: "spacing",
69277
- channel: "paragraph",
69278
- type: "object",
69279
- schema: {
69280
- after: "integer",
69281
- afterAutospacing: "boolean",
69282
- afterLines: "integer",
69283
- before: "integer",
69284
- beforeAutospacing: "boolean",
69285
- beforeLines: "integer",
69286
- line: "integer",
69287
- lineRule: "enum:auto,exact,atLeast"
69288
- }
69289
- },
69290
- {
69291
- key: "indent",
69292
- channel: "paragraph",
69293
- type: "object",
69294
- schema: {
69295
- end: "integer",
69296
- endChars: "integer",
69297
- firstLine: "integer",
69298
- firstLineChars: "integer",
69299
- hanging: "integer",
69300
- hangingChars: "integer",
69301
- left: "integer",
69302
- leftChars: "integer",
69303
- right: "integer",
69304
- rightChars: "integer",
69305
- start: "integer",
69306
- startChars: "integer"
69307
- }
69308
- }
69309
- ];
69310
- ALLOWED_KEYS_BY_CHANNEL2 = {
69311
- run: new Set(PROPERTY_REGISTRY2.filter((d) => d.channel === "run").map((d) => d.key)),
69312
- paragraph: new Set(PROPERTY_REGISTRY2.filter((d) => d.channel === "paragraph").map((d) => d.key))
69313
- };
69314
- STYLES_APPLY_INPUT_ALLOWED_KEYS2 = new Set(["target", "patch"]);
69315
- STYLES_APPLY_TARGET_ALLOWED_KEYS2 = new Set(["scope", "channel"]);
69316
- STYLES_APPLY_OPTIONS_ALLOWED_KEYS2 = new Set(["dryRun", "expectedRevision"]);
69317
- VALID_CHANNELS2 = new Set(["run", "paragraph"]);
69318
70116
  DELETE_INPUT_ALLOWED_KEYS2 = new Set(["target"]);
69319
70117
  INSERT_INPUT_ALLOWED_KEYS2 = new Set([
69320
70118
  "value",
@@ -106517,9 +107315,9 @@ var init_remark_gfm_CjV8kaUy_es = __esm(() => {
106517
107315
  init_remark_gfm_z_sDF4ss_es();
106518
107316
  });
106519
107317
 
106520
- // ../../packages/superdoc/dist/chunks/src-Di9XuGnD.es.js
106521
- var exports_src_Di9XuGnD_es = {};
106522
- __export(exports_src_Di9XuGnD_es, {
107318
+ // ../../packages/superdoc/dist/chunks/src-C0LpayfV.es.js
107319
+ var exports_src_C0LpayfV_es = {};
107320
+ __export(exports_src_C0LpayfV_es, {
106523
107321
  zt: () => defineMark,
106524
107322
  z: () => cM,
106525
107323
  yt: () => removeAwarenessStates,
@@ -116865,7 +117663,7 @@ function isRecord4(value) {
116865
117663
  function isDeepEqual(left$1, right$1) {
116866
117664
  return JSON.stringify(left$1) === JSON.stringify(right$1);
116867
117665
  }
116868
- function normalizeHexColor$1(color2) {
117666
+ function normalizeHexColor$2(color2) {
116869
117667
  const trimmed = color2.trim();
116870
117668
  if (trimmed.startsWith("#"))
116871
117669
  return trimmed;
@@ -116937,7 +117735,7 @@ function mergeTextStyleAttrs(currentAttrs, patch3) {
116937
117735
  continue;
116938
117736
  }
116939
117737
  if (key$1 === "color" && typeof value === "string") {
116940
- next2.color = normalizeHexColor$1(value);
117738
+ next2.color = normalizeHexColor$2(value);
116941
117739
  continue;
116942
117740
  }
116943
117741
  if ((key$1 === "fontSize" || key$1 === "letterSpacing" || key$1 === "position") && typeof value === "number") {
@@ -116995,7 +117793,7 @@ function mergeUnderlineAttrs(currentAttrs, patchValue) {
116995
117793
  if (patch3.color === null)
116996
117794
  delete next2.underlineColor;
116997
117795
  else
116998
- next2.underlineColor = normalizeHexColor$1(patch3.color);
117796
+ next2.underlineColor = normalizeHexColor$2(patch3.color);
116999
117797
  if (patch3.themeColor !== undefined)
117000
117798
  if (patch3.themeColor === null)
117001
117799
  delete next2.underlineThemeColor;
@@ -119123,67 +119921,148 @@ function syncDocDefaultsToConvertedXml(converter, docDefaultsTranslator) {
119123
119921
  else if (existingIndex >= 0)
119124
119922
  stylesRoot.elements.splice(existingIndex, 1);
119125
119923
  }
119126
- function formatState(value, type) {
119127
- if (value === undefined)
119128
- return "inherit";
119129
- if (type === "boolean")
119130
- return value ? "on" : "off";
119131
- if (type === "object" && typeof value === "object" && value !== null)
119132
- return { ...value };
119133
- return value;
119924
+ function mapUnderlineToStorage(apiObj) {
119925
+ const result = {};
119926
+ for (const [k$1, v] of Object.entries(apiObj))
119927
+ result[UNDERLINE_API_TO_STORAGE[k$1] ?? k$1] = v;
119928
+ return result;
119929
+ }
119930
+ function mapUnderlineToApi(storageObj) {
119931
+ const result = {};
119932
+ for (const [k$1, v] of Object.entries(storageObj))
119933
+ result[UNDERLINE_STORAGE_TO_API[k$1] ?? k$1] = v;
119934
+ return result;
119935
+ }
119936
+ function normalizeHexColor$1(val) {
119937
+ return val.replace(/^#/, "").toUpperCase();
119134
119938
  }
119135
- function stateMapEquals(a2, b$1) {
119136
- const keys$2 = Object.keys(a2);
119137
- if (keys$2.length !== Object.keys(b$1).length)
119939
+ function normalizeObjectSubKeys(obj, key$1) {
119940
+ const hexKeys = HEX_SUBKEYS_BY_PROPERTY[key$1];
119941
+ if (!hexKeys)
119942
+ return obj;
119943
+ const result = {};
119944
+ for (const [k$1, v] of Object.entries(obj))
119945
+ if (typeof v === "string" && hexKeys.has(k$1))
119946
+ result[k$1] = normalizeHexColor$1(v);
119947
+ else
119948
+ result[k$1] = v;
119949
+ return result;
119950
+ }
119951
+ function jsonDeepEqual(a2, b$1) {
119952
+ if (a2 === b$1)
119953
+ return true;
119954
+ if (a2 === null || b$1 === null)
119138
119955
  return false;
119139
- for (const key$1 of keys$2) {
119140
- const av = a2[key$1];
119141
- const bv = b$1[key$1];
119142
- if (av === bv)
119143
- continue;
119144
- if (typeof av === "object" && av !== null && typeof bv === "object" && bv !== null) {
119145
- const aKeys = Object.keys(av);
119146
- const bKeys = Object.keys(bv);
119147
- if (aKeys.length !== bKeys.length)
119956
+ if (typeof a2 !== typeof b$1)
119957
+ return false;
119958
+ if (Array.isArray(a2)) {
119959
+ if (!Array.isArray(b$1) || a2.length !== b$1.length)
119960
+ return false;
119961
+ for (let i$1 = 0;i$1 < a2.length; i$1++)
119962
+ if (!jsonDeepEqual(a2[i$1], b$1[i$1]))
119963
+ return false;
119964
+ return true;
119965
+ }
119966
+ if (typeof a2 === "object") {
119967
+ const aObj = a2;
119968
+ const bObj = b$1;
119969
+ const aKeys = Object.keys(aObj);
119970
+ const bKeys = Object.keys(bObj);
119971
+ if (aKeys.length !== bKeys.length)
119972
+ return false;
119973
+ for (const key$1 of aKeys) {
119974
+ if (!Object.prototype.hasOwnProperty.call(bObj, key$1))
119975
+ return false;
119976
+ if (!jsonDeepEqual(aObj[key$1], bObj[key$1]))
119148
119977
  return false;
119149
- for (const k$1 of aKeys)
119150
- if (av[k$1] !== bv[k$1])
119151
- return false;
119152
- continue;
119153
119978
  }
119154
- return false;
119979
+ return true;
119155
119980
  }
119156
- return true;
119981
+ return false;
119157
119982
  }
119158
- function getPropertyDefinition3(key$1, channel) {
119159
- const def2 = PROPERTY_REGISTRY2.find((d) => d.key === key$1 && d.channel === channel);
119160
- if (!def2)
119161
- throw new Error(`No property definition for key "${key$1}" on channel "${channel}".`);
119162
- return def2;
119983
+ function formatState(value, schema, key$1) {
119984
+ if (value === undefined)
119985
+ return "inherit";
119986
+ switch (schema.kind) {
119987
+ case "boolean":
119988
+ return value ? "on" : "off";
119989
+ case "object":
119990
+ if (typeof value === "object" && value !== null) {
119991
+ const obj = { ...value };
119992
+ return key$1 === "underline" ? mapUnderlineToApi(obj) : obj;
119993
+ }
119994
+ return value;
119995
+ case "array":
119996
+ return Array.isArray(value) ? [...value.map((item) => structuredClone(item))] : value;
119997
+ default:
119998
+ return value;
119999
+ }
120000
+ }
120001
+ function asRecord$1(value) {
120002
+ return typeof value === "object" && value !== null ? value : {};
120003
+ }
120004
+ function cloneForStorage(value) {
120005
+ if (value === null || typeof value !== "object")
120006
+ return value;
120007
+ return structuredClone(value);
120008
+ }
120009
+ function applyReplace(targetProps, key$1, value) {
120010
+ targetProps[key$1] = cloneForStorage(value);
120011
+ }
120012
+ function applyShallowMerge(targetProps, key$1, value) {
120013
+ const current = asRecord$1(targetProps[key$1]);
120014
+ const patch3 = value;
120015
+ if (key$1 === "underline") {
120016
+ const storagePatch = cloneForStorage(mapUnderlineToStorage(normalizeObjectSubKeys(patch3, key$1)));
120017
+ targetProps[key$1] = {
120018
+ ...current,
120019
+ ...storagePatch
120020
+ };
120021
+ return;
120022
+ }
120023
+ targetProps[key$1] = {
120024
+ ...current,
120025
+ ...cloneForStorage(normalizeObjectSubKeys(patch3, key$1))
120026
+ };
120027
+ }
120028
+ function applyEdgeMerge(targetProps, key$1, value) {
120029
+ const current = asRecord$1(targetProps[key$1]);
120030
+ const patch3 = value;
120031
+ const result = { ...current };
120032
+ for (const [edge, edgeValue] of Object.entries(patch3))
120033
+ result[edge] = {
120034
+ ...asRecord$1(result[edge]),
120035
+ ...cloneForStorage(normalizeObjectSubKeys(edgeValue, key$1))
120036
+ };
120037
+ targetProps[key$1] = result;
119163
120038
  }
119164
120039
  function applyPatch2(targetProps, patch3, channel) {
119165
120040
  const before = {};
119166
120041
  const after = {};
119167
- for (const [key$1, value] of Object.entries(patch3)) {
119168
- const def2 = getPropertyDefinition3(key$1, channel);
119169
- const currentValue = targetProps[key$1];
119170
- before[key$1] = formatState(currentValue, def2.type);
119171
- if (def2.type === "object") {
119172
- const merged = {
119173
- ...typeof currentValue === "object" && currentValue !== null ? currentValue : {},
119174
- ...value
119175
- };
119176
- targetProps[key$1] = merged;
119177
- after[key$1] = formatState(merged, def2.type);
119178
- } else {
119179
- targetProps[key$1] = value;
119180
- after[key$1] = formatState(value, def2.type);
120042
+ const patchKeys = new Set(Object.keys(patch3));
120043
+ for (const def2 of PROPERTY_REGISTRY3) {
120044
+ if (def2.channel !== channel || !patchKeys.has(def2.key))
120045
+ continue;
120046
+ const key$1 = def2.key;
120047
+ const value = patch3[key$1];
120048
+ before[key$1] = formatState(targetProps[key$1], def2.schema, key$1);
120049
+ switch (def2.mergeStrategy) {
120050
+ case "replace":
120051
+ applyReplace(targetProps, key$1, value);
120052
+ break;
120053
+ case "shallowMerge":
120054
+ applyShallowMerge(targetProps, key$1, value);
120055
+ break;
120056
+ case "edgeMerge":
120057
+ applyEdgeMerge(targetProps, key$1, value);
120058
+ break;
119181
120059
  }
120060
+ after[key$1] = formatState(targetProps[key$1], def2.schema, key$1);
119182
120061
  }
119183
120062
  return {
119184
120063
  before,
119185
120064
  after,
119186
- changed: !stateMapEquals(before, after)
120065
+ changed: !jsonDeepEqual(before, after)
119187
120066
  };
119188
120067
  }
119189
120068
  function stylesApplyAdapter(editor, input2, options) {
@@ -119202,14 +120081,14 @@ function stylesApplyAdapter(editor, input2, options) {
119202
120081
  scope: "docDefaults",
119203
120082
  channel,
119204
120083
  xmlPart: STYLES_PART,
119205
- xmlPath: XML_PATH_BY_CHANNEL[channel]
120084
+ xmlPath: XML_PATH_BY_CHANNEL2[channel]
119206
120085
  };
119207
120086
  return executeOutOfBandMutation(editor, (dryRun) => {
119208
120087
  const propsKey = PROPERTIES_KEY_BY_CHANNEL[channel];
119209
120088
  const existingProps = converter.translatedLinkedStyles?.docDefaults?.[propsKey];
119210
120089
  let targetProps;
119211
120090
  if (dryRun)
119212
- targetProps = existingProps ? { ...existingProps } : {};
120091
+ targetProps = existingProps ? structuredClone(existingProps) : {};
119213
120092
  else {
119214
120093
  if (!converter.translatedLinkedStyles)
119215
120094
  converter.translatedLinkedStyles = {};
@@ -162545,7 +163424,7 @@ var Node$13 = class Node$14 {
162545
163424
  console.warn("Failed to initialize developer tools:", error);
162546
163425
  }
162547
163426
  }
162548
- }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, DocumentApiAdapterError, ALIAS_ELIGIBLE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, PlanError, revisionMap, subscribedEditors, HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, everSyncedProviders, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", STUB_WHERE, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL, PARAGRAPH_NODE_TYPES, ALIGNMENT_TO_JUSTIFICATION, DERIVED_ID_LENGTH = 24, groupedCache, SUPPORTED_NODE_TYPES, REJECTED_NODE_TYPES, CSS_NAMED_COLORS, SETTINGS_PART_PATH = "word/settings.xml", POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, TABLE_ADAPTER_DISPATCH, ROW_OPS, TABLE_SCOPED_OPS, registered = false, SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH$2 = 1440, PX_PER_INCH$2 = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH$2 = 96, DOCUMENT_RELS_PATH = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN, FOOTER_FILE_PATTERN, HISTORY_UNSAFE_OPS, DEFAULT_LEVEL = 1, SWITCH_PATTERN, DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
163427
+ }, BLANK_DOCX_DATA_URI = `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,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`, LINK_MARK_NAME = "link", COMMENT_MARK_NAME, SUPPORTED_INLINE_TYPES, DocumentApiAdapterError, ALIAS_ELIGIBLE_TYPES, cacheByEditor, OBJECT_REPLACEMENT_CHAR = "", TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, PlanError, revisionMap, subscribedEditors, HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, everSyncedProviders, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", STUB_WHERE, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL2, UNDERLINE_API_TO_STORAGE, UNDERLINE_STORAGE_TO_API, HEX_SUBKEYS_BY_PROPERTY, PARAGRAPH_NODE_TYPES, ALIGNMENT_TO_JUSTIFICATION, DERIVED_ID_LENGTH = 24, groupedCache, SUPPORTED_NODE_TYPES, REJECTED_NODE_TYPES, CSS_NAMED_COLORS, SETTINGS_PART_PATH = "word/settings.xml", POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, TABLE_ADAPTER_DISPATCH, ROW_OPS, TABLE_SCOPED_OPS, registered = false, SectionType, DEFAULT_PARAGRAPH_SECTION_TYPE, DEFAULT_BODY_SECTION_TYPE, TWIPS_PER_INCH$2 = 1440, PX_PER_INCH$2 = 96, DEFAULT_COLUMN_GAP_INCHES = 0.5, DEFAULT_HEADER_FOOTER_MARGIN_PX = 0, LINE_NUMBER_RESTART_VALUES, PAGE_NUMBER_FORMAT_VALUES, SECTION_ORIENTATION_VALUES, SECTION_VERTICAL_ALIGN_VALUES, readSectPrHeaderFooterRefs, PIXELS_PER_INCH$2 = 96, DOCUMENT_RELS_PATH = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", WORDPROCESSINGML_XMLNS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main", OFFICE_DOCUMENT_RELS_XMLNS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", RELATIONSHIP_ID_PATTERN, HEADER_FILE_PATTERN, FOOTER_FILE_PATTERN, HISTORY_UNSAFE_OPS, DEFAULT_LEVEL = 1, SWITCH_PATTERN, DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, empty_exports, init_empty, PIXELS_PER_INCH$1 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, Editor, ContextMenuPluginKey, MENU_OFFSET_X = 0, MENU_OFFSET_Y = 28, CONTEXT_MENU_OFFSET_X = 10, CONTEXT_MENU_OFFSET_Y = 10, SLASH_COOLDOWN_MS = 5000, ContextMenu, SearchQuery = class {
162549
163428
  constructor(config2) {
162550
163429
  this.search = config2.search;
162551
163430
  this.caseSensitive = !!config2.caseSensitive;
@@ -181112,9 +181991,9 @@ var Node$13 = class Node$14 {
181112
181991
  trackedChanges: context.trackedChanges ?? []
181113
181992
  });
181114
181993
  }, _hoisted_1$6, _hoisted_2$2, _hoisted_3, _hoisted_4, ContextMenu_default, _hoisted_1$5, BasicUpload_default, _hoisted_1$4, MIN_WIDTH = 200, PPI = 96, alignment = "flex-end", Ruler_default, GenericPopover_default, _hoisted_1$3, _hoisted_2$1, RESIZE_HANDLE_WIDTH_PX = 9, RESIZE_HANDLE_HEIGHT_PX = 9, RESIZE_HANDLE_OFFSET_PX = 4, DRAG_OVERLAY_EXTENSION_PX = 1000, MIN_DRAG_OVERLAY_WIDTH_PX = 2000, THROTTLE_INTERVAL_MS = 16, MIN_RESIZE_DELTA_PX = 1, TableResizeOverlay_default, _hoisted_1$2, OVERLAY_EXPANSION_PX = 2000, RESIZE_HANDLE_SIZE_PX = 12, MOUSE_MOVE_THROTTLE_MS = 16, DIMENSION_CHANGE_THRESHOLD_PX = 1, Z_INDEX_OVERLAY = 10, Z_INDEX_HANDLE = 15, Z_INDEX_GUIDELINE = 20, ImageResizeOverlay_default, LINK_CLICK_DEBOUNCE_MS = 300, CURSOR_UPDATE_TIMEOUT_MS = 10, POPOVER_VERTICAL_OFFSET_PX = 15, LinkClickHandler_default, _hoisted_1$1, _hoisted_2, DOCX2 = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", TABLE_RESIZE_HOVER_THRESHOLD = 8, TABLE_RESIZE_THROTTLE_MS = 16, SuperEditor_default, _hoisted_1, SuperInput_default, SlashMenu, Extensions;
181115
- var init_src_Di9XuGnD_es = __esm(() => {
181994
+ var init_src_C0LpayfV_es = __esm(() => {
181116
181995
  init_rolldown_runtime_B2q5OVn9_es();
181117
- init_SuperConverter_CDs2fwu4_es();
181996
+ init_SuperConverter_CoCZX_fP_es();
181118
181997
  init_jszip_ChlR43oI_es();
181119
181998
  init_uuid_2IzDu5nl_es();
181120
181999
  init_constants_CqvgVEDh_es();
@@ -189523,10 +190402,24 @@ function print() { __p += __j.call(arguments, '') }
189523
190402
  run: "runProperties",
189524
190403
  paragraph: "paragraphProperties"
189525
190404
  };
189526
- XML_PATH_BY_CHANNEL = {
190405
+ XML_PATH_BY_CHANNEL2 = {
189527
190406
  run: "w:styles/w:docDefaults/w:rPrDefault/w:rPr",
189528
190407
  paragraph: "w:styles/w:docDefaults/w:pPrDefault/w:pPr"
189529
190408
  };
190409
+ UNDERLINE_API_TO_STORAGE = {
190410
+ val: "w:val",
190411
+ color: "w:color",
190412
+ themeColor: "w:themeColor",
190413
+ themeTint: "w:themeTint",
190414
+ themeShade: "w:themeShade"
190415
+ };
190416
+ UNDERLINE_STORAGE_TO_API = Object.fromEntries(Object.entries(UNDERLINE_API_TO_STORAGE).map(([k$1, v]) => [v, k$1]));
190417
+ HEX_SUBKEYS_BY_PROPERTY = {
190418
+ color: new Set(["val"]),
190419
+ shading: new Set(["color", "fill"]),
190420
+ underline: new Set(["color", "w:color"]),
190421
+ borders: new Set(["color"])
190422
+ };
189530
190423
  PARAGRAPH_NODE_TYPES = new Set([
189531
190424
  "paragraph",
189532
190425
  "heading",
@@ -212589,8 +213482,8 @@ function print() { __p += __j.call(arguments, '') }
212589
213482
  return isObjectLike_default(value) && hasOwnProperty$8.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
212590
213483
  };
212591
213484
  stubFalse_default = stubFalse;
212592
- freeExports$2 = typeof exports_src_Di9XuGnD_es == "object" && exports_src_Di9XuGnD_es && !exports_src_Di9XuGnD_es.nodeType && exports_src_Di9XuGnD_es;
212593
- freeModule$2 = freeExports$2 && typeof module_src_Di9XuGnD_es == "object" && module_src_Di9XuGnD_es && !module_src_Di9XuGnD_es.nodeType && module_src_Di9XuGnD_es;
213485
+ freeExports$2 = typeof exports_src_C0LpayfV_es == "object" && exports_src_C0LpayfV_es && !exports_src_C0LpayfV_es.nodeType && exports_src_C0LpayfV_es;
213486
+ freeModule$2 = freeExports$2 && typeof module_src_C0LpayfV_es == "object" && module_src_C0LpayfV_es && !module_src_C0LpayfV_es.nodeType && module_src_C0LpayfV_es;
212594
213487
  Buffer$1 = freeModule$2 && freeModule$2.exports === freeExports$2 ? _root_default.Buffer : undefined;
212595
213488
  isBuffer_default = (Buffer$1 ? Buffer$1.isBuffer : undefined) || stubFalse_default;
212596
213489
  typedArrayTags = {};
@@ -212598,8 +213491,8 @@ function print() { __p += __j.call(arguments, '') }
212598
213491
  typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$1] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = typedArrayTags[weakMapTag$1] = false;
212599
213492
  _baseIsTypedArray_default = baseIsTypedArray;
212600
213493
  _baseUnary_default = baseUnary;
212601
- freeExports$1 = typeof exports_src_Di9XuGnD_es == "object" && exports_src_Di9XuGnD_es && !exports_src_Di9XuGnD_es.nodeType && exports_src_Di9XuGnD_es;
212602
- freeModule$1 = freeExports$1 && typeof module_src_Di9XuGnD_es == "object" && module_src_Di9XuGnD_es && !module_src_Di9XuGnD_es.nodeType && module_src_Di9XuGnD_es;
213494
+ freeExports$1 = typeof exports_src_C0LpayfV_es == "object" && exports_src_C0LpayfV_es && !exports_src_C0LpayfV_es.nodeType && exports_src_C0LpayfV_es;
213495
+ freeModule$1 = freeExports$1 && typeof module_src_C0LpayfV_es == "object" && module_src_C0LpayfV_es && !module_src_C0LpayfV_es.nodeType && module_src_C0LpayfV_es;
212603
213496
  freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && _freeGlobal_default.process;
212604
213497
  _nodeUtil_default = function() {
212605
213498
  try {
@@ -212704,8 +213597,8 @@ function print() { __p += __j.call(arguments, '') }
212704
213597
  Stack.prototype.has = _stackHas_default;
212705
213598
  Stack.prototype.set = _stackSet_default;
212706
213599
  _Stack_default = Stack;
212707
- freeExports = typeof exports_src_Di9XuGnD_es == "object" && exports_src_Di9XuGnD_es && !exports_src_Di9XuGnD_es.nodeType && exports_src_Di9XuGnD_es;
212708
- freeModule = freeExports && typeof module_src_Di9XuGnD_es == "object" && module_src_Di9XuGnD_es && !module_src_Di9XuGnD_es.nodeType && module_src_Di9XuGnD_es;
213600
+ freeExports = typeof exports_src_C0LpayfV_es == "object" && exports_src_C0LpayfV_es && !exports_src_C0LpayfV_es.nodeType && exports_src_C0LpayfV_es;
213601
+ freeModule = freeExports && typeof module_src_C0LpayfV_es == "object" && module_src_C0LpayfV_es && !module_src_C0LpayfV_es.nodeType && module_src_C0LpayfV_es;
212709
213602
  Buffer4 = freeModule && freeModule.exports === freeExports ? _root_default.Buffer : undefined;
212710
213603
  allocUnsafe = Buffer4 ? Buffer4.allocUnsafe : undefined;
212711
213604
  _cloneBuffer_default = cloneBuffer;
@@ -220785,8 +221678,8 @@ var init_zipper_DqXT7uTa_es = __esm(() => {
220785
221678
 
220786
221679
  // ../../packages/superdoc/dist/super-editor.es.js
220787
221680
  var init_super_editor_es = __esm(() => {
220788
- init_src_Di9XuGnD_es();
220789
- init_SuperConverter_CDs2fwu4_es();
221681
+ init_src_C0LpayfV_es();
221682
+ init_SuperConverter_CoCZX_fP_es();
220790
221683
  init_jszip_ChlR43oI_es();
220791
221684
  init_xml_js_DLE8mr0n_es();
220792
221685
  init_constants_CqvgVEDh_es();
@@ -278712,63 +279605,144 @@ function syncDocDefaultsToConvertedXml2(converter, docDefaultsTranslator) {
278712
279605
  }
278713
279606
 
278714
279607
  // ../../packages/super-editor/src/document-api-adapters/styles-adapter.ts
278715
- function formatState2(value, type) {
278716
- if (value === undefined)
278717
- return "inherit";
278718
- if (type === "boolean")
278719
- return value ? "on" : "off";
278720
- if (type === "object" && typeof value === "object" && value !== null)
278721
- return { ...value };
278722
- return value;
279608
+ function mapUnderlineToStorage2(apiObj) {
279609
+ const result = {};
279610
+ for (const [k2, v] of Object.entries(apiObj)) {
279611
+ result[UNDERLINE_API_TO_STORAGE2[k2] ?? k2] = v;
279612
+ }
279613
+ return result;
279614
+ }
279615
+ function mapUnderlineToApi2(storageObj) {
279616
+ const result = {};
279617
+ for (const [k2, v] of Object.entries(storageObj)) {
279618
+ result[UNDERLINE_STORAGE_TO_API2[k2] ?? k2] = v;
279619
+ }
279620
+ return result;
279621
+ }
279622
+ function normalizeHexColor5(val) {
279623
+ return val.replace(/^#/, "").toUpperCase();
279624
+ }
279625
+ function normalizeObjectSubKeys2(obj, key2) {
279626
+ const hexKeys = HEX_SUBKEYS_BY_PROPERTY2[key2];
279627
+ if (!hexKeys)
279628
+ return obj;
279629
+ const result = {};
279630
+ for (const [k2, v] of Object.entries(obj)) {
279631
+ if (typeof v === "string" && hexKeys.has(k2)) {
279632
+ result[k2] = normalizeHexColor5(v);
279633
+ } else {
279634
+ result[k2] = v;
279635
+ }
279636
+ }
279637
+ return result;
278723
279638
  }
278724
- function stateMapEquals2(a2, b2) {
278725
- const keys7 = Object.keys(a2);
278726
- if (keys7.length !== Object.keys(b2).length)
279639
+ function jsonDeepEqual2(a2, b2) {
279640
+ if (a2 === b2)
279641
+ return true;
279642
+ if (a2 === null || b2 === null)
278727
279643
  return false;
278728
- for (const key2 of keys7) {
278729
- const av = a2[key2];
278730
- const bv = b2[key2];
278731
- if (av === bv)
278732
- continue;
278733
- if (typeof av === "object" && av !== null && typeof bv === "object" && bv !== null) {
278734
- const aKeys = Object.keys(av);
278735
- const bKeys = Object.keys(bv);
278736
- if (aKeys.length !== bKeys.length)
279644
+ if (typeof a2 !== typeof b2)
279645
+ return false;
279646
+ if (Array.isArray(a2)) {
279647
+ if (!Array.isArray(b2) || a2.length !== b2.length)
279648
+ return false;
279649
+ for (let i4 = 0;i4 < a2.length; i4++) {
279650
+ if (!jsonDeepEqual2(a2[i4], b2[i4]))
278737
279651
  return false;
278738
- for (const k2 of aKeys) {
278739
- if (av[k2] !== bv[k2])
278740
- return false;
278741
- }
278742
- continue;
278743
279652
  }
278744
- return false;
279653
+ return true;
278745
279654
  }
278746
- return true;
279655
+ if (typeof a2 === "object") {
279656
+ const aObj = a2;
279657
+ const bObj = b2;
279658
+ const aKeys = Object.keys(aObj);
279659
+ const bKeys = Object.keys(bObj);
279660
+ if (aKeys.length !== bKeys.length)
279661
+ return false;
279662
+ for (const key2 of aKeys) {
279663
+ if (!Object.prototype.hasOwnProperty.call(bObj, key2))
279664
+ return false;
279665
+ if (!jsonDeepEqual2(aObj[key2], bObj[key2]))
279666
+ return false;
279667
+ }
279668
+ return true;
279669
+ }
279670
+ return false;
278747
279671
  }
278748
- function getPropertyDefinition4(key2, channel) {
278749
- const def2 = PROPERTY_REGISTRY.find((d) => d.key === key2 && d.channel === channel);
278750
- if (!def2)
278751
- throw new Error(`No property definition for key "${key2}" on channel "${channel}".`);
278752
- return def2;
279672
+ function formatState2(value, schema, key2) {
279673
+ if (value === undefined)
279674
+ return "inherit";
279675
+ switch (schema.kind) {
279676
+ case "boolean":
279677
+ return value ? "on" : "off";
279678
+ case "object":
279679
+ if (typeof value === "object" && value !== null) {
279680
+ const obj = { ...value };
279681
+ return key2 === "underline" ? mapUnderlineToApi2(obj) : obj;
279682
+ }
279683
+ return value;
279684
+ case "array":
279685
+ return Array.isArray(value) ? [...value.map((item) => structuredClone(item))] : value;
279686
+ default:
279687
+ return value;
279688
+ }
279689
+ }
279690
+ function asRecord3(value) {
279691
+ return typeof value === "object" && value !== null ? value : {};
279692
+ }
279693
+ function cloneForStorage2(value) {
279694
+ if (value === null || typeof value !== "object") {
279695
+ return value;
279696
+ }
279697
+ return structuredClone(value);
279698
+ }
279699
+ function applyReplace2(targetProps, key2, value) {
279700
+ targetProps[key2] = cloneForStorage2(value);
279701
+ }
279702
+ function applyShallowMerge2(targetProps, key2, value) {
279703
+ const current = asRecord3(targetProps[key2]);
279704
+ const patch3 = value;
279705
+ if (key2 === "underline") {
279706
+ const storagePatch = cloneForStorage2(mapUnderlineToStorage2(normalizeObjectSubKeys2(patch3, key2)));
279707
+ targetProps[key2] = { ...current, ...storagePatch };
279708
+ return;
279709
+ }
279710
+ targetProps[key2] = { ...current, ...cloneForStorage2(normalizeObjectSubKeys2(patch3, key2)) };
279711
+ }
279712
+ function applyEdgeMerge2(targetProps, key2, value) {
279713
+ const current = asRecord3(targetProps[key2]);
279714
+ const patch3 = value;
279715
+ const result = { ...current };
279716
+ for (const [edge, edgeValue] of Object.entries(patch3)) {
279717
+ const currentEdge = asRecord3(result[edge]);
279718
+ result[edge] = { ...currentEdge, ...cloneForStorage2(normalizeObjectSubKeys2(edgeValue, key2)) };
279719
+ }
279720
+ targetProps[key2] = result;
278753
279721
  }
278754
279722
  function applyPatch4(targetProps, patch3, channel) {
278755
279723
  const before = {};
278756
279724
  const after = {};
278757
- for (const [key2, value] of Object.entries(patch3)) {
278758
- const def2 = getPropertyDefinition4(key2, channel);
278759
- const currentValue = targetProps[key2];
278760
- before[key2] = formatState2(currentValue, def2.type);
278761
- if (def2.type === "object") {
278762
- const current = typeof currentValue === "object" && currentValue !== null ? currentValue : {};
278763
- const merged = { ...current, ...value };
278764
- targetProps[key2] = merged;
278765
- after[key2] = formatState2(merged, def2.type);
278766
- } else {
278767
- targetProps[key2] = value;
278768
- after[key2] = formatState2(value, def2.type);
279725
+ const patchKeys = new Set(Object.keys(patch3));
279726
+ for (const def2 of PROPERTY_REGISTRY) {
279727
+ if (def2.channel !== channel || !patchKeys.has(def2.key))
279728
+ continue;
279729
+ const key2 = def2.key;
279730
+ const value = patch3[key2];
279731
+ before[key2] = formatState2(targetProps[key2], def2.schema, key2);
279732
+ switch (def2.mergeStrategy) {
279733
+ case "replace":
279734
+ applyReplace2(targetProps, key2, value);
279735
+ break;
279736
+ case "shallowMerge":
279737
+ applyShallowMerge2(targetProps, key2, value);
279738
+ break;
279739
+ case "edgeMerge":
279740
+ applyEdgeMerge2(targetProps, key2, value);
279741
+ break;
278769
279742
  }
279743
+ after[key2] = formatState2(targetProps[key2], def2.schema, key2);
278770
279744
  }
278771
- const changed = !stateMapEquals2(before, after);
279745
+ const changed = !jsonDeepEqual2(before, after);
278772
279746
  return { before, after, changed };
278773
279747
  }
278774
279748
  function stylesApplyAdapter2(editor, input2, options) {
@@ -278794,14 +279768,14 @@ function stylesApplyAdapter2(editor, input2, options) {
278794
279768
  scope: "docDefaults",
278795
279769
  channel,
278796
279770
  xmlPart: STYLES_PART2,
278797
- xmlPath: XML_PATH_BY_CHANNEL2[channel]
279771
+ xmlPath: XML_PATH_BY_CHANNEL3[channel]
278798
279772
  };
278799
279773
  return executeOutOfBandMutation2(editor, (dryRun) => {
278800
279774
  const propsKey = PROPERTIES_KEY_BY_CHANNEL2[channel];
278801
279775
  const existingProps = converter.translatedLinkedStyles?.docDefaults?.[propsKey];
278802
279776
  let targetProps;
278803
279777
  if (dryRun) {
278804
- targetProps = existingProps ? { ...existingProps } : {};
279778
+ targetProps = existingProps ? structuredClone(existingProps) : {};
278805
279779
  } else {
278806
279780
  if (!converter.translatedLinkedStyles) {
278807
279781
  converter.translatedLinkedStyles = {};
@@ -278830,7 +279804,7 @@ function stylesApplyAdapter2(editor, input2, options) {
278830
279804
  return { changed, payload: receipt2 };
278831
279805
  }, options);
278832
279806
  }
278833
- var STYLES_PART2 = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL2, XML_PATH_BY_CHANNEL2;
279807
+ var STYLES_PART2 = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL2, XML_PATH_BY_CHANNEL3, UNDERLINE_API_TO_STORAGE2, UNDERLINE_STORAGE_TO_API2, HEX_SUBKEYS_BY_PROPERTY2;
278834
279808
  var init_styles_adapter = __esm(() => {
278835
279809
  init_src();
278836
279810
  init_errors3();
@@ -278841,10 +279815,24 @@ var init_styles_adapter = __esm(() => {
278841
279815
  run: "runProperties",
278842
279816
  paragraph: "paragraphProperties"
278843
279817
  };
278844
- XML_PATH_BY_CHANNEL2 = {
279818
+ XML_PATH_BY_CHANNEL3 = {
278845
279819
  run: "w:styles/w:docDefaults/w:rPrDefault/w:rPr",
278846
279820
  paragraph: "w:styles/w:docDefaults/w:pPrDefault/w:pPr"
278847
279821
  };
279822
+ UNDERLINE_API_TO_STORAGE2 = {
279823
+ val: "w:val",
279824
+ color: "w:color",
279825
+ themeColor: "w:themeColor",
279826
+ themeTint: "w:themeTint",
279827
+ themeShade: "w:themeShade"
279828
+ };
279829
+ UNDERLINE_STORAGE_TO_API2 = Object.fromEntries(Object.entries(UNDERLINE_API_TO_STORAGE2).map(([k2, v]) => [v, k2]));
279830
+ HEX_SUBKEYS_BY_PROPERTY2 = {
279831
+ color: new Set(["val"]),
279832
+ shading: new Set(["color", "fill"]),
279833
+ underline: new Set(["color", "w:color"]),
279834
+ borders: new Set(["color"])
279835
+ };
278848
279836
  });
278849
279837
 
278850
279838
  // ../../packages/super-editor/src/document-api-adapters/plan-engine/paragraphs-wrappers.ts
@@ -280906,11 +281894,11 @@ function toMatchStyle2(marks, cascadeContext) {
280906
281894
  const runProps = marks.find((m2) => m2.type.name === "runProperties");
280907
281895
  const textStyle = marks.find((m2) => m2.type.name === "textStyle");
280908
281896
  const color3 = extractAttr2(runProps, "color") ?? extractAttr2(textStyle, "color");
280909
- const normalizedColor = color3 != null ? normalizeHexColor5(String(color3)) : undefined;
281897
+ const normalizedColor = color3 != null ? normalizeHexColor6(String(color3)) : undefined;
280910
281898
  if (normalizedColor)
280911
281899
  style3.color = normalizedColor;
280912
281900
  const highlight = extractAttr2(runProps, "highlight") ?? extractAttr2(textStyle, "highlight");
280913
- const normalizedHighlight = highlight != null ? normalizeHexColor5(String(highlight)) : undefined;
281901
+ const normalizedHighlight = highlight != null ? normalizeHexColor6(String(highlight)) : undefined;
280914
281902
  if (normalizedHighlight)
280915
281903
  style3.highlight = normalizedHighlight;
280916
281904
  const fontFamily2 = extractAttr2(runProps, "fontFamily") ?? extractAttr2(textStyle, "fontFamily");
@@ -280939,7 +281927,7 @@ function extractRunStyleId2(marks) {
280939
281927
  const id2 = runProps.attrs.styleId;
280940
281928
  return typeof id2 === "string" && id2.length > 0 ? id2 : undefined;
280941
281929
  }
280942
- function normalizeHexColor5(raw) {
281930
+ function normalizeHexColor6(raw) {
280943
281931
  if (!raw || typeof raw !== "string")
280944
281932
  return;
280945
281933
  const trimmed = raw.trim().toLowerCase();
@@ -285035,11 +286023,11 @@ function createTableAdapter2(editor, input2, options) {
285035
286023
  };
285036
286024
  }
285037
286025
  }
285038
- function asRecord3(value) {
286026
+ function asRecord4(value) {
285039
286027
  return value && typeof value === "object" ? value : undefined;
285040
286028
  }
285041
286029
  function resolveTableLook2(tableProps) {
285042
- return asRecord3(tableProps.tblLook);
286030
+ return asRecord4(tableProps.tblLook);
285043
286031
  }
285044
286032
  function mapJustificationToTableAlignment2(value) {
285045
286033
  switch (value) {
@@ -285077,7 +286065,7 @@ function resolvePreferredWidth2(value) {
285077
286065
  const numeric = resolveMeasurementValue2(value);
285078
286066
  if (numeric != null)
285079
286067
  return numeric;
285080
- const record = asRecord3(value);
286068
+ const record = asRecord4(value);
285081
286069
  if (!record)
285082
286070
  return;
285083
286071
  return resolveMeasurementValue2(record.value) ?? resolveMeasurementValue2(record.width);
@@ -285147,7 +286135,7 @@ function tablesGetCellsAdapter2(editor, input2) {
285147
286135
  }
285148
286136
  function tablesGetPropertiesAdapter2(editor, input2) {
285149
286137
  const resolved = resolveTableLocator2(editor, input2, "tables.getProperties");
285150
- const tp = asRecord3(resolved.candidate.node.attrs?.tableProperties) ?? {};
286138
+ const tp = asRecord4(resolved.candidate.node.attrs?.tableProperties) ?? {};
285151
286139
  const result = {
285152
286140
  nodeId: resolved.candidate.nodeId
285153
286141
  };
@@ -285160,7 +286148,7 @@ function tablesGetPropertiesAdapter2(editor, input2) {
285160
286148
  result.direction = "rtl";
285161
286149
  else if (tp.rightToLeft === false)
285162
286150
  result.direction = "ltr";
285163
- const tableWidth = asRecord3(tp.tableWidth);
286151
+ const tableWidth = asRecord4(tp.tableWidth);
285164
286152
  const autoFitMode = mapTableLayoutToAutoFitMode2(tp.tableLayout, tableWidth);
285165
286153
  if (autoFitMode)
285166
286154
  result.autoFitMode = autoFitMode;
@@ -343132,7 +344120,7 @@ var init_find_query = __esm(() => {
343132
344120
  });
343133
344121
 
343134
344122
  // src/lib/node-pretty.ts
343135
- function asRecord4(value2) {
344123
+ function asRecord5(value2) {
343136
344124
  if (typeof value2 !== "object" || value2 == null || Array.isArray(value2))
343137
344125
  return null;
343138
344126
  return value2;
@@ -343153,7 +344141,7 @@ function formatPropertyValue(value2) {
343153
344141
  }
343154
344142
  function buildNodePretty(revision, headerLabel, node4) {
343155
344143
  const lines = [`Revision ${revision}: ${headerLabel}`];
343156
- const record = asRecord4(node4);
344144
+ const record = asRecord5(node4);
343157
344145
  if (!record)
343158
344146
  return lines.join(`
343159
344147
  `);
@@ -343172,7 +344160,7 @@ function buildNodePretty(revision, headerLabel, node4) {
343172
344160
  lines.push("");
343173
344161
  lines.push(` Text: "${truncate(text9, 80)}"`);
343174
344162
  }
343175
- const properties = asRecord4(record.properties);
344163
+ const properties = asRecord5(record.properties);
343176
344164
  if (!properties)
343177
344165
  return lines.join(`
343178
344166
  `);
@@ -343191,7 +344179,7 @@ function buildNodePretty(revision, headerLabel, node4) {
343191
344179
  var init_node_pretty = () => {};
343192
344180
 
343193
344181
  // src/lib/output-formatters.ts
343194
- function asRecord5(value2) {
344182
+ function asRecord6(value2) {
343195
344183
  if (typeof value2 !== "object" || value2 == null || Array.isArray(value2))
343196
344184
  return null;
343197
344185
  return value2;
@@ -343203,10 +344191,10 @@ function hasNonEmptyString2(value2) {
343203
344191
  return typeof value2 === "string" && value2.length > 0;
343204
344192
  }
343205
344193
  function formatCommentList(result2, ctx2) {
343206
- const record = asRecord5(result2);
344194
+ const record = asRecord6(result2);
343207
344195
  const total = safeNumber(record?.total, 0);
343208
344196
  const rows2 = asArray(record?.items).map((entry) => {
343209
- const comment2 = asRecord5(entry) ?? {};
344197
+ const comment2 = asRecord6(entry) ?? {};
343210
344198
  const status = hasNonEmptyString2(comment2.status) ? comment2.status : "unknown";
343211
344199
  const commentId = hasNonEmptyString2(comment2.id) ? comment2.id : "<unknown>";
343212
344200
  const creatorName = hasNonEmptyString2(comment2.creatorName) ? comment2.creatorName : "";
@@ -343236,9 +344224,9 @@ function formatCommentList(result2, ctx2) {
343236
344224
  `);
343237
344225
  }
343238
344226
  function formatListResult(result2, ctx2) {
343239
- const record = asRecord5(result2);
344227
+ const record = asRecord6(result2);
343240
344228
  const total = safeNumber(record?.total, 0);
343241
- const items2 = asArray(record?.items).map((entry) => asRecord5(entry)).filter((entry) => Boolean(entry));
344229
+ const items2 = asArray(record?.items).map((entry) => asRecord6(entry)).filter((entry) => Boolean(entry));
343242
344230
  const lines = [`Revision ${ctx2.revision}: ${total} list items`];
343243
344231
  if (items2.length === 0)
343244
344232
  return lines[0];
@@ -343263,11 +344251,11 @@ function formatListResult(result2, ctx2) {
343263
344251
  `);
343264
344252
  }
343265
344253
  function formatTrackChangeList(result2, ctx2) {
343266
- const record = asRecord5(result2);
344254
+ const record = asRecord6(result2);
343267
344255
  const total = safeNumber(record?.total, 0);
343268
344256
  const rows2 = asArray(record?.items).map((entry) => {
343269
- const item = asRecord5(entry) ?? {};
343270
- const address2 = asRecord5(item.address);
344257
+ const item = asRecord6(entry) ?? {};
344258
+ const address2 = asRecord6(item.address);
343271
344259
  const type2 = hasNonEmptyString2(item.type) ? item.type : "change";
343272
344260
  const id3 = hasNonEmptyString2(item.id) ? item.id : hasNonEmptyString2(address2?.entityId) ? String(address2?.entityId) : "<unknown>";
343273
344261
  const authorName = hasNonEmptyString2(item.author) ? item.author : "";
@@ -343301,11 +344289,11 @@ function formatTrackChangeList(result2, ctx2) {
343301
344289
  `);
343302
344290
  }
343303
344291
  function formatDocumentInfo(result2, ctx2) {
343304
- const record = asRecord5(result2);
344292
+ const record = asRecord6(result2);
343305
344293
  if (!record)
343306
344294
  return `Revision ${ctx2.revision}: retrieved info`;
343307
- const counts = asRecord5(record.counts) ?? {};
343308
- const outline = asArray(record.outline).map((entry) => asRecord5(entry)).filter((entry) => Boolean(entry));
344295
+ const counts = asRecord6(record.counts) ?? {};
344296
+ const outline = asArray(record.outline).map((entry) => asRecord6(entry)).filter((entry) => Boolean(entry));
343309
344297
  const words = safeNumber(counts.words, 0);
343310
344298
  const paragraphs = safeNumber(counts.paragraphs, 0);
343311
344299
  const headings = safeNumber(counts.headings, 0);
@@ -343382,7 +344370,7 @@ var init_session_collab = __esm(() => {
343382
344370
 
343383
344371
  // src/lib/special-handlers.ts
343384
344372
  import { createHash as createHash3 } from "node:crypto";
343385
- function asRecord6(value2) {
344373
+ function asRecord7(value2) {
343386
344374
  if (typeof value2 !== "object" || value2 == null || Array.isArray(value2))
343387
344375
  return null;
343388
344376
  return value2;
@@ -343391,7 +344379,7 @@ function asArray2(value2) {
343391
344379
  return Array.isArray(value2) ? value2 : [];
343392
344380
  }
343393
344381
  function asTrackChangeAddress(value2) {
343394
- const record = asRecord6(value2);
344382
+ const record = asRecord7(value2);
343395
344383
  if (!record)
343396
344384
  return null;
343397
344385
  if (record.kind !== "entity" || record.entityType !== "trackedChange")
@@ -343413,14 +344401,14 @@ function stableTrackChangeSignature(change) {
343413
344401
  return `${type2}|${author}|${authorEmail}|${date}|${excerpt}`;
343414
344402
  }
343415
344403
  function buildStableIdMappings(rawListResult) {
343416
- const record = asRecord6(rawListResult);
344404
+ const record = asRecord7(rawListResult);
343417
344405
  if (!record) {
343418
344406
  return { normalizedResult: rawListResult, stableToRawId: new Map, rawToStableId: new Map };
343419
344407
  }
343420
344408
  const stableToRawId = new Map;
343421
344409
  const rawToStableId = new Map;
343422
344410
  const signatureCounts = new Map;
343423
- const normalizedItems = asArray2(record.items).map((entry) => asRecord6(entry)).filter((entry) => Boolean(entry)).map((entry) => {
344411
+ const normalizedItems = asArray2(record.items).map((entry) => asRecord7(entry)).filter((entry) => Boolean(entry)).map((entry) => {
343424
344412
  const rawId = (typeof entry.id === "string" && entry.id.length > 0 ? entry.id : undefined) ?? asTrackChangeAddress(entry.address)?.entityId;
343425
344413
  if (!rawId)
343426
344414
  return entry;
@@ -343432,7 +344420,7 @@ function buildStableIdMappings(rawListResult) {
343432
344420
  stableToRawId.set(stableId, rawId);
343433
344421
  rawToStableId.set(rawId, stableId);
343434
344422
  const normalizedAddress = asTrackChangeAddress(entry.address);
343435
- const handleRecord = asRecord6(entry.handle);
344423
+ const handleRecord = asRecord7(entry.handle);
343436
344424
  return {
343437
344425
  ...entry,
343438
344426
  id: stableId,
@@ -343450,7 +344438,7 @@ function buildStableIdMappings(rawListResult) {
343450
344438
  };
343451
344439
  }
343452
344440
  var FORMAT_RECEIPT_OPERATION_IDS, resolveTrackChangeId = (input2, context) => {
343453
- const record = asRecord6(input2);
344441
+ const record = asRecord7(input2);
343454
344442
  if (!record)
343455
344443
  return input2;
343456
344444
  const stableId = typeof record.id === "string" ? record.id : undefined;
@@ -343464,10 +344452,10 @@ var FORMAT_RECEIPT_OPERATION_IDS, resolveTrackChangeId = (input2, context) => {
343464
344452
  const rawId = stableToRawId.get(stableId) ?? stableId;
343465
344453
  return { ...record, id: rawId };
343466
344454
  }, resolveReviewDecideId = (input2, context) => {
343467
- const record = asRecord6(input2);
344455
+ const record = asRecord7(input2);
343468
344456
  if (!record)
343469
344457
  return input2;
343470
- const target2 = asRecord6(record.target);
344458
+ const target2 = asRecord7(record.target);
343471
344459
  if (!target2)
343472
344460
  return input2;
343473
344461
  const stableId = typeof target2.id === "string" ? target2.id : undefined;
@@ -343483,7 +344471,7 @@ var FORMAT_RECEIPT_OPERATION_IDS, resolveTrackChangeId = (input2, context) => {
343483
344471
  }, normalizeTrackChangesListIds = (result2) => {
343484
344472
  return buildStableIdMappings(result2).normalizedResult;
343485
344473
  }, normalizeTrackChangeGetId = (result2, context) => {
343486
- const record = asRecord6(result2);
344474
+ const record = asRecord7(result2);
343487
344475
  if (!record)
343488
344476
  return result2;
343489
344477
  const listResult = context.editor.doc.invoke({
@@ -343502,10 +344490,10 @@ var FORMAT_RECEIPT_OPERATION_IDS, resolveTrackChangeId = (input2, context) => {
343502
344490
  address: normalizedAddress ? { ...normalizedAddress, entityId: stableId } : record.address
343503
344491
  };
343504
344492
  }, flattenTextMutationReceipt = (result2) => {
343505
- const record = asRecord6(result2);
344493
+ const record = asRecord7(result2);
343506
344494
  if (!record)
343507
344495
  return { receipt: result2 };
343508
- const resolution = asRecord6(record.resolution);
344496
+ const resolution = asRecord7(record.resolution);
343509
344497
  return {
343510
344498
  target: resolution?.target,
343511
344499
  resolvedRange: resolution?.range,
@@ -343531,8 +344519,8 @@ var init_special_handlers = __esm(() => {
343531
344519
  delete: flattenTextMutationReceipt,
343532
344520
  ...FORMAT_POST_INVOKE_HOOKS,
343533
344521
  getNodeById: (result2, context) => {
343534
- const record = asRecord6(result2);
343535
- const inputRecord = asRecord6(context.apiInput);
344522
+ const record = asRecord7(result2);
344523
+ const inputRecord = asRecord7(context.apiInput);
343536
344524
  if (!record || !inputRecord)
343537
344525
  return result2;
343538
344526
  const nodeId = typeof inputRecord.nodeId === "string" ? inputRecord.nodeId : undefined;