# Technical Changelog - Template

All notable technical changes to the laif-ds core will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [laif-ds@0.2.82]

### 🚀 Added

- **Chat**: Added a `placeholder` prop forwarded to the message input, allowing a custom composer placeholder (defaults to `"Ask AI..."`)

## [laif-ds@0.2.81]

### 🚀 Added

- **FilePreviewer**: Added a `size` option to `PreviewOptions` (`sm` | `default` | `lg` | `xl` | `full`, defaults to `xl`) to control the preview dialog size per call

### 🔧 Changed

- **FilePreviewer**: Migrated from the low-level `Dialog` to `AppDialog`, simplifying the markup and relying on its built-in header and configurable sizing

## [laif-ds@0.2.80]

### 🚀 Added

- **AppSelect**: Added `selectableAll` prop (multi-select only, default `true`) — renders a tri-state checkbox toggle to the left of the search bar with four icon states (`Square` / `SquareMinus` / `SquareCheck` / `SquareDot`). Both select-all and deselect-all are scoped to the current search filter, preserving out-of-view selections and `fixed: true` items
- **DatePicker**: Added range dragging — in range mode, click and drag the `from` or `to` handle to extend or shrink the selected interval; the range automatically inverts when handles cross over

### 🔧 Changed

- **AppSelect**: Prevented automatic focus of the search input on popover open via `onOpenAutoFocus` — fixes the mobile soft-keyboard collapsing the visual viewport and pushing the dropdown off-screen
- **DatePicker**: Reworked range click behavior — a third click on a completed range now starts a new range from that day instead of resetting to empty; clicking an end-date earlier than the current `from` resets the start anchor to that day

## [laif-ds@0.2.79]

### 🚀 Added

- **MarkdownRenderer**: Added support for raw HTML rendering via `rehype-raw`, including native `<u>...</u>` underline tags
- **Storybook**: Added dedicated `MarkdownRenderer` stories with underline and full-formatting examples

### 🔧 Changed

- **AppEditor**: Switched external underline markdown format from `++text++` to standard HTML `<u>text</u>` while keeping internal conversion compatibility
- **AppEditor**: Improved editor layout flexibility with `wrpClassName` and updated content container sizing behavior
- **Documentation and Stories**: Updated `AppEditor` docs and stories to reflect `<u>...</u>` underline usage

## [laif-ds@0.2.78]

### 🐛 Fixed

- **AppEditor**: Fixed missing underline text save in the component output

## [laif-ds@0.2.77]

### 🚀 Added

- **AppCard**: Added new card wrapper component with 4 visual variants (default, elevated, outlined, ghost), support for title, description, body, footer, and actions props with optional header and footer borders, and comprehensive Storybook examples and documentation
- **AppForm**: Added column span sizing, configurable icon placement, enhanced search options, and comprehensive TypeScript typing improvements

### 🔧 Changed

- **AppForm**: Updated to adopt new form pattern with improved layout, enhanced JSDoc comments, and better type safety across components
- **General**: Removed "use client" directives and fixed export formatting across components for better compatibility

## [laif-ds@0.2.76]

### 🚀 Added

- **FileUploader**: Added support for archive file types including `zip`, `rar`, `7z`, `tar`, `gz`, and `tgz`
- **TruncatedCell**: Added a new component for displaying truncated text content with tooltip expansion and responsive text handling
- **DataTable**: Added `rowClassName` prop for custom CSS classes based on row data
- **DataTable**: Added `headerClassName` and `cellClassName` support in column meta for custom styling
- **DataTable**: Enhanced utils typing with mapped union for better accessor config type inference

## [laif-ds@0.2.75]

### ⚠️ Breaking changes

- **DataTable**: the cell value type is now defined better so some small compatibility issues my emerge with strict typing in precedent versions
- **general**: Since the introduction of strict EsLint in the repository a big number of components has got updated, some small bugs may emerge

### 🚀 Added

- **Storybook**: Added a dedicated changelog documentation page with markdown rendering and release-oriented navigation

### 🔧 Changed

- **DataTable**: Updated datatable with new double re-render patch and better filter interactions
- **ESLint**: Strengthened linting rules to improve code quality and prevent errors
- **Storybook**: Improved story sorting and dev server startup behavior, and disabled telemetry in the core configuration
- **Tooling**: Added parallel command execution support with animated status feedback for local development utilities

## [laif-ds@0.2.74]

### 🔧 Changed

- **Icon**: Updated the Lucide icon library to the latest version

## [laif-ds@0.2.73]

### 🚀 Added

- **FilePreview**: Added `showThumbnail` to disable thumbnail preview

### 🔧 Changed

- **AppTimePicker and DatePicker**: Added configurable minute and second step support
- **Internal Types**: Improved internal type management
- **Action Menu**: Added support for disabling the action menu trigger

## [laif-ds - Storybook Update]

### 🔧 Changed

- **Map Docs**: Added Storybook documentation explaining which libraries to use when an interactive map is needed in applications

## [laif-ds@0.2.71]

### 🚀 Added

- **AppTimePicker**: Added a new component for selecting hours, minutes and seconds

### 🔧 Changed

- **DatePicker**: Added DateTimePicker functionality through the `showTime` prop

## [laif-ds@0.2.70]

### 🐛 Fixed

- **Textarea**: Fixed long content handling

### 🔧 Changed

- **Kanban**: Improved UI and UX

## [laif-ds@0.2.69]

### 🚀 Added

- **Toaster**: Added a new toaster component based on Sonner

### 🐛 Fixed

- **AppDialog**: Fixed the console warning shown when title or description is not provided

## [laif-ds@0.2.68]

### 🚀 Added

- **AppForm**: Added `datePickerProps` to customize DatePicker options inside the form

## [laif-ds@0.2.67]

### 🚀 Added

- **Calendar**: Added range support

### 🔧 Changed

- **Documentation**: Updated the calendar range documentation

## [laif-ds@0.2.66]

### 🚀 Added

- **AppSelect**: Added `renderValue` for custom selected value rendering
- **AppSelect**: Added `noGroupLabel` to customize the label for ungrouped options
- **AppCheckbox**: Added a new component for quickly building checkbox groups
- **DatePicker and Calendar**: Added `minDate` and `maxDate` constraints for selectable date ranges

### � Changed

- **AppSelect**: Removed `groupBy`
- **AppSelect**: On open, options now scroll to the selected option
- **DatePicker and Calendar**: Reduced the default available year range to ±50 years from today

## [laif-ds@0.2.65]

### 🔧 Changed

- **DataTable**: Added empty / not empty operators in all column filters

### ⚠️ Breaking Changes

- **Upstream Requirement**: Use this version only after updating to the upstream release that fixes `eq_null` and `n_eq_null`

## [laif-ds@0.2.64]

### 🚀 Added

- **Testing and Accessibility**: Added support for `id` and `data-testid` on interactive library components

### 🔧 Changed

- **Interactive Components**: Updated `AppSelect`, `AsyncSelect`, `DatePicker`, `AppRadioGroup`, `InputSelector`, `FileUploader`, `DataTable`, `MessageInput` and `AppStepper`
- **Documentation**: Listed components that already support `id` and `data-testid` through spread props

## [laif-ds@0.2.63]

### 🐛 Fixed

- **DataTable**: Center-aligned the clear button inside the searchbar input

## [laif-ds@0.2.62]

### 🚀 Added

- **AppDialog**: Added the new component for simpler dialog implementation
- **DataTable**: Added support for custom components inside column headers

## [laif-ds@0.2.61]

### 🔧 Changed

- **AppSelect and AsyncSelect**: Improved dropdown placement to open above or below depending on available space

## [laif-ds@0.2.60]

### 🔧 Changed

- **Calendar**: Added search to the month and year selectors

## [laif-ds@0.2.59]

### 🔧 Changed

- **AppStepper**: Exported the required component types

## [laif-ds@0.2.58]

### 🔧 Changed

- **DataTable**: Increased horizontal scrollbar `z-index` to avoid overlap with the last row
- **DataTable**: Added `columnVisibility` support inside `initialState`

## [laif-ds@0.2.57]

### 🐛 Fixed

- **AsyncSelect**: Fixed missing classes in some UI states
- **AsyncSelect**: Fixed coexistence between initial options and fetched options

## [laif-ds@0.2.54]

### 🚀 Added

- **AppTooltip**: Added a tooltip component with variant support aligned with the rest of the library

### 🐛 Fixed

- **FilePreview**: Fixed action menu alignment to the right side of the title area

## [laif-ds@0.2.53]

### 🐛 Fixed

- **UI Alignment**: Fixed focus and label alignment issues

## [laif-ds@0.2.52]

### 🐛 Fixed

- **Button**: Fixed shrink effect

## [laif-ds@0.2.48]

### 🚀 Added

- **AppKanban**: Released the first version of the component
- **AppForm**: Added `async` and `async-multiple` modes

### 🔧 Changed

- **AsyncSelect**: Added debounce support with custom delay support and `initialOptions`

### ⚠️ Breaking Changes

- **AsyncSelect API**: Removed `preload`, `filterFn` and `width`
- **AsyncSelect API**: Renamed `getOptionValue` to `resolveOptionValue`
- **AsyncSelect API**: Renamed `getDisplayValue` to `renderSelectedValue`
- **AsyncSelect API**: Renamed `renderOption` to `renderOptionItems`

## [laif-ds@0.2.47]

### 🔧 Changed

- **AppForm**: Added support for defining input types externally

## [laif-ds@0.2.46]

### 🔧 Changed

- **DatePicker**: Set Italian as the default language while keeping it configurable
- **AppForm**: Added `showSubmitButton`
- **AppForm**: Exported the items interface

## [laif-ds@0.2.45]

### 🔧 Changed

- **Documentation**: Added auto-generated docs for all `laif-ds` components under `/node_modules/laif-ds/dist/agent-docs`

## [laif-ds@0.2.44]

### 🚀 Added

- **Spinner**: Added a new spinner component with size, variant and `className` support

## [laif-ds@0.2.43]

### 🚀 Added

- **DataTable Utilities**: Added simplified utilities for column definition and state management
- **DataTable Utilities**: Added visual indicators for filterable, sortable and searchable columns
- **DataTable Utilities**: Added support for duplicate accessors, display-only columns, calculated columns and automatic unique IDs

## [laif-ds@0.2.42]

### 🐛 Fixed

- **DataTable**: Fixed a rare server mode loading loop caused by table loading state interaction

## [laif-ds@0.2.39]

### 🔧 Changed

- **DatePicker**: Set the default upper year selector limit to 100 years in the future

## [laif-ds@0.2.38]

### 🚀 Added

- **DatePicker**: Added `locale`, `initialCalendarMonth` and `customCalendarProps`

### 🔧 Changed

- **DatePicker**: The calendar now opens on the selected day by default
- **DatePicker**: Added default month and year selectors

## [laif-ds@0.2.37]

### 🚀 Added

- **Input**: Added `showValidMessage`, `showValidityMessage` and `validityI18n`
- **Storybook**: Added a showcase story for validation behavior

## [laif-ds@0.2.36]

### 🚀 Added

- **Badge**: Added `iconLeft`, `iconRight` and `disabled`
- **Badge**: Added new variants including `success` and `warning`

### ⚠️ Breaking Changes

- **CSS Variables**: To use `success` and `warning` variants immediately, update the required `shadcn.css` variables in the template or upstream them first

## [laif-ds@0.2.35]

### 🚀 Added

- **Input**: Added `startContent` and `endContent` support for custom React nodes
- **Input**: Added native validation support through the HTML5 validation API
- **Input**: Added `errorMessage`, internal validation state and ARIA improvements

## [laif-ds@0.2.34]

### 🚀 Added

- **Button**: Added the `outline-destructive` variant and improved IntelliSense for variants and sizes

### 🔧 Changed

- **Checkbox**: Updated cursor behavior to `pointer` when enabled
- **Checkbox**: Updated border color for consistency with the radio button and improved contrast

## [laif-ds@0.2.32]

### 🚀 Added

- **AppRadioGroup**: Added a new radio group component with icon, layout, orientation, required indicator, disabled option and TypeScript support
- **TextArea**: Added `wrpClassName`

### 🔧 Changed

- **RadioGroup**: Deprecated in favor of `AppRadioGroup`
- **Storybook**: Deprecated components are now visible in Storybook

## [laif-ds@0.2.30]

### 🐛 Fixed

- **Checkbox**: Fixed incorrect checkmark color

## [laif-ds@0.2.28 / 0.2.29]

### 🔧 Changed

- **Documentation**: Updated documentation only, with no component logic changes

## [laif-ds@0.2.26]

### 🔧 Changed

- **Documentation**: Updated docs pages with no component logic changes

## [laif-ds@0.2.24]

### 🚀 Added

- **Confirmer**: Added a `destructive` variant for delete flows
- **Button**: Added new ghost variants
- **AppSelect**: Added `isSingleSelectClearable` for single-select clearing

### 🐛 Fixed

- **AppSelect**: Fixed HTML label rendering

### 🔧 Changed

- **DataTable**: Refactored the component and published updated documentation

## [laif-ds@0.2.21]

### 🚀 Added

- **Stepper**: Added `Stepper` and `AppStepper`

## [laif-ds@0.2.15]

### 🐛 Fixed

- **AppSelect**: Fixed options overflow when used inside `Dialog`

## [laif-ds@0.2.14]

### 🚀 Added

- **File Preview Modal**: Added `previewFileModal` utility for modal previews
- **File Preview Modal**: Added `FilePreviewer` integration at layout level

## [laif-ds@0.2.13]

### 🐛 Fixed

- **AppSelect**: Fixed options overflow when used inside `Drawer` or `Sheet`

## [laif-ds@0.2.12]

### ⚠️ Breaking Changes

- **Select Components**: Deprecated `AppMultipleSelectDropdown` and `MultipleSelector` in favor of `AppSelect`

### 🔧 Changed

- **AppSelect**: Documented supported value types and main props

## [laif-ds@0.2.8]

### 🚀 Added

- **FileUploader**: Added `maxTotalSize` and `maxFiles`

## [laif-ds@0.2.6]

### 🚀 Added

- **File Management**: Added `FileUploader` and `FilePreview`

## [laif-ds@0.2.5]

### 🔧 Changed

- **MultipleSelector**: Updated default `placeholder` to `Cerca...`
- **MultipleSelector**: Set `hidePlaceholderWhenSelected` default to `true`

## [laif-ds@0.2.4]

### ⚠️ Breaking Changes

- **AppMultipleSelectDropdown**: Removed `cancelButtonLabel`
- **AppMultipleSelectDropdown**: Renamed `filterable` to `searchable`
- **AppMultipleSelectDropdown**: Renamed `filterPlaceholder` to `searchPlaceholder`

### 🔧 Changed

- **AppMultipleSelectDropdown**: Enabled `searchable` by default

---

## Version History

For older versions and detailed commit history, please refer to the Git repository history.

## Contributing

When adding new features or making changes:

1. Update this changelog with your changes
2. Follow the format: Added/Changed/Fixed/Breaking Changes
3. Include migration instructions for breaking changes
4. Update version number in `version.laif-template.txt`
