diff --git a/.github/workflows/nx.yml b/.github/workflows/nx.yml
index 97480fe4bc8a..c51d1d480cd2 100644
--- a/.github/workflows/nx.yml
+++ b/.github/workflows/nx.yml
@@ -32,7 +32,7 @@ jobs:
runs-on: ubuntu-latest
env:
- ALL_TASKS: compile,check,knip,test,pretty-docs,lint,sandbox,build,e2e-tests,e2e-tests-dev,test-runner,vitest-integration,check-sandbox,e2e-ui,jest,vitest,playwright-ct
+ ALL_TASKS: compile,check,knip,test,lint,sandbox,build,e2e-tests,e2e-tests-dev,test-runner,vitest-integration,check-sandbox,e2e-ui,jest,vitest,playwright-ct
steps:
- uses: actions/checkout@v4
with:
diff --git a/.husky/pre-commit b/.husky/pre-commit
index 36c4e990898b..fe596ea4aea0 100644
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1,7 +1,3 @@
if [ -z "$SKIP_STORYBOOK_GIT_HOOKS" ]; then
- cd code
- yarn lint-staged
-
- cd ../scripts
yarn lint-staged
fi
diff --git a/.lintstagedrc.mjs b/.lintstagedrc.mjs
new file mode 100644
index 000000000000..9f5654bdc2e8
--- /dev/null
+++ b/.lintstagedrc.mjs
@@ -0,0 +1,11 @@
+import { detectAgent } from 'std-env';
+
+const fmtCmd = detectAgent().name ? 'oxfmt' : 'oxfmt --check';
+
+export default {
+ 'code/**/*.{js,jsx,mjs,ts,tsx,html,json}': [fmtCmd, 'yarn --cwd code lint:js:cmd'],
+ 'scripts/**/*.{html,js,json,jsx,mjs,ts,tsx}': ['yarn --cwd scripts lint:js:cmd'],
+ 'docs/_snippets/**/*.{js,jsx,mjs,ts,tsx,html,json}': [fmtCmd],
+ '**/*.ejs': ['yarn --cwd scripts exec ejslint'],
+ '**/package.json': ['yarn --cwd scripts lint:package'],
+};
diff --git a/.nx/workflows/distribution-config.yaml b/.nx/workflows/distribution-config.yaml
index 594e6c32bc68..61d36251c5cc 100644
--- a/.nx/workflows/distribution-config.yaml
+++ b/.nx/workflows/distribution-config.yaml
@@ -22,7 +22,6 @@ assignment-rules:
- targets:
- check
- lint
- - pretty-docs
- knip
run-on:
- agent: linux-js
diff --git a/.oxfmtrc.json b/.oxfmtrc.json
index 87673614cded..fa3458fee14e 100644
--- a/.oxfmtrc.json
+++ b/.oxfmtrc.json
@@ -1,4 +1,5 @@
{
+ "$schema": "./node_modules/oxfmt/configuration_schema.json",
"printWidth": 100,
"tabWidth": 2,
"bracketSpacing": true,
@@ -7,20 +8,61 @@
"arrowParens": "always",
"sortPackageJson": false,
"ignorePatterns": [
- "code",
- "test-storybooks",
- "node_modules",
+ "*.bundle.js",
+ "*.js.map",
".yarn",
- ".nx",
".vscode",
- ".github",
- "*.md",
- "*.mdx",
+ ".nx/cache",
+ ".nx/workspace-data",
+ "dist",
+ "build",
+ "bench",
+ "coverage",
+ "node_modules",
+ "storybook-static",
+ "built-storybooks",
+ "ember-output",
+ "code/core/assets",
+ "code/core/report",
+ "code/core/src/core-server/presets/common-manager.ts",
+ "code/core/src/core-server/utils/__search-files-tests__",
+ "code/core/src/core-server/utils/__mockdata__/src/Empty.stories.ts",
+ "code/lib/codemod/src/transforms/__testfixtures__",
+ "code/frameworks/angular/template/**",
+ "code/lib/eslint-plugin",
+ ".prettierrc",
+ "test-storybooks",
"*.yml",
"*.yaml",
- "docs/versions",
- "CHANGELOG*",
- "MIGRATION*",
- "CONTRIBUTING*"
+ "*.md",
+ "*.mdx",
+ "!docs/_snippets/**"
+ ],
+ "overrides": [
+ {
+ "files": ["docs/_snippets/**"],
+ "options": {
+ "trailingComma": "all"
+ }
+ },
+ {
+ "files": ["*.md", "*.mdx"],
+ "options": {
+ "importOrderSeparation": false,
+ "importOrderSortSpecifiers": false
+ }
+ },
+ {
+ "files": ["*.component.html"],
+ "options": {
+ "parser": "angular"
+ }
+ },
+ {
+ "files": ["**/frameworks/angular/src/**/*.ts", "**/frameworks/angular/template/**/*.ts"],
+ "options": {
+ "parser": "babel-ts"
+ }
+ }
]
}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 020ac953c668..ca2530047fdd 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -3,6 +3,7 @@
"dbaeumer.vscode-eslint",
"EditorConfig.EditorConfig",
"unifiedjs.vscode-mdx",
- "yzhang.markdown-all-in-one"
+ "yzhang.markdown-all-in-one",
+ "oxc.oxc-vscode"
]
-}
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 04ea0343d429..7013371e0609 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,30 +1,25 @@
{
- "[javascript]": {
- "editor.defaultFormatter": "dbaeumer.vscode-eslint",
- "editor.formatOnSave": true
- },
- "[javascriptreact]": {
- "editor.defaultFormatter": "dbaeumer.vscode-eslint",
- "editor.formatOnSave": true
- },
- "[typescript]": {
+ "[javascript][javascriptreact][typescript][typescriptreact][json][jsonc]": {
"editor.defaultFormatter": "oxc.oxc-vscode",
"editor.formatOnSave": true
},
- "[typescriptreact]": {
- "editor.defaultFormatter": "dbaeumer.vscode-eslint",
- "editor.formatOnSave": true
- },
"editor.codeActionsOnSave": {
- "source.fixAll.eslint": "explicit"
+ "source.fixAll.eslint": "explicit",
+ "source.fixAll.oxc": "explicit"
},
"editor.formatOnSave": true,
"editor.tabSize": 2,
- "eslint.format.enable": true,
"eslint.options": {
"cache": true,
"cacheLocation": ".cache/eslint",
- "extensions": [".js", ".jsx", ".mjs", ".json", ".ts", ".tsx"]
+ "extensions": [
+ ".js",
+ ".jsx",
+ ".mjs",
+ ".json",
+ ".ts",
+ ".tsx"
+ ]
},
"eslint.useESLintClass": true,
"eslint.validate": [
@@ -35,9 +30,13 @@
"typescript",
"typescriptreact"
],
- "eslint.workingDirectories": ["./code", "./scripts"],
+ "eslint.workingDirectories": [
+ "./code",
+ "./scripts"
+ ],
"files.associations": {
- "*.js": "javascriptreact"
+ "*.js": "javascriptreact",
+ ".oxfmtrc.json": "json"
},
"javascript.preferences.importModuleSpecifier": "relative",
"javascript.preferences.quoteStyle": "single",
@@ -51,4 +50,6 @@
"typescript.tsdk": "./typescript/lib",
"vitest.workspaceConfig": "./code/vitest.workspace.ts",
"vitest.rootConfig": "./code/vitest.workspace.ts",
-}
+ "oxc.fmt.configPath": ".oxfmtrc.json",
+ "oxc.enable.oxlint": false,
+}
\ No newline at end of file
diff --git a/AGENTS.md b/AGENTS.md
index 6840a21614a8..7c99c9041a9e 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -243,6 +243,8 @@ Use Storybook loggers instead of raw `console.*` in normal code paths:
- Server-side: `storybook/internal/node-logger`
- Client-side: `storybook/internal/client-logger`
+The pre-commit hook automatically detects AI agents (via `std-env`) and switches from check-only to write mode, so formatting is auto-fixed when agents commit.
+
Avoid `console.log`, `console.warn`, and `console.error` unless the file is isolated enough that importing the logger is not reasonable.
## Troubleshooting
diff --git a/code/.oxfmtrc.json b/code/.oxfmtrc.json
deleted file mode 100644
index 5de8a18c6d3d..000000000000
--- a/code/.oxfmtrc.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "printWidth": 100,
- "tabWidth": 2,
- "bracketSpacing": true,
- "trailingComma": "es5",
- "singleQuote": true,
- "arrowParens": "always",
- "sortPackageJson": false,
- "ignorePatterns": [
- "*.mdx",
- "*.md",
- "*.bundle.js",
- "*.js.map",
- ".yarn",
- ".vscode",
- ".nx/cache",
- ".nx/workspace-data",
- "dist",
- "build",
- "bench",
- "coverage",
- "node_modules",
- "storybook-static",
- "built-storybooks",
- "ember-output",
- "core/assets",
- "core/report",
- "core/src/core-server/presets/common-manager.ts",
- "core/src/core-server/utils/__search-files-tests__",
- "core/src/core-server/utils/__mockdata__/src/Empty.stories.ts",
- "lib/codemod/src/transforms/__testfixtures__",
- "**/frameworks/angular/template/**"
- ]
-}
diff --git a/code/builders/builder-vite/input/iframe.html b/code/builders/builder-vite/input/iframe.html
index 1637f04eb9e8..b161747bb105 100644
--- a/code/builders/builder-vite/input/iframe.html
+++ b/code/builders/builder-vite/input/iframe.html
@@ -70,10 +70,10 @@
if (hostname !== 'localhost' && globalThis.CONFIG_TYPE === 'DEVELOPMENT') {
const message = `Failed to load the Storybook preview file 'vite-app.js':
-It looks like you're visiting the Storybook development server on another hostname than localhost: '${hostname}', but you haven't configured the necessary security features to support this.
-Please re-run your Storybook development server with the '--host ${hostname}' flag, or manually configure your Vite allowedHosts configuration with viteFinal.
+ It looks like you're visiting the Storybook development server on another hostname than localhost: '${hostname}', but you haven't configured the necessary security features to support this.
+ Please re-run your Storybook development server with the '--host ${hostname}' flag, or manually configure your Vite allowedHosts configuration with viteFinal.
-See:`;
+ See:`;
const docs = [
'https://storybook.js.org/docs/api/cli-options#dev',
'https://storybook.js.org/docs/api/main-config/main-config-vite-final',
@@ -85,7 +85,7 @@
`
${message.replaceAll(
'\n',
'
'
- )}
${docs.map((doc) => `- ${doc}
`).join('')}`;
+ )}${docs.map((doc) => `- ${doc}
`).join('')}
`;
return;
}
}
diff --git a/code/lib/eslint-plugin/docs/rules/await-interactions.md b/code/lib/eslint-plugin/docs/rules/await-interactions.md
index 16cde9402495..1945dc55f802 100644
--- a/code/lib/eslint-plugin/docs/rules/await-interactions.md
+++ b/code/lib/eslint-plugin/docs/rules/await-interactions.md
@@ -13,28 +13,28 @@ Storybook provides an instrumented version of the testing library in the [storyb
Examples of **incorrect** code for this rule:
```js
-import { userEvent, within } from 'storybook/test';
+import { userEvent, within } from "storybook/test";
// or from the legacy package "@storybook/testing-library";
MyStory.play = (context) => {
const canvas = within(context.canvasElement);
// not awaited!
- userEvent.click(canvas.getByRole('button'));
+ userEvent.click(canvas.getByRole("button"));
};
```
Examples of **correct** code for this rule:
```js
-import { userEvent, within } from 'storybook/test';
+import { userEvent, within } from "storybook/test";
// or from the legacy package "@storybook/testing-library";
MyStory.play = async (context) => {
const canvas = within(context.canvasElement);
// awaited 👍
- await userEvent.click(canvas.getByRole('button'));
+ await userEvent.click(canvas.getByRole("button"));
};
```
diff --git a/code/lib/eslint-plugin/docs/rules/csf-component.md b/code/lib/eslint-plugin/docs/rules/csf-component.md
index c37678324a05..ed50122f004b 100644
--- a/code/lib/eslint-plugin/docs/rules/csf-component.md
+++ b/code/lib/eslint-plugin/docs/rules/csf-component.md
@@ -14,7 +14,7 @@ Examples of **incorrect** code for this rule:
```js
export default {
- title: 'Button',
+ title: "Button",
};
```
@@ -22,7 +22,7 @@ Examples of **correct** code for this rule:
```js
export default {
- title: 'Button',
+ title: "Button",
component: Button,
};
```
diff --git a/code/lib/eslint-plugin/docs/rules/default-exports.md b/code/lib/eslint-plugin/docs/rules/default-exports.md
index 57393270964b..ff3bd7456d8e 100644
--- a/code/lib/eslint-plugin/docs/rules/default-exports.md
+++ b/code/lib/eslint-plugin/docs/rules/default-exports.md
@@ -21,7 +21,7 @@ Examples of **correct** code for this rule:
```js
export default {
- title: 'Button',
+ title: "Button",
args: { primary: true },
component: Button,
};
diff --git a/code/lib/eslint-plugin/docs/rules/hierarchy-separator.md b/code/lib/eslint-plugin/docs/rules/hierarchy-separator.md
index ce5dfb0ed340..a67d4392f34b 100644
--- a/code/lib/eslint-plugin/docs/rules/hierarchy-separator.md
+++ b/code/lib/eslint-plugin/docs/rules/hierarchy-separator.md
@@ -14,7 +14,7 @@ Examples of **incorrect** code for this rule:
```js
export default {
- title: 'Components|Forms/Input',
+ title: "Components|Forms/Input",
component: Input,
};
```
@@ -23,7 +23,7 @@ Examples of **correct** code for this rule:
```js
export default {
- title: 'Components/Forms/Input',
+ title: "Components/Forms/Input",
component: Input,
};
```
diff --git a/code/lib/eslint-plugin/docs/rules/meta-inline-properties.md b/code/lib/eslint-plugin/docs/rules/meta-inline-properties.md
index 05347855dc23..ba0bc088ffd7 100644
--- a/code/lib/eslint-plugin/docs/rules/meta-inline-properties.md
+++ b/code/lib/eslint-plugin/docs/rules/meta-inline-properties.md
@@ -13,7 +13,7 @@ This rule encourages you to use inline property definitions for the default expo
Examples of **incorrect** code for this rule:
```js
-const title = 'Button';
+const title = "Button";
const args = { primary: true };
export default {
@@ -27,7 +27,7 @@ Examples of **correct** code for this rule:
```js
export default {
- title: 'Button',
+ title: "Button",
args: { primary: true },
component: Button,
};
diff --git a/code/lib/eslint-plugin/docs/rules/meta-satisfies-type.md b/code/lib/eslint-plugin/docs/rules/meta-satisfies-type.md
index 52afe887e3a8..52378e3791e0 100644
--- a/code/lib/eslint-plugin/docs/rules/meta-satisfies-type.md
+++ b/code/lib/eslint-plugin/docs/rules/meta-satisfies-type.md
@@ -16,7 +16,7 @@ Examples of **incorrect** code for this rule:
```ts
export default {
- title: 'Button',
+ title: "Button",
args: { primary: true },
component: Button,
};
@@ -24,7 +24,7 @@ export default {
```ts
const meta: Meta = {
- title: 'Button',
+ title: "Button",
args: { primary: true },
component: Button,
};
@@ -35,7 +35,7 @@ Examples of **correct** code for this rule:
```ts
export default {
- title: 'Button',
+ title: "Button",
args: { primary: true },
component: Button,
} satisfies Meta;
@@ -43,7 +43,7 @@ export default {
```ts
const meta = {
- title: 'Button',
+ title: "Button",
args: { primary: true },
component: Button,
} satisfies Meta;
diff --git a/code/lib/eslint-plugin/docs/rules/no-redundant-story-name.md b/code/lib/eslint-plugin/docs/rules/no-redundant-story-name.md
index 44079b842c52..4528de5c3aa1 100644
--- a/code/lib/eslint-plugin/docs/rules/no-redundant-story-name.md
+++ b/code/lib/eslint-plugin/docs/rules/no-redundant-story-name.md
@@ -15,7 +15,7 @@ Examples of **incorrect** code for this rule:
```js
export const PrimaryButton = {
// no need for this, as Storybook will resolve to this name already
- name: 'Primary Button',
+ name: "Primary Button",
};
```
@@ -23,7 +23,7 @@ Examples of **correct** code for this rule:
```js
export const PrimaryButton = {
- name: 'I am the primary',
+ name: "I am the primary",
};
```
diff --git a/code/lib/eslint-plugin/docs/rules/no-renderer-packages.md b/code/lib/eslint-plugin/docs/rules/no-renderer-packages.md
index 8fa50646898a..72b9ec657039 100644
--- a/code/lib/eslint-plugin/docs/rules/no-renderer-packages.md
+++ b/code/lib/eslint-plugin/docs/rules/no-renderer-packages.md
@@ -24,19 +24,19 @@ Examples of **incorrect** code for this rule:
```js
// Don't import renderer packages directly
-import { something } from '@storybook/react';
-import { something } from '@storybook/vue3';
-import { something } from '@storybook/web-components';
+import { something } from "@storybook/react";
+import { something } from "@storybook/vue3";
+import { something } from "@storybook/web-components";
```
Examples of **correct** code for this rule:
```js
// Do use the appropriate framework package for your build tool
-import { something } from '@storybook/react-vite'; // For Vite
-import { something } from '@storybook/vue3-vite'; // For Vite
-import { something } from '@storybook/web-components-vite'; // For Vite
-import { something } from '@storybook/nextjs'; // For Next.js
+import { something } from "@storybook/react-vite"; // For Vite
+import { something } from "@storybook/vue3-vite"; // For Vite
+import { something } from "@storybook/web-components-vite"; // For Vite
+import { something } from "@storybook/nextjs"; // For Next.js
```
## When Not To Use It
diff --git a/code/lib/eslint-plugin/docs/rules/no-stories-of.md b/code/lib/eslint-plugin/docs/rules/no-stories-of.md
index fba61b3bfc6c..d4e42f9b1183 100644
--- a/code/lib/eslint-plugin/docs/rules/no-stories-of.md
+++ b/code/lib/eslint-plugin/docs/rules/no-stories-of.md
@@ -13,11 +13,11 @@ Starting with Storybook 5.2, the Component Story Format ([CSF](https://storybook
Examples of **incorrect** code for this rule:
```js
-import { storiesOf } from '@storybook/react';
+import { storiesOf } from "@storybook/react";
-import Button from '../components/Button';
+import Button from "../components/Button";
-storiesOf('Button', module).add('primary', () => );
+storiesOf("Button", module).add("primary", () => );
```
Examples of **correct** code for this rule:
diff --git a/code/lib/eslint-plugin/docs/rules/no-title-property-in-meta.md b/code/lib/eslint-plugin/docs/rules/no-title-property-in-meta.md
index f5c32df25567..8c4d548c4ad5 100644
--- a/code/lib/eslint-plugin/docs/rules/no-title-property-in-meta.md
+++ b/code/lib/eslint-plugin/docs/rules/no-title-property-in-meta.md
@@ -15,7 +15,7 @@ Examples of **incorrect** code for this rule:
```js
export default {
- title: 'Components/Forms/Input',
+ title: "Components/Forms/Input",
component: Input,
};
```
diff --git a/code/lib/eslint-plugin/docs/rules/no-uninstalled-addons.md b/code/lib/eslint-plugin/docs/rules/no-uninstalled-addons.md
index f407987a7cfb..742ea6180c63 100644
--- a/code/lib/eslint-plugin/docs/rules/no-uninstalled-addons.md
+++ b/code/lib/eslint-plugin/docs/rules/no-uninstalled-addons.md
@@ -72,7 +72,10 @@ This rule assumes that the `package.json` is located in the root of your project
```js
module.exports = {
rules: {
- 'storybook/no-uninstalled-addons': ['error', { packageJsonLocation: './folder/package.json' }],
+ "storybook/no-uninstalled-addons": [
+ "error",
+ { packageJsonLocation: "./folder/package.json" },
+ ],
},
};
```
@@ -86,11 +89,11 @@ You can also ignore specific addons by providing an ignore array in the options:
```js
module.exports = {
rules: {
- 'storybook/no-uninstalled-addons': [
- 'error',
+ "storybook/no-uninstalled-addons": [
+ "error",
{
- packageJsonLocation: './folder/package.json',
- ignore: ['custom-addon'],
+ packageJsonLocation: "./folder/package.json",
+ ignore: ["custom-addon"],
},
],
},
diff --git a/code/lib/eslint-plugin/docs/rules/story-exports.md b/code/lib/eslint-plugin/docs/rules/story-exports.md
index dbc9c44904cb..7a1be8e6f900 100644
--- a/code/lib/eslint-plugin/docs/rules/story-exports.md
+++ b/code/lib/eslint-plugin/docs/rules/story-exports.md
@@ -14,7 +14,7 @@ Examples of **incorrect** code for this rule:
```js
export default {
- title: 'Button',
+ title: "Button",
args: { primary: true },
component: Button,
};
@@ -25,7 +25,7 @@ Examples of **correct** code for this rule:
```js
export default {
- title: 'Button',
+ title: "Button",
args: { primary: true },
component: Button,
};
diff --git a/code/lib/eslint-plugin/docs/rules/use-storybook-expect.md b/code/lib/eslint-plugin/docs/rules/use-storybook-expect.md
index ae197c50ad37..d7c54c24a2ba 100644
--- a/code/lib/eslint-plugin/docs/rules/use-storybook-expect.md
+++ b/code/lib/eslint-plugin/docs/rules/use-storybook-expect.md
@@ -24,9 +24,9 @@ Examples of **correct** code for this rule:
```js
// Correct import.
-import { expect } from 'storybook/test';
+import { expect } from "storybook/test";
// or this, which is now considered legacy
-import { expect } from '@storybook/jest';
+import { expect } from "@storybook/jest";
Default.play = async () => {
// Using imported expect from storybook package
diff --git a/code/lib/eslint-plugin/docs/rules/use-storybook-testing-library.md b/code/lib/eslint-plugin/docs/rules/use-storybook-testing-library.md
index aefddb556d49..a08b40b8c687 100644
--- a/code/lib/eslint-plugin/docs/rules/use-storybook-testing-library.md
+++ b/code/lib/eslint-plugin/docs/rules/use-storybook-testing-library.md
@@ -15,7 +15,7 @@ Examples of **incorrect** code for this rule:
```js
// wrong import!
-import { within } from '@testing-library/react';
+import { within } from "@testing-library/react";
Default.play = async (context) => {
const canvas = within(context.canvasElement);
@@ -26,9 +26,9 @@ Examples of **correct** code for this rule:
```js
// correct import.
-import { within } from 'storybook/test';
+import { within } from "storybook/test";
// or this, which is now considered legacy
-import { within } from '@storybook/testing-library';
+import { within } from "@storybook/testing-library";
Default.play = async (context) => {
const canvas = within(context.canvasElement);
diff --git a/code/package.json b/code/package.json
index 144cca08a2cb..066cbe945f2a 100644
--- a/code/package.json
+++ b/code/package.json
@@ -24,12 +24,10 @@
"github-release": "github-release-from-changelog",
"i": "yarn --cwd .. i",
"knip": "knip --config ../scripts/knip.config.ts",
- "lint": "yarn lint:js && yarn lint:other",
+ "lint": "yarn lint:js",
"lint:ejs": "ejslint **/*.ejs",
- "lint:fmt": "oxfmt --check",
"lint:js": "yarn lint:js:cmd . --quiet",
"lint:js:cmd": "cross-env NODE_ENV=production eslint --cache --cache-location=../.cache/eslint --ext .js,.jsx,.json,.html,.ts,.tsx,.mjs --report-unused-disable-directives",
- "lint:other": "yarn lint:fmt",
"lint:package": "yarn --cwd ../scripts lint:package",
"local-registry": "yarn --cwd ../scripts local-registry",
"publish-sandboxes": "yarn --cwd ../scripts publish",
@@ -38,22 +36,6 @@
"storybook:ui:chromatic": "chromatic --storybook-build-dir storybook-static --exit-zero-on-changes --exit-once-uploaded",
"task": "yarn --cwd ../scripts task"
},
- "lint-staged": {
- "*.{js,jsx,mjs,ts,tsx}": [
- "oxfmt",
- "yarn lint:js:cmd"
- ],
- "*.{html,json}": [
- "oxfmt",
- "yarn lint:js:cmd"
- ],
- "*.ejs": [
- "yarn --cwd ../scripts ejslint"
- ],
- "package.json": [
- "yarn lint:package"
- ]
- },
"browserslist": [
"chrome >= 131",
"android >= 131",
@@ -127,7 +109,6 @@
"happy-dom": "^17.6.3",
"http-server": "^14.1.1",
"knip": "^5.70.2",
- "lint-staged": "^16.2.7",
"mock-require": "^3.0.3",
"prettier": "^3.7.1",
"process": "^0.11.10",
diff --git a/docs/.oxfmtrc.json b/docs/.oxfmtrc.json
deleted file mode 100644
index ea9ebdb2b1c6..000000000000
--- a/docs/.oxfmtrc.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "printWidth": 100,
- "singleQuote": true
-}
\ No newline at end of file
diff --git a/docs/_snippets/render-custom-in-meta.md b/docs/_snippets/render-custom-in-meta.md
index 5f95212e39ba..78a327aecb04 100644
--- a/docs/_snippets/render-custom-in-meta.md
+++ b/docs/_snippets/render-custom-in-meta.md
@@ -7,6 +7,7 @@ const meta: Meta