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

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 +2253 -1124
  2. package/package.json +6 -6
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-BdKG1LCw.es.js
107319
+ var exports_src_BdKG1LCw_es = {};
107320
+ __export(exports_src_BdKG1LCw_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;
119980
+ }
119981
+ return false;
119982
+ }
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;
119155
119999
  }
119156
- return true;
119157
120000
  }
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;
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 = {};
@@ -152839,8 +153718,7 @@ async function getEditorContext(editor, event) {
152839
153718
  const state = editor.state;
152840
153719
  if (!state)
152841
153720
  return null;
152842
- const { from: from$12, to, empty: empty$2 } = state.selection;
152843
- const selectedText = !empty$2 ? state.doc.textBetween(from$12, to) : "";
153721
+ const { from: from$12 } = state.selection;
152844
153722
  let pos = null;
152845
153723
  let node3 = null;
152846
153724
  if (event && typeof event.clientX === "number" && typeof event.clientY === "number") {
@@ -152858,6 +153736,14 @@ async function getEditorContext(editor, event) {
152858
153736
  pos = from$12;
152859
153737
  node3 = state.doc.nodeAt(pos);
152860
153738
  }
153739
+ const selection = getContextSelection({
153740
+ editor,
153741
+ state,
153742
+ pos,
153743
+ event
153744
+ });
153745
+ const hasSelection$1 = hasExpandedSelection(selection);
153746
+ const selectedText = hasSelection$1 ? state.doc.textBetween(selection.from, selection.to) : "";
152861
153747
  const clipboardContent = {
152862
153748
  html: null,
152863
153749
  text: null,
@@ -152893,14 +153779,18 @@ async function getEditorContext(editor, event) {
152893
153779
  state.selection.$head.marks().forEach((mark2) => activeMarks.push(mark2.type.name));
152894
153780
  }
152895
153781
  const isTrackedChange = activeMarks.includes("trackInsert") || activeMarks.includes("trackDelete") || activeMarks.includes("trackFormat");
152896
- const trackedChanges = event && pos !== null ? collectTrackedChangesForContext({
153782
+ const trackedChanges = (event && pos !== null ? hasExpandedSelection(selection) && selectionContainsPos(selection, pos) : hasSelection$1) ? collectTrackedChanges({
153783
+ state,
153784
+ from: selection.from,
153785
+ to: selection.to
153786
+ }) : event && pos !== null ? collectTrackedChangesForContext({
152897
153787
  state,
152898
153788
  pos,
152899
153789
  trackedChangeId
152900
153790
  }) : collectTrackedChanges({
152901
153791
  state,
152902
- from: from$12,
152903
- to
153792
+ from: selection.from,
153793
+ to: selection.to
152904
153794
  });
152905
153795
  const cursorCoords = pos !== null ? editor.coordsAtPos?.(pos) : null;
152906
153796
  const cursorPosition = cursorCoords ? {
@@ -152912,9 +153802,9 @@ async function getEditorContext(editor, event) {
152912
153802
  } : null;
152913
153803
  return {
152914
153804
  selectedText,
152915
- hasSelection: !empty$2,
152916
- selectionStart: from$12,
152917
- selectionEnd: to,
153805
+ hasSelection: hasSelection$1,
153806
+ selectionStart: selection.from,
153807
+ selectionEnd: selection.to,
152918
153808
  isInTable: isInTable$2,
152919
153809
  isInList,
152920
153810
  isInSectionNode,
@@ -152938,6 +153828,20 @@ async function getEditorContext(editor, event) {
152938
153828
  trackedChanges
152939
153829
  };
152940
153830
  }
153831
+ function selectionContainsPos(selection, pos) {
153832
+ return hasExpandedSelection(selection) && Number.isFinite(pos) && pos >= selection.from && pos <= selection.to;
153833
+ }
153834
+ function getContextSelection({ editor, state, pos, event }) {
153835
+ const currentSelection = state.selection;
153836
+ const preservedSelection = editor?.options?.preservedSelection ?? editor?.options?.lastSelection;
153837
+ if (hasExpandedSelection(currentSelection))
153838
+ return currentSelection;
153839
+ if (!hasExpandedSelection(preservedSelection))
153840
+ return currentSelection;
153841
+ if (event)
153842
+ return selectionContainsPos(preservedSelection, pos) ? preservedSelection : currentSelection;
153843
+ return preservedSelection;
153844
+ }
152941
153845
  function computeCanUndo(editor, state) {
152942
153846
  if (typeof editor?.can === "function")
152943
153847
  try {
@@ -153113,10 +154017,11 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
153113
154017
  label: TEXTS.trackChangesAccept,
153114
154018
  isDefault: true,
153115
154019
  action: (editor$1, context$1) => {
153116
- if (context$1?.trackedChangeId)
153117
- editor$1.commands.acceptTrackedChangeById(context$1.trackedChangeId);
153118
- else
153119
- editor$1.commands.acceptTrackedChangeBySelection();
154020
+ editor$1.commands.acceptTrackedChangeFromContextMenu({
154021
+ from: context$1?.selectionStart,
154022
+ to: context$1?.selectionEnd,
154023
+ trackedChangeId: context$1?.trackedChangeId
154024
+ });
153120
154025
  },
153121
154026
  showWhen: (context$1) => {
153122
154027
  const { trigger: trigger$1, isTrackedChange } = context$1;
@@ -153128,10 +154033,11 @@ function getItems(context, customItems = [], includeDefaultItems = true) {
153128
154033
  icon: ICONS.trackChangesReject,
153129
154034
  isDefault: true,
153130
154035
  action: (editor$1, context$1) => {
153131
- if (context$1?.trackedChangeId)
153132
- editor$1.commands.rejectTrackedChangeById(context$1.trackedChangeId);
153133
- else
153134
- editor$1.commands.rejectTrackedChangeOnSelection();
154036
+ editor$1.commands.rejectTrackedChangeFromContextMenu({
154037
+ from: context$1?.selectionStart,
154038
+ to: context$1?.selectionEnd,
154039
+ trackedChangeId: context$1?.trackedChangeId
154040
+ });
153135
154041
  },
153136
154042
  showWhen: (context$1) => {
153137
154043
  const { trigger: trigger$1, isTrackedChange } = context$1;
@@ -162545,7 +163451,7 @@ var Node$13 = class Node$14 {
162545
163451
  console.warn("Failed to initialize developer tools:", error);
162546
163452
  }
162547
163453
  }
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 {
163454
+ }, 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
163455
  constructor(config2) {
162550
163456
  this.search = config2.search;
162551
163457
  this.caseSensitive = !!config2.caseSensitive;
@@ -178924,27 +179830,102 @@ var Node$13 = class Node$14 {
178924
179830
  if (!trackedChangeId)
178925
179831
  return changes;
178926
179832
  return changes.filter((change) => change.id === trackedChangeId);
178927
- }, TrackChanges, dedupeTrackedChangeRanges = (changes = []) => {
178928
- const byKey = /* @__PURE__ */ new Map;
178929
- changes.forEach((change) => {
178930
- if (!change || typeof change.from !== "number" || typeof change.to !== "number")
179833
+ }, hasExpandedSelection = (selection) => {
179834
+ return Number.isFinite(selection?.from) && Number.isFinite(selection?.to) && selection.from !== selection.to;
179835
+ }, TrackChanges, TRACKED_CHANGE_MARKS, getTrackedMark = (node3) => node3?.marks?.find((mark2) => TRACKED_CHANGE_MARKS.includes(mark2.type.name)) ?? null, getTrackedChangeActionSelection = ({ state, editor }) => {
179836
+ const currentSelection = state?.selection;
179837
+ if (hasExpandedSelection(currentSelection))
179838
+ return currentSelection;
179839
+ const preservedSelection = editor?.options?.preservedSelection ?? editor?.options?.lastSelection;
179840
+ if (hasExpandedSelection(preservedSelection))
179841
+ return preservedSelection;
179842
+ return currentSelection;
179843
+ }, getTrackedChangeResolutionContext = ({ state, trackedChangeId = null }) => {
179844
+ const commentsPluginState = CommentsPluginKey.getState(state);
179845
+ const resolvedTrackedChangeId = trackedChangeId ?? commentsPluginState?.activeThreadId ?? null;
179846
+ const hasTrackedChangeInCache = Boolean(resolvedTrackedChangeId && commentsPluginState?.trackedChanges?.[resolvedTrackedChangeId]);
179847
+ const hasTrackedChangeInDocument = Boolean(resolvedTrackedChangeId && getChangesByIdToResolve(state, resolvedTrackedChangeId)?.length);
179848
+ return {
179849
+ trackedChangeId: resolvedTrackedChangeId,
179850
+ hasKnownTrackedChangeId: hasTrackedChangeInCache || hasTrackedChangeInDocument
179851
+ };
179852
+ }, selectionTouchesTrackedChange = ({ state, trackedChangeId, selection = state?.selection }) => {
179853
+ if (!selection)
179854
+ return false;
179855
+ if (!trackedChangeId)
179856
+ return collectTrackedChanges({
179857
+ state,
179858
+ from: selection.from,
179859
+ to: selection.to
179860
+ }).length > 0;
179861
+ return collectTrackedChanges({
179862
+ state,
179863
+ from: selection.from,
179864
+ to: selection.to
179865
+ }).some((change) => change.id === trackedChangeId);
179866
+ }, resolveTrackedChangeAction = ({ action, state, commands: commands$1, editor, trackedChangeId = null, hasKnownTrackedChangeId = false, selection = null }) => {
179867
+ const targetSelection = selection ?? getTrackedChangeActionSelection({
179868
+ state,
179869
+ editor
179870
+ });
179871
+ const betweenCommand = action === "accept" ? commands$1.acceptTrackedChangesBetween : commands$1.rejectTrackedChangesBetween;
179872
+ const byIdCommand = action === "accept" ? commands$1.acceptTrackedChangeById : commands$1.rejectTrackedChangeById;
179873
+ const selectionCommand = action === "accept" ? commands$1.acceptTrackedChangeBySelection : commands$1.rejectTrackedChangeOnSelection;
179874
+ if (hasExpandedSelection(targetSelection) && selectionTouchesTrackedChange({
179875
+ state,
179876
+ trackedChangeId,
179877
+ selection: targetSelection
179878
+ }))
179879
+ return betweenCommand(targetSelection.from, targetSelection.to);
179880
+ if (trackedChangeId && hasKnownTrackedChangeId)
179881
+ return byIdCommand(trackedChangeId);
179882
+ return hasExpandedSelection(targetSelection) ? betweenCommand(targetSelection.from, targetSelection.to) : selectionCommand();
179883
+ }, collectRemainingMarksByType = (trackedChanges = []) => ({
179884
+ insertedMark: trackedChanges.find(({ mark: mark2 }) => mark2.type.name === "trackInsert")?.mark ?? null,
179885
+ deletionMark: trackedChanges.find(({ mark: mark2 }) => mark2.type.name === "trackDelete")?.mark ?? null,
179886
+ formatMark: trackedChanges.find(({ mark: mark2 }) => mark2.type.name === "trackFormat")?.mark ?? null
179887
+ }), emitTrackedChangeCommentLifecycle = ({ editor, nextState, touchedChangeIds }) => {
179888
+ if (!editor?.emit || !touchedChangeIds?.size)
179889
+ return;
179890
+ const resolvedByEmail = editor.options?.user?.email;
179891
+ const resolvedByName = editor.options?.user?.name;
179892
+ touchedChangeIds.forEach((changeId) => {
179893
+ const remainingTrackedChanges = getTrackChanges(nextState, changeId);
179894
+ if (!remainingTrackedChanges.length) {
179895
+ editor.emit("commentsUpdate", {
179896
+ type: "trackedChange",
179897
+ event: "resolve",
179898
+ changeId,
179899
+ resolvedByEmail,
179900
+ resolvedByName
179901
+ });
178931
179902
  return;
178932
- const type = change.mark?.type?.name || "";
178933
- const id2 = change.mark?.attrs?.id || "";
178934
- const key$1 = `${change.from}:${change.to}:${type}:${id2}`;
178935
- if (!byKey.has(key$1))
178936
- byKey.set(key$1, change);
178937
- });
178938
- return Array.from(byKey.values()).sort((left$1, right$1) => {
178939
- if (left$1.from !== right$1.from)
178940
- return left$1.from - right$1.from;
178941
- return left$1.to - right$1.to;
178942
- });
178943
- }, getTrackedChangesByTouchedIds = (state, trackedChanges = []) => {
178944
- const touchedIds = new Set(trackedChanges.map(({ mark: mark2 }) => mark2?.attrs?.id).filter(Boolean));
178945
- if (!touchedIds.size)
178946
- return trackedChanges;
178947
- return Array.from(touchedIds).flatMap((id2) => getChangesByIdToResolve(state, id2) || []);
179903
+ }
179904
+ const updatePayload = createOrUpdateTrackedChangeComment({
179905
+ event: "update",
179906
+ marks: collectRemainingMarksByType(remainingTrackedChanges),
179907
+ deletionNodes: [],
179908
+ nodes: [],
179909
+ newEditorState: nextState,
179910
+ documentId: editor.options?.documentId,
179911
+ trackedChangesForId: remainingTrackedChanges
179912
+ });
179913
+ if (updatePayload)
179914
+ editor.emit("commentsUpdate", updatePayload);
179915
+ });
179916
+ }, dispatchTrackedChangeResolution = ({ state, tr, dispatch, editor, touchedChangeIds }) => {
179917
+ if (!tr.steps.length)
179918
+ return true;
179919
+ const nextState = state.apply(tr);
179920
+ if (dispatch)
179921
+ dispatch(tr);
179922
+ if (dispatch && touchedChangeIds?.size)
179923
+ emitTrackedChangeCommentLifecycle({
179924
+ editor,
179925
+ nextState,
179926
+ touchedChangeIds
179927
+ });
179928
+ return true;
178948
179929
  }, getChangesByIdToResolve = (state, id2) => {
178949
179930
  const trackedChanges = getTrackChanges(state);
178950
179931
  const changeIndex = trackedChanges.findIndex(({ mark: mark2 }) => mark2.attrs.id === id2);
@@ -181112,9 +182093,9 @@ var Node$13 = class Node$14 {
181112
182093
  trackedChanges: context.trackedChanges ?? []
181113
182094
  });
181114
182095
  }, _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(() => {
182096
+ var init_src_BdKG1LCw_es = __esm(() => {
181116
182097
  init_rolldown_runtime_B2q5OVn9_es();
181117
- init_SuperConverter_CDs2fwu4_es();
182098
+ init_SuperConverter_CoCZX_fP_es();
181118
182099
  init_jszip_ChlR43oI_es();
181119
182100
  init_uuid_2IzDu5nl_es();
181120
182101
  init_constants_CqvgVEDh_es();
@@ -189523,10 +190504,24 @@ function print() { __p += __j.call(arguments, '') }
189523
190504
  run: "runProperties",
189524
190505
  paragraph: "paragraphProperties"
189525
190506
  };
189526
- XML_PATH_BY_CHANNEL = {
190507
+ XML_PATH_BY_CHANNEL2 = {
189527
190508
  run: "w:styles/w:docDefaults/w:rPrDefault/w:rPr",
189528
190509
  paragraph: "w:styles/w:docDefaults/w:pPrDefault/w:pPr"
189529
190510
  };
190511
+ UNDERLINE_API_TO_STORAGE = {
190512
+ val: "w:val",
190513
+ color: "w:color",
190514
+ themeColor: "w:themeColor",
190515
+ themeTint: "w:themeTint",
190516
+ themeShade: "w:themeShade"
190517
+ };
190518
+ UNDERLINE_STORAGE_TO_API = Object.fromEntries(Object.entries(UNDERLINE_API_TO_STORAGE).map(([k$1, v]) => [v, k$1]));
190519
+ HEX_SUBKEYS_BY_PROPERTY = {
190520
+ color: new Set(["val"]),
190521
+ shading: new Set(["color", "fill"]),
190522
+ underline: new Set(["color", "w:color"]),
190523
+ borders: new Set(["color"])
190524
+ };
189530
190525
  PARAGRAPH_NODE_TYPES = new Set([
189531
190526
  "paragraph",
189532
190527
  "heading",
@@ -208936,98 +209931,92 @@ function print() { __p += __j.call(arguments, '') }
208936
209931
  return false;
208937
209932
  let { tr, doc: doc$2 } = state;
208938
209933
  tr.setMeta("inputType", "acceptReject");
209934
+ const touchedChangeIds = /* @__PURE__ */ new Set;
208939
209935
  const map$22 = new Mapping;
208940
209936
  doc$2.nodesBetween(from$12, to, (node3, pos) => {
208941
- if (node3.marks && node3.marks.find((mark2) => mark2.type.name === "trackDelete")) {
208942
- const deletionStep = new ReplaceStep(map$22.map(Math.max(pos, from$12)), map$22.map(Math.min(pos + node3.nodeSize, to)), Slice.empty);
209937
+ const trackedMark = getTrackedMark(node3);
209938
+ if (!trackedMark)
209939
+ return;
209940
+ const mappedFrom = map$22.map(Math.max(pos, from$12));
209941
+ const mappedTo = map$22.map(Math.min(pos + node3.nodeSize, to));
209942
+ if (mappedFrom >= mappedTo)
209943
+ return;
209944
+ if (trackedMark.attrs?.id)
209945
+ touchedChangeIds.add(trackedMark.attrs.id);
209946
+ if (trackedMark.type.name === "trackDelete") {
209947
+ const deletionStep = new ReplaceStep(mappedFrom, mappedTo, Slice.empty);
208943
209948
  tr.step(deletionStep);
208944
209949
  map$22.appendMap(deletionStep.getMap());
208945
- } else if (node3.marks && node3.marks.find((mark2) => mark2.type.name === "trackInsert")) {
208946
- const insertionMark = node3.marks.find((mark2) => mark2.type.name === TrackInsertMarkName);
208947
- tr.step(new RemoveMarkStep(map$22.map(Math.max(pos, from$12)), map$22.map(Math.min(pos + node3.nodeSize, to)), insertionMark));
208948
- } else if (node3.marks && node3.marks.find((mark2) => mark2.type.name === "trackFormat")) {
208949
- const formatChangeMark = node3.marks.find((mark2) => mark2.type.name === TrackFormatMarkName);
208950
- tr.step(new RemoveMarkStep(map$22.map(Math.max(pos, from$12)), map$22.map(Math.min(pos + node3.nodeSize, to)), formatChangeMark));
209950
+ return;
208951
209951
  }
209952
+ tr.step(new RemoveMarkStep(mappedFrom, mappedTo, trackedMark));
208952
209953
  });
208953
- if (tr.steps.length)
208954
- dispatch(tr);
208955
- return true;
208956
- },
208957
- rejectTrackedChangesBetween: (from$12, to) => ({ state, dispatch, editor }) => {
208958
- const trackedChangesInSelection = collectTrackedChanges({
209954
+ return dispatchTrackedChangeResolution({
208959
209955
  state,
208960
- from: from$12,
208961
- to
209956
+ tr,
209957
+ dispatch,
209958
+ editor,
209959
+ touchedChangeIds
208962
209960
  });
208963
- const trackedChangesById = getTrackedChangesByTouchedIds(state, trackedChangesInSelection);
208964
- const trackedChangesWithoutId = trackedChangesInSelection.filter(({ mark: mark2 }) => !mark2?.attrs?.id);
208965
- const trackedChanges = dedupeTrackedChangeRanges([...trackedChangesById, ...trackedChangesWithoutId]);
209961
+ },
209962
+ rejectTrackedChangesBetween: (from$12, to) => ({ state, dispatch, editor }) => {
208966
209963
  if (!isTrackedChangeActionAllowed({
208967
209964
  editor,
208968
209965
  action: "reject",
208969
- trackedChanges
209966
+ trackedChanges: collectTrackedChanges({
209967
+ state,
209968
+ from: from$12,
209969
+ to
209970
+ })
208970
209971
  }))
208971
209972
  return false;
208972
209973
  const { tr, doc: doc$2 } = state;
208973
- const rejectedChangeIds = /* @__PURE__ */ new Set;
209974
+ const touchedChangeIds = /* @__PURE__ */ new Set;
208974
209975
  tr.setMeta("inputType", "acceptReject");
208975
209976
  const map$22 = new Mapping;
208976
- trackedChanges.forEach(({ from: rangeFrom, to: rangeTo }) => {
208977
- doc$2.nodesBetween(rangeFrom, rangeTo, (node3, pos) => {
208978
- if (node3.marks && node3.marks.find((mark2) => mark2.type.name === "trackDelete")) {
208979
- const deletionMark = node3.marks.find((mark2) => mark2.type.name === TrackDeleteMarkName);
208980
- if (deletionMark?.attrs?.id)
208981
- rejectedChangeIds.add(deletionMark.attrs.id);
208982
- tr.step(new RemoveMarkStep(map$22.map(Math.max(pos, rangeFrom)), map$22.map(Math.min(pos + node3.nodeSize, rangeTo)), deletionMark));
208983
- } else if (node3.marks && node3.marks.find((mark2) => mark2.type.name === "trackInsert")) {
208984
- const insertionMark = node3.marks.find((mark2) => mark2.type.name === TrackInsertMarkName);
208985
- if (insertionMark?.attrs?.id)
208986
- rejectedChangeIds.add(insertionMark.attrs.id);
208987
- const deletionStep = new ReplaceStep(map$22.map(Math.max(pos, rangeFrom)), map$22.map(Math.min(pos + node3.nodeSize, rangeTo)), Slice.empty);
208988
- tr.step(deletionStep);
208989
- map$22.appendMap(deletionStep.getMap());
208990
- } else if (node3.marks && node3.marks.find((mark2) => mark2.type.name === "trackFormat")) {
208991
- const formatChangeMark = node3.marks.find((mark2) => mark2.type.name === TrackFormatMarkName);
208992
- if (formatChangeMark?.attrs?.id)
208993
- rejectedChangeIds.add(formatChangeMark.attrs.id);
208994
- formatChangeMark.attrs.before.forEach((oldMark) => {
208995
- tr.step(new AddMarkStep(map$22.map(Math.max(pos, rangeFrom)), map$22.map(Math.min(pos + node3.nodeSize, rangeTo)), state.schema.marks[oldMark.type].create(oldMark.attrs)));
208996
- });
208997
- formatChangeMark.attrs.after.forEach((newMark) => {
208998
- const mappedFrom = map$22.map(Math.max(pos, rangeFrom));
208999
- const mappedTo = map$22.map(Math.min(pos + node3.nodeSize, rangeTo));
209000
- const liveMark = findMarkInRangeBySnapshot({
209001
- doc: tr.doc,
209002
- from: mappedFrom,
209003
- to: mappedTo,
209004
- snapshot: newMark
209005
- });
209006
- if (!liveMark)
209007
- return;
209008
- tr.step(new RemoveMarkStep(mappedFrom, mappedTo, liveMark));
209009
- });
209010
- tr.step(new RemoveMarkStep(map$22.map(Math.max(pos, rangeFrom)), map$22.map(Math.min(pos + node3.nodeSize, rangeTo)), formatChangeMark));
209011
- }
209977
+ doc$2.nodesBetween(from$12, to, (node3, pos) => {
209978
+ const trackedMark = getTrackedMark(node3);
209979
+ if (!trackedMark)
209980
+ return;
209981
+ const mappedFrom = map$22.map(Math.max(pos, from$12));
209982
+ const mappedTo = map$22.map(Math.min(pos + node3.nodeSize, to));
209983
+ if (mappedFrom >= mappedTo)
209984
+ return;
209985
+ if (trackedMark.attrs?.id)
209986
+ touchedChangeIds.add(trackedMark.attrs.id);
209987
+ if (trackedMark.type.name === "trackDelete") {
209988
+ tr.step(new RemoveMarkStep(mappedFrom, mappedTo, trackedMark));
209989
+ return;
209990
+ }
209991
+ if (trackedMark.type.name === "trackInsert") {
209992
+ const deletionStep = new ReplaceStep(mappedFrom, mappedTo, Slice.empty);
209993
+ tr.step(deletionStep);
209994
+ map$22.appendMap(deletionStep.getMap());
209995
+ return;
209996
+ }
209997
+ trackedMark.attrs.before.forEach((oldMark) => {
209998
+ tr.step(new AddMarkStep(mappedFrom, mappedTo, state.schema.marks[oldMark.type].create(oldMark.attrs)));
209012
209999
  });
209013
- });
209014
- if (tr.steps.length) {
209015
- dispatch(tr);
209016
- if (editor?.emit && rejectedChangeIds.size) {
209017
- const resolvedByEmail = editor.options?.user?.email;
209018
- const resolvedByName = editor.options?.user?.name;
209019
- rejectedChangeIds.forEach((changeId) => {
209020
- editor.emit("commentsUpdate", {
209021
- type: "trackedChange",
209022
- event: "resolve",
209023
- changeId,
209024
- resolvedByEmail,
209025
- resolvedByName
209026
- });
210000
+ trackedMark.attrs.after.forEach((newMark) => {
210001
+ const liveMark = findMarkInRangeBySnapshot({
210002
+ doc: tr.doc,
210003
+ from: mappedFrom,
210004
+ to: mappedTo,
210005
+ snapshot: newMark
209027
210006
  });
209028
- }
209029
- }
209030
- return true;
210007
+ if (!liveMark)
210008
+ return;
210009
+ tr.step(new RemoveMarkStep(mappedFrom, mappedTo, liveMark));
210010
+ });
210011
+ tr.step(new RemoveMarkStep(mappedFrom, mappedTo, trackedMark));
210012
+ });
210013
+ return dispatchTrackedChangeResolution({
210014
+ state,
210015
+ tr,
210016
+ dispatch,
210017
+ editor,
210018
+ touchedChangeIds
210019
+ });
209031
210020
  },
209032
210021
  acceptTrackedChange: ({ trackedChange }) => ({ commands: commands$1 }) => {
209033
210022
  const { start: from$12, end: to } = trackedChange;
@@ -209037,13 +210026,33 @@ function print() { __p += __j.call(arguments, '') }
209037
210026
  const { from: from$12, to } = state.selection;
209038
210027
  return commands$1.acceptTrackedChangesBetween(from$12, to);
209039
210028
  },
209040
- acceptTrackedChangeFromToolbar: () => ({ state, commands: commands$1 }) => {
209041
- const commentsPluginState = CommentsPluginKey.getState(state);
209042
- const activeThreadId = commentsPluginState?.activeThreadId;
209043
- if (activeThreadId && commentsPluginState?.trackedChanges?.[activeThreadId])
209044
- return commands$1.acceptTrackedChangeById(activeThreadId);
209045
- else
209046
- return commands$1.acceptTrackedChangeBySelection();
210029
+ acceptTrackedChangeFromToolbar: () => ({ state, commands: commands$1, editor }) => {
210030
+ return resolveTrackedChangeAction({
210031
+ action: "accept",
210032
+ state,
210033
+ commands: commands$1,
210034
+ editor,
210035
+ ...getTrackedChangeResolutionContext({
210036
+ state,
210037
+ trackedChangeId: CommentsPluginKey.getState(state)?.activeThreadId
210038
+ })
210039
+ });
210040
+ },
210041
+ acceptTrackedChangeFromContextMenu: ({ from: from$12, to, trackedChangeId = null } = {}) => ({ state, commands: commands$1, editor }) => {
210042
+ return resolveTrackedChangeAction({
210043
+ action: "accept",
210044
+ state,
210045
+ commands: commands$1,
210046
+ editor,
210047
+ selection: Number.isFinite(from$12) && Number.isFinite(to) ? {
210048
+ from: from$12,
210049
+ to
210050
+ } : null,
210051
+ ...getTrackedChangeResolutionContext({
210052
+ state,
210053
+ trackedChangeId
210054
+ })
210055
+ });
209047
210056
  },
209048
210057
  acceptTrackedChangeById: (id2) => ({ state, tr, commands: commands$1 }) => {
209049
210058
  return (getChangesByIdToResolve(state, id2) || []).map(({ from: from$12, to }) => {
@@ -209071,13 +210080,33 @@ function print() { __p += __j.call(arguments, '') }
209071
210080
  const { from: from$12, to } = state.selection;
209072
210081
  return commands$1.rejectTrackedChangesBetween(from$12, to);
209073
210082
  },
209074
- rejectTrackedChangeFromToolbar: () => ({ state, commands: commands$1 }) => {
209075
- const commentsPluginState = CommentsPluginKey.getState(state);
209076
- const activeThreadId = commentsPluginState?.activeThreadId;
209077
- if (activeThreadId && commentsPluginState?.trackedChanges?.[activeThreadId])
209078
- return commands$1.rejectTrackedChangeById(activeThreadId);
209079
- else
209080
- return commands$1.rejectTrackedChangeOnSelection();
210083
+ rejectTrackedChangeFromToolbar: () => ({ state, commands: commands$1, editor }) => {
210084
+ return resolveTrackedChangeAction({
210085
+ action: "reject",
210086
+ state,
210087
+ commands: commands$1,
210088
+ editor,
210089
+ ...getTrackedChangeResolutionContext({
210090
+ state,
210091
+ trackedChangeId: CommentsPluginKey.getState(state)?.activeThreadId
210092
+ })
210093
+ });
210094
+ },
210095
+ rejectTrackedChangeFromContextMenu: ({ from: from$12, to, trackedChangeId = null } = {}) => ({ state, commands: commands$1, editor }) => {
210096
+ return resolveTrackedChangeAction({
210097
+ action: "reject",
210098
+ state,
210099
+ commands: commands$1,
210100
+ editor,
210101
+ selection: Number.isFinite(from$12) && Number.isFinite(to) ? {
210102
+ from: from$12,
210103
+ to
210104
+ } : null,
210105
+ ...getTrackedChangeResolutionContext({
210106
+ state,
210107
+ trackedChangeId
210108
+ })
210109
+ });
209081
210110
  },
209082
210111
  rejectAllTrackedChanges: () => ({ state, commands: commands$1 }) => {
209083
210112
  const from$12 = 0, to = state.doc.content.size;
@@ -209234,6 +210263,11 @@ function print() { __p += __j.call(arguments, '') }
209234
210263
  return [TrackChangesBasePlugin()];
209235
210264
  }
209236
210265
  });
210266
+ TRACKED_CHANGE_MARKS = [
210267
+ TrackDeleteMarkName,
210268
+ TrackInsertMarkName,
210269
+ TrackFormatMarkName
210270
+ ];
209237
210271
  TextTransform = Extension.create({
209238
210272
  name: "textTransform",
209239
210273
  addOptions() {
@@ -212589,8 +213623,8 @@ function print() { __p += __j.call(arguments, '') }
212589
213623
  return isObjectLike_default(value) && hasOwnProperty$8.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
212590
213624
  };
212591
213625
  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;
213626
+ freeExports$2 = typeof exports_src_BdKG1LCw_es == "object" && exports_src_BdKG1LCw_es && !exports_src_BdKG1LCw_es.nodeType && exports_src_BdKG1LCw_es;
213627
+ freeModule$2 = freeExports$2 && typeof module_src_BdKG1LCw_es == "object" && module_src_BdKG1LCw_es && !module_src_BdKG1LCw_es.nodeType && module_src_BdKG1LCw_es;
212594
213628
  Buffer$1 = freeModule$2 && freeModule$2.exports === freeExports$2 ? _root_default.Buffer : undefined;
212595
213629
  isBuffer_default = (Buffer$1 ? Buffer$1.isBuffer : undefined) || stubFalse_default;
212596
213630
  typedArrayTags = {};
@@ -212598,8 +213632,8 @@ function print() { __p += __j.call(arguments, '') }
212598
213632
  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
213633
  _baseIsTypedArray_default = baseIsTypedArray;
212600
213634
  _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;
213635
+ freeExports$1 = typeof exports_src_BdKG1LCw_es == "object" && exports_src_BdKG1LCw_es && !exports_src_BdKG1LCw_es.nodeType && exports_src_BdKG1LCw_es;
213636
+ freeModule$1 = freeExports$1 && typeof module_src_BdKG1LCw_es == "object" && module_src_BdKG1LCw_es && !module_src_BdKG1LCw_es.nodeType && module_src_BdKG1LCw_es;
212603
213637
  freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && _freeGlobal_default.process;
212604
213638
  _nodeUtil_default = function() {
212605
213639
  try {
@@ -212704,8 +213738,8 @@ function print() { __p += __j.call(arguments, '') }
212704
213738
  Stack.prototype.has = _stackHas_default;
212705
213739
  Stack.prototype.set = _stackSet_default;
212706
213740
  _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;
213741
+ freeExports = typeof exports_src_BdKG1LCw_es == "object" && exports_src_BdKG1LCw_es && !exports_src_BdKG1LCw_es.nodeType && exports_src_BdKG1LCw_es;
213742
+ freeModule = freeExports && typeof module_src_BdKG1LCw_es == "object" && module_src_BdKG1LCw_es && !module_src_BdKG1LCw_es.nodeType && module_src_BdKG1LCw_es;
212709
213743
  Buffer4 = freeModule && freeModule.exports === freeExports ? _root_default.Buffer : undefined;
212710
213744
  allocUnsafe = Buffer4 ? Buffer4.allocUnsafe : undefined;
212711
213745
  _cloneBuffer_default = cloneBuffer;
@@ -220785,8 +221819,8 @@ var init_zipper_DqXT7uTa_es = __esm(() => {
220785
221819
 
220786
221820
  // ../../packages/superdoc/dist/super-editor.es.js
220787
221821
  var init_super_editor_es = __esm(() => {
220788
- init_src_Di9XuGnD_es();
220789
- init_SuperConverter_CDs2fwu4_es();
221822
+ init_src_BdKG1LCw_es();
221823
+ init_SuperConverter_CoCZX_fP_es();
220790
221824
  init_jszip_ChlR43oI_es();
220791
221825
  init_xml_js_DLE8mr0n_es();
220792
221826
  init_constants_CqvgVEDh_es();
@@ -278712,63 +279746,144 @@ function syncDocDefaultsToConvertedXml2(converter, docDefaultsTranslator) {
278712
279746
  }
278713
279747
 
278714
279748
  // ../../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;
279749
+ function mapUnderlineToStorage2(apiObj) {
279750
+ const result = {};
279751
+ for (const [k2, v] of Object.entries(apiObj)) {
279752
+ result[UNDERLINE_API_TO_STORAGE2[k2] ?? k2] = v;
279753
+ }
279754
+ return result;
279755
+ }
279756
+ function mapUnderlineToApi2(storageObj) {
279757
+ const result = {};
279758
+ for (const [k2, v] of Object.entries(storageObj)) {
279759
+ result[UNDERLINE_STORAGE_TO_API2[k2] ?? k2] = v;
279760
+ }
279761
+ return result;
279762
+ }
279763
+ function normalizeHexColor5(val) {
279764
+ return val.replace(/^#/, "").toUpperCase();
279765
+ }
279766
+ function normalizeObjectSubKeys2(obj, key2) {
279767
+ const hexKeys = HEX_SUBKEYS_BY_PROPERTY2[key2];
279768
+ if (!hexKeys)
279769
+ return obj;
279770
+ const result = {};
279771
+ for (const [k2, v] of Object.entries(obj)) {
279772
+ if (typeof v === "string" && hexKeys.has(k2)) {
279773
+ result[k2] = normalizeHexColor5(v);
279774
+ } else {
279775
+ result[k2] = v;
279776
+ }
279777
+ }
279778
+ return result;
278723
279779
  }
278724
- function stateMapEquals2(a2, b2) {
278725
- const keys7 = Object.keys(a2);
278726
- if (keys7.length !== Object.keys(b2).length)
279780
+ function jsonDeepEqual2(a2, b2) {
279781
+ if (a2 === b2)
279782
+ return true;
279783
+ if (a2 === null || b2 === null)
278727
279784
  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)
279785
+ if (typeof a2 !== typeof b2)
279786
+ return false;
279787
+ if (Array.isArray(a2)) {
279788
+ if (!Array.isArray(b2) || a2.length !== b2.length)
279789
+ return false;
279790
+ for (let i4 = 0;i4 < a2.length; i4++) {
279791
+ if (!jsonDeepEqual2(a2[i4], b2[i4]))
278737
279792
  return false;
278738
- for (const k2 of aKeys) {
278739
- if (av[k2] !== bv[k2])
278740
- return false;
278741
- }
278742
- continue;
278743
279793
  }
278744
- return false;
279794
+ return true;
278745
279795
  }
278746
- return true;
279796
+ if (typeof a2 === "object") {
279797
+ const aObj = a2;
279798
+ const bObj = b2;
279799
+ const aKeys = Object.keys(aObj);
279800
+ const bKeys = Object.keys(bObj);
279801
+ if (aKeys.length !== bKeys.length)
279802
+ return false;
279803
+ for (const key2 of aKeys) {
279804
+ if (!Object.prototype.hasOwnProperty.call(bObj, key2))
279805
+ return false;
279806
+ if (!jsonDeepEqual2(aObj[key2], bObj[key2]))
279807
+ return false;
279808
+ }
279809
+ return true;
279810
+ }
279811
+ return false;
278747
279812
  }
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;
279813
+ function formatState2(value, schema, key2) {
279814
+ if (value === undefined)
279815
+ return "inherit";
279816
+ switch (schema.kind) {
279817
+ case "boolean":
279818
+ return value ? "on" : "off";
279819
+ case "object":
279820
+ if (typeof value === "object" && value !== null) {
279821
+ const obj = { ...value };
279822
+ return key2 === "underline" ? mapUnderlineToApi2(obj) : obj;
279823
+ }
279824
+ return value;
279825
+ case "array":
279826
+ return Array.isArray(value) ? [...value.map((item) => structuredClone(item))] : value;
279827
+ default:
279828
+ return value;
279829
+ }
279830
+ }
279831
+ function asRecord3(value) {
279832
+ return typeof value === "object" && value !== null ? value : {};
279833
+ }
279834
+ function cloneForStorage2(value) {
279835
+ if (value === null || typeof value !== "object") {
279836
+ return value;
279837
+ }
279838
+ return structuredClone(value);
279839
+ }
279840
+ function applyReplace2(targetProps, key2, value) {
279841
+ targetProps[key2] = cloneForStorage2(value);
279842
+ }
279843
+ function applyShallowMerge2(targetProps, key2, value) {
279844
+ const current = asRecord3(targetProps[key2]);
279845
+ const patch3 = value;
279846
+ if (key2 === "underline") {
279847
+ const storagePatch = cloneForStorage2(mapUnderlineToStorage2(normalizeObjectSubKeys2(patch3, key2)));
279848
+ targetProps[key2] = { ...current, ...storagePatch };
279849
+ return;
279850
+ }
279851
+ targetProps[key2] = { ...current, ...cloneForStorage2(normalizeObjectSubKeys2(patch3, key2)) };
279852
+ }
279853
+ function applyEdgeMerge2(targetProps, key2, value) {
279854
+ const current = asRecord3(targetProps[key2]);
279855
+ const patch3 = value;
279856
+ const result = { ...current };
279857
+ for (const [edge, edgeValue] of Object.entries(patch3)) {
279858
+ const currentEdge = asRecord3(result[edge]);
279859
+ result[edge] = { ...currentEdge, ...cloneForStorage2(normalizeObjectSubKeys2(edgeValue, key2)) };
279860
+ }
279861
+ targetProps[key2] = result;
278753
279862
  }
278754
279863
  function applyPatch4(targetProps, patch3, channel) {
278755
279864
  const before = {};
278756
279865
  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);
279866
+ const patchKeys = new Set(Object.keys(patch3));
279867
+ for (const def2 of PROPERTY_REGISTRY) {
279868
+ if (def2.channel !== channel || !patchKeys.has(def2.key))
279869
+ continue;
279870
+ const key2 = def2.key;
279871
+ const value = patch3[key2];
279872
+ before[key2] = formatState2(targetProps[key2], def2.schema, key2);
279873
+ switch (def2.mergeStrategy) {
279874
+ case "replace":
279875
+ applyReplace2(targetProps, key2, value);
279876
+ break;
279877
+ case "shallowMerge":
279878
+ applyShallowMerge2(targetProps, key2, value);
279879
+ break;
279880
+ case "edgeMerge":
279881
+ applyEdgeMerge2(targetProps, key2, value);
279882
+ break;
278769
279883
  }
279884
+ after[key2] = formatState2(targetProps[key2], def2.schema, key2);
278770
279885
  }
278771
- const changed = !stateMapEquals2(before, after);
279886
+ const changed = !jsonDeepEqual2(before, after);
278772
279887
  return { before, after, changed };
278773
279888
  }
278774
279889
  function stylesApplyAdapter2(editor, input2, options) {
@@ -278794,14 +279909,14 @@ function stylesApplyAdapter2(editor, input2, options) {
278794
279909
  scope: "docDefaults",
278795
279910
  channel,
278796
279911
  xmlPart: STYLES_PART2,
278797
- xmlPath: XML_PATH_BY_CHANNEL2[channel]
279912
+ xmlPath: XML_PATH_BY_CHANNEL3[channel]
278798
279913
  };
278799
279914
  return executeOutOfBandMutation2(editor, (dryRun) => {
278800
279915
  const propsKey = PROPERTIES_KEY_BY_CHANNEL2[channel];
278801
279916
  const existingProps = converter.translatedLinkedStyles?.docDefaults?.[propsKey];
278802
279917
  let targetProps;
278803
279918
  if (dryRun) {
278804
- targetProps = existingProps ? { ...existingProps } : {};
279919
+ targetProps = existingProps ? structuredClone(existingProps) : {};
278805
279920
  } else {
278806
279921
  if (!converter.translatedLinkedStyles) {
278807
279922
  converter.translatedLinkedStyles = {};
@@ -278830,7 +279945,7 @@ function stylesApplyAdapter2(editor, input2, options) {
278830
279945
  return { changed, payload: receipt2 };
278831
279946
  }, options);
278832
279947
  }
278833
- var STYLES_PART2 = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL2, XML_PATH_BY_CHANNEL2;
279948
+ 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
279949
  var init_styles_adapter = __esm(() => {
278835
279950
  init_src();
278836
279951
  init_errors3();
@@ -278841,10 +279956,24 @@ var init_styles_adapter = __esm(() => {
278841
279956
  run: "runProperties",
278842
279957
  paragraph: "paragraphProperties"
278843
279958
  };
278844
- XML_PATH_BY_CHANNEL2 = {
279959
+ XML_PATH_BY_CHANNEL3 = {
278845
279960
  run: "w:styles/w:docDefaults/w:rPrDefault/w:rPr",
278846
279961
  paragraph: "w:styles/w:docDefaults/w:pPrDefault/w:pPr"
278847
279962
  };
279963
+ UNDERLINE_API_TO_STORAGE2 = {
279964
+ val: "w:val",
279965
+ color: "w:color",
279966
+ themeColor: "w:themeColor",
279967
+ themeTint: "w:themeTint",
279968
+ themeShade: "w:themeShade"
279969
+ };
279970
+ UNDERLINE_STORAGE_TO_API2 = Object.fromEntries(Object.entries(UNDERLINE_API_TO_STORAGE2).map(([k2, v]) => [v, k2]));
279971
+ HEX_SUBKEYS_BY_PROPERTY2 = {
279972
+ color: new Set(["val"]),
279973
+ shading: new Set(["color", "fill"]),
279974
+ underline: new Set(["color", "w:color"]),
279975
+ borders: new Set(["color"])
279976
+ };
278848
279977
  });
278849
279978
 
278850
279979
  // ../../packages/super-editor/src/document-api-adapters/plan-engine/paragraphs-wrappers.ts
@@ -280906,11 +282035,11 @@ function toMatchStyle2(marks, cascadeContext) {
280906
282035
  const runProps = marks.find((m2) => m2.type.name === "runProperties");
280907
282036
  const textStyle = marks.find((m2) => m2.type.name === "textStyle");
280908
282037
  const color3 = extractAttr2(runProps, "color") ?? extractAttr2(textStyle, "color");
280909
- const normalizedColor = color3 != null ? normalizeHexColor5(String(color3)) : undefined;
282038
+ const normalizedColor = color3 != null ? normalizeHexColor6(String(color3)) : undefined;
280910
282039
  if (normalizedColor)
280911
282040
  style3.color = normalizedColor;
280912
282041
  const highlight = extractAttr2(runProps, "highlight") ?? extractAttr2(textStyle, "highlight");
280913
- const normalizedHighlight = highlight != null ? normalizeHexColor5(String(highlight)) : undefined;
282042
+ const normalizedHighlight = highlight != null ? normalizeHexColor6(String(highlight)) : undefined;
280914
282043
  if (normalizedHighlight)
280915
282044
  style3.highlight = normalizedHighlight;
280916
282045
  const fontFamily2 = extractAttr2(runProps, "fontFamily") ?? extractAttr2(textStyle, "fontFamily");
@@ -280939,7 +282068,7 @@ function extractRunStyleId2(marks) {
280939
282068
  const id2 = runProps.attrs.styleId;
280940
282069
  return typeof id2 === "string" && id2.length > 0 ? id2 : undefined;
280941
282070
  }
280942
- function normalizeHexColor5(raw) {
282071
+ function normalizeHexColor6(raw) {
280943
282072
  if (!raw || typeof raw !== "string")
280944
282073
  return;
280945
282074
  const trimmed = raw.trim().toLowerCase();
@@ -285035,11 +286164,11 @@ function createTableAdapter2(editor, input2, options) {
285035
286164
  };
285036
286165
  }
285037
286166
  }
285038
- function asRecord3(value) {
286167
+ function asRecord4(value) {
285039
286168
  return value && typeof value === "object" ? value : undefined;
285040
286169
  }
285041
286170
  function resolveTableLook2(tableProps) {
285042
- return asRecord3(tableProps.tblLook);
286171
+ return asRecord4(tableProps.tblLook);
285043
286172
  }
285044
286173
  function mapJustificationToTableAlignment2(value) {
285045
286174
  switch (value) {
@@ -285077,7 +286206,7 @@ function resolvePreferredWidth2(value) {
285077
286206
  const numeric = resolveMeasurementValue2(value);
285078
286207
  if (numeric != null)
285079
286208
  return numeric;
285080
- const record = asRecord3(value);
286209
+ const record = asRecord4(value);
285081
286210
  if (!record)
285082
286211
  return;
285083
286212
  return resolveMeasurementValue2(record.value) ?? resolveMeasurementValue2(record.width);
@@ -285147,7 +286276,7 @@ function tablesGetCellsAdapter2(editor, input2) {
285147
286276
  }
285148
286277
  function tablesGetPropertiesAdapter2(editor, input2) {
285149
286278
  const resolved = resolveTableLocator2(editor, input2, "tables.getProperties");
285150
- const tp = asRecord3(resolved.candidate.node.attrs?.tableProperties) ?? {};
286279
+ const tp = asRecord4(resolved.candidate.node.attrs?.tableProperties) ?? {};
285151
286280
  const result = {
285152
286281
  nodeId: resolved.candidate.nodeId
285153
286282
  };
@@ -285160,7 +286289,7 @@ function tablesGetPropertiesAdapter2(editor, input2) {
285160
286289
  result.direction = "rtl";
285161
286290
  else if (tp.rightToLeft === false)
285162
286291
  result.direction = "ltr";
285163
- const tableWidth = asRecord3(tp.tableWidth);
286292
+ const tableWidth = asRecord4(tp.tableWidth);
285164
286293
  const autoFitMode = mapTableLayoutToAutoFitMode2(tp.tableLayout, tableWidth);
285165
286294
  if (autoFitMode)
285166
286295
  result.autoFitMode = autoFitMode;
@@ -343132,7 +344261,7 @@ var init_find_query = __esm(() => {
343132
344261
  });
343133
344262
 
343134
344263
  // src/lib/node-pretty.ts
343135
- function asRecord4(value2) {
344264
+ function asRecord5(value2) {
343136
344265
  if (typeof value2 !== "object" || value2 == null || Array.isArray(value2))
343137
344266
  return null;
343138
344267
  return value2;
@@ -343153,7 +344282,7 @@ function formatPropertyValue(value2) {
343153
344282
  }
343154
344283
  function buildNodePretty(revision, headerLabel, node4) {
343155
344284
  const lines = [`Revision ${revision}: ${headerLabel}`];
343156
- const record = asRecord4(node4);
344285
+ const record = asRecord5(node4);
343157
344286
  if (!record)
343158
344287
  return lines.join(`
343159
344288
  `);
@@ -343172,7 +344301,7 @@ function buildNodePretty(revision, headerLabel, node4) {
343172
344301
  lines.push("");
343173
344302
  lines.push(` Text: "${truncate(text9, 80)}"`);
343174
344303
  }
343175
- const properties = asRecord4(record.properties);
344304
+ const properties = asRecord5(record.properties);
343176
344305
  if (!properties)
343177
344306
  return lines.join(`
343178
344307
  `);
@@ -343191,7 +344320,7 @@ function buildNodePretty(revision, headerLabel, node4) {
343191
344320
  var init_node_pretty = () => {};
343192
344321
 
343193
344322
  // src/lib/output-formatters.ts
343194
- function asRecord5(value2) {
344323
+ function asRecord6(value2) {
343195
344324
  if (typeof value2 !== "object" || value2 == null || Array.isArray(value2))
343196
344325
  return null;
343197
344326
  return value2;
@@ -343203,10 +344332,10 @@ function hasNonEmptyString2(value2) {
343203
344332
  return typeof value2 === "string" && value2.length > 0;
343204
344333
  }
343205
344334
  function formatCommentList(result2, ctx2) {
343206
- const record = asRecord5(result2);
344335
+ const record = asRecord6(result2);
343207
344336
  const total = safeNumber(record?.total, 0);
343208
344337
  const rows2 = asArray(record?.items).map((entry) => {
343209
- const comment2 = asRecord5(entry) ?? {};
344338
+ const comment2 = asRecord6(entry) ?? {};
343210
344339
  const status = hasNonEmptyString2(comment2.status) ? comment2.status : "unknown";
343211
344340
  const commentId = hasNonEmptyString2(comment2.id) ? comment2.id : "<unknown>";
343212
344341
  const creatorName = hasNonEmptyString2(comment2.creatorName) ? comment2.creatorName : "";
@@ -343236,9 +344365,9 @@ function formatCommentList(result2, ctx2) {
343236
344365
  `);
343237
344366
  }
343238
344367
  function formatListResult(result2, ctx2) {
343239
- const record = asRecord5(result2);
344368
+ const record = asRecord6(result2);
343240
344369
  const total = safeNumber(record?.total, 0);
343241
- const items2 = asArray(record?.items).map((entry) => asRecord5(entry)).filter((entry) => Boolean(entry));
344370
+ const items2 = asArray(record?.items).map((entry) => asRecord6(entry)).filter((entry) => Boolean(entry));
343242
344371
  const lines = [`Revision ${ctx2.revision}: ${total} list items`];
343243
344372
  if (items2.length === 0)
343244
344373
  return lines[0];
@@ -343263,11 +344392,11 @@ function formatListResult(result2, ctx2) {
343263
344392
  `);
343264
344393
  }
343265
344394
  function formatTrackChangeList(result2, ctx2) {
343266
- const record = asRecord5(result2);
344395
+ const record = asRecord6(result2);
343267
344396
  const total = safeNumber(record?.total, 0);
343268
344397
  const rows2 = asArray(record?.items).map((entry) => {
343269
- const item = asRecord5(entry) ?? {};
343270
- const address2 = asRecord5(item.address);
344398
+ const item = asRecord6(entry) ?? {};
344399
+ const address2 = asRecord6(item.address);
343271
344400
  const type2 = hasNonEmptyString2(item.type) ? item.type : "change";
343272
344401
  const id3 = hasNonEmptyString2(item.id) ? item.id : hasNonEmptyString2(address2?.entityId) ? String(address2?.entityId) : "<unknown>";
343273
344402
  const authorName = hasNonEmptyString2(item.author) ? item.author : "";
@@ -343301,11 +344430,11 @@ function formatTrackChangeList(result2, ctx2) {
343301
344430
  `);
343302
344431
  }
343303
344432
  function formatDocumentInfo(result2, ctx2) {
343304
- const record = asRecord5(result2);
344433
+ const record = asRecord6(result2);
343305
344434
  if (!record)
343306
344435
  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));
344436
+ const counts = asRecord6(record.counts) ?? {};
344437
+ const outline = asArray(record.outline).map((entry) => asRecord6(entry)).filter((entry) => Boolean(entry));
343309
344438
  const words = safeNumber(counts.words, 0);
343310
344439
  const paragraphs = safeNumber(counts.paragraphs, 0);
343311
344440
  const headings = safeNumber(counts.headings, 0);
@@ -343382,7 +344511,7 @@ var init_session_collab = __esm(() => {
343382
344511
 
343383
344512
  // src/lib/special-handlers.ts
343384
344513
  import { createHash as createHash3 } from "node:crypto";
343385
- function asRecord6(value2) {
344514
+ function asRecord7(value2) {
343386
344515
  if (typeof value2 !== "object" || value2 == null || Array.isArray(value2))
343387
344516
  return null;
343388
344517
  return value2;
@@ -343391,7 +344520,7 @@ function asArray2(value2) {
343391
344520
  return Array.isArray(value2) ? value2 : [];
343392
344521
  }
343393
344522
  function asTrackChangeAddress(value2) {
343394
- const record = asRecord6(value2);
344523
+ const record = asRecord7(value2);
343395
344524
  if (!record)
343396
344525
  return null;
343397
344526
  if (record.kind !== "entity" || record.entityType !== "trackedChange")
@@ -343413,14 +344542,14 @@ function stableTrackChangeSignature(change) {
343413
344542
  return `${type2}|${author}|${authorEmail}|${date}|${excerpt}`;
343414
344543
  }
343415
344544
  function buildStableIdMappings(rawListResult) {
343416
- const record = asRecord6(rawListResult);
344545
+ const record = asRecord7(rawListResult);
343417
344546
  if (!record) {
343418
344547
  return { normalizedResult: rawListResult, stableToRawId: new Map, rawToStableId: new Map };
343419
344548
  }
343420
344549
  const stableToRawId = new Map;
343421
344550
  const rawToStableId = new Map;
343422
344551
  const signatureCounts = new Map;
343423
- const normalizedItems = asArray2(record.items).map((entry) => asRecord6(entry)).filter((entry) => Boolean(entry)).map((entry) => {
344552
+ const normalizedItems = asArray2(record.items).map((entry) => asRecord7(entry)).filter((entry) => Boolean(entry)).map((entry) => {
343424
344553
  const rawId = (typeof entry.id === "string" && entry.id.length > 0 ? entry.id : undefined) ?? asTrackChangeAddress(entry.address)?.entityId;
343425
344554
  if (!rawId)
343426
344555
  return entry;
@@ -343432,7 +344561,7 @@ function buildStableIdMappings(rawListResult) {
343432
344561
  stableToRawId.set(stableId, rawId);
343433
344562
  rawToStableId.set(rawId, stableId);
343434
344563
  const normalizedAddress = asTrackChangeAddress(entry.address);
343435
- const handleRecord = asRecord6(entry.handle);
344564
+ const handleRecord = asRecord7(entry.handle);
343436
344565
  return {
343437
344566
  ...entry,
343438
344567
  id: stableId,
@@ -343450,7 +344579,7 @@ function buildStableIdMappings(rawListResult) {
343450
344579
  };
343451
344580
  }
343452
344581
  var FORMAT_RECEIPT_OPERATION_IDS, resolveTrackChangeId = (input2, context) => {
343453
- const record = asRecord6(input2);
344582
+ const record = asRecord7(input2);
343454
344583
  if (!record)
343455
344584
  return input2;
343456
344585
  const stableId = typeof record.id === "string" ? record.id : undefined;
@@ -343464,10 +344593,10 @@ var FORMAT_RECEIPT_OPERATION_IDS, resolveTrackChangeId = (input2, context) => {
343464
344593
  const rawId = stableToRawId.get(stableId) ?? stableId;
343465
344594
  return { ...record, id: rawId };
343466
344595
  }, resolveReviewDecideId = (input2, context) => {
343467
- const record = asRecord6(input2);
344596
+ const record = asRecord7(input2);
343468
344597
  if (!record)
343469
344598
  return input2;
343470
- const target2 = asRecord6(record.target);
344599
+ const target2 = asRecord7(record.target);
343471
344600
  if (!target2)
343472
344601
  return input2;
343473
344602
  const stableId = typeof target2.id === "string" ? target2.id : undefined;
@@ -343483,7 +344612,7 @@ var FORMAT_RECEIPT_OPERATION_IDS, resolveTrackChangeId = (input2, context) => {
343483
344612
  }, normalizeTrackChangesListIds = (result2) => {
343484
344613
  return buildStableIdMappings(result2).normalizedResult;
343485
344614
  }, normalizeTrackChangeGetId = (result2, context) => {
343486
- const record = asRecord6(result2);
344615
+ const record = asRecord7(result2);
343487
344616
  if (!record)
343488
344617
  return result2;
343489
344618
  const listResult = context.editor.doc.invoke({
@@ -343502,10 +344631,10 @@ var FORMAT_RECEIPT_OPERATION_IDS, resolveTrackChangeId = (input2, context) => {
343502
344631
  address: normalizedAddress ? { ...normalizedAddress, entityId: stableId } : record.address
343503
344632
  };
343504
344633
  }, flattenTextMutationReceipt = (result2) => {
343505
- const record = asRecord6(result2);
344634
+ const record = asRecord7(result2);
343506
344635
  if (!record)
343507
344636
  return { receipt: result2 };
343508
- const resolution = asRecord6(record.resolution);
344637
+ const resolution = asRecord7(record.resolution);
343509
344638
  return {
343510
344639
  target: resolution?.target,
343511
344640
  resolvedRange: resolution?.range,
@@ -343531,8 +344660,8 @@ var init_special_handlers = __esm(() => {
343531
344660
  delete: flattenTextMutationReceipt,
343532
344661
  ...FORMAT_POST_INVOKE_HOOKS,
343533
344662
  getNodeById: (result2, context) => {
343534
- const record = asRecord6(result2);
343535
- const inputRecord = asRecord6(context.apiInput);
344663
+ const record = asRecord7(result2);
344664
+ const inputRecord = asRecord7(context.apiInput);
343536
344665
  if (!record || !inputRecord)
343537
344666
  return result2;
343538
344667
  const nodeId = typeof inputRecord.nodeId === "string" ? inputRecord.nodeId : undefined;