> ## Documentation Index
> Fetch the complete documentation index at: https://neo.tvk.company/llms.txt
> Use this file to discover all available pages before exploring further.

# Neo Release Notes

> Product updates and announcements for Neo

<Update label="1.9.1" tags={["Latest"]} description="22-05-2026">
  # 1.9.1

  ## Fixes 🐞

  * Fixed drag-and-drop in [`NeoImagePicker`](/widgets/pickers/image-picker) on macOS — it was not working when dropping images from Finder.
</Update>

<Update label="1.9.0" description="10-05-2026">
  # 1.9.0

  A big one! This release ships the visual overhaul with a refreshed interaction model and token system, a completely reworked [`NeoTable`](/widgets/utilities/table), two new animated text widgets, and a wave of quality-of-life improvements to [`NeoDropdownField`](/widgets/pickers/dropdown-field), [`NeoToast`](/widgets/overlays/toast), and more.

  ## BREAKING CHANGES 🚨

  ### [`NeoButton`](/widgets/buttons/button) Variant Renames

  * `NeoButtonVariant.filled` → `.primary`, `outlined` → `.secondary`, `ghost` → `.tertiary` (`link` is unchanged). Migration: rename all `NeoButtonVariant.*` usages at call sites.
  * `bgHoverColor` / `bgPressedColor` replaced by a single `bgInteractionColor`; `fgHoverColor` / `fgPressedColor` replaced by `fgInteractionColor`. Migration: pass one shared interaction color instead of two.
  * `bgColor` is now only valid on the `primary` variant. Migration: for `secondary`, `tertiary`, or `link`, use `fgColor` and `fgInteractionColor` instead.
  * `requireHold` now requires the `secondary` variant (was `outlined`). Migration: switch the variant to `secondary` when using hold-to-confirm.

  ### [`NeoColorTokens`](/theming/design-tokens) Overhaul

  * `fgBrand` and `bgBrand` merged into a single `brand` token. Migration: replace `theme.colors.fgBrand` / `theme.colors.bgBrand` with `theme.colors.brand`.
  * Removed `bgBrandHover`, `dangerHover`, `dangerPressed` — derive hover/pressed states via the new per-widget color tokens (e.g. `theme.buttonColors.primaryBgInteraction`).
  * Removed generic `buttonBg*` / `buttonFg*` tokens from `NeoColorTokens`. Migration: use `theme.buttonColors` instead.
  * Removed `bgContrast` and `fgOnContrast`. Migration: use `theme.buttonColors.primaryBg` / `primaryFg` for button-style contrast surfaces.
  * Removed `bgSecondaryHover`. Migration: derive hover/pressed surfaces via `neoInteractionColor(theme.colors.bgSecondary)`.
  * `borderPrimary`, `borderSecondary`, and `borderTertiary` are now alpha-on-ink values. Migration: visually verify widgets that draw borders against non-default backgrounds — translucent borders blend with whatever is behind them.

  ### [`NeoRadiusTokens`](/theming/design-tokens) Restructured

  * Removed `none`; renamed `small` → `extraSmall` and `medium` → `small`; added a new `medium`. `large` and `full` are unchanged. Migration: shift all call sites one step up (e.g. `theme.radii.medium` → `theme.radii.small`).

  ### [`NeoTable`](/widgets/utilities/table) API Overhaul

  * `NeoTableColumn.name` renamed to `label`. Migration: rename the `name:` argument to `label:` at every call site.
  * `NeoTableRow.cells` changed from `List<Widget>` to `Map<String, Widget>` keyed by column ID. Migration: build cells as `{"columnId": widget}` instead of an ordered list.
  * `NeoTableColumn.onSort` removed; replaced by a top-level `onSortChanged` callback on the table and a per-column `isSortable` flag. Migration: set `isSortable: true` on sortable columns and handle all sorting via `NeoTable.onSortChanged`.
  * `sortColumnId` / `sortDirection` / `defaultSortColumnId` / `defaultSortDirection` replaced by `sortState` / `defaultSortState` (`NeoTableSortState`). Migration: pass a `NeoTableSortState(columnId: ..., direction: ...)` instead.
  * `showDividers` renamed to `showRowDividers`; `showVerticalDividers` renamed to `showColumnDividers`. Migration: rename these arguments at every call site.
  * `isExpanded` removed — `NeoTable` now sizes itself via its parent. Migration: remove the argument; wrap in `Expanded` or `SizedBox` when you need explicit sizing.
  * `NeoTableSortDirection.none` removed — the unsorted state is now represented by a `null` `NeoTableSortState`. Migration: drop `.none` usages and pass `null` for `sortState` instead.

  ### [`NeoDropdownField`](/widgets/pickers/dropdown-field) Data Class Items

  * `NeoDropdownFieldItem` and `NeoDropdownFieldSection` are now `@immutable` data classes instead of widgets. Migration: remove any `key` usage on items/sections and remove `onTap` from `NeoDropdownFieldItem`.

  ## New 🚀

  ### [`NeoFluidText`](/widgets/utilities/fluid-text)

  * New widget that animates string changes with staggered per-character motion — scale, slide, and blur effects give text updates a fluid, polished feel. Mirrors the `Text` widget's API (`style`, `maxLines`, `overflow`, `softWrap`, etc.).

  ### [`NeoFluidCounter`](/widgets/utilities/fluid-counter)

  * New widget for animated numeric displays. Each digit rolls like an odometer when its face value changes. Supports custom `formatter`, configurable `duration`, `continuous` odometer-style stepping vs face-value-only transitions, and `maskHeightFraction` for edge fade.

  ### [`NeoTable`](/widgets/utilities/table) New Features

  * Added `activeRowId` to highlight an active row.
  * Added row reordering via `isRowReorderable` and `onRowReorder`.
  * Added column reordering via `isColumnReorderable` and `onColumnReorder`.
  * Added `hiddenColumnIds` for toggling column visibility without rebuilding the column list.
  * Added `scrollController`, `headerHeight`, `emptyStateBuilder`, and `isLoading` props.
  * Added `minWidth`, `isReorderable`, and `isHideable` props to `NeoTableColumn`.
  * Added `NeoTable.scrollToRow` static helper to animate the body to a given row ID.

  ### [`NeoDropdownField`](/widgets/pickers/dropdown-field) Item Creation & Empty State

  * Added `emptyStateBuilder` for a custom empty-state UI when no items match the search query.
  * Added `onCreateItem` and `createItemLabel` for inline item creation from the search field.
  * Added `prefix`, `suffix`, and `revealSuffixOnHover` to `NeoDropdownFieldItem` for per-item leading and trailing widgets.
  * Added `NeoDropdownEmptyStateBuilder` typedef.

  ### [`NeoToast`](/widgets/overlays/toast) Swipe-to-Dismiss

  * Toasts can now be dismissed by swiping horizontally when a dismiss control is shown or `autoDismiss` is enabled. Drag past \~25% of the toast width to dismiss; a light haptic fires at the threshold. Releasing short of the threshold springs the toast back.

  ### [`NeoButtonColorTokens`](/theming/design-tokens) & [`NeoCheckboxColorTokens`](/theming/design-tokens)

  * New per-widget color token classes at `theme.buttonColors` and `theme.checkboxColors`, providing per-variant fills, foregrounds, and interaction colors that can be overridden per theme.

  ### [`NeoShadowTokens`](/theming/design-tokens) `extraSmall`

  * Added an `extraSmall` shadow tier for subtle elevation.

  ## Improvements 💪

  ### [`NeoButton`](/widgets/buttons/button) Visuals Reworked

  * Simplified rest/interaction state resolution with a single `bgInteractionColor`; themed `extraSmall` shadow on the `primary` variant that fades on press; unified hover/press color via `neoInteractionColor`; added a subtle press-scale animation.

  ### [`NeoCheckbox`](/widgets/inputs/checkbox) Visuals Reworked

  * Custom-painted check and minus marks with animated stroke draw/unwind; scale-on-press feedback; new fixed 20×20 hit target with an inside-aligned border.

  ### [`NeoSidebarButton`](/widgets/buttons/sidebar-button) Interaction

  * Press-scale animation and tighter corner radius aligned with the new radius scale.

  ### [`NeoToast`](/widgets/overlays/toast) Animations

  * Improved enter/exit and update animations.

  ### Animated Labels in [`NeoButton`](/widgets/buttons/button), [`NeoToast`](/widgets/overlays/toast), [`NeoDropdownField`](/widgets/pickers/dropdown-field), [`NeoBadge`](/widgets/utilities/badge)

  * Labels in these widgets now render via `NeoFluidText`, so text updates animate smoothly rather than snapping.

  ### [`NeoDropdownField`](/widgets/pickers/dropdown-field) Sticky Section Headers

  * Section headers stay pinned while scrolling through items in the dropdown.

  ### [`NeoTable`](/widgets/utilities/table) Performance

  * O(1) row-ID lookups, fixed `itemExtentBuilder` extents on the underlying list, and lighter per-build allocations. Per-frame rebuilds during drag are scoped to leaf `AnimatedBuilder` / `ValueListenableBuilder` widgets so non-animating rows no longer rebuild every frame.

  ### [`NeoHaptics`](/utilities/haptics) Quieter Debug Console

  * Removed noisy debug logs from `NeoHaptics.light`, `NeoHaptics.heavy`, and `NeoHaptics.error`.

  ## Fixes 🐞

  * Fixed unexpected vertical padding in [`NeoTable`](/widgets/utilities/table) expanded rows.
</Update>

<Update label="1.8.0" description="18-03-2026">
  # 1.8.0

  Side panels, image picking, and quality-of-life improvements! This release introduces the new side panel system for both layouts, an image picker widget, expanded modal sizes, and refined button interactions.

  ## BREAKING CHANGES 🚨

  ### [`NeoButton`](/widgets/buttons/button) Default Hold Duration

  * Changed default `holdDuration` from 3 seconds to 1 second for a snappier hold-to-confirm experience. If you rely on the previous default, explicitly set `holdDuration: const Duration(seconds: 3)`.

  ## New 🚀

  ### [`NeoSidePanel`](/layouts/side-panel)

  * New utility class for managing side panel visibility alongside your layouts. Supports `show`, `hide`, and `toggle` methods with customizable width and ID-based panel management.
  * Works with both [`NeoSidebarLayout`](/layouts/sidebar) and [`NeoTopbarLayout`](/layouts/topbar).

  ### [`NeoImagePicker`](/widgets/pickers/image-picker)

  * New widget for selecting images via file picker or drag-and-drop. Features automatic format validation, file size limits, loading states, error handling, and a clear button with hover-to-swap interaction.

  ### [`NeoModal`](/widgets/overlays/modal) Extra Large Size

  * Added `extraLarge` option to `NeoModalSize` enum (1536px max width) for displaying larger modal dialogs.

  ## Improvements 💪

  ### [`NeoModal`](/widgets/overlays/modal) Size Adjustments

  * Increased `medium` modal width from 500px to 640px and `large` from 600px to 896px for better content display.

  ### [`NeoButton`](/widgets/buttons/button) Nudge Animation

  * Hold-to-confirm buttons now show a nudge animation when quickly tapped, visually indicating that the button requires holding.

  ### Loading Indicator Update

  * [`NeoButton`](/widgets/buttons/button) and [`NeoToast`](/widgets/overlays/toast) now use the `circleNotch` loading icon for a cleaner look.

  ### [`NeoCard`](/widgets/utilities/card) Clipping

  * Card now properly clips child content to prevent overflow beyond the border radius.

  ## Fixes 🐞

  * Fixed an issue where phantom touch events on iOS could immediately dismiss [`NeoModal`](/widgets/overlays/modal) upon mounting.
</Update>

<Update label="1.7.0" description="21-01-2026">
  # 1.7.0

  **Happy New Year!** 🎉

  Major field improvements, new topbar layout, and Dart SDK upgrade! This release introduces hold-to-confirm buttons, enhanced input field focus management, and the new [`NeoTopbarLayout`](/layouts/topbar) for top navigation patterns.

  ## BREAKING CHANGES 🚨

  ### Field Widget API Changes

  * **`Input field submitOnBlur removal`**: Removed `submitOnBlur` property from [`NeoTextField`](/widgets/inputs/text-field), [`NeoTextArea`](/widgets/inputs/text-area), [`NeoDateField`](/widgets/inputs/date-field), and [`NeoTimeField`](/widgets/inputs/time-field). Use the new `onBlur` callback instead.
  * **`NeoDateField`**: Changed `onSubmitted` callback signature from `ValueChanged<String>` to `ValueChanged<String?>`. The callback now receives `null` when the field is cleared or contains invalid input.
  * **`NeoTimeField`**: Changed `onSubmitted` callback signature from `ValueChanged<TimeOfDay>` to `ValueChanged<TimeOfDay?>`. The callback now receives `null` when the field is cleared or contains invalid input.
  * **Duration tokens renamed to semantic values**: The `NeoDurationTokens` class now uses semantic values (`short`, `medium`, `long`) instead of specific use-case tokens (`pressed`, `hover`, `sidebar`, `toggleSwitch`, `dropdown`). Update any code that references the old duration token properties to use the appropriate semantic value.
  * **Minimum Dart SDK version increased**: Now requires Dart SDK `>=3.10.0` (previously `>=3.3.3`)
  * **Minimum Flutter version increased**: Now requires Flutter `>=3.38.0` (previously `>=3.0.0`)

  ## New 🚀

  ### [`NeoTopbarLayout`](/layouts/topbar)

  * New layout widget for creating applications with top navigation bars. The layout includes a top bar area and a main content area with automatic safe area handling.

  ### [`NeoButton`](/widgets/buttons/button) Hold-to-Confirm

  * Added `requireHold` property for hold-to-confirm functionality. When enabled, users must hold the button for a specified duration before the action is triggered.
  * Added `holdDuration` property to customize the hold duration (defaults to 3 seconds).
  * Note: `requireHold` is only supported for `NeoButtonVariant.outlined` buttons.
  * Added `fgHoverColor` and `fgPressedColor` properties for customizing foreground colors in hover and pressed states.
  * Added `buttonFgHover` and `buttonFgPressed` color tokens to `NeoColorTokens` for theme customization.

  ### Input Field Enhancements

  * Added `showClearButton` property to [`NeoTextField`](/widgets/inputs/text-field), [`NeoDateField`](/widgets/inputs/date-field), and [`NeoTimeField`](/widgets/inputs/time-field) for easier input clearing
  * Added `onBlur` callback to [`NeoTextField`](/widgets/inputs/text-field), [`NeoTextArea`](/widgets/inputs/text-area), [`NeoDateField`](/widgets/inputs/date-field), and [`NeoTimeField`](/widgets/inputs/time-field) for explicit blur event handling
  * Added optional `focusNode` property to [`NeoDateField`](/widgets/inputs/date-field) and [`NeoTimeField`](/widgets/inputs/time-field) for external focus management

  ## Improvements 💪

  ### Input Field Enhancements

  * Improved focus handling in all input fields to prevent duplicate unfocus events when focus changes occur within submission callbacks.
  * [`NeoDateField`](/widgets/inputs/date-field) and [`NeoTimeField`](/widgets/inputs/time-field) now properly handle Enter key presses to submit and unfocus when the field is complete or empty.
  * Added animated helper text transitions to [`NeoTextField`](/widgets/inputs/text-field), [`NeoDateField`](/widgets/inputs/date-field), [`NeoTimeField`](/widgets/inputs/time-field), [`NeoTextArea`](/widgets/inputs/text-area), and [`NeoDropdownField`](/widgets/pickers/dropdown-field) for smoother error and description text display.

  ### Dart Dot Shorthands Support

  * With the Dart SDK upgrade to 3.10.0+, you can now use the new [dot shorthand syntax](https://dart.dev/language/dot-shorthands) in your code for more concise syntax.

  **Examples:**

  | Before                                               | After                                      |
  | ---------------------------------------------------- | ------------------------------------------ |
  | `variant: NeoButtonVariant.outlined`                 | `variant: .outlined`                       |
  | `mainAxisSize: MainAxisSize.min`                     | `mainAxisSize: .min`                       |
  | `padding: EdgeInsets.all(theme.spacings.extraSmall)` | `padding: .all(theme.spacings.extraSmall)` |

  ### Riverpod Updates

  * Updated `riverpod_annotation` to version `4.0.0` for improved performance and new features.

  ## Fixes 🐞

  * Fixed duplicate submission bug where pressing Enter would trigger both Enter submission and blur submission. Fields now track submission source to prevent duplicate calls to `onSubmitted`.
</Update>

<Update label="1.6.0" description="21-11-2025">
  # 1.6.0

  Enhanced dropdown capabilities, improved field submission behavior, and streamlined sidebar state management. This release introduces multi-select dropdowns, automatic field submission on blur, and performance improvements to sidebar state handling.

  ## BREAKING CHANGES 🚨

  ### [`NeoDropdownField`](/widgets/pickers/dropdown-field) API Changes

  * The widget is now generic and uses `selected` instead of `selectedId`
  * **Migration**:
    * Change `selectedId: String?` to `selected: String?` (for single-select) or `selected: Set<String>` (for multi-select)
    * Change `onChanged: ValueChanged<String?>` to `onChanged: ValueChanged<String?>` (single-select) or `ValueChanged<Set<String>>` (multi-select)

  ### [`NeoSidebarStates`](/layouts/sidebar) API Changes

  * The property `activeItem` and method `setActiveItem(String item)` have been removed from `NeoSidebarStates` and `NeoCurrentSidebarStates` notifier
  * **Rationale**: This property was not needed as you can determine the current path locally in your application code. Use the current path to decide which `NeoSidebarButton` should be active, rather than storing it in the sidebar state. Additionally, tracking the active path did not fit within the scope of sidebar states, which should focus on UI state (collapsed, hidden, etc.) rather than application routing state
  * **Migration**: Remove all references to `activeItem` and any calls to `setActiveItem()`. Instead, determine the active button based on your current route path locally

  ## New 🚀

  ### [`NeoDropdownField`](/widgets/pickers/dropdown-field) Multi-Select Support

  * Added multi-select support to `NeoDropdownField`. When using `Set<String>` as the generic type, users can select multiple items
  * Selected items are displayed as comma-separated labels

  ## Improvements 💪

  ### Field Submission Behavior

  * Added `submitOnBlur` property to [`NeoTextField`](/widgets/inputs/text-field), [`NeoTextArea`](/widgets/inputs/text-area), [`NeoDateField`](/widgets/inputs/date-field), and [`NeoTimeField`](/widgets/inputs/time-field). When enabled (defaults to `true`), these fields will automatically call `onSubmitted` when the field loses focus, providing better form submission behavior

  ### [`NeoModal`](/widgets/overlays/modal) Size Options

  * Added `size` parameter to `NeoModal.show()` method. The modal now supports three size options (`NeoModalSize.small`, `NeoModalSize.medium`, `NeoModalSize.large`) with corresponding max widths (400px, 500px, 600px respectively). Defaults to `NeoModalSize.small` for backward compatibility

  ### [`NeoSidebarStates`](/layouts/sidebar) Performance

  * Improved sidebar state management performance. `NeoSidebarStates` provider now only initializes when actually using `NeoSidebarLayout`, preventing unnecessary provider initialization in apps that don't use the sidebar layout

  ## Fixes 🐞

  * Fixed validation assert: `maintainFocusOnSubmit` and `submitOnBlur` cannot both be `true` in [`NeoTextField`](/widgets/inputs/text-field) and [`NeoTextArea`](/widgets/inputs/text-area). An assert now prevents this invalid configuration
  * Fixed `maintainFocusOnSubmit` not working properly in [`NeoTextField`](/widgets/inputs/text-field). The field now correctly maintains focus when Enter is pressed and `maintainFocusOnSubmit` is `true`
  * Fixed duplicate submission bug where pressing Enter would trigger both Enter submission and blur submission. Fields now track submission source to prevent duplicate calls to `onSubmitted`
</Update>

<Update label="1.5.0" description="09-10-2025">
  # 1.5.0

  Introducing Neo's time input capabilities! This release adds a time field widget with segmented input and intelligent navigation.

  ## New 🚀

  ### [`NeoTimeField`](/widgets/inputs/time-field)

  * **Time input widget** with segmented HH:MM format and advanced interaction features:
    * **Smart segmented input**: HH:MM format with intelligent auto-advance between segments
    * **Keyboard navigation**: Arrow keys for navigation between segments and value increment/decrement
    * **Input validation**: Real-time value capping for valid time ranges (00:00-23:59)
</Update>

<Update label="1.4.1" description="24-09-2025">
  # 1.4.1

  Quick bug fix release addressing field widget issues within modals and text area resizing behavior.

  ## Improvements 💪

  * Fixed [`NeoTextArea`](/widgets/inputs/text-area) manual resize behavior by correcting height calculation

  ## Fixes 🐞

  * Fixed a bug where [`NeoTextField`](/widgets/inputs/text-field) and [`NeoDropdownField`](/widgets/pickers/dropdown-field) were throwing errors when used inside of a [`NeoModal`](/widgets/overlays/modal)
</Update>

<Update label="1.4.0" description="18-09-2025">
  # 1.4.0

  Major expansion of Neo's input capabilities! 🚀 This release introduces the multi-line NeoTextArea widget, comprehensive date validation utilities, a clean card component, and significant improvements to date field functionality with a completely rewritten segmented input experience.

  ## BREAKING CHANGES 🚨

  [**`NeoDateField API Changes:`**](/widgets/inputs/date-field)

  * Changed from `DateTime?` properties to string-based API for enhanced flexibility
  * `dateString` property replaces previous date properties
  * `onSubmitted(String)` callback replaces previous `onSubmitted(DateTime?)` callback
  * This enables custom validation flows, internationalized error messages, and auto-correction features

  ## New 🚀

  ### [`NeoTextArea`](/widgets/inputs/text-area)

  * **Multi-line text input widget** with advanced features:
    * **Auto-resizing**: Configurable min/max lines with automatic height adjustment
    * **Manual resizing**: Optional drag handle for user-controlled sizing
    * **Keyboard shortcuts**: Smart text submission (Enter vs Cmd/Ctrl+Enter based on `submitOnEnter` setting)
    * **Comprehensive properties**: Label, placeholder, description, error text, validation, and focus management

  ### [`NeoCard`](/widgets/utilities/card)

  * **Clean card component** with configurable padding (defaults to `theme.spacings.large`)
  * Perfect for grouping content with consistent styling and subtle shadows

  ### [`NeoDateValidator`](/utilities/validators/date-validator)

  * **Comprehensive date validation utility** with 7 validation methods:
    * `validate(String)` - Parses and validates DD-MM-YYYY format with detailed error messages
    * `validateIsBefore(DateTime, DateTime)` - Validates date is before another date
    * `validateIsAfter(DateTime, DateTime)` - Validates date is after another date
    * `validateIsInRange(DateTime, DateTime, DateTime)` - Validates date is within range (inclusive)
    * `validateIsNotFuture(DateTime)` - Validates date is today or earlier
    * `validateIsNotPast(DateTime)` - Validates date is today or later
    * `format(DateTime)` - Formats DateTime objects to DD-MM-YYYY string

  ### Other New Features

  * [**`NeoApp`**](/utilities/app): Added optional `wrapper` parameter for custom root-level widget wrapping

  ## Improvements 💪

  ### [`NeoDateField`](/widgets/inputs/date-field) - Complete Rewrite

  * **Smart segmented input**: DD-MM-YYYY format with intelligent auto-advance between segments
  * **Keyboard navigation**: Arrow keys for navigation between segments and value increment/decrement
  * **Focus management**: Proper tab order integration with automatic segment selection
  * **Input validation**: Real-time value capping and context-aware month day limits
  * **Enhanced UX**: Tap-to-select segments, automatic padding, and seamless interaction flow
  * **Flexible error handling**: Allows invalid dates in field state, moving validation to end-user side for custom UX flows

  ### [`NeoTextField`](/widgets/inputs/text-field) Improvements

  * **Enhanced platform consistency**: Replaced `EditableText` with `CupertinoTextField` for better native behavior
  * **Improved error handling**: Fixed error text display to only show when error text is not empty, preventing layout jumps

  ### [`NeoModal`](/widgets/overlays/modal) Enhancement

  * **Enhanced backdrop**: Added gradient effect for smoother visual transition

  ## Fixes 🐞

  * [**`NeoTextField`**](/widgets/inputs/text-field): Fixed error text layout jumps from empty error messages
</Update>

<Update label="1.3.0" description="14-08-2025">
  # 1.3.0

  API standardization and UX polish across the board. This release finalizes the Date Field, unifies disabled/error states, and introduces a few small but meaningful visual improvements and fixes.

  ## BREAKING CHANGES 🚨

  These rename-only changes standardize content and boolean property names. Behavior is unchanged.

  | Widget                                                  | Old Property | New Property   |
  | ------------------------------------------------------- | ------------ | -------------- |
  | [`NeoButton`](/widgets/buttons/button)                  | `text`       | `label`        |
  | [`NeoSidebarButton`](/widgets/buttons/sidebar-button)   | `text`       | `label`        |
  | [`NeoSidebarButton`](/widgets/buttons/sidebar-button)   | `caret`      | `hasCaret`     |
  | [`NeoBadge`](/widgets/utilities/badge)                  | `text`       | `label`        |
  | [`NeoTable`](/widgets/utilities/table)                  | `selectable` | `isSelectable` |
  | [`NeoTooltip`](/widgets/overlays/tooltip)               | `text`       | `label`        |
  | [`NeoTooltip`](/widgets/overlays/tooltip)               | `trigger`    | `child`        |
  | [`NeoTabBar`](/widgets/navigation/tab-bar)              | `expanded`   | `isExpanded`   |
  | [`NeoTab`](/widgets/navigation/tab-bar#tab-properties)  | `text`       | `label`        |
  | [`NeoDropdownMenuItem`](/widgets/pickers/dropdown-menu) | `danger`     | `isDanger`     |

  ## New 🚀

  * [**`NeoDateField`**](/widgets/inputs/date-field): finalized segmented DD-MM-YYYY input
    * Keyboard navigation and smart selection handling
    * Normalizes input and supports disabled state
    * New `onSubmitted(DateTime? value)` callback
  * Added `autofocusSearchOnOpen` property to [`NeoDropdownField`](/widgets/pickers/dropdown-field). When `true`, the search field will be focused when the dropdown is opened
  * Added `isEnabled` property to [`NeoTextField`](/widgets/inputs/text-field), [`NeoDropdownField`](/widgets/pickers/dropdown-field) and [`NeoToggleSwitch`](/widgets/controls/toggle-switch) for consistent disabled-state visuals and behavior

  ## Improvements 💪

  * Error state now shows a danger-colored border when `errorText` is set across [`NeoTextField`](/widgets/inputs/text-field), [`NeoDropdownField`](/widgets/pickers/dropdown-field), and [`NeoDateField`](/widgets/inputs/date-field)
  * Refined `shadows.small` token for subtler depth

  ## Fixes 🐞

  * Deselect text when unfocusing in [`NeoTextField`](/widgets/inputs/text-field)
</Update>

<Update label="1.2.0" description="07-08-2025">
  # 1.2.0

  Major improvements across the framework! 🚀 This release introduces a new Modal widget and brings significant enhancements to buttons, toasts, theming—plus important API improvements and some breaking changes to be aware of.

  ## BREAKING CHANGES 🚨

  * [**`NeoButton`**](/widgets/buttons/button): Removed `NeoButtonSize.expanded` from the `size` property enum—use the new `isExpanded` boolean property instead
  * [**`NeoTabBar`**](/widgets/navigation/tab-bar): `activeTabId` and `onChange` properties are now required (changed from nullable)
  * **Field widgets height change**: [`NeoTextField`](/widgets/inputs/text-field), [`NeoDropdownField`](/widgets/pickers/dropdown-field), and [`NeoDateField`](/widgets/inputs/date-field) changed from flexible height to fixed height (44.0) - may affect layouts relying on flexible field height

  ## New 🚀

  ### [`NeoModal`](/widgets/overlays/modal)

  * A new overlay widget for creating modals, dialogs, confirmations, and custom popups
  * Features builder-based API with `contentBuilder` and `actionsBuilder` for flexible layouts

  ### Theming System Additions

  * Added `NeoShadowTokens` with `small` and `medium` shadow definitions
  * Added semantic color tokens: `success`/`onSuccess`, `warning`/`onWarning`, `danger`/`dangerHover`/`dangerPressed`/`onDanger`
  * Added button-specific tokens: `buttonBg`, `buttonBgHover`, `buttonBgPressed`, `buttonFg`
  * Added contrast tokens: `fgOnContrast` and `bgContrast`
  * Added `green` color to `NeoPalette` with `fgSuccess` and `fgOnSuccess` tokens

  ### [`NeoButton`](/widgets/buttons/button) Additions

  * Added new states: `isLoading`, `isDanger`, `isEnabled` properties for loading, danger, and disabled states
  * Added a new variant: `NeoButtonVariant.link`, for underlined link-style buttons
  * Added `isExpanded` property for expanded buttons (replaces `NeoButtonSize.expanded`)
  * Added `isCaretRotated` property for animated dropdown-style carets
  * Added enhanced color customization: `bgColor`, `bgHoverColor`, `bgPressedColor`, and `fgColor` properties

  ### [`NeoToast`](/widgets/overlays/toast) Additions

  * Added `NeoToastType` enum with preset configurations (`info`, `loading`, `success`, `warning`, `danger`)
  * Added `NeoToast.update()` method for dynamically updating existing toasts
  * Added toast descriptions with optional `description` parameter
  * Added sophisticated toast stacking system with dynamic height calculation

  ### Other Widget Additions

  * Added `label` property to [`NeoDivider`](/widgets/utilities/divider) for labeled dividers
  * Added `errorText` and `allowDeselect` properties to [`NeoDropdownField`](/widgets/pickers/dropdown-field)
  * Added `fixedRowHeight` property to [`NeoTable`](/widgets/utilities/table) for consistent row heights
  * Added optional `focusNode` property to [`NeoTextField`](/widgets/inputs/text-field) for better focus management
  * Added smart log filtering to [`NeoLogger`](/utilities/logger) with automatic build mode detection
    * Debug builds show all log levels (`trace`, `debug`, `info`, `warning`, `error`, `fatal`) for comprehensive debugging
    * Release builds only show info level and above to reduce noise and improve performance
    * This means you can safely leave `trace` and `debug` calls throughout your codebase during development - they won't clutter the user experience in production builds

  ## Improvements 💪

  ### [`NeoButton`](/widgets/buttons/button) Improvements

  * Better interaction feedback with refined animations and shadows
  * More sophisticated color calculations for different variants and states

  ### [`NeoToast`](/widgets/overlays/toast) Improvements

  * Complete visual redesign with modern card-based styling and enhanced shadows
  * Intelligent preset system with automatic icon/color configuration and auto-dismiss behavior
  * Advanced animation system with staggered entrance, elastic positioning, and smooth dismissal

  ### Theming & Widget Improvements

  * Restructured color palette with semantic naming (e.g., `green500`, `red500`, `red600`)
  * [`NeoDropdownField`](/widgets/pickers/dropdown-field): Improved search bar implementation
  * Standardized logging format across all Neo widgets with consistent `[Neo] [WidgetName]` prefixes for easier debugging and filtering

  ## Fixes 🐞

  * Fixed toast positioning, stacking, memory leaks, and race conditions
  * Fixed `isDismissable` bug in dropdown widgets
  * Updated deprecated `withOpacity()` calls to use `withValues(alpha:)` for Flutter compatibility
</Update>

<Update label="1.1.0" description="10-07-2025">
  # 1.1.0

  A new widget has landed! 🙌 (Plus a few improvements)

  ## New 🚀

  * Added [`NeoTabBar`](/widgets/navigation/tab-bar). It's a bar... of tabs! Useful for content switching.
  * Added [`NeoTab`](/widgets/navigation/tab-bar#tab-properties). This is used within [`NeoTabBar`](/widgets/navigation/tab-bar) to pass data like text and icon.

  ## Improvements 💪

  * Added the `enabled` property to [`NeoCheckbox`](/widgets/inputs/checkbox). If it is false, it is not clickable and has a visual disabled state
  * Added `onRowHover` property to [`NeoTable`](/widgets/utilities/table). This is a callback that can be used, for example, to show action buttons only on hover over a single row, giving your overall screen a cleaner look
  * Removed the scaling animation from both [`NeoButton`](/widgets/buttons/button) and [`NeoSidebarButton`](/widgets/buttons/sidebar-button)
  * Removed the border from the `filled` variant of the [`NeoButton`](/widgets/buttons/button); this gives it a cleaner look
</Update>

<Update label="1.0.1" description="09-05-2025">
  # 1.0.1

  Hey there! 👋 Here's a quick improvement and fix for you!

  ## Improvements 💪

  * Added `defaultLightTheme` and `defaultDarkTheme` properties to [`NeoApp`](/utilities/app). This will now allow you to set default themes at startup. When not provided, [`NeoApp`](/utilities/app) will use the default `NeoThemeLight` and `NeoThemeDark`

  ## Fixes 🐞

  * We forgot to add the new [`NeoSidebarLayout`](/layouts/sidebar) to `neo.dart`, so you had to import this separately to use it. This is fixed!
</Update>

<Update label="1.0.0" description="08-05-2025">
  # 1.0.0

  The official 1.0.0 release of Neo! 🎉 This is a major milestone in our journey to empower developers to create stunning, responsive apps with ease. From the first pre-release almost exactly one year ago to now, we've been building a robust foundation, and this release brings powerful new features and polished improvements to make your development experience smoother and more delightful. Now let's craft beautiful apps together! 🚀

  ## New 🚀

  * Added the [`NeoTable`](/widgets/utilities/table) widget. We finally got tables now! 🎉 More features to come in the future.
    * Also added [`NeoTableColumn`](/widgets/utilities/table#column-properties) and [`NeoTableRow`](/widgets/utilities/table#row-properties). You'll use these widgets to populate the table
  * Added the [`NeoSidebarLayout`](/layouts/sidebar) assembly (we're still deciding on the naming of these big "widgets"). It manages the layout of a `NeoSidebar` and main content, providing the ability to collapse or completely hide the sidebar. Hiding the sidebar will now also completely hide the padding around the main area, giving a more fullscreen feel. This change animates so everything feels fluent! The [`NeoSidebarLayout`](/layouts/sidebar) also supports mobile platforms, and there the sidebar pushes the main content to the side instead of scaling it

  ## Improvements 💪

  * Made the [`NeoBadge`](/widgets/utilities/badge) stable. It now always scales correctly to its contents; this was a bit wonky before, but not anymore!
  * Improve the look of the [`NeoBadge`](/widgets/utilities/badge); it's now a lot more visible in different theming scenarios.
  * Made the [`NeoSidebarButton`](/widgets/buttons/sidebar-button) work with the improved [`NeoBadge`](/widgets/utilities/badge), it now correctly animated into an indicator when collapsing the sidebar
  * Added `isIndeterminate` property to [`NeoCheckbox`](/widgets/inputs/checkbox) which will show a dash inside of the checkbox for indeterminate states like a select/deselect all box in a table when some but not all rows are selected
</Update>

<Update label="0.4.1" tags={["Pre-release"]} description="21-02-2025">
  # 0.4.1

  ## New 🚀

  * Added haptic feedback support for MacOS trackpads
  * Added new [`NeoHaptics`](/utilities/haptics)`.error()` haptic

  ## Improvements 💪

  * Added optional MacOS support toggle for haptic feedback methods (disabled by default since trackpads already provide native feedback for clicks - enable with `enableMacOS: true` when additional feedback is desired, e.g., during drag operations)
  * Updated documentation to align with all the recent changes and the Neo CLI
</Update>

<Update label="0.4.0" tags={["Pre-release"]} description="11-02-2025">
  # 0.4.0

  Here we go again... We forgot to keep track of changes again so this is a bit rough. 😵‍💫 But... we've implemented a new system for creating release notes so from now on it should be a lot better! 🎉

  There are a lot more small improvements and fixes but here are the most notable ones:

  ## New 🚀

  * Added Toasts! (`NeoToastProvider` & [`NeoToast`](/widgets/overlays/toast))
  * Added [`NeoCodeBlock`](/widgets/utilities/code-block)
  * Added [`NeoDateField`](/widgets/inputs/date-field) (Keep in mind that this is an alpha-release and it is very much not ready for production use)
  * Added [`NeoRotation`](/utilities/rotation)

  ## Improvements 💪

  * Added search functionality to [`NeoDropdownField`](/widgets/pickers/dropdown-field) (Including an empty state)
  * Added sticky header functionality to `NeoDropdown`
  * Added icon and suffix support to [`NeoTextField`](/widgets/inputs/text-field)
  * Improved animation curves of [`NeoToggleSwitch`](/widgets/controls/toggle-switch)
  * Added `keyboardType`, `inputFormatters`, `errorText`, `autofillHints`, `onSubmitted` and `maintainFocusOnSubmit` properties to [`NeoTextField`](/widgets/inputs/text-field)
  * We've completely overhauled the way overlays work
  * Improved the docs
</Update>

<Update label="0.3.0" tags={["Pre-release"]} description="22-09-2024">
  # 0.3.0

  This is a big pre-release with a lot of changes. We kind of forgot to keep track of changes so this is a bit rough. 😵‍💫

  ## New 🚀

  * [`NeoSidebarButton`](/widgets/buttons/sidebar-button) A button widget specifically designed for the use in sidebars
  * [`NeoHaptics`](/utilities/haptics) A system that provides haptic feedback on iOS (Also works with Apple Pencil!)
  * `NeoSidebar`
  * [`NeoSafeArea`](/widgets/utilities/safe-area) A widget that ensures content is not obstructed by system UI
  * [`NeoToggleSwitch`](/widgets/controls/toggle-switch)
  * [`NeoCheckbox`](/widgets/inputs/checkbox)
  * [`NeoLogger`](/utilities/logger) A system that provides a better debugging experience
  * [`NeoBadge`](/widgets/utilities/badge) A widget designed to display status information or tags, for instance
  * [`NeoDivider`](/widgets/utilities/divider) A widget that can be used to separate content
  * [`NeoTooltip`](/widgets/overlays/tooltip) A widget that can be used to display information on hover over a trigger
  * [`NeoTextField`](/widgets/inputs/text-field) A widget that can be used to input text
  * `NeoDropdownSectionPrimitive`
  * `NeoFieldPrimitive`
  * `NeoListItemPrimitive`
  * `NeoDropdown`
  * `NeoDropdownMenuSection` A section of a dropdown menu
  * `NeoDropdownMenuItem` A single item in a dropdown menu (Used in `NeoDropdownMenuSection`)
  * `NeoDropdownFieldSection` A section of a dropdown field
  * `NeoDropdownFieldItem` A single item in a dropdown field (Used in `NeoDropdownFieldSection`)

  ## Improvements 💪

  * Improved the theming system
  * Improved [`NeoButton`](/widgets/buttons/button)
</Update>

<Update label="0.2.0" tags={["Pre-release"]} description="28-05-2024">
  # 0.2.0

  ## New 🚀

  * Added `primary`, `filled`, `outline` and `ghost` variants for the [`NeoButton`](/widgets/buttons/button)
  * Replaced the font `Geist` with `Inter`. This is now the default font for Neo
  * Added more (and renamed some) colors, textstyles, radii, spacings and durations

  ## Improvements 💪

  * Made the default text blue and ~~strikethrough~~ so it's obvious where a textstyle should be added
</Update>

<Update label="0.1.0" tags={["Pre-release"]} description="25-04-2024">
  # 0.1.0

  ## New 🚀

  * Added [`NeoInitializer`](/utilities/initializer) widget. A utility widget designed to streamline the initialization process of the Neo framework. This widget manages crucial startup tasks, ensuring that the environment is properly set up before any UI components are loaded
  * Added `Geist` and `Geist Mono` fonts. These are now the default fonts for Neo
</Update>

<Update label="0.0.1" tags={["Pre-release"]} description="25-04-2024">
  # 0.0.1

  The first pre-release of Neo is here! 🎉 This is just the beginning—our starting line. With this release, we lay the groundwork for a future where our developers can build beautiful apps incredibly fast. Here's to the journey ahead! 🍻

  ## New 🚀

  * [`NeoApp`](/utilities/app) widget. This will act as the root of the app and manage everything
  * [`NeoButton`](/widgets/buttons/button) widget
  * Initial release of the Neo theming system, including:
    * Basic light and dark theme support
    * Dynamic theme switching based on system settings and user preferences
    * Basic color, radii and spacing settings in `NeoTheme` class
</Update>
