{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/oxfmt/latest.json",
  "title": "Oxfmtrc",
  "description": "Configuration options for the Oxfmt.\n\nMost options are the same as Prettier's options, but not all of them.\nIn addition, some options are our own extensions.",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/oxc-project/oxc/refs/heads/main/npm/oxfmt/configuration_schema.json",
    "sourceSha256": "f693a9f852057763930ff2fcc39c4ce3f29f9381597652e5b2ee192621eb1d75",
    "fileMatch": [
      "**/.oxfmtrc.json"
    ],
    "parsers": [
      "json"
    ]
  },
  "type": "object",
  "properties": {
    "arrowParens": {
      "description": "Include parentheses around a sole arrow function parameter.\n\n- Default: `\"always\"`",
      "allOf": [
        {
          "$ref": "#/$defs/ArrowParensConfig"
        }
      ],
      "markdownDescription": "Include parentheses around a sole arrow function parameter.\n\n- Default: `\"always\"`"
    },
    "bracketSameLine": {
      "description": "Put the `>` of a multi-line HTML (HTML, JSX, Vue, Angular) element at the end of the last line,\ninstead of being alone on the next line (does not apply to self closing elements).\n\n- Default: `false`",
      "type": "boolean",
      "markdownDescription": "Put the `>` of a multi-line HTML (HTML, JSX, Vue, Angular) element at the end of the last line,\ninstead of being alone on the next line (does not apply to self closing elements).\n\n- Default: `false`"
    },
    "bracketSpacing": {
      "description": "Print spaces between brackets in object literals.\n\n- Default: `true`",
      "type": "boolean",
      "markdownDescription": "Print spaces between brackets in object literals.\n\n- Default: `true`"
    },
    "embeddedLanguageFormatting": {
      "description": "Control whether to format embedded parts (For example, CSS-in-JS, or JS-in-Vue, etc.) in the file.\n\nNOTE: XXX-in-JS support is incomplete.\n\n- Default: `\"auto\"`",
      "allOf": [
        {
          "$ref": "#/$defs/EmbeddedLanguageFormattingConfig"
        }
      ],
      "markdownDescription": "Control whether to format embedded parts (For example, CSS-in-JS, or JS-in-Vue, etc.) in the file.\n\nNOTE: XXX-in-JS support is incomplete.\n\n- Default: `\"auto\"`"
    },
    "endOfLine": {
      "description": "Which end of line characters to apply.\n\nNOTE: `\"auto\"` is not supported.\n\n- Default: `\"lf\"`\n- Overrides `.editorconfig.end_of_line`",
      "allOf": [
        {
          "$ref": "#/$defs/EndOfLineConfig"
        }
      ],
      "markdownDescription": "Which end of line characters to apply.\n\nNOTE: `\"auto\"` is not supported.\n\n- Default: `\"lf\"`\n- Overrides `.editorconfig.end_of_line`"
    },
    "htmlWhitespaceSensitivity": {
      "description": "Specify the global whitespace sensitivity for HTML, Vue, Angular, and Handlebars.\n\n- Default: `\"css\"`",
      "allOf": [
        {
          "$ref": "#/$defs/HtmlWhitespaceSensitivityConfig"
        }
      ],
      "markdownDescription": "Specify the global whitespace sensitivity for HTML, Vue, Angular, and Handlebars.\n\n- Default: `\"css\"`"
    },
    "ignorePatterns": {
      "description": "Ignore files matching these glob patterns.\nPatterns are based on the location of the Oxfmt configuration file.\n\n- Default: `[]`",
      "type": "array",
      "items": {
        "type": "string"
      },
      "markdownDescription": "Ignore files matching these glob patterns.\nPatterns are based on the location of the Oxfmt configuration file.\n\n- Default: `[]`"
    },
    "insertFinalNewline": {
      "description": "Whether to insert a final newline at the end of the file.\n\n- Default: `true`\n- Overrides `.editorconfig.insert_final_newline`",
      "type": "boolean",
      "markdownDescription": "Whether to insert a final newline at the end of the file.\n\n- Default: `true`\n- Overrides `.editorconfig.insert_final_newline`"
    },
    "jsdoc": {
      "description": "Enable JSDoc comment formatting.\n\nWhen enabled, JSDoc comments are normalized and reformatted:\ntag aliases are canonicalized, descriptions are capitalized,\nlong lines are wrapped, and short comments are collapsed to single-line.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled",
      "allOf": [
        {
          "$ref": "#/$defs/JsdocUserConfig"
        }
      ],
      "markdownDescription": "Enable JSDoc comment formatting.\n\nWhen enabled, JSDoc comments are normalized and reformatted:\ntag aliases are canonicalized, descriptions are capitalized,\nlong lines are wrapped, and short comments are collapsed to single-line.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled"
    },
    "jsxSingleQuote": {
      "description": "Use single quotes instead of double quotes in JSX.\n\n- Default: `false`",
      "type": "boolean",
      "markdownDescription": "Use single quotes instead of double quotes in JSX.\n\n- Default: `false`"
    },
    "objectWrap": {
      "description": "How to wrap object literals when they could fit on one line or span multiple lines.\n\nBy default, formats objects as multi-line if there is a newline prior to the first property.\nAuthors can use this heuristic to contextually improve readability, though it has some downsides.\n\n- Default: `\"preserve\"`",
      "allOf": [
        {
          "$ref": "#/$defs/ObjectWrapConfig"
        }
      ],
      "markdownDescription": "How to wrap object literals when they could fit on one line or span multiple lines.\n\nBy default, formats objects as multi-line if there is a newline prior to the first property.\nAuthors can use this heuristic to contextually improve readability, though it has some downsides.\n\n- Default: `\"preserve\"`"
    },
    "overrides": {
      "description": "File-specific overrides.\nWhen a file matches multiple overrides, the later override takes precedence (array order matters).\n\n- Default: `[]`",
      "type": "array",
      "items": {
        "$ref": "#/$defs/OxfmtOverrideConfig"
      },
      "markdownDescription": "File-specific overrides.\nWhen a file matches multiple overrides, the later override takes precedence (array order matters).\n\n- Default: `[]`"
    },
    "printWidth": {
      "description": "Specify the line length that the printer will wrap on.\n\nIf you don't want line wrapping when formatting Markdown, you can set the `proseWrap` option to disable it.\n\n- Default: `100`\n- Overrides `.editorconfig.max_line_length`",
      "type": "integer",
      "format": "uint16",
      "minimum": 0.0,
      "markdownDescription": "Specify the line length that the printer will wrap on.\n\nIf you don't want line wrapping when formatting Markdown, you can set the `proseWrap` option to disable it.\n\n- Default: `100`\n- Overrides `.editorconfig.max_line_length`"
    },
    "proseWrap": {
      "description": "How to wrap prose.\n\nBy default, formatter will not change wrapping in markdown text since some services use a linebreak-sensitive renderer, e.g. GitHub comments and BitBucket.\nTo wrap prose to the print width, change this option to \"always\".\nIf you want to force all prose blocks to be on a single line and rely on editor/viewer soft wrapping instead, you can use \"never\".\n\n- Default: `\"preserve\"`",
      "allOf": [
        {
          "$ref": "#/$defs/ProseWrapConfig"
        }
      ],
      "markdownDescription": "How to wrap prose.\n\nBy default, formatter will not change wrapping in markdown text since some services use a linebreak-sensitive renderer, e.g. GitHub comments and BitBucket.\nTo wrap prose to the print width, change this option to \"always\".\nIf you want to force all prose blocks to be on a single line and rely on editor/viewer soft wrapping instead, you can use \"never\".\n\n- Default: `\"preserve\"`"
    },
    "quoteProps": {
      "description": "Change when properties in objects are quoted.\n\n- Default: `\"as-needed\"`",
      "allOf": [
        {
          "$ref": "#/$defs/QuotePropsConfig"
        }
      ],
      "markdownDescription": "Change when properties in objects are quoted.\n\n- Default: `\"as-needed\"`"
    },
    "semi": {
      "description": "Print semicolons at the ends of statements.\n\n- Default: `true`",
      "type": "boolean",
      "markdownDescription": "Print semicolons at the ends of statements.\n\n- Default: `true`"
    },
    "singleAttributePerLine": {
      "description": "Enforce single attribute per line in HTML, Vue, and JSX.\n\n- Default: `false`",
      "type": "boolean",
      "markdownDescription": "Enforce single attribute per line in HTML, Vue, and JSX.\n\n- Default: `false`"
    },
    "singleQuote": {
      "description": "Use single quotes instead of double quotes.\n\nFor JSX, you can set the `jsxSingleQuote` option.\n\n- Default: `false`\n- Overrides `.editorconfig.quote_type`",
      "type": "boolean",
      "markdownDescription": "Use single quotes instead of double quotes.\n\nFor JSX, you can set the `jsxSingleQuote` option.\n\n- Default: `false`\n- Overrides `.editorconfig.quote_type`"
    },
    "sortImports": {
      "description": "Sort import statements.\n\nUsing the similar algorithm as [eslint-plugin-perfectionist/sort-imports](https://perfectionist.dev/rules/sort-imports).\nFor details, see each field's documentation.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled",
      "allOf": [
        {
          "$ref": "#/$defs/SortImportsUserConfig"
        }
      ],
      "markdownDescription": "Sort import statements.\n\nUsing the similar algorithm as [eslint-plugin-perfectionist/sort-imports](https://perfectionist.dev/rules/sort-imports).\nFor details, see each field's documentation.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled"
    },
    "sortPackageJson": {
      "description": "Sort `package.json` keys.\n\nThe algorithm is NOT compatible with [prettier-plugin-sort-packagejson](https://github.com/matzkoh/prettier-plugin-packagejson).\nBut we believe it is clearer and easier to navigate.\nFor details, see each field's documentation.\n\n- Default: `true`",
      "allOf": [
        {
          "$ref": "#/$defs/SortPackageJsonUserConfig"
        }
      ],
      "markdownDescription": "Sort `package.json` keys.\n\nThe algorithm is NOT compatible with [prettier-plugin-sort-packagejson](https://github.com/matzkoh/prettier-plugin-packagejson).\nBut we believe it is clearer and easier to navigate.\nFor details, see each field's documentation.\n\n- Default: `true`"
    },
    "sortTailwindcss": {
      "description": "Sort Tailwind CSS classes.\n\nUsing the same algorithm as [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss).\nOption names omit the `tailwind` prefix used in the original plugin (e.g., `config` instead of `tailwindConfig`).\nFor details, see each field's documentation.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled",
      "allOf": [
        {
          "$ref": "#/$defs/SortTailwindcssUserConfig"
        }
      ],
      "markdownDescription": "Sort Tailwind CSS classes.\n\nUsing the same algorithm as [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss).\nOption names omit the `tailwind` prefix used in the original plugin (e.g., `config` instead of `tailwindConfig`).\nFor details, see each field's documentation.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled"
    },
    "tabWidth": {
      "description": "Specify the number of spaces per indentation-level.\n\n- Default: `2`\n- Overrides `.editorconfig.indent_size` (falls back to `.editorconfig.tab_width`)",
      "type": "integer",
      "format": "uint8",
      "minimum": 0.0,
      "markdownDescription": "Specify the number of spaces per indentation-level.\n\n- Default: `2`\n- Overrides `.editorconfig.indent_size` (falls back to `.editorconfig.tab_width`)"
    },
    "trailingComma": {
      "description": "Print trailing commas wherever possible in multi-line comma-separated syntactic structures.\n\nA single-line array, for example, never gets trailing commas.\n\n- Default: `\"all\"`",
      "allOf": [
        {
          "$ref": "#/$defs/TrailingCommaConfig"
        }
      ],
      "markdownDescription": "Print trailing commas wherever possible in multi-line comma-separated syntactic structures.\n\nA single-line array, for example, never gets trailing commas.\n\n- Default: `\"all\"`"
    },
    "useTabs": {
      "description": "Indent lines with tabs instead of spaces.\n\n- Default: `false`\n- Overrides `.editorconfig.indent_style`",
      "type": "boolean",
      "markdownDescription": "Indent lines with tabs instead of spaces.\n\n- Default: `false`\n- Overrides `.editorconfig.indent_style`"
    },
    "vueIndentScriptAndStyle": {
      "description": "Whether or not to indent the code inside `<script>` and `<style>` tags in Vue files.\n\n- Default: `false`",
      "type": "boolean",
      "markdownDescription": "Whether or not to indent the code inside `<script>` and `<style>` tags in Vue files.\n\n- Default: `false`"
    }
  },
  "allowTrailingCommas": true,
  "markdownDescription": "Configuration options for the Oxfmt.\n\nMost options are the same as Prettier's options, but not all of them.\nIn addition, some options are our own extensions.",
  "$defs": {
    "ArrowParensConfig": {
      "type": "string",
      "enum": [
        "always",
        "avoid"
      ]
    },
    "CustomGroupItemConfig": {
      "type": "object",
      "properties": {
        "elementNamePattern": {
          "description": "List of glob patterns to match import sources for this group.",
          "default": [],
          "type": "array",
          "items": {
            "type": "string"
          },
          "markdownDescription": "List of glob patterns to match import sources for this group."
        },
        "groupName": {
          "description": "Name of the custom group, used in the `groups` option.",
          "default": "",
          "type": "string",
          "markdownDescription": "Name of the custom group, used in the `groups` option."
        },
        "modifiers": {
          "description": "Modifiers to match the import characteristics.\nAll specified modifiers must be present (AND logic).\n\nPossible values: `\"side_effect\"`, `\"type\"`, `\"value\"`, `\"default\"`, `\"wildcard\"`, `\"named\"`",
          "type": "array",
          "items": {
            "type": "string"
          },
          "markdownDescription": "Modifiers to match the import characteristics.\nAll specified modifiers must be present (AND logic).\n\nPossible values: `\"side_effect\"`, `\"type\"`, `\"value\"`, `\"default\"`, `\"wildcard\"`, `\"named\"`"
        },
        "selector": {
          "description": "Selector to match the import kind.\n\nPossible values: `\"type\"`, `\"side_effect_style\"`, `\"side_effect\"`, `\"style\"`, `\"index\"`,\n`\"sibling\"`, `\"parent\"`, `\"subpath\"`, `\"internal\"`, `\"builtin\"`, `\"external\"`, `\"import\"`",
          "type": "string",
          "markdownDescription": "Selector to match the import kind.\n\nPossible values: `\"type\"`, `\"side_effect_style\"`, `\"side_effect\"`, `\"style\"`, `\"index\"`,\n`\"sibling\"`, `\"parent\"`, `\"subpath\"`, `\"internal\"`, `\"builtin\"`, `\"external\"`, `\"import\"`"
        }
      }
    },
    "EmbeddedLanguageFormattingConfig": {
      "type": "string",
      "enum": [
        "auto",
        "off"
      ]
    },
    "EndOfLineConfig": {
      "type": "string",
      "enum": [
        "lf",
        "crlf",
        "cr"
      ]
    },
    "FormatConfig": {
      "type": "object",
      "properties": {
        "arrowParens": {
          "description": "Include parentheses around a sole arrow function parameter.\n\n- Default: `\"always\"`",
          "allOf": [
            {
              "$ref": "#/$defs/ArrowParensConfig"
            }
          ],
          "markdownDescription": "Include parentheses around a sole arrow function parameter.\n\n- Default: `\"always\"`"
        },
        "bracketSameLine": {
          "description": "Put the `>` of a multi-line HTML (HTML, JSX, Vue, Angular) element at the end of the last line,\ninstead of being alone on the next line (does not apply to self closing elements).\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Put the `>` of a multi-line HTML (HTML, JSX, Vue, Angular) element at the end of the last line,\ninstead of being alone on the next line (does not apply to self closing elements).\n\n- Default: `false`"
        },
        "bracketSpacing": {
          "description": "Print spaces between brackets in object literals.\n\n- Default: `true`",
          "type": "boolean",
          "markdownDescription": "Print spaces between brackets in object literals.\n\n- Default: `true`"
        },
        "embeddedLanguageFormatting": {
          "description": "Control whether to format embedded parts (For example, CSS-in-JS, or JS-in-Vue, etc.) in the file.\n\nNOTE: XXX-in-JS support is incomplete.\n\n- Default: `\"auto\"`",
          "allOf": [
            {
              "$ref": "#/$defs/EmbeddedLanguageFormattingConfig"
            }
          ],
          "markdownDescription": "Control whether to format embedded parts (For example, CSS-in-JS, or JS-in-Vue, etc.) in the file.\n\nNOTE: XXX-in-JS support is incomplete.\n\n- Default: `\"auto\"`"
        },
        "endOfLine": {
          "description": "Which end of line characters to apply.\n\nNOTE: `\"auto\"` is not supported.\n\n- Default: `\"lf\"`\n- Overrides `.editorconfig.end_of_line`",
          "allOf": [
            {
              "$ref": "#/$defs/EndOfLineConfig"
            }
          ],
          "markdownDescription": "Which end of line characters to apply.\n\nNOTE: `\"auto\"` is not supported.\n\n- Default: `\"lf\"`\n- Overrides `.editorconfig.end_of_line`"
        },
        "htmlWhitespaceSensitivity": {
          "description": "Specify the global whitespace sensitivity for HTML, Vue, Angular, and Handlebars.\n\n- Default: `\"css\"`",
          "allOf": [
            {
              "$ref": "#/$defs/HtmlWhitespaceSensitivityConfig"
            }
          ],
          "markdownDescription": "Specify the global whitespace sensitivity for HTML, Vue, Angular, and Handlebars.\n\n- Default: `\"css\"`"
        },
        "insertFinalNewline": {
          "description": "Whether to insert a final newline at the end of the file.\n\n- Default: `true`\n- Overrides `.editorconfig.insert_final_newline`",
          "type": "boolean",
          "markdownDescription": "Whether to insert a final newline at the end of the file.\n\n- Default: `true`\n- Overrides `.editorconfig.insert_final_newline`"
        },
        "jsdoc": {
          "description": "Enable JSDoc comment formatting.\n\nWhen enabled, JSDoc comments are normalized and reformatted:\ntag aliases are canonicalized, descriptions are capitalized,\nlong lines are wrapped, and short comments are collapsed to single-line.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled",
          "allOf": [
            {
              "$ref": "#/$defs/JsdocUserConfig"
            }
          ],
          "markdownDescription": "Enable JSDoc comment formatting.\n\nWhen enabled, JSDoc comments are normalized and reformatted:\ntag aliases are canonicalized, descriptions are capitalized,\nlong lines are wrapped, and short comments are collapsed to single-line.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled"
        },
        "jsxSingleQuote": {
          "description": "Use single quotes instead of double quotes in JSX.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Use single quotes instead of double quotes in JSX.\n\n- Default: `false`"
        },
        "objectWrap": {
          "description": "How to wrap object literals when they could fit on one line or span multiple lines.\n\nBy default, formats objects as multi-line if there is a newline prior to the first property.\nAuthors can use this heuristic to contextually improve readability, though it has some downsides.\n\n- Default: `\"preserve\"`",
          "allOf": [
            {
              "$ref": "#/$defs/ObjectWrapConfig"
            }
          ],
          "markdownDescription": "How to wrap object literals when they could fit on one line or span multiple lines.\n\nBy default, formats objects as multi-line if there is a newline prior to the first property.\nAuthors can use this heuristic to contextually improve readability, though it has some downsides.\n\n- Default: `\"preserve\"`"
        },
        "printWidth": {
          "description": "Specify the line length that the printer will wrap on.\n\nIf you don't want line wrapping when formatting Markdown, you can set the `proseWrap` option to disable it.\n\n- Default: `100`\n- Overrides `.editorconfig.max_line_length`",
          "type": "integer",
          "format": "uint16",
          "minimum": 0.0,
          "markdownDescription": "Specify the line length that the printer will wrap on.\n\nIf you don't want line wrapping when formatting Markdown, you can set the `proseWrap` option to disable it.\n\n- Default: `100`\n- Overrides `.editorconfig.max_line_length`"
        },
        "proseWrap": {
          "description": "How to wrap prose.\n\nBy default, formatter will not change wrapping in markdown text since some services use a linebreak-sensitive renderer, e.g. GitHub comments and BitBucket.\nTo wrap prose to the print width, change this option to \"always\".\nIf you want to force all prose blocks to be on a single line and rely on editor/viewer soft wrapping instead, you can use \"never\".\n\n- Default: `\"preserve\"`",
          "allOf": [
            {
              "$ref": "#/$defs/ProseWrapConfig"
            }
          ],
          "markdownDescription": "How to wrap prose.\n\nBy default, formatter will not change wrapping in markdown text since some services use a linebreak-sensitive renderer, e.g. GitHub comments and BitBucket.\nTo wrap prose to the print width, change this option to \"always\".\nIf you want to force all prose blocks to be on a single line and rely on editor/viewer soft wrapping instead, you can use \"never\".\n\n- Default: `\"preserve\"`"
        },
        "quoteProps": {
          "description": "Change when properties in objects are quoted.\n\n- Default: `\"as-needed\"`",
          "allOf": [
            {
              "$ref": "#/$defs/QuotePropsConfig"
            }
          ],
          "markdownDescription": "Change when properties in objects are quoted.\n\n- Default: `\"as-needed\"`"
        },
        "semi": {
          "description": "Print semicolons at the ends of statements.\n\n- Default: `true`",
          "type": "boolean",
          "markdownDescription": "Print semicolons at the ends of statements.\n\n- Default: `true`"
        },
        "singleAttributePerLine": {
          "description": "Enforce single attribute per line in HTML, Vue, and JSX.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Enforce single attribute per line in HTML, Vue, and JSX.\n\n- Default: `false`"
        },
        "singleQuote": {
          "description": "Use single quotes instead of double quotes.\n\nFor JSX, you can set the `jsxSingleQuote` option.\n\n- Default: `false`\n- Overrides `.editorconfig.quote_type`",
          "type": "boolean",
          "markdownDescription": "Use single quotes instead of double quotes.\n\nFor JSX, you can set the `jsxSingleQuote` option.\n\n- Default: `false`\n- Overrides `.editorconfig.quote_type`"
        },
        "sortImports": {
          "description": "Sort import statements.\n\nUsing the similar algorithm as [eslint-plugin-perfectionist/sort-imports](https://perfectionist.dev/rules/sort-imports).\nFor details, see each field's documentation.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled",
          "allOf": [
            {
              "$ref": "#/$defs/SortImportsUserConfig"
            }
          ],
          "markdownDescription": "Sort import statements.\n\nUsing the similar algorithm as [eslint-plugin-perfectionist/sort-imports](https://perfectionist.dev/rules/sort-imports).\nFor details, see each field's documentation.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled"
        },
        "sortPackageJson": {
          "description": "Sort `package.json` keys.\n\nThe algorithm is NOT compatible with [prettier-plugin-sort-packagejson](https://github.com/matzkoh/prettier-plugin-packagejson).\nBut we believe it is clearer and easier to navigate.\nFor details, see each field's documentation.\n\n- Default: `true`",
          "allOf": [
            {
              "$ref": "#/$defs/SortPackageJsonUserConfig"
            }
          ],
          "markdownDescription": "Sort `package.json` keys.\n\nThe algorithm is NOT compatible with [prettier-plugin-sort-packagejson](https://github.com/matzkoh/prettier-plugin-packagejson).\nBut we believe it is clearer and easier to navigate.\nFor details, see each field's documentation.\n\n- Default: `true`"
        },
        "sortTailwindcss": {
          "description": "Sort Tailwind CSS classes.\n\nUsing the same algorithm as [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss).\nOption names omit the `tailwind` prefix used in the original plugin (e.g., `config` instead of `tailwindConfig`).\nFor details, see each field's documentation.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled",
          "allOf": [
            {
              "$ref": "#/$defs/SortTailwindcssUserConfig"
            }
          ],
          "markdownDescription": "Sort Tailwind CSS classes.\n\nUsing the same algorithm as [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss).\nOption names omit the `tailwind` prefix used in the original plugin (e.g., `config` instead of `tailwindConfig`).\nFor details, see each field's documentation.\n\nPass `true` or an object to enable with defaults, or omit/set `false` to disable.\n\n- Default: Disabled"
        },
        "tabWidth": {
          "description": "Specify the number of spaces per indentation-level.\n\n- Default: `2`\n- Overrides `.editorconfig.indent_size` (falls back to `.editorconfig.tab_width`)",
          "type": "integer",
          "format": "uint8",
          "minimum": 0.0,
          "markdownDescription": "Specify the number of spaces per indentation-level.\n\n- Default: `2`\n- Overrides `.editorconfig.indent_size` (falls back to `.editorconfig.tab_width`)"
        },
        "trailingComma": {
          "description": "Print trailing commas wherever possible in multi-line comma-separated syntactic structures.\n\nA single-line array, for example, never gets trailing commas.\n\n- Default: `\"all\"`",
          "allOf": [
            {
              "$ref": "#/$defs/TrailingCommaConfig"
            }
          ],
          "markdownDescription": "Print trailing commas wherever possible in multi-line comma-separated syntactic structures.\n\nA single-line array, for example, never gets trailing commas.\n\n- Default: `\"all\"`"
        },
        "useTabs": {
          "description": "Indent lines with tabs instead of spaces.\n\n- Default: `false`\n- Overrides `.editorconfig.indent_style`",
          "type": "boolean",
          "markdownDescription": "Indent lines with tabs instead of spaces.\n\n- Default: `false`\n- Overrides `.editorconfig.indent_style`"
        },
        "vueIndentScriptAndStyle": {
          "description": "Whether or not to indent the code inside `<script>` and `<style>` tags in Vue files.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Whether or not to indent the code inside `<script>` and `<style>` tags in Vue files.\n\n- Default: `false`"
        }
      }
    },
    "HtmlWhitespaceSensitivityConfig": {
      "type": "string",
      "enum": [
        "css",
        "strict",
        "ignore"
      ]
    },
    "JsdocConfig": {
      "type": "object",
      "properties": {
        "addDefaultToDescription": {
          "description": "Append default values to `@param` descriptions (e.g. \"Default is `value`\").\n\n- Default: `true`",
          "type": "boolean",
          "markdownDescription": "Append default values to `@param` descriptions (e.g. \"Default is `value`\").\n\n- Default: `true`"
        },
        "bracketSpacing": {
          "description": "Add spaces inside JSDoc type braces: `{string}` → `{ string }`.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Add spaces inside JSDoc type braces: `{string}` → `{ string }`.\n\n- Default: `false`"
        },
        "capitalizeDescriptions": {
          "description": "Capitalize the first letter of tag descriptions.\n\n- Default: `true`",
          "type": "boolean",
          "markdownDescription": "Capitalize the first letter of tag descriptions.\n\n- Default: `true`"
        },
        "commentLineStrategy": {
          "description": "How to format comment blocks.\n\n- `\"singleLine\"` — Convert to single-line `/** content */` when possible.\n- `\"multiline\"` — Always use multi-line format.\n- `\"keep\"` — Preserve original formatting.\n\n- Default: `\"singleLine\"`",
          "type": "string",
          "markdownDescription": "How to format comment blocks.\n\n- `\"singleLine\"` — Convert to single-line `/** content */` when possible.\n- `\"multiline\"` — Always use multi-line format.\n- `\"keep\"` — Preserve original formatting.\n\n- Default: `\"singleLine\"`"
        },
        "descriptionTag": {
          "description": "Emit `@description` tag instead of inline description.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Emit `@description` tag instead of inline description.\n\n- Default: `false`"
        },
        "descriptionWithDot": {
          "description": "Add a trailing dot to the end of descriptions.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Add a trailing dot to the end of descriptions.\n\n- Default: `false`"
        },
        "keepUnparsableExampleIndent": {
          "description": "Preserve indentation in unparsable `@example` code.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Preserve indentation in unparsable `@example` code.\n\n- Default: `false`"
        },
        "lineWrappingStyle": {
          "description": "Strategy for wrapping description lines at print width.\n\n- `\"greedy\"` — Always re-wrap text to fit within print width.\n- `\"balance\"` — Preserve original line breaks if all lines fit within print width.\n\n- Default: `\"greedy\"`",
          "type": "string",
          "markdownDescription": "Strategy for wrapping description lines at print width.\n\n- `\"greedy\"` — Always re-wrap text to fit within print width.\n- `\"balance\"` — Preserve original line breaks if all lines fit within print width.\n\n- Default: `\"greedy\"`"
        },
        "preferCodeFences": {
          "description": "Use fenced code blocks (```` ``` ````) instead of 4-space indentation for code without a language tag.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Use fenced code blocks (```` ``` ````) instead of 4-space indentation for code without a language tag.\n\n- Default: `false`"
        },
        "separateReturnsFromParam": {
          "description": "Add a blank line between the last `@param` and `@returns`.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Add a blank line between the last `@param` and `@returns`.\n\n- Default: `false`"
        },
        "separateTagGroups": {
          "description": "Add blank lines between different tag groups (e.g. between `@param` and `@returns`).\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Add blank lines between different tag groups (e.g. between `@param` and `@returns`).\n\n- Default: `false`"
        }
      }
    },
    "JsdocUserConfig": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/JsdocConfig"
        }
      ]
    },
    "NewlinesBetweenMarker": {
      "description": "A marker object for overriding `newlinesBetween` at a specific group boundary.",
      "type": "object",
      "required": [
        "newlinesBetween"
      ],
      "properties": {
        "newlinesBetween": {
          "type": "boolean"
        }
      },
      "markdownDescription": "A marker object for overriding `newlinesBetween` at a specific group boundary."
    },
    "ObjectWrapConfig": {
      "type": "string",
      "enum": [
        "preserve",
        "collapse"
      ]
    },
    "OxfmtOverrideConfig": {
      "type": "object",
      "required": [
        "files"
      ],
      "properties": {
        "excludeFiles": {
          "description": "Glob patterns to exclude from this override.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "markdownDescription": "Glob patterns to exclude from this override."
        },
        "files": {
          "description": "Glob patterns to match files for this override.\nAll patterns are relative to the Oxfmt configuration file.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "markdownDescription": "Glob patterns to match files for this override.\nAll patterns are relative to the Oxfmt configuration file."
        },
        "options": {
          "description": "Format options to apply for matched files.",
          "default": {},
          "allOf": [
            {
              "$ref": "#/$defs/FormatConfig"
            }
          ],
          "markdownDescription": "Format options to apply for matched files."
        }
      }
    },
    "ProseWrapConfig": {
      "type": "string",
      "enum": [
        "always",
        "never",
        "preserve"
      ]
    },
    "QuotePropsConfig": {
      "type": "string",
      "enum": [
        "as-needed",
        "consistent",
        "preserve"
      ]
    },
    "SortGroupItemConfig": {
      "anyOf": [
        {
          "description": "A `{ \"newlinesBetween\": bool }` marker object that overrides the global `newlinesBetween`\nsetting for the boundary between the previous and next groups.",
          "allOf": [
            {
              "$ref": "#/$defs/NewlinesBetweenMarker"
            }
          ],
          "markdownDescription": "A `{ \"newlinesBetween\": bool }` marker object that overrides the global `newlinesBetween`\nsetting for the boundary between the previous and next groups."
        },
        {
          "description": "A single group name string (e.g. `\"value-builtin\"`).",
          "type": "string",
          "markdownDescription": "A single group name string (e.g. `\"value-builtin\"`)."
        },
        {
          "description": "Multiple group names treated as one group (e.g. `[\"value-builtin\", \"value-external\"]`).",
          "type": "array",
          "items": {
            "type": "string"
          },
          "markdownDescription": "Multiple group names treated as one group (e.g. `[\"value-builtin\", \"value-external\"]`)."
        }
      ]
    },
    "SortImportsConfig": {
      "type": "object",
      "properties": {
        "customGroups": {
          "description": "Define your own groups for matching very specific imports.\n\nThe `customGroups` list is ordered: The first definition that matches an element will be used.\nCustom groups have a higher priority than any predefined group.\n\nIf you want a predefined group to take precedence over a custom group,\nyou must write a custom group definition that does the same as what the predefined group does, and put it first in the list.\n\nIf you specify multiple conditions like `elementNamePattern`, `selector`, and `modifiers`,\nall conditions must be met for an import to match the custom group (AND logic).\n\n- Default: `[]`",
          "type": "array",
          "items": {
            "$ref": "#/$defs/CustomGroupItemConfig"
          },
          "markdownDescription": "Define your own groups for matching very specific imports.\n\nThe `customGroups` list is ordered: The first definition that matches an element will be used.\nCustom groups have a higher priority than any predefined group.\n\nIf you want a predefined group to take precedence over a custom group,\nyou must write a custom group definition that does the same as what the predefined group does, and put it first in the list.\n\nIf you specify multiple conditions like `elementNamePattern`, `selector`, and `modifiers`,\nall conditions must be met for an import to match the custom group (AND logic).\n\n- Default: `[]`"
        },
        "groups": {
          "description": "Specifies a list of predefined import groups for sorting.\n\nEach import will be assigned a single group specified in the groups option (or the `unknown` group if no match is found).\nThe order of items in the `groups` option determines how groups are ordered.\n\nWithin a given group, members will be sorted according to the type, order, ignoreCase, etc. options.\n\nIndividual groups can be combined together by placing them in an array.\nThe order of groups in that array does not matter.\nAll members of the groups in the array will be sorted together as if they were part of a single group.\n\nPredefined groups are characterized by a single selector and potentially multiple modifiers.\nYou may enter modifiers in any order, but the selector must always come at the end.\n\nThe list of selectors is sorted from most to least important:\n- `type` — TypeScript type imports.\n- `side_effect_style` — Side effect style imports.\n- `side_effect` — Side effect imports.\n- `style` — Style imports.\n- `index` — Main file from the current directory.\n- `sibling` — Modules from the same directory.\n- `parent` — Modules from the parent directory.\n- `subpath` — Node.js subpath imports.\n- `internal` — Your internal modules.\n- `builtin` — Node.js Built-in Modules.\n- `external` — External modules installed in the project.\n- `import` — Any import.\n\nThe list of modifiers is sorted from most to least important:\n- `side_effect` — Side effect imports.\n- `type` — TypeScript type imports.\n- `value` — Value imports.\n- `default` — Imports containing the default specifier.\n- `wildcard` — Imports containing the wildcard (`* as`) specifier.\n- `named` — Imports containing at least one named specifier.\n\n- Default: See below\n```json\n[\n\"builtin\",\n\"external\",\n[\"internal\", \"subpath\"],\n[\"parent\", \"sibling\", \"index\"],\n\"style\",\n\"unknown\"\n]\n```\n\nAlso, you can override the global `newlinesBetween` setting for specific group boundaries\nby including a `{ \"newlinesBetween\": boolean }` marker object in the `groups` list at the desired position.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/SortGroupItemConfig"
          },
          "markdownDescription": "Specifies a list of predefined import groups for sorting.\n\nEach import will be assigned a single group specified in the groups option (or the `unknown` group if no match is found).\nThe order of items in the `groups` option determines how groups are ordered.\n\nWithin a given group, members will be sorted according to the type, order, ignoreCase, etc. options.\n\nIndividual groups can be combined together by placing them in an array.\nThe order of groups in that array does not matter.\nAll members of the groups in the array will be sorted together as if they were part of a single group.\n\nPredefined groups are characterized by a single selector and potentially multiple modifiers.\nYou may enter modifiers in any order, but the selector must always come at the end.\n\nThe list of selectors is sorted from most to least important:\n- `type` — TypeScript type imports.\n- `side_effect_style` — Side effect style imports.\n- `side_effect` — Side effect imports.\n- `style` — Style imports.\n- `index` — Main file from the current directory.\n- `sibling` — Modules from the same directory.\n- `parent` — Modules from the parent directory.\n- `subpath` — Node.js subpath imports.\n- `internal` — Your internal modules.\n- `builtin` — Node.js Built-in Modules.\n- `external` — External modules installed in the project.\n- `import` — Any import.\n\nThe list of modifiers is sorted from most to least important:\n- `side_effect` — Side effect imports.\n- `type` — TypeScript type imports.\n- `value` — Value imports.\n- `default` — Imports containing the default specifier.\n- `wildcard` — Imports containing the wildcard (`* as`) specifier.\n- `named` — Imports containing at least one named specifier.\n\n- Default: See below\n```json\n[\n\"builtin\",\n\"external\",\n[\"internal\", \"subpath\"],\n[\"parent\", \"sibling\", \"index\"],\n\"style\",\n\"unknown\"\n]\n```\n\nAlso, you can override the global `newlinesBetween` setting for specific group boundaries\nby including a `{ \"newlinesBetween\": boolean }` marker object in the `groups` list at the desired position."
        },
        "ignoreCase": {
          "description": "Specifies whether sorting should be case-sensitive.\n\n- Default: `true`",
          "type": "boolean",
          "markdownDescription": "Specifies whether sorting should be case-sensitive.\n\n- Default: `true`"
        },
        "internalPattern": {
          "description": "Specifies a prefix for identifying internal imports.\n\nThis is useful for distinguishing your own modules from external dependencies.\n\n- Default: `[\"~/\", \"@/\"]`",
          "type": "array",
          "items": {
            "type": "string"
          },
          "markdownDescription": "Specifies a prefix for identifying internal imports.\n\nThis is useful for distinguishing your own modules from external dependencies.\n\n- Default: `[\"~/\", \"@/\"]`"
        },
        "newlinesBetween": {
          "description": "Specifies whether to add newlines between groups.\n\nWhen `false`, no newlines are added between groups.\n\n- Default: `true`",
          "type": "boolean",
          "markdownDescription": "Specifies whether to add newlines between groups.\n\nWhen `false`, no newlines are added between groups.\n\n- Default: `true`"
        },
        "order": {
          "description": "Specifies whether to sort items in ascending or descending order.\n\n- Default: `\"asc\"`",
          "allOf": [
            {
              "$ref": "#/$defs/SortOrderConfig"
            }
          ],
          "markdownDescription": "Specifies whether to sort items in ascending or descending order.\n\n- Default: `\"asc\"`"
        },
        "partitionByComment": {
          "description": "Enables the use of comments to separate imports into logical groups.\n\nWhen `true`, all comments will be treated as delimiters, creating partitions.\n\n```js\nimport { b1, b2 } from 'b'\n// PARTITION\nimport { a } from 'a'\nimport { c } from 'c'\n```\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Enables the use of comments to separate imports into logical groups.\n\nWhen `true`, all comments will be treated as delimiters, creating partitions.\n\n```js\nimport { b1, b2 } from 'b'\n// PARTITION\nimport { a } from 'a'\nimport { c } from 'c'\n```\n\n- Default: `false`"
        },
        "partitionByNewline": {
          "description": "Enables the empty line to separate imports into logical groups.\n\nWhen `true`, formatter will not sort imports if there is an empty line between them.\nThis helps maintain the defined order of logically separated groups of members.\n\n```js\nimport { b1, b2 } from 'b'\n\nimport { a } from 'a'\nimport { c } from 'c'\n```\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Enables the empty line to separate imports into logical groups.\n\nWhen `true`, formatter will not sort imports if there is an empty line between them.\nThis helps maintain the defined order of logically separated groups of members.\n\n```js\nimport { b1, b2 } from 'b'\n\nimport { a } from 'a'\nimport { c } from 'c'\n```\n\n- Default: `false`"
        },
        "sortSideEffects": {
          "description": "Specifies whether side effect imports should be sorted.\n\nBy default, sorting side-effect imports is disabled for security reasons.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Specifies whether side effect imports should be sorted.\n\nBy default, sorting side-effect imports is disabled for security reasons.\n\n- Default: `false`"
        }
      }
    },
    "SortImportsUserConfig": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/SortImportsConfig"
        }
      ]
    },
    "SortOrderConfig": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "SortPackageJsonConfig": {
      "type": "object",
      "properties": {
        "sortScripts": {
          "description": "Sort the `scripts` field alphabetically.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Sort the `scripts` field alphabetically.\n\n- Default: `false`"
        }
      }
    },
    "SortPackageJsonUserConfig": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/SortPackageJsonConfig"
        }
      ]
    },
    "SortTailwindcssConfig": {
      "type": "object",
      "properties": {
        "attributes": {
          "description": "List of additional attributes to sort beyond `class` and `className` (exact match).\n\nNOTE: Regex patterns are not yet supported.\n\n- Default: `[]`\n- Example: `[\"myClassProp\", \":class\"]`",
          "type": "array",
          "items": {
            "type": "string"
          },
          "markdownDescription": "List of additional attributes to sort beyond `class` and `className` (exact match).\n\nNOTE: Regex patterns are not yet supported.\n\n- Default: `[]`\n- Example: `[\"myClassProp\", \":class\"]`"
        },
        "config": {
          "description": "Path to your Tailwind CSS configuration file (v3).\n\nNOTE: Paths are resolved relative to the Oxfmt configuration file.\n\n- Default: Automatically find `\"tailwind.config.js\"`",
          "type": "string",
          "markdownDescription": "Path to your Tailwind CSS configuration file (v3).\n\nNOTE: Paths are resolved relative to the Oxfmt configuration file.\n\n- Default: Automatically find `\"tailwind.config.js\"`"
        },
        "functions": {
          "description": "List of custom function names whose arguments should be sorted (exact match).\n\nNOTE: Regex patterns are not yet supported.\n\n- Default: `[]`\n- Example: `[\"clsx\", \"cn\", \"cva\", \"tw\"]`",
          "type": "array",
          "items": {
            "type": "string"
          },
          "markdownDescription": "List of custom function names whose arguments should be sorted (exact match).\n\nNOTE: Regex patterns are not yet supported.\n\n- Default: `[]`\n- Example: `[\"clsx\", \"cn\", \"cva\", \"tw\"]`"
        },
        "preserveDuplicates": {
          "description": "Preserve duplicate classes.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Preserve duplicate classes.\n\n- Default: `false`"
        },
        "preserveWhitespace": {
          "description": "Preserve whitespace around classes.\n\n- Default: `false`",
          "type": "boolean",
          "markdownDescription": "Preserve whitespace around classes.\n\n- Default: `false`"
        },
        "stylesheet": {
          "description": "Path to your Tailwind CSS stylesheet (v4).\n\nNOTE: Paths are resolved relative to the Oxfmt configuration file.\n\n- Default: Installed Tailwind CSS's `theme.css`",
          "type": "string",
          "markdownDescription": "Path to your Tailwind CSS stylesheet (v4).\n\nNOTE: Paths are resolved relative to the Oxfmt configuration file.\n\n- Default: Installed Tailwind CSS's `theme.css`"
        }
      }
    },
    "SortTailwindcssUserConfig": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/SortTailwindcssConfig"
        }
      ]
    },
    "TrailingCommaConfig": {
      "type": "string",
      "enum": [
        "all",
        "es5",
        "none"
      ]
    }
  },
  "allowComments": true
}
