Add unit tests for resources/Hooks/useFocusableRef and app/hooks/useCompact#1790
Closed
wakamex wants to merge 68 commits intofloating:developfrom
Closed
Add unit tests for resources/Hooks/useFocusableRef and app/hooks/useCompact#1790wakamex wants to merge 68 commits intofloating:developfrom
wakamex wants to merge 68 commits intofloating:developfrom
Conversation
Remove dapp server, notify window, onboard window, and experimental Babel plugins as the first step of Frame's architectural modernization. - Strip 7 unused Babel plugins from .babelrc.json (do-expressions, pipeline-operator, function-bind, function-sent, throw-expressions, decorators, export-default-from) and their devDependencies - Delete dapp server (main/dapps/, app/dapp/, main/windows/frames/, main/windows/extractColors/, main/windows/viewPreload.ts) - Remove dapp-related IPC handlers, RPC methods, and send.frame.eth initialization from main process - Remove 5 dapp deps (tar-fs, content-hash, ipfs-unixfs-importer, cheerio, get-pixels) and their type packages - Delete notify window (app/notify/) and Notify class - Delete onboard window (app/onboard/) and Onboard class - Remove bundle scripts and Parcel targets for dapp, inject, notify, onboard - Clean up FrameManager, createViewInstance, and other dead references 59 files changed, ~3,400 lines removed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Upgrade Electron from v23 (EOL, no security patches) to v40.6.0 with all required dependency and API migrations: Dependency upgrades: - electron: 23.1.3 → 40.6.0 - electron-builder: 25.1.8 → 26.8.1 - electron-updater: 6.3.9 → 6.8.3 - electron-log: 4.4.8 → 5.3.0 - @sentry/electron: 4.3.0 → 7.8.0 - node-hid: 2.1.2 → 3.3.0 - @ledgerhq/hw-transport-node-hid-noevents: 6.30.5 → 6.31.10 - @ledgerhq/hw-transport-node-hid-singleton: 6.31.5 → 6.31.10 - @electron/notarize: 1.2.3 → 3.1.1 - @types/node: 18.14.6 → 22.13.5 Breaking change migrations: - protocol.interceptFileProtocol → protocol.handle + net.fetch - @sentry/electron imports split: /main for main process, /renderer for renderers - electron-log resolvePath → resolvePathFn - Remove skipTransformProcessType from setVisibleOnAllWorkspaces (removed in E38) - Remove scrollBounce webPreference (removed in E28) - Remove disableBlinkFeatures: 'Auxclick' (no-op in modern Chromium) - Rename ignore-gpu-blacklist → ignore-gpu-blocklist - Remove no-op Chromium flags (enable-accelerated-2d-canvas, enable-native-gpu-memory-buffers) - Fix dialog.showMessageBoxSync to use windowless variant - Remove unused @sentry/types devDependency - Update tsconfig target/lib to es2023 for Node 24 - Update engines to electron 40, node >= 24.0.0 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- TypeScript: 4.9.5 → 5.7.3 - ESLint: 8.35.0 → 9.18.0 - @eslint/js: 8.36.0 → 9.18.0 - Replace @typescript-eslint/eslint-plugin + parser (5.x) with unified typescript-eslint package (8.20.0) - eslint-config-prettier: 8.7.0 → 10.0.1 - eslint-plugin-jest: 27.2.1 → 28.11.0 - eslint-plugin-react: 7.32.2 → 7.37.4 - eslint-plugin-react-hooks: 4.6.0 → 5.1.0 - eslint-plugin-testing-library: 5.10.2 → 7.1.1 - globals: 13.20.0 → 15.14.0 - ts-jest: 29.0.5 → 29.2.5 - Update eslint.config.mjs for new plugin APIs: - Use tseslint.configs.recommended spread for TS config - Use testing-library flat/react config - Remove dapp server inject reference (deleted in Phase 0) - Remove ESLINT_USE_FLAT_CONFIG env var (default in ESLint 9) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Convert require/module.exports to import/export with type annotations: - main/crypt/index.js → .ts - main/crypt/typedDataUtils.js → .ts (add TypeField/TypeDefinitions/TypedData interfaces) - main/launch/index.js → .ts - main/menu/index.js → .ts (use Electron.MenuItemConstructorOptions) - main/rpc/index.js → .ts (add RpcCallback type, typed function signatures) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace Parcel 2 bundler with electron-vite 5.0 for modern Electron build tooling: - Add electron.vite.config.ts with main/preload/renderer targets - Remove all @parcel/* dependencies (7 packages) - Remove parcel, wait-on devDependencies - Add electron-vite 5.0.0 - Update scripts: bundle → electron-vite build, dev → electron-vite dev - Remove .parcelrc, scripts/bundler.mjs, scripts/run-dev.mjs - Remove Parcel-specific package.json fields (alias, targets, bridge/tray/dash entry points, browserslist) - Remove Parcel-related lavamoat allowScripts entries - Update HTML files: remove CSP nonce (incompatible with Vite), remove stylesheet <link> tags (now imported via JS) - Move stylus imports to JS entry points (app/tray/index.js, app/dash/index.js) - Update initWindow() to use ELECTRON_RENDERER_URL for dev mode - Update bridge/link safe origins from localhost:1234 to :5173 - Remove dead main:dapp IPC listener from bridge (dapp system removed in Phase 0) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tecture - Replace dual tray/dash frameless windows with single standard BrowserWindow - Add Zustand store (app/store.ts) with typed state and IPC sync - Add typed IPC layer (app/ipc.ts) wrapping link.rpc/send/invoke - Add new React app shell (app/index.tsx) with sidebar navigation - Configure Tailwind CSS 4 via @tailwindcss/vite plugin - Update electron.vite.config.ts for single renderer entry - Remove old tray/dash app directories (~28K lines of class components + Stylus) - Remove all .styl files, react-restore renderer store, actions.panel.js - Remove react-is, stylus dependencies - Update window references: showTray→showWindow, toggleTray→showWindow - Keep system tray icon for quick show/hide via click Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace all ethers.js and @ethersproject/* imports with viem equivalents: - isAddress, getAddress → viem - isHexString → isHex from viem - Interface + encodeFunctionData/decodeFunctionResult → viem ABI functions - Contract class → direct eth_call with viem encoding - BigNumber → native bigint - Web3Provider → removed (no longer needed) - computeAddress → publicKeyToAddress from viem/accounts - estimateL1GasCost from @eth-optimism/sdk → custom l1Gas.ts using GasPriceOracle contract directly Remove dependencies: ethers, @ethersproject/contracts, @ethersproject/providers, @eth-optimism/sdk. Add dependency: viem 2.23.2. Files migrated: 21 (main process, resources, tests, hardhat config) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- main/chains/index.js (641 lines) → TypeScript with full type annotations - Fixed Web3Provider bug from Phase 4 (undefined reference on line 236) - Removed index.d.ts declaration file (no longer needed) - main/store/actions/index.js → TypeScript with named exports - Removed dead panelActions import (file was deleted in Phase 3) - Removed 21 unused actions (dapp, dash, frame-related) - Kept navDash (still used in main/accounts/index.ts) - main/ens/ → TypeScript (index, artifacts/interfaces, artifacts/addresses) - main/signers/hot/ → TypeScript (7 files: HotSigner, RingSigner, SeedSigner + workers) - main/externalData/balances/erc-20-abi.js → TypeScript with Abi type - resources/bridge/ and resources/link/ → TypeScript - resources/Components/ → TypeScript (.tsx, 15 components) - resources/Hooks/ → TypeScript (3 hooks) - resources/Native/ and resources/svg/ → TypeScript - Deleted dead code: main/ipfsRun/ (unused IPFS), main/flex/ (unused reverse RPC) - Updated electron.vite.config.ts preload entry to .ts Zero JS source files remain in main/ or resources/. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Delete 5 react-restore components that can't work with Zustand (Monitor, RingIcon, Filter, FooterAux, Native). Add store selectors for balances, network metadata, tokens, permissions, origins, platform, colorway, and pending requests. Expand IPC action helpers with ~30 typed wrappers for signer, account, chain, token, gas, and request management. Create shared UI components: Address (truncated + copy), Balance (formatted display), StatusDot (colored indicator), ChainBadge (chain name + color), Modal (overlay dialog). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… Tokens, Settings Replace placeholder views with full implementations. Accounts view shows account list with balances, signer status, and ENS names; detail panel with token balances, permissions, rename/remove; and add-account forms for seed phrase, private key, keystore, watch address, and hardware wallets. Request overlay with queue navigation handles transaction review (gas fee editing), signature review (plain, typed data, ERC-20 permits with countdown), access requests, and chain/token addition requests. Signers view shows merged live+saved signers with unlock/lock/reload/verify/remove actions. Chains view displays networks with connection status, gas prices, and toggle switches. Tokens view manages custom tokens with search, add (fetch metadata), and remove. Settings view covers appearance, behavior, privacy, hardware derivation, and reset. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… build succeeds Fix 73+ TypeScript errors across 20 main-process files to get the full electron-vite build passing (main + preload + renderer). Key changes: - Replace @ethereumjs/util keccak256 (removed) with viem's keccak256 - Fix Chain import (default export used as named) with local type defs - Fix viem decodeFunctionResult usage (returns value, not array) - Add type declarations for 6 untyped modules (auto-launch, zxcvbn, etc.) - Add missing externals to electron-vite config (react-restore, eth-provider) - Fix type-only re-exports for Rollup compatibility - Replace Node crypto.randomInt with Math.random for renderer compatibility - Delete obsolete test files for removed dash/tray UI (2,378 lines) - Delete orphaned RequestItem component and empty style directories Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Create a compatibility layer (storeCompat.ts) using zustand/vanilla + immer
that preserves the existing store API: store('path') getter, store.action()
dispatch, store.observer(), and store.api.feed(). This drops the react-restore
dependency while requiring zero changes to the 26+ consumer files.
- Add zustand/vanilla store with immer-based path updates
- Implement u() update function compatible with react-restore's API
- Implement observer system and batched feed mechanism
- Remove react-restore from externals and type declarations
- All 237 store tests pass unchanged
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Onboarding: Shows a welcome screen when no accounts exist and the user hasn't dismissed it. Steps through Welcome → Create Account → Done, reusing the existing AddAccount component. Send: Native ETH/ERC-20 send UI with chain selector, ENS resolution, token selector from account balances, and amount input. Submits via the existing provider's eth_sendTransaction flow, which creates a request that goes through the approval overlay. Both views are wired into the sidebar navigation and view router. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add the missing updateBadge store action that the updater module calls when updates are available or ready to install. Add badge field to the updater state schema. Show a top-of-window banner in the renderer when an update is available, with Download/Install and Dismiss buttons. The system tray integration already works from existing code — click toggles window visibility, context menu has summon/dismiss/quit. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace crashing @tailwindcss/vite plugin with pre-generated CSS using Tailwind v4's compile API (scripts/generate-tailwind.cjs). Fix white background by adding bg-gray-950 to the app root div. Fix ChainsView crash by removing unused useColorway call and using primaryColor hex directly. Add esbuild automatic JSX transform and emptyOutDir: false to prevent renderer build from clearing bridge.js. Add screenshot tooling for visual inspection of all 6 views. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ledgerhq/hw-transport-node-hid-noevents and hw-transport-node-hid-singleton were pinned to 6.31.10, a version that was never published to npm (hallucinated during Phase 1 upgrade). Fix to 6.31.0 and 6.32.0 respectively, restoring npm install. Also wire generate-tailwind.cjs into prebuild and gitignore screenshots. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Display "Transaction · 2 of 5" instead of "Request 2 of 5" so users know what kind of request they're looking at when flipping through the queue. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Create app/types.ts with renderer-side type definitions for Account, Signer, Chain, ChainMetadata, Token, Balance, AccountRequest, etc. Update store, IPC layer, and all view components to use typed interfaces instead of any. Zero any types remain in app/ source files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wire the summon shortcut (Alt+/) into the Settings view with a toggle to enable/disable and a "Change" button that enters capture mode for recording a new key combination. Uses existing resources/keyboard infrastructure for key mapping and display. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Display the estimated L1 data fee (cost to post calldata to Ethereum) for transactions on Optimism, Base, and other OP Stack chains. Uses chainUsesOptimismFees() to detect L2s and reads from request.chainData. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Below 768px: sidebar collapses behind a hamburger menu with overlay backdrop, master-detail views (Accounts, Signers, Chains) switch to list-or-detail navigation with back buttons, and content padding adjusts. useCompact() hook listens to matchMedia for resize events. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace `global?.navigator` with `typeof navigator !== 'undefined'` to avoid ReferenceError in browser contexts where `global` is not defined (e.g. when contextIsolation is enabled). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix viem migration issues: positional args in ENS decoder, single-value decodeFunctionResult in scan, parseAbi tuple syntax and reserved keyword rename (address address → address account), even-length hex padding - Fix Zustand store re-entrancy: add notifying guard in storeCompat to prevent infinite recursion when observers trigger state updates - Fix hot signer tests: ESM interop (import * as bip39), worker.js files, secp256k1 public key decompression for viem's publicKeyToAddress - Fix mock store: dual export bug, add updateSigner/removeSigner stubs - Fix test environments: jsdom docblocks for 8 React component/hook tests, async timer handling, parallel worker filesystem isolation - Remove dead code: panel nav in addRequest, no-op actions (setSignerView, setPanelView, notify), store.notify calls in origins/rpc/HotSigner - Exclude e2e tests from default run (require running Frame provider) - Rewrite origins extension trust tests to use observer flow directly Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix CJS interop for external modules by adding Rollup output.interop: 'auto', add missing externals (nebula, @ledgerhq/*), compile workers as separate entry points, convert dynamic require() to static imports, remove dead content-hash code from ENS module, and delete unused fonts/svg/RequestHeader. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Migrate the entire state layer to valtio — a single, minimal proxy-based library. Main process store uses `proxy()` for reactive state with `subscribe()` for persistence and IPC sync. Renderer uses `useSnapshot()` for React integration. All 96 store actions converted from update-function pattern to plain mutation functions. Removes zustand, immer, and the storeCompat shim. 55 files changed, 1027 tests passing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pylon was Frame's proprietary infrastructure for RPC proxying, token price rates, and NFT inventory. Since the original Frame project is no longer maintained, these servers could go offline at any time. - Remove Pylon inventory system entirely (only served ENS tokenId lookups in transaction descriptions, no UI consumed it) - Replace Pylon WebSocket rate subscriptions with DefiLlama HTTP polling (/prices/current + /percentage endpoints, 30s interval) - Replace Pylon WSS RPC endpoints with PublicNode HTTPS endpoints for all 8 supported chains - Rename 'pylon' connection preset to 'public' - Add migration 42 to convert existing users' connections - Remove @framelabs/pylon-client dependency Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add modernized stack, new features, and Pylon removal sections covering the full scope of changes from upstream Frame. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace hardcoded chain selector with dynamic list from useNetworks() filtered to active chains. Auto-fetch token metadata (name, symbol, decimals) with 500ms debounce when a valid contract address is pasted and a chain is selected. Pre-filled fields remain editable so users can override fetched values or fill manually on fetch failure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a BuyButton component with a provider selection dropdown (Ramp Network, MoonPay, Transak) that opens the provider's URL with the user's wallet address pre-filled. The button is chain-aware, appending appropriate network parameters for Polygon, Arbitrum, Optimism, and Base when available. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolve conflicts in app/index.tsx, app/ipc.ts, app/store.ts, app/types.ts, main/store/actions/index.ts, main/store/migrate/index.ts. Fix _version to 45 (highest migration). Add migration 43 to migration registry alongside 45. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolve conflicts across shared files. All migrations (43, 44, 45) now registered. _version stays at 45. Verified Chains.send signature and approveTransactionRequest callback type match txHash usage. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolve conflicts in app/types.ts and main/store/actions/index.ts. Health checker runs 30s polls on primary RPC, shows status in chain detail, falls back to secondary when primary degrades. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- build.yml: trigger on main, use latest runners (ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest), make signing secrets optional so builds work unsigned - compile-and-test.yml: trigger on main + PRs, remove deprecated Electronegativity scan - notarize.js: skip notarization when Apple credentials aren't set Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use shell conditional with env var instead. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Run `allow-scripts auto` to add 5 unconfigured package entries - Add `shell: bash` to NPM config step so it works on Windows Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Node 18 causes @electron/rebuild path errors. Node 22 matches local dev environment and satisfies package.json engines constraint. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
node-hid requires libusb headers to compile for Electron. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- compile-and-test: use `npm ci --ignore-scripts` since tsc and jest don't need Electron native module rebuilds - build: use Node 20 LTS (Node 22 breaks node-addon-api C++ headers) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@lavamoat/allow-scripts 3.3.1 ignores $root$: false and runs the root postinstall (electron-builder install-app-deps) which fails rebuilding node-hid for Electron. Temporarily remove the postinstall script before running allow-scripts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
electron-builder 26.8.1 no longer supports the publisherName property in the win config. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
node-hid's node-addon-api 3.x fails to compile against Electron 40 headers. Since we don't bundle native modules (they're excluded from files) and the needed ones (keccak, secp256k1) are pre-built by allow-scripts, skip the @electron/rebuild step entirely. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Without CSC_IDENTITY_AUTO_DISCOVERY=false, electron-builder tries to auto-discover a signing identity on macOS even when CSC_LINK is empty, causing the build to fail. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When CSC_LINK is set to empty string (from unset secrets), electron-builder interprets it as a file path and fails. Remove all signing env vars from the matrix level — electron-builder skips signing when they're completely unset. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When CSC_LINK is unset (public CI / forks), set identity: null to prevent electron-builder from falling back to ad-hoc signing on arm64, which fails strict codesign verification with "nested code is modified or invalid". Also conditionally set hardenedRuntime, entitlements, and requirements since those only apply to proper code signing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The tray/window code loads icons via path.join(__dirname, './IconTemplate.png') where __dirname is compiled/main, but copy-assets was putting them in compiled/main/windows. Fixed the copy-assets path and added a vite plugin so icons are also available during electron-vite dev. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
buildStart runs before vite empties the output directory, so copied icons were getting deleted. writeBundle runs after output is written. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
subscribe(state) fired on every state mutation, re-registering the Alt+/ shortcut hundreds of times. Now subscribes only to state.main.shortcuts and skips if the shortcut hasn't changed. Also downgraded noisy connection/shortcut logs to verbose. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dev mode was defaulting to verbose console logging, showing every connection state check and token update. Changed default to info for all environments (use LOG_LEVEL=verbose to restore). Downgraded routine connection ON/OFF messages to verbose since connect() is called on every state change, not just actual reconnects. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Devtools opened on every launch because isDev was true. Now only opens with ENABLE_DEV_TOOLS=true explicitly. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The FormHeader Back button lacked type="button", defaulting to type="submit" per HTML spec. Since it appeared first in the DOM, pressing Enter activated it instead of the actual submit button. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
After adding a watch address (or any account), the user was left on a blank "Select an account" screen because onClose didn't pass the new address back. Now each form passes the created address to onClose, and AccountsView auto-selects it. Also adds the first app-level component tests covering: - Account type selection rendering - Cancel without selecting - Back button not submitting the form (type="button" regression) - Watch address creation calls onClose with the address - Error handling keeps the form open - Enter key submits instead of triggering Back Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace Nebula (ipfs.nebula.land) ENS lookups with the existing viem-based main/ens module for forward and reverse resolution. Simplify token loader to use only the bundled default-tokens.json list. Make Etherscan API keys user-configurable via Settings UI and persisted state instead of hardcoded. Clear Frame CDN icon URLs from initial state. Update external whitelist and Trezor manifest to reference wakamex/framed instead of frame.sh. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- test/resources/Hooks/useFocusableRef/index.test.js: 8 tests covering ref return value, focus/no-focus behavior, custom delay, cleanup, null ref safety, and true→false re-render transition - test/app/hooks/useCompact.test.js: 6 tests covering boolean return, initial width detection, resize event handling, and cleanup Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
Author
|
Opened against wrong repo by automated tooling. Sorry for the noise. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements frame-modernized-7jh.34: Add unit tests for resources/Hooks/useFocusableRef and app/hooks/useCompact
Changes
test/resources/Hooks/useFocusableRef/index.test.js— 8 tests:element.focus()after default 900ms delay whenfocus=trueelement.focus()whenfocus=falseelement.focus()whenfocus=undefinedclearTimeoutcalled on unmountref.currentis nulltrue→falseclears timertest/app/hooks/useCompact.test.js— 6 tests:window.innerWidthis above breakpointwindow.innerWidthis below breakpointAll 76 component tests pass.