# Release Notes for Version 19.2.0

## Content

## Enhancements from the Previous Release

### Workbook

* **[Excel-Compatible Focus Cell](/spreadjs/docs/features/workbook/focus-cell)**: Added an Excel-compatible focus-cell indicator that highlights the active row and column.

#### Worksheet

* **[Rename a Worksheet from Its Sheet Tab](/spreadjs/docs/features/workbook/tabstrip)**: Worksheets can now be renamed from the sheet-tab context menu in both SpreadJS and Designer.
* **[Enhanced Worksheet Background Images](/spreadjs/docs/features/worksheet/background-image)**: Worksheet background images can now be repeated or rendered in front of worksheet content, supporting watermark-style presentation in worksheets, printing, and PDF export.
* **[Commit Input Command](/spreadjs/docs/features/keyboard-actions/keyboard)**: Added the `commitInput` command for committing the current edited value and leaving edit mode without moving the active cell.

#### Cell Formatting

* **[Rounded Cell Borders](/spreadjs/docs/features/cells/borders)**: Added rounded border support across worksheet viewport and header areas, including individual cells, ranges, and spans. Rounded borders make it easier to create grouped sections and report-style forms and are supported in Designer, printing, and PDF export.
* **[Full-Width Digits in Drag Fill Series](/spreadjs/docs/features/cells/AutoFillData/AutoFillStrings)**: Drag fill can now continue text series containing full-width decimal digits (`０–９`) while preserving the applicable digit width.

#### Formulas and Calculation

* **[FILTERXML Function](/spreadjs/docs/formulareference/FormulaFunctions/web-functions/filterxml)**: Added the `FILTERXML(xml, xpath)` function for extracting data from XML content by using an XPath expression.
* **[East Asian Full-Width Formula Input](/spreadjs/docs/features/formulas/east-asian-full-width-formula-input)**: Supported formula-entry workflows now recognize East Asian full-width formula characters and function names and normalize them to their half-width equivalents.

#### What-If Analysis

* **[Scenarios](/spreadjs/docs/features/what-if-analysis/scenario-manager)**: Added workbook-level scenarios for saving and applying named sets of changing-cell values across worksheets.

#### TableSheet

* **[Sort and Filter APIs](/spreadjs/docs/features/tablesheet/tablesheet-operations/tablesheet-sort-filter)**: Added `filter()` and `sort()` APIs for reading and applying TableSheet filter and sort definitions, together with `removeFilter()` and `removeSort()` for clearing them.

#### Charts

* **[Plot Area Customization](/spreadjs/docs/features/Charts/ConfigureChartElements/chart-area)**: Chart plot areas can now be independently customized for fill, border, size, and layout through `chart.plotArea()`.
* **[Axis Title Text Direction](/spreadjs/docs/features/Charts/ConfigureChartElements/ConfiguringAxes)**: Chart axis titles now support horizontal, vertical, rotated, and stacked text directions through `IAxisTitle.textDirection`, with improved Excel compatibility.
* **[Data Label Font Styling](/spreadjs/docs/features/Charts/ConfigureChartElements/ConfiguringDataLabel)**: Chart data labels now support font family, size, color, bold, italic, strikethrough, and underline formatting.

#### Sparklines

* **[Progress Bar Sparkline](/spreadjs/docs/features/sparkmain/progress-sparkline)**: Added the formula-driven `PROGRESSSPARKLINE` function for presenting progress directly within a cell, with configurable display mode, colors, and percentage display.

#### Printing

* **[Custom Print Lines](/spreadjs/docs/features/printing/customize-print-line-styles)**: Print-area and page-break preview lines can now be customized with CSS, including their color and width.
* **[Culture-Aware Paper Size and Page Setup Units](/spreadjs/docs/features/printing/configure-default-paper-size-and-page-setup-units)**: New print settings can now use culture-based defaults for paper size and Designer page-setup display units.

#### Touch Support

* **[Touch Selection Indicator Customization](/spreadjs/docs/touchsupport/touchselect)**: Touch selection-indicator sizes can now be customized.

#### Designer Ribbon Component

* **[Ribbon KeyTips](/spreadjs/docs/spreadjs-designer-component/toolbar-ribbon/ribbon-keytips)**: Designer now provides Excel-like Ribbon KeyTips for accessing commands from the keyboard. KeyTips can be activated with `Alt` or `F10` and configured through the Designer keyboard settings.
* **[Scenario Manager](/spreadjs/docs/spreadjs-designer-component/spdesignerwork/what-if-analysis-data-table)**: Designer now provides tools for managing and merging scenarios and for generating Scenario Summary and PivotTable Summary worksheets.
* **[CJK Custom Number Format Escapes](/spreadjs/docs/spreadjs-designer-component/customizations/designer-customize-culture)**: Designer now recognizes `!` as a localized escape character in custom number formats for Chinese, Japanese, and Korean environments.
* **[Reapply Filters](/spreadjs/docs/spreadjs-designer-component/spdesignerwork/sort-and-filter)**: Designer can now reapply worksheet and standard table filters after the underlying data changes.
* **[First Row as Filter Header](/spreadjs/docs/spreadjs-designer-component/spdesignerwork/sort-and-filter)**: Added the `firstRowAsFilterHeader` option for treating the first row of a selection as the filter header and filtering only the rows below it.

#### PivotTable

* **[DataManager Table and View Data Sources](/spreadjs/docs/features/pivot-table/create-pivot-table)**: PivotTables can now use DataManager Tables and Views directly as data sources, including relation-based View results and configurable source refresh behavior.
* **[Dimension Subtotals](/spreadjs/docs/features/pivot-table/dimension-subtotals)**: PivotTables now support Dimension Subtotals for row and column fields, corresponding to Excel custom subtotals. The settings can be managed through `pivotTable.dimensionSubtotals()` and preserved in supported SpreadJS and Excel file workflows.

#### ReportSheet

* **[Report Generation Events](/spreadjs/docs/features/reportsheet/reportsheet/render-mode)**: Added the `ReportGenerationStageChanged` event, allowing applications to respond to report-generation stages and provide progress feedback during supported report operations.

#### GanttSheet

* **[Progress Lines](/spreadjs/docs/features/ganttsheet/progress-line)**: GanttSheet can now display a progress line that compares task progress with the project status date or current date. The line, progress points, reference behavior, and date label can be customized.

#### Data Charts

* **[Separated Detail and Color Encodings](/spreadjs/docs/features/data-charts/data-binding)**: Detail encoding now controls how data is divided into groups, while color encoding independently assigns colors to data points. This change provides clearer and more flexible chart configuration but may affect existing code-created Data Charts; see Breaking Changes from the Previous Release.
* **[Positive and Negative Colors](/spreadjs/docs/features/data-charts/chart-types/column-chart)**: Column, Bar, and Area Data Charts can now apply different palette colors above and below the axis baseline. Range Column, Range Bar, and Range Area charts can apply the colors by comparing their upper and lower values. Enable this behavior through `usePositiveNegativeColors`.
* **[Bezier Curves for Radar Charts](/spreadjs/docs/features/data-charts/chart-types/radar-chart)**: Radar and Filled Radar Data Charts now support `LineAspect.bezierCurve`, in addition to the existing default and spline line aspects.
* **[Date Axes](/spreadjs/docs/features/data-charts/data-chart-elements/chart-axis)**: Data Charts can now group date fields by year, quarter, month, or day independently of axis rendering, using a continuous Date scale or categorical Ordinal scale where supported.
* **[Trellis Encoding](/spreadjs/docs/features/data-charts/data-binding)**: Added row and column trellis encodings for presenting Data Charts as small multiples, including nested trellis levels.
* **[Legend Size Constraints](/spreadjs/docs/features/data-charts/data-chart-elements/legend)**: Data Chart legends can now be constrained through `maxWidth` and `maxHeight`, helping preserve the available plot area when legends contain many items.

#### Realtime Collaboration

* **[DataManager-Based Binding](/spreadjs/docs/spreadjs-collaboration-server/spreadjs-sheets-collaboration/collaboration-capability/data-manager-based-model/datamanager-based-binding)**: Realtime Collaboration now supports DataManager-based Sheet Binding, Cell Binding, table `bindingPath`, and direct Table Binding. Local Data supports collaborative editing of bound data, while Remote Data synchronizes binding configuration and table state and leaves remote data consistency to the application.

#### AI Assistant

* **[Multiple Arguments for SJS.AI.QUERY](/spreadjs/docs/features/ai-assistant/ai-functions/sjsaiquery)**: `SJS.AI.QUERY` now accepts multiple prompt and data arguments, which are combined in order and sent to the registered AI model.

#### Framework Support

* **[Angular 22 Support](/spreadjs/docs/javascript-frameworks/angular)**: SpreadJS now supports Angular 22 applications.

## Breaking Changes from the Previous Release

### Data Charts Detail and Color Encodings

This change affects applications that use the Data Charts add-on and configure charts through code.
Detail and color encodings now have separate responsibilities and are configured explicitly:

* Colors and color legends are generated only when color encoding is set.
* String fields used for color encoding must already be used in category or detail encoding. For Line and Area charts, the field must be used in detail encoding.
* Numeric color fields now use gradient color legends.
* Funnel charts no longer support detail encoding or the `topWidth`, `bottomWidth`, and `neckHeight` properties.

Compatibility handling is applied automatically when older `.sjs` and `.ssjson` files are loaded.
For code-created configurations, pass `true` for the new `inferMissingEncodings` parameter to retain the previous inference behavior:

```typescript
dataChart.setChartConfig(config, true);
```

The parameter defaults to `false`.

## Resolved Issues

The following issues have been resolved since the last release:

* **Charts:** 
    * Fixed an issue where Sunburst chart legend symbols appeared smaller than their Excel equivalents after importing an Excel workbook.
    * Fixed an issue where Filled Radar charts were not imported correctly from Excel workbooks.
* **Formula Calculation:** 
    * Fixed an issue where recalculating formulas after inserting a table row could produce a `#REF!` error.
    * Fixed an issue where the `DAYS360` function returned an incorrect result when the start date fell on the last day of February, improving compatibility with Excel's US/NASD 30/360 calculation.
    * Corrected the documented syntax for the `QUERY` function to include the optional `returnObject` parameter and clarified its use with DataObject cell types and formatter strings.
* **Realtime Collaboration:** 
    * Updated the `socket.io-parser` dependency to version 4.2.7 to address high-severity security vulnerabilities affecting collaboration packages.
    * Improved the information provided when workbook content cannot be imported because of restrictions in collaboration mode.
* **Touch UI:** 
    * Fixed an issue where buttons in the filter dialog could collapse or display incorrectly when `useTouchLayout` was enabled.
* **Cell Types:** 
    * Fixed an issue where a MultiColumnList source formula did not receive the target-cell context required for correct evaluation.
* **Designer Ribbon Component:** 
    * Fixed an issue with undo behavior after applying an Accounting Underline in the Designer Demo.
* **Framework Support:** 
    * Improved invalid-license handling in React applications to prevent initialization errors from causing the application to render as a blank page.