An untouched field with errors was painted red from the start, so a
form with required fields opened full of «Campo obligatorio». Text
fields, selects, checkboxes, radio groups and file uploads now wait
until the field is touched (blur, or the form's submit()).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The three functions it used (isEqual, some with an object as criterion
and capitalize) live in util/common/compare.ts with the same behaviour,
so apps no longer pull a CommonJS library that Node's ESM loader cannot
resolve by path. TaskStream's initial bundle goes down to 1.88 MB.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lodash declares no exports, so `lodash/isEqual` resolves in a bundler but
not in Node's ESM loader: in 0.0.3 apps could not load @pi/ui in tests or
when rendering on the server.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each chart registers what it needs when it is built instead of on
import, and lodash is imported one function at a time. In TaskStream
the initial bundle drops from 2.13 MB to 1.90 MB.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>