# Changelog

Tutte le modifiche rilevanti a `tmw-picker` sono documentate in questo file.

Il formato si ispira a [Keep a Changelog](https://keepachangelog.com/it/1.1.0/).

> **Versioning Angular-aligned**: la major version del pacchetto segue la major
> di Angular (come `@angular/material`). La serie `1.x` è per **Angular 15**;
> la `2.x` sarà la release su **Angular 17**. Per questo la riscrittura qui
> descritta resta nella serie `1.x` pur introducendo breaking changes.

## [1.2.18] - 2026-08-03

### Added
- `tmw-datetimepicker`: nuovo `@Input() haveFloatingLabel` (default `false`, non
  invasivo per chi già usa `label`). A `true`, `label` diventa una vera etichetta
  fluttuante in stile Material: campo vuoto e senza focus la mostra "in linea" al
  posto del testo (come un placeholder); al focus, o appena c'è una data valida,
  sale sopra il bordo (posizione già esistente per il caso "con valore"). Quando
  attivo e `label` non è vuota, il `placeholder` nativo della textarea viene
  azzerato per evitare che si sovrapponga alla label in stato "in linea".

## [1.2.15] - 2026-07-21

### Fixed
- Icone Annulla/Conferma giganti nei dialog `BirthPickerComponent`/
  `TimeStepperPickerComponent`: `display: inline` sull'host di `tmw-icon`
  rompeva il dimensionamento percentuale dell'SVG interno (fallback al
  default del browser, 300×300). Introdotto in un refactor precedente
  (indipendente dalla rimozione di Material), reso visibile solo ora che
  questi dialog sono renderizzati come componenti Angular ordinari invece
  che dentro l'overlay di MatDialog.

### Changed
- Markup e stile dei bottoni Annulla/Conferma unificati in un unico
  componente condiviso **`TmwPickerDialogActionsComponent`**
  (`lib-picker-dialog-actions`), usato sia da `BirthPickerComponent` che da
  `TimeStepperPickerComponent` (prima duplicati identici nei due dialog).
  Un tema/skin (es. Skin Editor di TMED) che sovrascrive
  `.tmw-picker-icon-check-cancel`/`.tmw-picker-icon-check-confirm` si applica
  ora in modo consistente a entrambi da un solo punto.

## [1.2.14] - 2026-07-21

Rimozione completa di Angular Material/CDK, a completamento del percorso di
dematerializzazione iniziato con `tmw-datepicker-grid` (calendario a griglia
Luxon-based già senza Material). Nessuna funzionalità persa, contratto
pubblico dei tre componenti esportati invariato.

### Changed
- `tmw-datetimepicker`: `MatDialog` per i dialog Birth/TimeStepper sostituito
  da un overlay custom portal-to-body (`TmwPickerDialogHostComponent`).
- `tmw-datetimepicker`: `mat-form-field`/`matInput`/`mat-hint`/`matTooltip`
  sostituiti da markup nativo (tooltip custom via `mouseenter`/`focus`).
- `tmw-daterangepicker`: `MatDatepickerModule`/`MatLuxonDateModule`/
  `MatIconModule` sostituiti da un nuovo calendario a griglia nativo
  (`TmwDateRangeGridComponent`, selezione a due fasi con hover-preview
  dell'intervallo), che riusa la logica di griglia condivisa con
  `tmw-datepicker-grid` (estratta in `datepicker-grid.helper.ts`).
- `BirthPickerComponent`/`TimeStepperPickerComponent`: da `MatDialogRef`/
  `MAT_DIALOG_DATA` a `@Input() data`/`@Output() closed` (composizione
  Angular standard invece di dialog Material).

### Removed (peerDependencies)
- `@angular/material`, `@angular/cdk`, `@angular/material-luxon-adapter`.
- `TimePickerComponent` (`lib-time-picker`): dead code, mai più aperto da
  nessun template dopo l'unificazione del time-picker in `tmw-datepicker-grid`
  (mode `time`).

### Fixed
- Costruttore di `TmwDateTimePickerComponent` disallineato dal relativo spec
  (mock `dateAdapter` orfano da un refactoring precedente).

## [1.1.0] - 2026-06-11

Riscrittura della libreria su fondamenta moderne (Angular Material nativo +
Luxon), componenti standalone, integrazione idiomatica con i form e
accessibilità. **Contiene breaking changes** rispetto alla 1.0.x — vedi
[MIGRATION.md](./MIGRATION.md).

### Added
- **`TmwDateRangePickerComponent`** (`tmw-daterangepicker`): selettore di
  intervallo (da–a) basato su `MatDateRangePicker` nativo. Modello `{ start, end }`.
- **`ControlValueAccessor`** completo su `tmw-datetimepicker` e
  `tmw-daterangepicker`: si usano con `formControlName` / `[formControl]` /
  `[(ngModel)]` standard.
- **`Validator`** (`NG_VALIDATORS`): errori `matDatepickerMin`,
  `matDatepickerMax`, `tmwInvalidDate` (e `tmwRangeInvalid` per il range).
- **`@Input() timeZone`** (IANA, es. `'Europe/Rome'`): reinterpreta l'orario di
  calendario nel fuso indicato.
- **`@Output() dateChange`** (evento opzionale oltre al ControlValueAccessor).
- Navigazione da **tastiera** completa sui selettori a lista (listbox ARIA:
  frecce, Home, End, Invio) e focus-trap/`aria-label` sui dialog.
- `ModeEnum.DATERANGEPICKER`.

### Changed
- Tutti i componenti sono ora **standalone**: si importano direttamente.
- **Date library**: da moment.js a **Luxon**. `timeType = MOMENT` emette ora un
  oggetto Luxon `DateTime` (l'enum mantiene il nome per compatibilità).
- **Calendario**: da `@angular-material-components/datetime-picker` a
  `@angular/material` nativo + `@angular/material-luxon-adapter`.
- **Token di formato**: sintassi Luxon (`dd/MM/yyyy`) invece di moment
  (`DD/MM/YYYY`).
- **i18n**: i nomi di mesi/giorni derivano dal locale (`@Input() locale` pilota
  `DateAdapter.setLocale`).
- `forSaveLocalOnDB` reimplementato con Luxon (`setZone('utc', { keepLocalTime: true })`),
  stesso effetto funzionale ma timezone-corretto.

### Removed (BREAKING)
- `TmwPickerModule` (sostituito dai componenti standalone).
- `@Input() formGroupInput`, `@Input() formControlNameInput` → usare
  `formControlName` / `[formControl]`.
- `@Input() ngModelInput`, `@Output() ngModelInputChange` → usare `[(ngModel)]`
  / `(dateChange)`.
- `@Input() highLightedAriaFormat` (l'highlight usa ora l'API pubblica
  `dateClass` del calendario).
- Dipendenze `moment` e `@angular-material-components/*`.

### Fixed
- Memory leak in `TmwPickerService.scrollToCenter`: l'`setInterval` ora viene
  sempre fermato (elemento non trovato / mai visibile) con un tetto di tentativi.
- Rimossi i `console.log` residui; gli errori di parsing passano per `debugLog`
  (gated da `debugMode`).
- Eliminata la dipendenza dalle API private di `ngx-mat-datepicker`
  (`_selected`, `_selectedChanged`, …) e la manipolazione diretta del DOM.

## [1.0.60] e precedenti

Versioni basate su moment.js e `@angular-material-components/datetime-picker`,
con integrazione ai form tramite `formGroupInput`/`ngModelInput`. Vedi la storia
git per il dettaglio.

[1.1.0]: https://www.npmjs.com/package/tmw-picker/v/1.1.0
