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>
Its box was filled with white, which glared in dark mode. It takes
--pi-theme-field-surface now, white when a theme leaves it out.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Its border was grey-100, 1.2:1 against white, so empty boxes all but
vanished in lists. It is grey-400 now (about 3.5:1, over the 3:1 WCAG
asks of controls), through --pi-theme-checkbox-border-color.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Its drop zone is a <button>, so the library's global button rules
squashed it to the button height and dropped its dashed border. It is
left out of them, like Material's own buttons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Its two inputs are not .mat-mdc-input-element, so the rule that fills
the 48px box missed them and they sat at the top of the field.
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>
It is where 0.0.2 lives and where apps install it from; npm-private
asked for credentials no one had.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>