{ "eslint": { "design-lab": { "languageOptions": { "ecmaVersion": 2022, "globals": "1169 names, sha1 aee621727a03", "parser": "typescript-eslint/parser", "parserOptions": { "projectService": true, "tsconfigRootDir": "." }, "sourceType": "module" }, "linterOptions": { "reportUnusedDisableDirectives": 2 }, "notApplied": [], "plugins": [ "@", "@eslint-community/eslint-comments", "@typescript-eslint", "local", "react-hooks", "react-refresh" ], "rules": { "local/literal-a11y-text": [0] }, "settings": null }, "e2e": { "languageOptions": { "ecmaVersion": 2022, "globals": "82 names, sha1 29467d490e30", "parser": "typescript-eslint/parser", "parserOptions": { "projectService": true, "tsconfigRootDir": "." }, "sourceType": "module" }, "linterOptions": { "reportUnusedDisableDirectives": 2 }, "notApplied": [ "local/button-primitive", "local/glyph-link", "local/input-primitive", "local/jsx-comment-text", "local/literal-a11y-text", "local/locale-format", "local/sortable-a11y", "local/surface-role", "no-console", "no-restricted-globals", "no-restricted-properties", "no-restricted-syntax", "react-hooks/capitalized-calls", "react-hooks/component-hook-factories", "react-hooks/config", "react-hooks/error-boundaries", "react-hooks/exhaustive-deps", "react-hooks/gating", "react-hooks/globals", "react-hooks/hooks", "react-hooks/immutability", "react-hooks/incompatible-library", "react-hooks/invariant", "react-hooks/memo-dependencies", "react-hooks/no-deriving-state-in-effects", "react-hooks/preserve-manual-memoization", "react-hooks/purity", "react-hooks/refs", "react-hooks/rules-of-hooks", "react-hooks/set-state-in-effect", "react-hooks/set-state-in-render", "react-hooks/static-components", "react-hooks/syntax", "react-hooks/todo", "react-hooks/unsupported-syntax", "react-hooks/use-memo", "react-hooks/void-use-memo", "react-refresh/only-export-components" ], "plugins": ["@", "@eslint-community/eslint-comments", "@typescript-eslint", "playwright"], "rules": { "@typescript-eslint/no-unused-expressions": [ 2, { "allowShortCircuit": false, "allowTaggedTemplates": false, "allowTernary": false } ], "playwright/no-focused-test": [2], "playwright/no-skipped-test": [2] }, "settings": null }, "js configs": { "languageOptions": { "ecmaVersion": 2022, "globals": "82 names, sha1 29467d490e30", "parser": "(unnamed parser)", "parserOptions": { "sourceType": "module" }, "sourceType": "module" }, "linterOptions": { "reportUnusedDisableDirectives": 2 }, "notApplied": [ "@typescript-eslint/ban-ts-comment", "@typescript-eslint/no-array-constructor", "@typescript-eslint/no-deprecated", "@typescript-eslint/no-duplicate-enum-values", "@typescript-eslint/no-empty-object-type", "@typescript-eslint/no-explicit-any", "@typescript-eslint/no-extra-non-null-assertion", "@typescript-eslint/no-floating-promises", "@typescript-eslint/no-misused-new", "@typescript-eslint/no-namespace", "@typescript-eslint/no-non-null-asserted-optional-chain", "@typescript-eslint/no-require-imports", "@typescript-eslint/no-this-alias", "@typescript-eslint/no-unnecessary-type-constraint", "@typescript-eslint/no-unsafe-declaration-merging", "@typescript-eslint/no-unsafe-function-type", "@typescript-eslint/no-unused-expressions", "@typescript-eslint/no-unused-vars", "@typescript-eslint/no-wrapper-object-types", "@typescript-eslint/prefer-as-const", "@typescript-eslint/prefer-namespace-keyword", "@typescript-eslint/triple-slash-reference", "local/button-primitive", "local/glyph-link", "local/input-primitive", "local/jsx-comment-text", "local/literal-a11y-text", "local/locale-format", "local/sortable-a11y", "local/surface-role", "no-array-constructor", "no-console", "no-new-symbol", "no-restricted-globals", "no-restricted-properties", "no-restricted-syntax", "no-unused-expressions", "no-var", "prefer-const", "prefer-rest-params", "prefer-spread", "react-hooks/capitalized-calls", "react-hooks/component-hook-factories", "react-hooks/config", "react-hooks/error-boundaries", "react-hooks/exhaustive-deps", "react-hooks/gating", "react-hooks/globals", "react-hooks/hooks", "react-hooks/immutability", "react-hooks/incompatible-library", "react-hooks/invariant", "react-hooks/memo-dependencies", "react-hooks/no-deriving-state-in-effects", "react-hooks/preserve-manual-memoization", "react-hooks/purity", "react-hooks/refs", "react-hooks/rules-of-hooks", "react-hooks/set-state-in-effect", "react-hooks/set-state-in-render", "react-hooks/static-components", "react-hooks/syntax", "react-hooks/todo", "react-hooks/unsupported-syntax", "react-hooks/use-memo", "react-hooks/void-use-memo", "react-refresh/only-export-components" ], "plugins": ["@", "@eslint-community/eslint-comments"], "rules": { "constructor-super": [2], "getter-return": [2, { "allowImplicit": false }], "no-class-assign": [2], "no-const-assign": [2], "no-dupe-args": [2], "no-dupe-class-members": [2], "no-dupe-keys": [2], "no-func-assign": [2], "no-import-assign": [2], "no-new-native-nonconstructor": [2], "no-obj-calls": [2], "no-redeclare": [2, { "builtinGlobals": true }], "no-setter-return": [2], "no-this-before-super": [2], "no-undef": [2, { "typeof": false }], "no-unreachable": [2], "no-unsafe-negation": [2, { "enforceForOrderingRelations": false }], "no-unused-vars": [2], "no-with": [2] }, "settings": null }, "lib tests": { "languageOptions": { "ecmaVersion": 2022, "globals": "1169 names, sha1 aee621727a03", "parser": "typescript-eslint/parser", "parserOptions": { "projectService": true, "tsconfigRootDir": "." }, "sourceType": "module" }, "linterOptions": { "reportUnusedDisableDirectives": 2 }, "notApplied": [], "plugins": [ "@", "@eslint-community/eslint-comments", "@typescript-eslint", "local", "react-hooks", "react-refresh", "vitest" ], "rules": { "local/glyph-link": [0], "local/input-primitive": [0], "local/literal-a11y-text": [0], "local/surface-role": [0], "no-restricted-globals": [ 0, { "message": "Use the logged request layer: `fetch` belongs to src/lib/http.ts only — a request outside it never reaches the client log.", "name": "fetch" }, { "message": "Use the logged request layer: `XMLHttpRequest` belongs to src/lib/api/core.ts only — a request outside it never reaches the client log.", "name": "XMLHttpRequest" }, { "message": "No `WebSocket` without a logged owner module.", "name": "WebSocket" }, { "message": "No `EventSource` without a logged owner module.", "name": "EventSource" } ], "no-restricted-imports": [ 2, { "patterns": [ { "message": "lib/ sits below components/: it may not import from components/, not even a type. Move the shared piece down into lib/.", "regex": "^(\\.\\./)+components(/|$)" } ] } ], "no-restricted-properties": [ 0, { "message": "Use lib/http.ts `send`.", "object": "window", "property": "fetch" }, { "message": "Use lib/http.ts `send`.", "object": "globalThis", "property": "fetch" }, { "message": "Use lib/api/core.ts `beacon`.", "object": "navigator", "property": "sendBeacon" } ], "vitest/no-disabled-tests": [2], "vitest/no-focused-tests": [2, { "fixable": true }] }, "settings": null }, "lib/api/core.ts": { "languageOptions": { "ecmaVersion": 2022, "globals": "1169 names, sha1 aee621727a03", "parser": "typescript-eslint/parser", "parserOptions": { "projectService": true, "tsconfigRootDir": "." }, "sourceType": "module" }, "linterOptions": { "reportUnusedDisableDirectives": 2 }, "notApplied": [], "plugins": [ "@", "@eslint-community/eslint-comments", "@typescript-eslint", "local", "react-hooks", "react-refresh" ], "rules": { "no-restricted-globals": [ 2, { "message": "Use the logged request layer: `fetch` belongs to src/lib/http.ts only — a request outside it never reaches the client log.", "name": "fetch" }, { "message": "No `WebSocket` without a logged owner module.", "name": "WebSocket" }, { "message": "No `EventSource` without a logged owner module.", "name": "EventSource" } ], "no-restricted-imports": [ 2, { "patterns": [ { "message": "lib/ sits below components/: it may not import from components/, not even a type. Move the shared piece down into lib/.", "regex": "^(\\.\\./)+components(/|$)" } ] } ] }, "settings": null }, "lib/http.ts": { "languageOptions": { "ecmaVersion": 2022, "globals": "1169 names, sha1 aee621727a03", "parser": "typescript-eslint/parser", "parserOptions": { "projectService": true, "tsconfigRootDir": "." }, "sourceType": "module" }, "linterOptions": { "reportUnusedDisableDirectives": 2 }, "notApplied": [], "plugins": [ "@", "@eslint-community/eslint-comments", "@typescript-eslint", "local", "react-hooks", "react-refresh" ], "rules": { "no-restricted-globals": [ 2, { "message": "Use the logged request layer: `XMLHttpRequest` belongs to src/lib/api/core.ts only — a request outside it never reaches the client log.", "name": "XMLHttpRequest" }, { "message": "No `WebSocket` without a logged owner module.", "name": "WebSocket" }, { "message": "No `EventSource` without a logged owner module.", "name": "EventSource" } ], "no-restricted-imports": [ 2, { "patterns": [ { "message": "lib/ sits below components/: it may not import from components/, not even a type. Move the shared piece down into lib/.", "regex": "^(\\.\\./)+components(/|$)" } ] } ] }, "settings": null }, "src": { "languageOptions": { "ecmaVersion": 2022, "globals": "1169 names, sha1 aee621727a03", "parser": "typescript-eslint/parser", "parserOptions": { "projectService": true, "tsconfigRootDir": "." }, "sourceType": "module" }, "linterOptions": { "reportUnusedDisableDirectives": 2 }, "plugins": [ "@", "@eslint-community/eslint-comments", "@typescript-eslint", "local", "react-hooks", "react-refresh" ], "rules": { "@babel/object-curly-spacing": [0], "@babel/semi": [0], "@eslint-community/eslint-comments/no-unlimited-disable": [2], "@eslint-community/eslint-comments/require-description": [2, { "ignore": [] }], "@stylistic/array-bracket-newline": [0], "@stylistic/array-bracket-spacing": [0], "@stylistic/array-element-newline": [0], "@stylistic/arrow-parens": [0], "@stylistic/arrow-spacing": [0], "@stylistic/block-spacing": [0], "@stylistic/brace-style": [0], "@stylistic/comma-dangle": [0], "@stylistic/comma-spacing": [0], "@stylistic/comma-style": [0], "@stylistic/computed-property-spacing": [0], "@stylistic/dot-location": [0], "@stylistic/eol-last": [0], "@stylistic/func-call-spacing": [0], "@stylistic/function-call-argument-newline": [0], "@stylistic/function-call-spacing": [0], "@stylistic/function-paren-newline": [0], "@stylistic/generator-star-spacing": [0], "@stylistic/implicit-arrow-linebreak": [0], "@stylistic/indent": [0], "@stylistic/indent-binary-ops": [0], "@stylistic/js/array-bracket-newline": [0], "@stylistic/js/array-bracket-spacing": [0], "@stylistic/js/array-element-newline": [0], "@stylistic/js/arrow-parens": [0], "@stylistic/js/arrow-spacing": [0], "@stylistic/js/block-spacing": [0], "@stylistic/js/brace-style": [0], "@stylistic/js/comma-dangle": [0], "@stylistic/js/comma-spacing": [0], "@stylistic/js/comma-style": [0], "@stylistic/js/computed-property-spacing": [0], "@stylistic/js/dot-location": [0], "@stylistic/js/eol-last": [0], "@stylistic/js/func-call-spacing": [0], "@stylistic/js/function-call-argument-newline": [0], "@stylistic/js/function-call-spacing": [0], "@stylistic/js/function-paren-newline": [0], "@stylistic/js/generator-star-spacing": [0], "@stylistic/js/implicit-arrow-linebreak": [0], "@stylistic/js/indent": [0], "@stylistic/js/jsx-quotes": [0], "@stylistic/js/key-spacing": [0], "@stylistic/js/keyword-spacing": [0], "@stylistic/js/linebreak-style": [0], "@stylistic/js/lines-around-comment": [0], "@stylistic/js/max-len": [0], "@stylistic/js/max-statements-per-line": [0], "@stylistic/js/multiline-ternary": [0], "@stylistic/js/new-parens": [0], "@stylistic/js/newline-per-chained-call": [0], "@stylistic/js/no-confusing-arrow": [0], "@stylistic/js/no-extra-parens": [0], "@stylistic/js/no-extra-semi": [0], "@stylistic/js/no-floating-decimal": [0], "@stylistic/js/no-mixed-operators": [0], "@stylistic/js/no-mixed-spaces-and-tabs": [0], "@stylistic/js/no-multi-spaces": [0], "@stylistic/js/no-multiple-empty-lines": [0], "@stylistic/js/no-tabs": [0], "@stylistic/js/no-trailing-spaces": [0], "@stylistic/js/no-whitespace-before-property": [0], "@stylistic/js/nonblock-statement-body-position": [0], "@stylistic/js/object-curly-newline": [0], "@stylistic/js/object-curly-spacing": [0], "@stylistic/js/object-property-newline": [0], "@stylistic/js/one-var-declaration-per-line": [0], "@stylistic/js/operator-linebreak": [0], "@stylistic/js/padded-blocks": [0], "@stylistic/js/quote-props": [0], "@stylistic/js/quotes": [0], "@stylistic/js/rest-spread-spacing": [0], "@stylistic/js/semi": [0], "@stylistic/js/semi-spacing": [0], "@stylistic/js/semi-style": [0], "@stylistic/js/space-before-blocks": [0], "@stylistic/js/space-before-function-paren": [0], "@stylistic/js/space-in-parens": [0], "@stylistic/js/space-infix-ops": [0], "@stylistic/js/space-unary-ops": [0], "@stylistic/js/switch-colon-spacing": [0], "@stylistic/js/template-curly-spacing": [0], "@stylistic/js/template-tag-spacing": [0], "@stylistic/js/wrap-iife": [0], "@stylistic/js/wrap-regex": [0], "@stylistic/js/yield-star-spacing": [0], "@stylistic/jsx-child-element-spacing": [0], "@stylistic/jsx-closing-bracket-location": [0], "@stylistic/jsx-closing-tag-location": [0], "@stylistic/jsx-curly-newline": [0], "@stylistic/jsx-curly-spacing": [0], "@stylistic/jsx-equals-spacing": [0], "@stylistic/jsx-first-prop-new-line": [0], "@stylistic/jsx-indent": [0], "@stylistic/jsx-indent-props": [0], "@stylistic/jsx-max-props-per-line": [0], "@stylistic/jsx-newline": [0], "@stylistic/jsx-one-expression-per-line": [0], "@stylistic/jsx-props-no-multi-spaces": [0], "@stylistic/jsx-quotes": [0], "@stylistic/jsx-tag-spacing": [0], "@stylistic/jsx-wrap-multilines": [0], "@stylistic/jsx/jsx-child-element-spacing": [0], "@stylistic/jsx/jsx-closing-bracket-location": [0], "@stylistic/jsx/jsx-closing-tag-location": [0], "@stylistic/jsx/jsx-curly-newline": [0], "@stylistic/jsx/jsx-curly-spacing": [0], "@stylistic/jsx/jsx-equals-spacing": [0], "@stylistic/jsx/jsx-first-prop-new-line": [0], "@stylistic/jsx/jsx-indent": [0], "@stylistic/jsx/jsx-indent-props": [0], "@stylistic/jsx/jsx-max-props-per-line": [0], "@stylistic/key-spacing": [0], "@stylistic/keyword-spacing": [0], "@stylistic/linebreak-style": [0], "@stylistic/lines-around-comment": [0], "@stylistic/max-len": [0], "@stylistic/max-statements-per-line": [0], "@stylistic/member-delimiter-style": [0], "@stylistic/multiline-ternary": [0], "@stylistic/new-parens": [0], "@stylistic/newline-per-chained-call": [0], "@stylistic/no-confusing-arrow": [0], "@stylistic/no-extra-parens": [0], "@stylistic/no-extra-semi": [0], "@stylistic/no-floating-decimal": [0], "@stylistic/no-mixed-operators": [0], "@stylistic/no-mixed-spaces-and-tabs": [0], "@stylistic/no-multi-spaces": [0], "@stylistic/no-multiple-empty-lines": [0], "@stylistic/no-tabs": [0], "@stylistic/no-trailing-spaces": [0], "@stylistic/no-whitespace-before-property": [0], "@stylistic/nonblock-statement-body-position": [0], "@stylistic/object-curly-newline": [0], "@stylistic/object-curly-spacing": [0], "@stylistic/object-property-newline": [0], "@stylistic/one-var-declaration-per-line": [0], "@stylistic/operator-linebreak": [0], "@stylistic/padded-blocks": [0], "@stylistic/quote-props": [0], "@stylistic/quotes": [0], "@stylistic/rest-spread-spacing": [0], "@stylistic/semi": [0], "@stylistic/semi-spacing": [0], "@stylistic/semi-style": [0], "@stylistic/space-before-blocks": [0], "@stylistic/space-before-function-paren": [0], "@stylistic/space-in-parens": [0], "@stylistic/space-infix-ops": [0], "@stylistic/space-unary-ops": [0], "@stylistic/switch-colon-spacing": [0], "@stylistic/template-curly-spacing": [0], "@stylistic/template-tag-spacing": [0], "@stylistic/ts/block-spacing": [0], "@stylistic/ts/brace-style": [0], "@stylistic/ts/comma-dangle": [0], "@stylistic/ts/comma-spacing": [0], "@stylistic/ts/func-call-spacing": [0], "@stylistic/ts/function-call-spacing": [0], "@stylistic/ts/indent": [0], "@stylistic/ts/key-spacing": [0], "@stylistic/ts/keyword-spacing": [0], "@stylistic/ts/lines-around-comment": [0], "@stylistic/ts/member-delimiter-style": [0], "@stylistic/ts/no-extra-parens": [0], "@stylistic/ts/no-extra-semi": [0], "@stylistic/ts/object-curly-spacing": [0], "@stylistic/ts/quotes": [0], "@stylistic/ts/semi": [0], "@stylistic/ts/space-before-blocks": [0], "@stylistic/ts/space-before-function-paren": [0], "@stylistic/ts/space-infix-ops": [0], "@stylistic/ts/type-annotation-spacing": [0], "@stylistic/type-annotation-spacing": [0], "@stylistic/type-generic-spacing": [0], "@stylistic/type-named-tuple-spacing": [0], "@stylistic/wrap-iife": [0], "@stylistic/wrap-regex": [0], "@stylistic/yield-star-spacing": [0], "@typescript-eslint/ban-ts-comment": [2], "@typescript-eslint/block-spacing": [0], "@typescript-eslint/brace-style": [0], "@typescript-eslint/comma-dangle": [0], "@typescript-eslint/comma-spacing": [0], "@typescript-eslint/func-call-spacing": [0], "@typescript-eslint/indent": [0], "@typescript-eslint/key-spacing": [0], "@typescript-eslint/keyword-spacing": [0], "@typescript-eslint/lines-around-comment": [0], "@typescript-eslint/member-delimiter-style": [0], "@typescript-eslint/no-array-constructor": [2], "@typescript-eslint/no-deprecated": [2], "@typescript-eslint/no-duplicate-enum-values": [2], "@typescript-eslint/no-empty-object-type": [2], "@typescript-eslint/no-explicit-any": [2], "@typescript-eslint/no-extra-non-null-assertion": [2], "@typescript-eslint/no-extra-parens": [0], "@typescript-eslint/no-extra-semi": [0], "@typescript-eslint/no-floating-promises": [ 2, { "allowForKnownSafeCalls": [ { "from": "package", "name": [ "invalidateQueries", "refetchQueries", "cancelQueries", "resetQueries", "prefetchQuery", "prefetchInfiniteQuery" ], "package": "@tanstack/query-core" } ] } ], "@typescript-eslint/no-misused-new": [2], "@typescript-eslint/no-namespace": [2], "@typescript-eslint/no-non-null-asserted-optional-chain": [2], "@typescript-eslint/no-require-imports": [2], "@typescript-eslint/no-this-alias": [2], "@typescript-eslint/no-unnecessary-type-constraint": [2], "@typescript-eslint/no-unsafe-declaration-merging": [2], "@typescript-eslint/no-unsafe-function-type": [2], "@typescript-eslint/no-unused-expressions": [ 2, { "allowShortCircuit": true, "allowTaggedTemplates": false, "allowTernary": true } ], "@typescript-eslint/no-unused-vars": [0], "@typescript-eslint/no-wrapper-object-types": [2], "@typescript-eslint/object-curly-spacing": [0], "@typescript-eslint/prefer-as-const": [2], "@typescript-eslint/prefer-namespace-keyword": [2], "@typescript-eslint/quotes": [0], "@typescript-eslint/semi": [0], "@typescript-eslint/space-before-blocks": [0], "@typescript-eslint/space-before-function-paren": [0], "@typescript-eslint/space-infix-ops": [0], "@typescript-eslint/triple-slash-reference": [2], "@typescript-eslint/type-annotation-spacing": [0], "array-bracket-newline": [0], "array-bracket-spacing": [0], "array-element-newline": [0], "arrow-parens": [0], "arrow-spacing": [0], "babel/object-curly-spacing": [0], "babel/quotes": [0], "babel/semi": [0], "block-spacing": [0], "brace-style": [0], "comma-dangle": [0], "comma-spacing": [0], "comma-style": [0], "computed-property-spacing": [0], "constructor-super": [0], "curly": [0, "all"], "dot-location": [0], "eol-last": [0], "flowtype/boolean-style": [0], "flowtype/delimiter-dangle": [0], "flowtype/generic-spacing": [0], "flowtype/object-type-curly-spacing": [0], "flowtype/object-type-delimiter": [0], "flowtype/quotes": [0], "flowtype/semi": [0], "flowtype/space-after-type-colon": [0], "flowtype/space-before-generic-bracket": [0], "flowtype/space-before-type-colon": [0], "flowtype/union-intersection-spacing": [0], "for-direction": [2], "func-call-spacing": [0], "function-call-argument-newline": [0], "function-paren-newline": [0], "generator-star": [0], "generator-star-spacing": [0], "getter-return": [0, { "allowImplicit": false }], "implicit-arrow-linebreak": [0], "indent": [0], "indent-legacy": [0], "jsx-quotes": [0], "key-spacing": [0], "keyword-spacing": [0], "linebreak-style": [0], "lines-around-comment": [0], "local/button-primitive": [2], "local/glyph-link": [2], "local/input-primitive": [2], "local/jsx-comment-text": [2], "local/literal-a11y-text": [2], "local/locale-format": [2], "local/sortable-a11y": [2], "local/surface-role": [2], "max-len": [0], "max-statements-per-line": [0], "multiline-ternary": [0], "new-parens": [0], "newline-per-chained-call": [0], "no-array-constructor": [0], "no-arrow-condition": [0], "no-async-promise-executor": [2], "no-case-declarations": [2], "no-class-assign": [0], "no-comma-dangle": [0], "no-compare-neg-zero": [2], "no-cond-assign": [2, "except-parens"], "no-confusing-arrow": [0], "no-console": [2, {}], "no-const-assign": [0], "no-constant-binary-expression": [2], "no-constant-condition": [2, { "checkLoops": "allExceptWhileTrue" }], "no-control-regex": [2], "no-debugger": [2], "no-delete-var": [2], "no-dupe-args": [0], "no-dupe-class-members": [0], "no-dupe-else-if": [2], "no-dupe-keys": [0], "no-duplicate-case": [2], "no-empty": [2, { "allowEmptyCatch": false }], "no-empty-character-class": [2], "no-empty-pattern": [2, { "allowObjectPatternsAsParameters": false }], "no-empty-static-block": [2], "no-ex-assign": [2], "no-extra-boolean-cast": [2, {}], "no-extra-parens": [0], "no-extra-semi": [0], "no-fallthrough": [2, { "allowEmptyCase": false, "reportUnusedFallthroughComment": false }], "no-floating-decimal": [0], "no-func-assign": [0], "no-global-assign": [2, { "exceptions": [] }], "no-import-assign": [0], "no-invalid-regexp": [2, {}], "no-irregular-whitespace": [ 2, { "skipComments": false, "skipJSXText": false, "skipRegExps": false, "skipStrings": true, "skipTemplates": false } ], "no-loss-of-precision": [2], "no-misleading-character-class": [2, { "allowEscape": false }], "no-mixed-operators": [0], "no-mixed-spaces-and-tabs": [0], "no-multi-spaces": [0], "no-multiple-empty-lines": [0], "no-new-native-nonconstructor": [0], "no-new-symbol": [0], "no-nonoctal-decimal-escape": [2], "no-obj-calls": [0], "no-octal": [2], "no-prototype-builtins": [2], "no-redeclare": [0, { "builtinGlobals": true }], "no-regex-spaces": [2], "no-reserved-keys": [0], "no-restricted-globals": [ 2, { "message": "Use the logged request layer: `fetch` belongs to src/lib/http.ts only — a request outside it never reaches the client log.", "name": "fetch" }, { "message": "Use the logged request layer: `XMLHttpRequest` belongs to src/lib/api/core.ts only — a request outside it never reaches the client log.", "name": "XMLHttpRequest" }, { "message": "No `WebSocket` without a logged owner module.", "name": "WebSocket" }, { "message": "No `EventSource` without a logged owner module.", "name": "EventSource" } ], "no-restricted-properties": [ 2, { "message": "Use lib/http.ts `send`.", "object": "window", "property": "fetch" }, { "message": "Use lib/http.ts `send`.", "object": "globalThis", "property": "fetch" }, { "message": "Use lib/api/core.ts `beacon`.", "object": "navigator", "property": "sendBeacon" } ], "no-restricted-syntax": [ 2, { "message": "fetchNextPage() cancels and re-sends a page already loading: call fetchNextPage(NEXT_PAGE) (lib/nextPage.ts).", "selector": "CallExpression[arguments.length=0]:matches([callee.name='fetchNextPage'], [callee.property.name='fetchNextPage'])" }, { "message": "`enabled:hover:` misses a focused FocusSafeButton (aria-disabled): use `act:hover:` (index.css).", "selector": "Literal[value=/(^|\\s)enabled:hover:/]" }, { "message": "`enabled:hover:` misses a focused FocusSafeButton (aria-disabled): use `act:hover:` (index.css).", "selector": "TemplateElement[value.raw=/(^|\\s)enabled:hover:/]" }, { "message": "a class split by an interpolation (`${x}hover:…`): Tailwind never sees it whole and emits no CSS; write the class literally (a shared guard is the `act:` variant).", "selector": "TemplateLiteral > TemplateElement:not(:first-child)[value.raw=/^([a-z][\\w-]*:[\\w\\[!-]|:[a-z\\[!])/]" }, { "message": "No native