diff --git a/packages/pl-fe/.oxlintrc.json b/packages/pl-fe/.oxlintrc.json index 137676f89..295da5d15 100644 --- a/packages/pl-fe/.oxlintrc.json +++ b/packages/pl-fe/.oxlintrc.json @@ -1,6 +1,6 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": ["typescript", "import", "promise"], + "plugins": ["typescript", "import", "promise", "react", "jsx-a11y"], "jsPlugins": ["eslint-plugin-formatjs"], "categories": { "correctness": "error", @@ -45,6 +45,17 @@ "unbound-method": "warn", "no-shadow": "off", + "react/exhaustive-deps": "off", + + "jsx-a11y/anchor-is-valid": "warn", + "jsx-a11y/click-events-have-key-events": "warn", + "jsx-a11y/label-has-associated-control": "warn", + "jsx-a11y/media-has-caption": "off", + "jsx-a11y/mouse-events-have-key-events": "warn", + "jsx-a11y/no-autofocus": "warn", + "jsx-a11y/no-static-element-interactions": "warn", + "jsx-a11y/prefer-tag-over-role": "warn", + "formatjs/enforce-default-message": "error", "formatjs/enforce-id": "error", "formatjs/no-literal-string-in-jsx": "warn" diff --git a/packages/pl-fe/src/components/parsed-mfm.tsx b/packages/pl-fe/src/components/parsed-mfm.tsx index 11eacdcd7..d57edd1b8 100644 --- a/packages/pl-fe/src/components/parsed-mfm.tsx +++ b/packages/pl-fe/src/components/parsed-mfm.tsx @@ -57,6 +57,7 @@ const ParsedMfm: React.FC = React.memo(({ text, emojis, mentions, sp .join(''); const genEl = (ast: mfm.MfmNode[], scale: number) => + /* eslint-disable react/jsx-key */ ast .map((token): React.JSX.Element | string | (React.JSX.Element | string)[] => { switch (token.type) { diff --git a/packages/pl-fe/src/components/status-content.tsx b/packages/pl-fe/src/components/status-content.tsx index e516d8227..2b6732edf 100644 --- a/packages/pl-fe/src/components/status-content.tsx +++ b/packages/pl-fe/src/components/status-content.tsx @@ -218,8 +218,9 @@ const StatusContent: React.FC = React.memo( '⁂-status-title--clamp': !expanded && lineClamp, })} key='spoiler' - aria-expanded={expanded} - {...(expandable ? { onClick: toggleExpanded, role: 'button' } : {})} + {...(expandable + ? { onClick: toggleExpanded, role: 'button', 'aria-expanded': expanded } + : {})} > diff --git a/packages/pl-fe/src/features/admin/components/counter.tsx b/packages/pl-fe/src/features/admin/components/counter.tsx index d9ea26092..ab34bc6a6 100644 --- a/packages/pl-fe/src/features/admin/components/counter.tsx +++ b/packages/pl-fe/src/features/admin/components/counter.tsx @@ -76,6 +76,7 @@ const Counter: React.FC = ({ })} > {percentChange > 0 && '+'} + {/* eslint-disable-next-line react/style-prop-object */} )} diff --git a/packages/pl-fe/src/features/admin/components/retention.tsx b/packages/pl-fe/src/features/admin/components/retention.tsx index 1ef5bd502..1537f006d 100644 --- a/packages/pl-fe/src/features/admin/components/retention.tsx +++ b/packages/pl-fe/src/features/admin/components/retention.tsx @@ -93,6 +93,7 @@ const Retention: React.FC = ({ startAt, endAt, frequency }) => { className='bg-primary-200 p-2.5 font-medium dark:bg-gray-800' style={{ ['--tw-bg-opacity' as any]: 0.5 + average / 2 }} > + {/* eslint-disable-next-line react/style-prop-object */} @@ -120,6 +121,7 @@ const Retention: React.FC = ({ startAt, endAt, frequency }) => { className='bg-primary-200 p-2.5 font-medium dark:bg-gray-800' style={{ ['--tw-bg-opacity' as any]: 0.5 + retention.rate / 2 }} > + {/* eslint-disable-next-line react/style-prop-object */} diff --git a/packages/pl-fe/src/features/auth-login/components/consumers-list.tsx b/packages/pl-fe/src/features/auth-login/components/consumers-list.tsx index de576a3b4..222378816 100644 --- a/packages/pl-fe/src/features/auth-login/components/consumers-list.tsx +++ b/packages/pl-fe/src/features/auth-login/components/consumers-list.tsx @@ -23,7 +23,7 @@ const ConsumersList: React.FC = () => { {providers.map((provider) => ( - + ))} diff --git a/packages/pl-fe/src/modals/compare-history-modal.tsx b/packages/pl-fe/src/modals/compare-history-modal.tsx index 342d8db34..54a84f163 100644 --- a/packages/pl-fe/src/modals/compare-history-modal.tsx +++ b/packages/pl-fe/src/modals/compare-history-modal.tsx @@ -51,7 +51,7 @@ const CompareHistoryModal: React.FC = const poll = typeof version.poll !== 'string' && version.poll; return ( - + {version.spoiler_text.length > 0 && ( <> @@ -67,11 +67,14 @@ const CompareHistoryModal: React.FC =
{poll.options.map((option: any) => ( - + diff --git a/packages/pl-fe/src/pages/statuses/event-information.tsx b/packages/pl-fe/src/pages/statuses/event-information.tsx index a1097c910..ce5d33653 100644 --- a/packages/pl-fe/src/pages/statuses/event-information.tsx +++ b/packages/pl-fe/src/pages/statuses/event-information.tsx @@ -167,7 +167,7 @@ const EventInformationPage: React.FC = () => { {status.event.links.map((link) => ( - + = ({ slug }) => { {pageLocales?.map((locale) => (
  • - { setLocale(locale); }} > {/* @ts-expect-error */} {languages[locale] ?? locale} - +
  • ))} diff --git a/packages/pl-fe/src/utils/numbers.tsx b/packages/pl-fe/src/utils/numbers.tsx index 0d4cc35f7..d5dda705b 100644 --- a/packages/pl-fe/src/utils/numbers.tsx +++ b/packages/pl-fe/src/utils/numbers.tsx @@ -39,6 +39,7 @@ const shortNumberFormat = (number: any, max?: number): React.ReactNode => { minimumFractionDigits={0} maximumSignificantDigits={3} numberingSystem='latn' + // eslint-disable-next-line react/style-prop-object style='decimal' /> {factor}