67fb0a5120
Two bugs fixed: 1. Invisible toggle: index.css applies appearance:none to ALL input[type=checkbox], making the native checkbox invisible. Replaced the hidden <input type="checkbox"> with the folds Switch component which is properly styled and visible in both TDS and non-TDS themes. 2. Compressed size never appeared (stale closure bug): handleChange was async. After the first setMetadata() call the fileItem in selectedFiles was replaced with a new object. The .then() callback still held the OLD fileItem reference, so its setMetadata() call silently failed to find the item (REPLACE action couldn't match the stale ref). Fix: compression now runs in a useEffect triggered by the checked/compressible state. fileItemRef and metadataRef are updated each render so the async callback always writes to the current item. A stable fileKey string (name + size) is used as the dep instead of the File object reference so the effect doesn't re-run on every metadata update. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>