Reverts the temporary diagnostic logging added in 86588f56,
which introduced prettier formatting violations that broke CI.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
NSFW reports posted via the website-side GraphQL mutation aren't
triggering reviews when moderators react in Discord, but the bot-command
path (!review) works. Adds structured logging to disambiguate the two
paths and pinpoint which step in the path-B (graphql) flow is failing:
- DiscordEventHandler: client lifecycle events (ready, error, disconnect,
reconnecting, shardError), login failures, top-level
messageReactionAdd listener so we can see whether the Next.js-side
gateway receives reactions at all
- DiscordEventHandler.handle: entry log + try/catch so swallowed errors
surface (notify is fire-and-forget)
- requestReview: entry, resolved tweetStatus, explicit "skipping
already-reviewed" log
- postSkin: new optional source param so logs can distinguish the bot
command from the graphql mutation; logs at entry, after send, on bot
reaction success/failure, awaiting reactions, awaitReactions resolved
- loggingFilter wrapping the awaitReactions filter to log every observed
reaction with pass/fail and any filter errors
Uses @easyops-cn/docusaurus-search-local to provide client-side
full-text search with no external service dependency.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Bump package.json and Webamp.VERSION to 2.3.0
- Move changelog Unreleased items into 2.3.0 section
- Update "unreleased" references in docs to v2.3.0
- Switch all examples from renderWhenReady to renderInto
- Update multipleMilkdropPresets to use stable @^2 instead of @next
- Update lazy example to webamp@^2.3.0
- Update release skill with version bump and changelog steps
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
centerWindows() was unconditionally adding window.scrollX/Y, which
incorrectly offset window positions when using renderInto with a scrolled
page. Move scroll offset responsibility to callers so each can decide:
- contained (renderInto): no scroll offset needed
- non-contained (renderWhenReady): add scroll offset to viewport coords
- body fallback (centerWindowsInView): add scroll offset only for body
Also make parentDomNode required in browserWindowSizeChanged,
ensureWindowsAreOnScreen, and centerWindowsInView since the serialized
state code (the only caller without a parentDomNode) was removed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The serialized state feature (LOAD_SERIALIZED_STATE action, SerializedStateV1
types, getSerializedState/getSerlializedState functions) was unused external
API surface. Removing it simplifies the codebase and eliminates the only
caller of ensureWindowsAreOnScreen() without a parentDomNode argument.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The RichText import from @atproto/api was unused after refactoring the
Bluesky posting logic to use manual facets instead of RichText helpers.
This caused the ESLint no-unused-vars rule to fail in CI.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove stale browserslist field (Babel was removed)
- Remove stale files exclusion for built/types/demo
- Fix rollup typescript plugin to not emit declarations (suppresses TS5069 warning)
- Clean up tsconfig.json: remove commented-out lines, replace jest types with vitest/globals, remove stale includes/excludes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Split demo site into its own package
Move the demo site from packages/webamp/demo/ into packages/webamp-demo/
as a standalone workspace package. This cleanly separates the library
(published to npm) from the demo site (deployed to webamp.org).
Key changes:
- Demo imports webamp source via relative paths (no aliases needed)
- Demo has its own package.json with demo-specific deps
- Simplified vite config (just nodePolyfills plugin)
- Removed vite branching from rollupPlugins.mjs (library-only now)
- Renamed build-library -> build in webamp package
- Updated turbo.json, CI, netlify config, and code-size workflow
- Removed demo-only deps from webamp package (sentry, butterchurn stays
for the butterchurn bundle)
- Zero bundle size change for the library
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix: add type-check dependency to webamp#build task
The webamp-docs package needs type declarations from webamp to
type-check. These are generated by tsc (type-check), which must run
before the build task.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add updated readme to webamp-demo package
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Document the live reloading dev flow in both readmes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix code-size CI: use deploy script that exists on both branches
The compressed-size-action checks out master and runs the build script.
Master doesn't have a root "build" script, so revert to using "deploy"
which exists on both branches.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
All dependencies are bundled into the library output at build time,
so consumers don't need any of them installed. This gives users a
zero-dependency install.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use the standard window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ runtime
check instead of importing the package. DevTools still work if the
browser extension is installed.
Also inline the defaultMemoize usage from reselect to fix Vite dev
server compatibility.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Both now ship ESM. Updated imports to use named exports
(redux-thunk v3 dropped the default export).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove style-loader, url-loader (Webpack-era), canvas-mock,
react-test-renderer, glob, http-server, and @types/lodash-es.
None were imported anywhere in the codebase.
Replace http-server serve script with vite preview.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace Jest with Vitest for unit tests
- Remove integration tests (not used in CI, relied on puppeteer)
- Remove .babelrc (no longer needed — was only used for Jest transform)
- Remove jest-puppeteer, jest-image-snapshot, and related deps
- Replace jest.fn() with vi.fn() in test files
- Add vitest.config.ts with jsdom environment
All 224 unit tests pass. The postcss plugin test remains skipped
as before.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
The rollup build already uses @rollup/plugin-typescript for type
stripping and JSX. Babel was running after it as a no-op for modern
targets. Now Babel is only used by Jest for ESM→CJS conversion.
Also removes @babel/preset-env since it's no longer needed.
Bundle size decreased by ~1.7KB.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The demo site still imports it, so it needs to remain as a dev
dependency for the Vite build. Consumers don't need it since it's
not used in the library bundle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Not imported anywhere in the source. It was pulling in babel-runtime@6
and core-js@2 as transitive dependencies for consumers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
These options told preset-env to inject core-js polyfills, but with
modern browser targets nothing was being polyfilled. Removes the
transitive core-js dependency.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The lockfile was out of sync after dependency changes, causing CI
to fail with --frozen-lockfile.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The fscreen library was a vendor-prefix shim for the Fullscreen API.
All target browsers now support the unprefixed standard API natively.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
These plugins handled class properties, optional chaining, nullish
coalescing, object rest spread, and dynamic import syntax — all of
which are natively supported by our target browsers. Bundle size is
unchanged, confirming they were no-ops.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Same issue as ani-cursor: bundled at build time via rollup, so
consumers don't need it installed. The workspace:* protocol caused
install failures for users outside the workspace.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
It's bundled at build time via rollup, so consumers don't need it
at install time. Having it as a dependency with workspace:* caused
install failures for users since the workspace protocol isn't
resolved during npm publish.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The RichText import from @atproto/api was unused after refactoring the
Bluesky posting logic to use manual facets instead of RichText helpers.
This caused the ESLint no-unused-vars rule to fail in CI.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Add non-null assertion operator to ref.current when calling webamp.renderInto()
to match the pattern used elsewhere in the component and resolve the CI type error:
"Argument of type 'HTMLDivElement | null' is not assignable to parameter of type 'HTMLElement'"
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* Webamp optionally fully contained into a DOM element
* Fix spelling
* Reenable updating search index for uploads
* Replace contained flag on renderWhenReady with a new method. Add docs
---------
Co-authored-by: Jordan Eldredge <jordan@jordaneldredge.com>