diff --git a/.prettierrc.js b/.prettierrc.js index bac2dd3aee..5531e1b7ff 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,5 +1,8 @@ module.exports = { ...require('@offchainlabs/prettier-config'), + // The shared config sets importOrder* options but doesn't declare the plugin that + // provides them; Prettier 3 no longer auto-loads plugins, so register it here. + plugins: ['@trivago/prettier-plugin-sort-imports'], // override here overrides: [ { @@ -8,6 +11,10 @@ module.exports = { parser: 'mdx', printWidth: 9999, proseWrap: 'preserve', + // Keep the import sorter out of fenced code blocks: doc examples mirror + // upstream tutorials, where import order and inline comments are + // deliberate. Embedded code is still formatted, just not reordered. + plugins: [], }, }, ], diff --git a/docs/build-decentralized-apps/01-quickstart-solidity-remix.mdx b/docs/build-decentralized-apps/01-quickstart-solidity-remix.mdx index 3ff476aa40..5c0ad5f55a 100644 --- a/docs/build-decentralized-apps/01-quickstart-solidity-remix.mdx +++ b/docs/build-decentralized-apps/01-quickstart-solidity-remix.mdx @@ -785,8 +785,13 @@ If you have any questions or feedback, reach out to us on [Discord](https://disc For a list of learning resources, repositories, and useful information about Solidity, see the [Solidity references](/arbitrum-essentials/reference/solidity-references.mdx) page. [^1]: The vending machine example was inspired by [Ethereum.org's "Introduction to Smart Contracts"](https://ethereum.org/en/developers/docs/smart-contracts/), which was inspired by [Nick Szabo's "From vending machines to smart contracts"](http://unenumerated.blogspot.com/2006/12/from-vending-machines-to-smart.html). + [^2]: Although application front-ends are usually hosted by centralized services, smart contracts allow the underlying logic and data to be partially or fully decentralized. These smart contracts are hosted and executed by Ethereum's public, decentralized network of nodes. Arbitrum has its own network of nodes that use advanced cryptography techniques to "batch process" Ethereum transactions and then submit them to the Ethereum parent chain, which significantly reduces the cost of using Ethereum. All without requiring developers to compromise on security or decentralization. + [^3]: There are multiple types of Ethereum nodes. The ones that earn **ETH** for processing and validating transactions are called _validators_. See [Nodes and Networks](https://docs.prylabs.network/docs/concepts/nodes-networks) for a beginner-friendly introduction to Ethereum's node types. + [^4]: When our `VendingMachine` contract is deployed to Ethereum, it'll be hosted by Ethereum's decentralized network of nodes. Generally speaking, we won't be able to modify the contract's code after it's deployed. + [^5]: To learn more about how Ethereum wallets work, see [Ethereum.org's introduction to Ethereum wallets](https://ethereum.org/en/wallets/). + [^6]: Visit the [Gentle Introduction to Arbitrum](../get-started/arbitrum-introduction.mdx) for a beginner-friendly introduction to Arbitrum's Rollup protocol. diff --git a/docs/launch-arbitrum-chain/chain-config/sequencer/timeboost.mdx b/docs/launch-arbitrum-chain/chain-config/sequencer/timeboost.mdx index 4b612ebec9..b88f385771 100644 --- a/docs/launch-arbitrum-chain/chain-config/sequencer/timeboost.mdx +++ b/docs/launch-arbitrum-chain/chain-config/sequencer/timeboost.mdx @@ -24,8 +24,8 @@ AEP fees will apply here in the future. - **Status:** Alpha—not formally supported yet for deployments on Arbitrum chains - **Arbitrum Sepolia**: Feb 12, 2025 -- **Arbitrum One**: April 17, 2025{' '} -- **Arbitrum Nova**: April 17, 2025{' '} +- **Arbitrum One**: April 17, 2025 +- **Arbitrum Nova**: April 17, 2025 ## tldr; diff --git a/docs/partials/_troubleshooting-bridging-partial.mdx b/docs/partials/_troubleshooting-bridging-partial.mdx index ca67a5402a..6c53b12cdf 100644 --- a/docs/partials/_troubleshooting-bridging-partial.mdx +++ b/docs/partials/_troubleshooting-bridging-partial.mdx @@ -14,7 +14,7 @@ In any case, the Bridge and your wallet will guide you through the process, show ### How long does it take before I receive my funds when I initiate a withdrawal from Arbitrum chains (One and Nova)? -Using the official Arbitrum Bridge, the process will take *roughly* one week. However, some users opt to use third-party fast bridges, which often bypass this delay (remember that these bridges are created and maintained by third parties, so please DYOR!). +Using the official Arbitrum Bridge, the process will take _roughly_ one week. However, some users opt to use third-party fast bridges, which often bypass this delay (remember that these bridges are created and maintained by third parties, so please DYOR!). There's some variability in the exact wall-clock time of the dispute window, plus there's some expected additional "padding" time on both ends (no more than about an hour, typically). diff --git a/docs/partials/_troubleshooting-building-partial.mdx b/docs/partials/_troubleshooting-building-partial.mdx index bdcae803f6..4a02c6fcd6 100644 --- a/docs/partials/_troubleshooting-building-partial.mdx +++ b/docs/partials/_troubleshooting-building-partial.mdx @@ -49,7 +49,7 @@ The method you should (almost certainly) use is `Inbox.createRetryableTicket`. There are two differences between `createRetryableTicket` and `unsafeCreateRetryableTicket`: 1. Method `createRetryableTicket` will check that provided L1 callvalue is sufficient to cover the costs of creating and executing the retryable ticket (at the specified parameters) and otherwise [revert directly at L1](https://docs.arbitrum.io/for-devs/troubleshooting-building#i-tried-to-create-a-retryable-ticket-but-the-transaction-reverted-on-l1--how-can-i-debug-the-issue). `unsafeCreateRetryableTicket`, in contrast, will allow a retryable ticket to be created that is guaranteed to revert on L2. -2. Method `createRetryableTicket` will check if either the provided `excessFeeRefundAddress` or the `callValueRefundAddress` are contracts on L1; if they are, to prevent the situation where refunds are *guaranteed* to be irrecoverable on L2, it will convert them to their [address alias](https://developer.arbitrum.io/arbos/l1-to-l2-messaging#address-aliasing), providing a *potential* path for fund recovery. `unsafeCreateRetryableTicket` will allow the creation of a retryable ticket with refund addresses that are L1 contracts; since no L1 contract can alias to an address that is also itself an L1 contract, refunds to these addresses on L2 will be irrecoverable. +2. Method `createRetryableTicket` will check if either the provided `excessFeeRefundAddress` or the `callValueRefundAddress` are contracts on L1; if they are, to prevent the situation where refunds are _guaranteed_ to be irrecoverable on L2, it will convert them to their [address alias](https://developer.arbitrum.io/arbos/l1-to-l2-messaging#address-aliasing), providing a _potential_ path for fund recovery. `unsafeCreateRetryableTicket` will allow the creation of a retryable ticket with refund addresses that are L1 contracts; since no L1 contract can alias to an address that is also itself an L1 contract, refunds to these addresses on L2 will be irrecoverable. (Astute observers may note a third ticket creation method, `createRetryableTicketNoRefundAliasRewrite`; this is included only for backwards compatibility, but should be considered deprecated in favor of `unsafeCreateRetryableTicket`) ### Why do I get "custom tx type" errors when I use hardhat? diff --git a/docs/partials/_troubleshooting-users-partial.mdx b/docs/partials/_troubleshooting-users-partial.mdx index 8e9e1ebb35..e79b33747a 100644 --- a/docs/partials/_troubleshooting-users-partial.mdx +++ b/docs/partials/_troubleshooting-users-partial.mdx @@ -24,7 +24,7 @@ Arbitrum Rollup is an Optimistic Rollup protocol; it is trustless and permission By contrast, Arbitrum AnyTrust introduces a trust assumption in exchange for lower fees; data availability is managed by a Data Availability Committee (DAC), a fixed, permissioned set of entities. We introduce some threshold, `K`, with the assumption that at least `K` members of the committee are honest. For simplicity, we'll hereby assume a committee of size 20 and a `K` value of 2: -If 19 out of the 20 committee members *and* the Sequencer are malicious and colluding together, they can break the chain's safety (and, e.g., steal users' funds); this is the new trust assumption. +If 19 out of the 20 committee members _and_ the Sequencer are malicious and colluding together, they can break the chain's safety (and, e.g., steal users' funds); this is the new trust assumption. If anywhere between 2 and 18 of the committee members are well behaved, the AnyTrust chain operates in "Rollup mode"; i.e., data gets posted on L1. @@ -48,7 +48,7 @@ Nope; once an Arbitrum transaction is included on L1, there is no way it can be ### ...okay but if there's a dispute, will my transaction get delayed? -The only thing that a dispute can add delay to is the confirmation of L2-to-L1 messages. All other transactions continue to be processed, even while a dispute is still ongoing. (Additionally, in practice, most L2-to-L1 messages represent withdrawals of fungible assets; these can be trustlessly completed *even during a dispute* via trustless fast "liquidity exit" applications. See [L2-to-L1 Messages](https://developer.arbitrum.io/arbos/l2-to-l1-messaging)). +The only thing that a dispute can add delay to is the confirmation of L2-to-L1 messages. All other transactions continue to be processed, even while a dispute is still ongoing. (Additionally, in practice, most L2-to-L1 messages represent withdrawals of fungible assets; these can be trustlessly completed _even during a dispute_ via trustless fast "liquidity exit" applications. See [L2-to-L1 Messages](https://developer.arbitrum.io/arbos/l2-to-l1-messaging)). ### Are "Sequencers" the same entities as "Validators"? Can a centralized Sequencer act maliciously (e.g., steal all my money)? @@ -56,15 +56,15 @@ No and no! An Arbitrum Chain's Sequencer(s) and Validators and completely distinct entities, with their own distinct roles. -The [Sequencer](https://developer.arbitrum.io/sequencer) is the entity granted specific privileges over ordering transactions; once the Sequencer commits to an ordering (by posting a batch on Ethereum), it has no say over what happens next (i.e., execution). A malicious/faulty Sequencer can do things like reordering transactions or *temporarily* delaying a transaction's inclusion — things which could be, to be sure, annoying and bad — but can do nothing to compromise the chain's safety. +The [Sequencer](https://developer.arbitrum.io/sequencer) is the entity granted specific privileges over ordering transactions; once the Sequencer commits to an ordering (by posting a batch on Ethereum), it has no say over what happens next (i.e., execution). A malicious/faulty Sequencer can do things like reordering transactions or _temporarily_ delaying a transaction's inclusion — things which could be, to be sure, annoying and bad — but can do nothing to compromise the chain's safety. -The *Validators* are the ones responsible for the safety of the chain; i.e., making bonded claims about the chain state, disputing each other, etc. +The _Validators_ are the ones responsible for the safety of the chain; i.e., making bonded claims about the chain state, disputing each other, etc. -Currently, on Arbitrum One, the Sequencer is a centralized entity maintained by Offchain Labs. Eventually, we expect the single Sequencer to be replaced by a distributed committee of Sequencers who come to consensus on transaction ordering. This upgrade will be an improvement; we don't want you to have to trust us not to reorder your transactions. However, it also isn't *strictly* necessary for Arbitrum One to achieve its most fundamental properties. +Currently, on Arbitrum One, the Sequencer is a centralized entity maintained by Offchain Labs. Eventually, we expect the single Sequencer to be replaced by a distributed committee of Sequencers who come to consensus on transaction ordering. This upgrade will be an improvement; we don't want you to have to trust us not to reorder your transactions. However, it also isn't _strictly_ necessary for Arbitrum One to achieve its most fundamental properties. In other words: **_An Arbitrum Rollup chain with a centralized Sequencer could theoretically still be trustless!_** -Which is to say — the more important thing than decentralizing the Sequencer, i.e., the thing you ought to care more about — is decentralizing the *Validators*. +Which is to say — the more important thing than decentralizing the Sequencer, i.e., the thing you ought to care more about — is decentralizing the _Validators_. Arbitrum One's validator set is currently allowlisted; over time, we expect [governance](https://docs.arbitrum.foundation/) to expand the allowlist and eventually be removed entirely. diff --git a/docusaurus.config.js b/docusaurus.config.js index de110fdf50..2123d55ee8 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,13 +1,15 @@ +import rehypeKatex from 'rehype-katex'; +import remarkMath from 'remark-math'; + +import { inkeepBaseSettings, inkeepExampleQuestions, inkeepModalSettings } from './inkeep.js'; +import { redirects } from './redirects.config.js'; + // @ts-nocheck // Note: type annotations allow type checking and IDEs autocompletion require('dotenv').config(); const markdownPreprocessor = require('./scripts/markdown-preprocessor'); const { themes: prismThemes } = require('prism-react-renderer'); -import remarkMath from 'remark-math'; -import rehypeKatex from 'rehype-katex'; -import { inkeepBaseSettings, inkeepModalSettings, inkeepExampleQuestions } from './inkeep.js'; -import { redirects } from './redirects.config.js'; // Routes that exist in the Docusaurus build but aren't standalone, indexable pages. // Shared between the sitemap and llms.txt so both indexes stay in sync. diff --git a/package.json b/package.json index fd08b089ea..b4c6f85f16 100644 --- a/package.json +++ b/package.json @@ -95,10 +95,11 @@ "@offchainlabs/notion-docs-generator": "0.1.2", "@offchainlabs/prettier-config": "0.3.0", "@signalwire/docusaurus-plugin-llms-txt": "^1.2.2", + "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@tsconfig/docusaurus": "^2.0.9", "@types/d3": "^7.4.3", "@types/node": "^22.20.1", - "@types/prettier": "2.7.3", + "@types/prettier": "3.0.0", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.0", "@types/semver": "^7.7.1", @@ -110,7 +111,7 @@ "husky": "^9.1.7", "markdown-link-extractor": "^4.0.3", "markdownlint-cli": "^0.49.1", - "prettier": "^2.8.3", + "prettier": "^3.9.6", "remark-mdx": "^3.1.1", "remark-parse": "^11.0.0", "semver": "^7.8.5", diff --git a/scripts/lib/generated-partial.ts b/scripts/lib/generated-partial.ts index 67a740b054..a8e078565a 100644 --- a/scripts/lib/generated-partial.ts +++ b/scripts/lib/generated-partial.ts @@ -4,7 +4,6 @@ * deterministic Prettier-formatted output, a `--check` mode for CI, and uniform * success/failure handling. */ - import fs from 'fs'; import path from 'path'; import prettier from 'prettier'; @@ -36,8 +35,8 @@ export async function writeOrCheck( { check }: { check: boolean }, ): Promise { const config = await prettier.resolveConfig(filePath); - // prettier v2's format() is synchronous; resolveConfig() is not. - const formatted = prettier.format(content, { ...config, filepath: filePath }); + // Both resolveConfig() and, as of prettier v3, format() are async. + const formatted = await prettier.format(content, { ...config, filepath: filePath }); if (check) { const current = fs.existsSync(filePath) ? fs.readFileSync(filePath, 'utf-8') : ''; diff --git a/src/components/AddressExplorerLink.tsx b/src/components/AddressExplorerLink.tsx index 3e9278e383..9fb7f29a75 100644 --- a/src/components/AddressExplorerLink.tsx +++ b/src/components/AddressExplorerLink.tsx @@ -1,5 +1,5 @@ -import React from 'react'; import { getAddress, isAddress } from '@ethersproject/address'; +import React from 'react'; type ChainID = 1 | 42161 | 42170 | 8453 | 11155111 | 421614 | 84532; diff --git a/src/components/Cards/Card.js b/src/components/Cards/Card.js index 144a63d9d2..7edc35dde5 100644 --- a/src/components/Cards/Card.js +++ b/src/components/Cards/Card.js @@ -1,5 +1,6 @@ -import React from 'react'; import Link from '@docusaurus/Link'; +import React from 'react'; + import styles from './Card.module.css'; function Card({ title, description, to, href, target }) { diff --git a/src/components/CustomDetails/index.tsx b/src/components/CustomDetails/index.tsx index 549abbb685..22b75892f2 100644 --- a/src/components/CustomDetails/index.tsx +++ b/src/components/CustomDetails/index.tsx @@ -1,5 +1,6 @@ -import React from 'react'; import Details from '@theme/Details'; +import React from 'react'; + import styles from './styles.module.css'; interface Props { diff --git a/src/components/FAQStructuredData/index.js b/src/components/FAQStructuredData/index.js index 895fee5436..55bfbd061c 100644 --- a/src/components/FAQStructuredData/index.js +++ b/src/components/FAQStructuredData/index.js @@ -4,9 +4,8 @@ * @typedef { import('./types').FAQStructuredData } FAQStructuredData - Schema.org structured data format for FAQs * @typedef { import('./types').FAQ } FAQ - Individual FAQ item with question, answer and key */ - -import React from 'react'; import { useLocation } from '@docusaurus/router'; +import React from 'react'; /** * A component that generates and renders Schema.org FAQ structured data for SEO diff --git a/src/components/FloatingHoverModal/index.js b/src/components/FloatingHoverModal/index.js index 39edacaf39..9dec118ab8 100644 --- a/src/components/FloatingHoverModal/index.js +++ b/src/components/FloatingHoverModal/index.js @@ -1,19 +1,20 @@ -import React, { useState, cloneElement } from 'react'; import { - useFloating, - useHover, - useFocus, - useDismiss, - useRole, - useInteractions, FloatingPortal, - offset, + autoUpdate, flip, + offset, shift, - autoUpdate, + useDismiss, + useFloating, + useFocus, + useHover, + useInteractions, useMergeRefs, + useRole, } from '@floating-ui/react'; import { MDXProvider } from '@mdx-js/react'; +import React, { cloneElement, useState } from 'react'; + // Remove Link import - we'll use a span instead to avoid Docusaurus broken link detection (Docusaurus's build will fail if a points to a non-existent page) import './styles.css'; diff --git a/src/components/GenerateTroubleshootingReportWidget.js b/src/components/GenerateTroubleshootingReportWidget.js index 8490afee01..3e6a027f04 100644 --- a/src/components/GenerateTroubleshootingReportWidget.js +++ b/src/components/GenerateTroubleshootingReportWidget.js @@ -1,5 +1,5 @@ -import React from 'react'; import BrowserOnly from '@docusaurus/BrowserOnly'; +import React from 'react'; export const GenerateTroubleshootingReportWidget = () => { let appendConfigDetailsToOutput = function (output) { diff --git a/src/components/HeaderBadges/index.tsx b/src/components/HeaderBadges/index.tsx index 92aedce7ac..2be3032699 100644 --- a/src/components/HeaderBadges/index.tsx +++ b/src/components/HeaderBadges/index.tsx @@ -1,5 +1,5 @@ -import React from 'react'; import BrowserOnly from '@docusaurus/BrowserOnly'; +import React from 'react'; export const HeaderBadges = () => { return ( diff --git a/src/components/ImageZoom/index.tsx b/src/components/ImageZoom/index.tsx index 0e248f64dc..ac59c00773 100644 --- a/src/components/ImageZoom/index.tsx +++ b/src/components/ImageZoom/index.tsx @@ -3,8 +3,7 @@ * * A React component that adds a click-to-zoom feature to images with smooth animations. */ - -import React, { useState, useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import { createPortal } from 'react-dom'; interface ImageZoomProps { diff --git a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/ControlBar.tsx b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/ControlBar.tsx index 958be12d00..ffee49ab66 100644 --- a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/ControlBar.tsx +++ b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/ControlBar.tsx @@ -1,4 +1,5 @@ import React from 'react'; + import { SPEED_OPTIONS } from './constants'; interface ControlBarProps { diff --git a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/D3EdgeTree.tsx b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/D3EdgeTree.tsx index cf767ecf8f..08bac73169 100644 --- a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/D3EdgeTree.tsx +++ b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/D3EdgeTree.tsx @@ -1,6 +1,7 @@ -import React, { useRef, useEffect, useCallback } from 'react'; -import type { LevelGroup, AppliedState, LevelMeta, TreeNode } from './types'; -import { buildTreeData, resolveLevelType, formatRangeText, shortHex } from './edgeChallengeLogic'; +import React, { useCallback, useEffect, useRef } from 'react'; + +import { buildTreeData, formatRangeText, resolveLevelType, shortHex } from './edgeChallengeLogic'; +import type { AppliedState, LevelGroup, LevelMeta, TreeNode } from './types'; interface D3EdgeTreeProps { group: LevelGroup; diff --git a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/EdgeChallengeFlow.tsx b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/EdgeChallengeFlow.tsx index 5e7f87e051..b45b132df7 100644 --- a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/EdgeChallengeFlow.tsx +++ b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/EdgeChallengeFlow.tsx @@ -1,15 +1,16 @@ -import React, { useState, useEffect } from 'react'; import BrowserOnly from '@docusaurus/BrowserOnly'; // @ts-ignore – module alias resolved by Docusaurus at build time import useBaseUrl from '@docusaurus/useBaseUrl'; -import type { EdgeChallengeData } from './types'; -import { useEdgeChallengeState } from './useEdgeChallengeState'; +import React, { useEffect, useState } from 'react'; + import ControlBar from './ControlBar'; +import D3EdgeTree from './D3EdgeTree'; +import EventTimeline from './EventTimeline'; import FlowSteps from './FlowSteps'; import NodeDetailsPanel from './NodeDetailsPanel'; -import EventTimeline from './EventTimeline'; -import D3EdgeTree from './D3EdgeTree'; import { ARBISCAN_BASE_URL } from './constants'; +import type { EdgeChallengeData } from './types'; +import { useEdgeChallengeState } from './useEdgeChallengeState'; function EdgeChallengeFlowInner() { const [data, setData] = useState(null); diff --git a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/EventTimeline.tsx b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/EventTimeline.tsx index 8831179dbf..a5c1cf0f3b 100644 --- a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/EventTimeline.tsx +++ b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/EventTimeline.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useRef } from 'react'; -import type { DecodedEvent, LevelMeta, EdgeAddedMeta } from './types'; + import { formatEvent } from './edgeChallengeLogic'; +import type { DecodedEvent, EdgeAddedMeta, LevelMeta } from './types'; interface EventTimelineProps { appliedEvents: DecodedEvent[]; diff --git a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/FlowSteps.tsx b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/FlowSteps.tsx index 7f48710846..af9dfd9864 100644 --- a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/FlowSteps.tsx +++ b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/FlowSteps.tsx @@ -1,4 +1,5 @@ import React from 'react'; + import { FLOW_STEPS } from './constants'; interface FlowStepsProps { diff --git a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/NodeDetailsPanel.tsx b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/NodeDetailsPanel.tsx index 5e39fda699..23e56634e9 100644 --- a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/NodeDetailsPanel.tsx +++ b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/NodeDetailsPanel.tsx @@ -1,7 +1,8 @@ import React, { useCallback } from 'react'; -import type { RangeNode, AppliedState, LevelMeta, EdgeAddedMeta } from './types'; -import { shortHex, normalizeHex, formatRangeText, resolveLevelType } from './edgeChallengeLogic'; + import { ARBISCAN_BASE_URL } from './constants'; +import { formatRangeText, normalizeHex, resolveLevelType, shortHex } from './edgeChallengeLogic'; +import type { AppliedState, EdgeAddedMeta, LevelMeta, RangeNode } from './types'; interface NodeDetailsPanelProps { selectedNodeKey: string | null; diff --git a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/edgeChallengeLogic.ts b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/edgeChallengeLogic.ts index 0183a7e7d0..fa457a7116 100644 --- a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/edgeChallengeLogic.ts +++ b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/edgeChallengeLogic.ts @@ -1,12 +1,12 @@ import type { + AppliedState, DecodedEvent, EdgeAddedMeta, EdgeState, - AppliedState, - RangeNode, - RangeIndex, - LevelMeta, LevelGroup, + LevelMeta, + RangeIndex, + RangeNode, TreeNode, } from './types'; @@ -228,7 +228,7 @@ export function buildRangeIndex( if (!node) { node = { rangeKey, - level: Number.isFinite(added?.level) ? added!.level : edge.level ?? '-', + level: Number.isFinite(added?.level) ? added!.level : (edge.level ?? '-'), startHeight: derivedStart ?? edge.startHeight ?? null, endHeight: derivedEnd ?? edge.endHeight ?? null, length: added?.length ?? derivedLength ?? edge.length ?? null, @@ -511,7 +511,7 @@ export function applyEvents( const edge: EdgeState = { id: ev.edgeId, parentId: inferredParent || existing?.parentId || null, - level: Number.isFinite(ev.level) ? ev.level : existing?.level ?? '-', + level: Number.isFinite(ev.level) ? ev.level : (existing?.level ?? '-'), length: ev.length ?? existing?.length ?? null, hasRival: ev.hasRival ?? existing?.hasRival ?? false, isLayerZero: ev.isLayerZero ?? existing?.isLayerZero ?? false, diff --git a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/useEdgeChallengeState.ts b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/useEdgeChallengeState.ts index 18f13d502b..4994f9f7ac 100644 --- a/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/useEdgeChallengeState.ts +++ b/src/components/InteractiveDiagrams/Bold/EdgeChallengeFlow/useEdgeChallengeState.ts @@ -1,24 +1,25 @@ -import { useState, useRef, useCallback, useMemo, useEffect } from 'react'; -import type { - DecodedEvent, - EdgeAddedMeta, - AppliedState, - RangeIndex, - LevelMeta, - LevelGroup, -} from './types'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; + +import { DEFAULT_INTERVAL_MS } from './constants'; import { - buildParentMap, + applyEvents, buildChildOrderMap, - recomputeDerivedRanges, - computeLevelMeta, - buildRangeIndex, buildLevelGroups, - applyEvents, + buildParentMap, + buildRangeIndex, + computeLevelMeta, computeMilestones, normalizeHex, + recomputeDerivedRanges, } from './edgeChallengeLogic'; -import { DEFAULT_INTERVAL_MS } from './constants'; +import type { + AppliedState, + DecodedEvent, + EdgeAddedMeta, + LevelGroup, + LevelMeta, + RangeIndex, +} from './types'; export interface EdgeChallengeStateResult { currentIndex: number; diff --git a/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/Modal.tsx b/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/Modal.tsx index 655edbe0f6..ce69b158bb 100644 --- a/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/Modal.tsx +++ b/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/Modal.tsx @@ -1,20 +1,21 @@ -import React, { useState, useEffect } from 'react'; -import { useTransition, animated } from '@react-spring/web'; +import { useColorMode } from '@docusaurus/theme-common'; +import { MDXProvider } from '@mdx-js/react'; import * as Dialog from '@radix-ui/react-dialog'; +import { animated, useTransition } from '@react-spring/web'; +import type { MDXComponents } from 'mdx/types'; +import React, { useEffect, useState } from 'react'; +import { createPortal } from 'react-dom'; +import { PrismLight as SyntaxHighlighter } from 'react-syntax-highlighter'; +import javascript from 'react-syntax-highlighter/dist/cjs/languages/prism/javascript'; +import solidity from 'react-syntax-highlighter/dist/cjs/languages/prism/solidity'; +import { oneDark, oneLight } from 'react-syntax-highlighter/dist/cjs/styles/prism'; + +import { NumberComponent } from './NumberComponent'; import step1Content from './modal-centralized-auction-step-1.mdx'; import step2Content from './modal-centralized-auction-step-2.mdx'; import step3Content from './modal-centralized-auction-step-3.mdx'; import step4Content from './modal-centralized-auction-step-4.mdx'; import step5Content from './modal-centralized-auction-step-5.mdx'; -import { createPortal } from 'react-dom'; -import { NumberComponent } from './NumberComponent'; -import { MDXProvider } from '@mdx-js/react'; -import type { MDXComponents } from 'mdx/types'; -import { PrismLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { oneDark, oneLight } from 'react-syntax-highlighter/dist/cjs/styles/prism'; -import javascript from 'react-syntax-highlighter/dist/cjs/languages/prism/javascript'; -import solidity from 'react-syntax-highlighter/dist/cjs/languages/prism/solidity'; -import { useColorMode } from '@docusaurus/theme-common'; // Define the CodeBlock interface interface CodeBlock { diff --git a/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/NumberComponent.d.ts b/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/NumberComponent.d.ts index 9e670f0fb3..ee313a17ed 100644 --- a/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/NumberComponent.d.ts +++ b/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/NumberComponent.d.ts @@ -1,6 +1,6 @@ /** Type declarations for NumberComponent.jsx (legacy untyped JSX module). */ - import type { FC } from 'react'; + import type { NumberComponentProps } from './types'; export declare const NumberComponent: FC; diff --git a/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/index.d.ts b/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/index.d.ts index b3568ef992..7055ffbfdb 100644 --- a/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/index.d.ts +++ b/src/components/InteractiveDiagrams/Timeboost/CentralizedAuction/index.d.ts @@ -1,5 +1,4 @@ /** Type declarations for index.jsx (legacy untyped JSX module). */ - import type { FC, SVGProps } from 'react'; declare const CentralizedAuction: FC; diff --git a/src/components/InteractiveDiagrams/index.tsx b/src/components/InteractiveDiagrams/index.tsx index 34d7e370a4..515cdef7e7 100644 --- a/src/components/InteractiveDiagrams/index.tsx +++ b/src/components/InteractiveDiagrams/index.tsx @@ -1,6 +1,7 @@ import React from 'react'; -import CentralizedAuction from './Timeboost/CentralizedAuction'; + import EdgeChallengeFlow from './Bold/EdgeChallengeFlow'; +import CentralizedAuction from './Timeboost/CentralizedAuction'; interface InteractiveDiagramsProps { type: string; diff --git a/src/components/MultiDimensionalContentWidget.js b/src/components/MultiDimensionalContentWidget.js index 3ae518ea84..a842eb2bc6 100644 --- a/src/components/MultiDimensionalContentWidget.js +++ b/src/components/MultiDimensionalContentWidget.js @@ -1,5 +1,5 @@ -import React from 'react'; import BrowserOnly from '@docusaurus/BrowserOnly'; +import React from 'react'; export const MultiDimensionalContentWidget = () => { let getAllTabElements = function () { diff --git a/src/components/PostHogProvider.tsx b/src/components/PostHogProvider.tsx index 4871455d20..6cf78f4a6b 100644 --- a/src/components/PostHogProvider.tsx +++ b/src/components/PostHogProvider.tsx @@ -1,6 +1,6 @@ -import React from 'react'; -import { PostHogProvider as BasePostHogProvider } from 'posthog-js/react'; import type { PostHogConfig } from 'posthog-js'; +import { PostHogProvider as BasePostHogProvider } from 'posthog-js/react'; +import React from 'react'; const options: Partial = { api_host: 'https://app.posthog.com', diff --git a/src/components/Quicklooks/index.tsx b/src/components/Quicklooks/index.tsx index 4b12f6b893..78779ee86f 100644 --- a/src/components/Quicklooks/index.tsx +++ b/src/components/Quicklooks/index.tsx @@ -1,9 +1,10 @@ -import React, { useEffect } from 'react'; -import useIsBrowser from '@docusaurus/useIsBrowser'; import { useLocation } from '@docusaurus/router'; +import useIsBrowser from '@docusaurus/useIsBrowser'; +import React, { useEffect } from 'react'; import Tippy from 'tippy.js'; import 'tippy.js/dist/tippy.css'; import 'tippy.js/themes/light-border.css'; + import glossary from '../../../static/glossary.json'; export const Quicklooks = () => { diff --git a/src/components/VanillaAdmonition/index.tsx b/src/components/VanillaAdmonition/index.tsx index d1cb6f7b69..2684a5a7f3 100644 --- a/src/components/VanillaAdmonition/index.tsx +++ b/src/components/VanillaAdmonition/index.tsx @@ -1,4 +1,5 @@ import React, { ReactNode } from 'react'; + import { DangerIcon, InfoIcon, NoteIcon, TipIcon, WarningIcon } from './Icons'; import styles from './styles.module.css'; diff --git a/src/components/VendingMachine/VendingMachine.tsx b/src/components/VendingMachine/VendingMachine.tsx index 5c88e25178..224cf97d62 100644 --- a/src/components/VendingMachine/VendingMachine.tsx +++ b/src/components/VendingMachine/VendingMachine.tsx @@ -1,5 +1,6 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; import { ethers } from 'ethers'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; + import VendingMachineContract from './VendingMachine.sol/VendingMachine.json'; function truncateAddress(text: string) { diff --git a/src/css/partials/_misc-classes.scss b/src/css/partials/_misc-classes.scss index 0a7272709b..e9aadf5645 100644 --- a/src/css/partials/_misc-classes.scss +++ b/src/css/partials/_misc-classes.scss @@ -219,7 +219,9 @@ pre[class*='language-'] { &:hover { color: white; transform: translateY(-1px); - box-shadow: var(--shadow-lg), 0 0 20px hsla(188, 100%, 53%, 0.3); + box-shadow: + var(--shadow-lg), + 0 0 20px hsla(188, 100%, 53%, 0.3); &::before { opacity: 1; diff --git a/src/css/partials/_modal.scss b/src/css/partials/_modal.scss index 9066b72fc7..1d147351b4 100644 --- a/src/css/partials/_modal.scss +++ b/src/css/partials/_modal.scss @@ -22,7 +22,9 @@ display: flex; flex-direction: column; color: var(--ifm-font-color-base); - box-shadow: 0 8px 32px rgba(1, 107, 229, 0.15), 0 4px 12px rgba(0, 0, 0, 0.1); + box-shadow: + 0 8px 32px rgba(1, 107, 229, 0.15), + 0 4px 12px rgba(0, 0, 0, 0.1); overflow: hidden; will-change: transform, opacity; diff --git a/src/css/partials/_troubleshooting-report.scss b/src/css/partials/_troubleshooting-report.scss index 27d5533fac..bbcabd35cd 100644 --- a/src/css/partials/_troubleshooting-report.scss +++ b/src/css/partials/_troubleshooting-report.scss @@ -25,8 +25,8 @@ > textarea { @include invisible-horizontal-scroll; padding: 15px; - font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', - monospace; + font-family: + SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; background-color: #f6f6f6; color: #444 !important; text-align: left; @@ -73,8 +73,8 @@ min-width: 100%; font-size: 12px; padding: 20px; - font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', - monospace; + font-family: + SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; background-color: #292929; color: white; text-align: left; diff --git a/src/css/partials/_typography.scss b/src/css/partials/_typography.scss index 86baaff1aa..8f30164fac 100644 --- a/src/css/partials/_typography.scss +++ b/src/css/partials/_typography.scss @@ -27,7 +27,10 @@ html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; - font-feature-settings: 'kern' 1, 'liga' 1, 'calt' 1; + font-feature-settings: + 'kern' 1, + 'liga' 1, + 'calt' 1; } // ======================================== @@ -61,7 +64,10 @@ article .markdown { font-size: 1rem; line-height: 1.75; max-width: none; - font-feature-settings: 'kern' 1, 'liga' 1, 'calt' 1; + font-feature-settings: + 'kern' 1, + 'liga' 1, + 'calt' 1; // ======================================== // Headings @@ -73,7 +79,10 @@ article .markdown { h4, h5, h6 { - font-feature-settings: 'kern' 1, 'liga' 1, 'ss01' 1; + font-feature-settings: + 'kern' 1, + 'liga' 1, + 'ss01' 1; text-wrap: balance; scroll-margin-top: 80px; } @@ -233,7 +242,8 @@ article .markdown { text-underline-offset: 4px; text-decoration-color: var(--arbitrum-color-primary); text-decoration-thickness: 2px; - transition: text-decoration-color var(--arbitrum-transition-normal), + transition: + text-decoration-color var(--arbitrum-transition-normal), color var(--arbitrum-transition-normal); &:hover { diff --git a/src/css/partials/_variables.scss b/src/css/partials/_variables.scss index 875a6234fe..40787c7152 100644 --- a/src/css/partials/_variables.scss +++ b/src/css/partials/_variables.scss @@ -81,10 +81,11 @@ --arbitrum-font-size: 16px; --arbitrum-border-radius-sm: 0; --arbitrum-border-radius: 0; - --arbitrum-font-family: 'Aeonik', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, - sans-serif; - --arbitrum-mono-font: 'Aeonik Fono', ui-monospace, 'SF Mono', 'Cascadia Code', 'Segoe UI Mono', - Menlo, Monaco, Consolas, monospace; + --arbitrum-font-family: + 'Aeonik', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; + --arbitrum-mono-font: + 'Aeonik Fono', ui-monospace, 'SF Mono', 'Cascadia Code', 'Segoe UI Mono', Menlo, Monaco, + Consolas, monospace; // ======================================== // Infima/Docusaurus Overrides @@ -108,14 +109,15 @@ --ifm-pre-padding: 1rem; --ifm-global-radius: 0; --ifm-navbar-item-padding-horizontal: 0.875rem; - --ifm-font-family-base: 'Aeonik', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, - sans-serif; - --ifm-heading-font-family: 'Aeonik', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, - sans-serif; - --ifm-font-family-monospace: 'Aeonik Fono', ui-monospace, 'SF Mono', 'Cascadia Code', - 'Segoe UI Mono', Menlo, Monaco, Consolas, monospace; - --ifm-alert-font-family: 'Aeonik', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, - sans-serif; + --ifm-font-family-base: + 'Aeonik', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; + --ifm-heading-font-family: + 'Aeonik', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; + --ifm-font-family-monospace: + 'Aeonik Fono', ui-monospace, 'SF Mono', 'Cascadia Code', 'Segoe UI Mono', Menlo, Monaco, + Consolas, monospace; + --ifm-alert-font-family: + 'Aeonik', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; --ifm-font-weight-semibold: 600; --ifm-font-weight-bold: 700; --ifm-line-height-base: 1.65; diff --git a/src/theme/DocItem/Content/index.js b/src/theme/DocItem/Content/index.js index e50c7df638..9e4e63040e 100644 --- a/src/theme/DocItem/Content/index.js +++ b/src/theme/DocItem/Content/index.js @@ -1,6 +1,6 @@ -import React from 'react'; -import Content from '@theme-original/DocItem/Content'; import { HeaderBadges } from '@site/src/components/HeaderBadges'; +import Content from '@theme-original/DocItem/Content'; +import React from 'react'; export default function ContentWrapper(props) { return ( diff --git a/src/theme/Footer/index.tsx b/src/theme/Footer/index.tsx index e86a6d0671..b297aa02e7 100644 --- a/src/theme/Footer/index.tsx +++ b/src/theme/Footer/index.tsx @@ -1,6 +1,6 @@ -import React from 'react'; -import Footer from '@theme-original/Footer'; import { Quicklooks } from '@site/src/components/Quicklooks'; +import Footer from '@theme-original/Footer'; +import React from 'react'; export default function FooterWrapper(props: Record) { return ( diff --git a/src/theme/Layout.tsx b/src/theme/Layout.tsx index 84a1b122d8..2b8a4ecee6 100644 --- a/src/theme/Layout.tsx +++ b/src/theme/Layout.tsx @@ -1,7 +1,8 @@ -import React from 'react'; -import OriginalLayout from '@theme-original/Layout'; import Head from '@docusaurus/Head'; import { useLocation } from '@docusaurus/router'; +import OriginalLayout from '@theme-original/Layout'; +import React from 'react'; + // import { PostHogProvider } from '@site/src/components/PostHogProvider'; const pathNameToPreviewText = (pathName: string) => { diff --git a/src/theme/MDXComponents.js b/src/theme/MDXComponents.js index b5881b7169..ce68c09e1d 100644 --- a/src/theme/MDXComponents.js +++ b/src/theme/MDXComponents.js @@ -1,11 +1,11 @@ -import React from 'react'; -import MDXComponents from '@theme-original/MDXComponents'; import Card from '@site/src/components/Cards/Card'; import CustomDetails from '@site/src/components/CustomDetails'; import { FloatingHoverModal } from '@site/src/components/FloatingHoverModal'; import ImageWithCaption from '@site/src/components/ImageCaptions'; import ImageZoom from '@site/src/components/ImageZoom'; import { VanillaAdmonition } from '@site/src/components/VanillaAdmonition'; +import MDXComponents from '@theme-original/MDXComponents'; +import React from 'react'; export default { ...MDXComponents, diff --git a/src/theme/NotFound/Content/index.tsx b/src/theme/NotFound/Content/index.tsx index 36ec168229..759c402c76 100644 --- a/src/theme/NotFound/Content/index.tsx +++ b/src/theme/NotFound/Content/index.tsx @@ -1,9 +1,9 @@ -import React, { useEffect } from 'react'; -import clsx from 'clsx'; import Translate from '@docusaurus/Translate'; -import type { Props } from '@theme/NotFound/Content'; import Heading from '@theme/Heading'; +import type { Props } from '@theme/NotFound/Content'; +import clsx from 'clsx'; import { usePostHog } from 'posthog-js/react'; +import React, { useEffect } from 'react'; export default function NotFoundContent({ className }: Props): React.ReactElement { const posthog = usePostHog(); diff --git a/yarn.lock b/yarn.lock index 6974bda2ea..968769f829 100644 --- a/yarn.lock +++ b/yarn.lock @@ -289,6 +289,17 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" +"@babel/generator@^7.26.5", "@babel/generator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.7.tgz#cca0b8827e6bcf3ba176788e7f3b180ad6db2fa3" + integrity sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ== + dependencies: + "@babel/parser" "^7.29.7" + "@babel/types" "^7.29.7" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + "@babel/generator@^7.29.0": version "7.29.1" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" @@ -300,17 +311,6 @@ "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" -"@babel/generator@^7.29.7": - version "7.29.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.7.tgz#cca0b8827e6bcf3ba176788e7f3b180ad6db2fa3" - integrity sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ== - dependencies: - "@babel/parser" "^7.29.7" - "@babel/types" "^7.29.7" - "@jridgewell/gen-mapping" "^0.3.12" - "@jridgewell/trace-mapping" "^0.3.28" - jsesc "^3.0.2" - "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" @@ -726,6 +726,13 @@ dependencies: "@babel/types" "^7.26.3" +"@babel/parser@^7.26.7", "@babel/parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.7.tgz#837b87387cbf5ec5530cb634b3c622f68edb9334" + integrity sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg== + dependencies: + "@babel/types" "^7.29.7" + "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": version "7.29.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.3.tgz#116f70a77958307fceac27747573032f8a62f88e" @@ -733,13 +740,6 @@ dependencies: "@babel/types" "^7.29.0" -"@babel/parser@^7.29.7": - version "7.29.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.7.tgz#837b87387cbf5ec5530cb634b3c622f68edb9334" - integrity sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg== - dependencies: - "@babel/types" "^7.29.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.5": version "7.24.5" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz" @@ -2150,6 +2150,19 @@ debug "^4.3.1" globals "^11.1.0" +"@babel/traverse@^7.26.7", "@babel/traverse@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.7.tgz#c47b07a41b95da0907d026b5dd894d98de7d2f2d" + integrity sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.7" + "@babel/helper-globals" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.7" + debug "^4.3.1" + "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" @@ -2163,19 +2176,6 @@ "@babel/types" "^7.29.0" debug "^4.3.1" -"@babel/traverse@^7.29.7": - version "7.29.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.7.tgz#c47b07a41b95da0907d026b5dd894d98de7d2f2d" - integrity sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw== - dependencies: - "@babel/code-frame" "^7.29.7" - "@babel/generator" "^7.29.7" - "@babel/helper-globals" "^7.29.7" - "@babel/parser" "^7.29.7" - "@babel/template" "^7.29.7" - "@babel/types" "^7.29.7" - debug "^4.3.1" - "@babel/types@^7.21.3", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.4.4": version "7.24.5" resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz" @@ -2193,6 +2193,14 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" +"@babel/types@^7.26.7", "@babel/types@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.7.tgz#8005e31d82712ee7adaef6e23c63b71a62770a92" + integrity sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA== + dependencies: + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/types@^7.28.6", "@babel/types@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" @@ -2201,14 +2209,6 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@babel/types@^7.29.7": - version "7.29.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.7.tgz#8005e31d82712ee7adaef6e23c63b71a62770a92" - integrity sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA== - dependencies: - "@babel/helper-string-parser" "^7.29.7" - "@babel/helper-validator-identifier" "^7.29.7" - "@braintree/sanitize-url@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz#ca2035b0fefe956a8676ff0c69af73e605fcd81f" @@ -5375,6 +5375,18 @@ content-type "^1.0.5" tslib "^2.6.2" +"@trivago/prettier-plugin-sort-imports@^5.2.2": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-5.2.2.tgz#38983f0b83490a0a7d974a6f1e409fb4bf678d02" + integrity sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA== + dependencies: + "@babel/generator" "^7.26.5" + "@babel/parser" "^7.26.7" + "@babel/traverse" "^7.26.7" + "@babel/types" "^7.26.7" + javascript-natural-sort "^0.7.1" + lodash "^4.17.21" + "@tsconfig/docusaurus@^2.0.9": version "2.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/docusaurus/-/docusaurus-2.0.9.tgz#e530ae78bca4f88917af48fe25a944d6d6bdcdf5" @@ -5827,10 +5839,12 @@ dependencies: undici-types "~6.21.0" -"@types/prettier@2.7.3": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== +"@types/prettier@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-3.0.0.tgz#e9bc8160230d3a461dab5c5b41cceef1ef723057" + integrity sha512-mFMBfMOz8QxhYVbuINtswBp9VL2b4Y0QqYHwqLz3YbgtfAcat2Dl6Y1o4e22S/OVE6Ebl9m7wWiMT2lSbAs1wA== + dependencies: + prettier "*" "@types/prismjs@^1.0.0", "@types/prismjs@^1.26.0", "@types/prismjs@^1.26.6": version "1.26.6" @@ -9929,6 +9943,11 @@ jackspeak@^2.3.6: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +javascript-natural-sort@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== + jest-util@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" @@ -12481,10 +12500,10 @@ preact@^10.29.3: resolved "https://registry.yarnpkg.com/preact/-/preact-10.29.7.tgz#b70df2eb06e982c7ac65b6df1541e5846ac0f6ba" integrity sha512-DCHYrK/B10yUD3ZjLfhZ3WIE/9Vf9VFUODcRE2dRomTYDpJk6z6L9wecSfhfE6M9ZTHUdyQkoC46arIDhEV84Q== -prettier@^2.8.3: - version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@*, prettier@^3.9.6: + version "3.9.6" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.9.6.tgz#b3ea5146515d40fc53f18aa63f74dfab1e10dbf6" + integrity sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g== pretty-error@^4.0.0: version "4.0.0"