Scopri le novità in ogni release, con dettagli su funzionalità, miglioramenti e problemi risolti.
gen
feb
mar
apr
mag
giu
lug
ago
set
ott
nov
dic
jQWidgets v27.1.014 ott 2026
Funzionalità
Six new themes: Tailwind Blue and dark variants:
tailwind-blue and tailwind-blue-dark (Tailwind with Microsoft 365's blue accent), and fluent-dark, material-dark, material-green-dark and material-purple-dark.
The library lays each dark variant out like its light theme, so sizes and spacing match when an application switches between them.
New helpers $.jqx.themeFamily(), $.jqx.themeSurface() and $.jqx.themeText() let application code do the same.
A modern look for the data widgets, in every theme:
jqxGrid, jqxDataTable and jqxTreeGrid have quieter column lines, 8px cell padding, tabular digits, semibold column titles, one-line aggregates and no grey blocks in the filter row and status bar. A selected cell range is drawn as one outline instead of a box per cell.
jqxPivotGrid gets chevron expanders and semibold totals, and jqxGantt takes its bar, connector, weekend and non-working colors from the theme.
Row heights, options and class names are unchanged.
A modern look for the widgets without a theme and in the design-system themes:
Widgets with no theme set now use a system font, 4px corners, SVG icons and a WCAG AA color palette, through new -base classes that jqx.base.css styles.
In the base theme and the light, dark, Fluent, Tailwind and Material families, windows are rounded dialogs; the calendar draws days as circles and a range as one band; drop-downs open as rounded pop-ups with pill tokens; and the editor, kanban, toolbars, notifications, loader, rating, slider, progress bar and file upload are refreshed.
Classic themes keep their look.
jqxScheduler: year views:
yearView shows the year as twelve month calendars, with colored dots for days that have appointments (maxDots) and a tooltip listing them; clicking a day or pressing Enter opens it in the scheduler's most detailed view.
timelineYearView shows one column per day under month headers, with resources in rows.
Both are fully keyboard navigable.
jqxScheduler: undo and redo:
The undoRedo property (on by default) and undoRedoLimit, the methods undo(), redo(), canUndo(), canRedo() and clearUndoRedo(), the undoRedoChange event, and Ctrl+Z, Ctrl+Y and Ctrl+Shift+Z.
Adding, moving, resizing, editing and deleting appointments are recorded; an iCalendar import is one step.
jqxScheduler: cancelable events and booking rules:
New appointmentAdding, appointmentChanging and appointmentDeleting events fire before a change and can cancel it (event.cancel, event.args.cancel or return false); args.action says whether the change is an add, move, resize, edit, delete, import, undo or redo.
New blockedTimes, allowOverlap, minDuration and maxDuration properties define booking rules: blocked cells are hatched and labelled, and a change that breaks a rule arrives in the "-ing" event already cancelled, with the reason, so an application can still allow it.
addAppointment and deleteAppointment now return true or false.
jqxScheduler: iCalendar import, free slots and navigation:
importData(icsText) reads .ics files from Google Calendar, Outlook, Apple Calendar and Thunderbird, including time zones, recurrence rules and exceptions; a matching UID updates the existing appointment.
findAvailableSlots() returns free time that respects appointments and blocked times.
scrollToTime() scrolls the day and week views to a time.
The toolbar has a Today button, day and week views show a current-time line, and appointmentClick and appointmentDoubleClick report the clicked occurrence of a recurring appointment.
Time zones follow daylight saving:
Time zone conversions now use the browser's time zone data for the moment being converted, so they are right on both sides of a daylight saving change; the built-in table is used only where that data is unavailable.
Zone ids also accept IANA names ('Europe/Sofia') and the display names Outlook writes.
The table's fixed offsets were corrected for current rules (Venezuela, Turkey, Jordan, Syria, Russia, Morocco, Namibia, Brazil, Argentina and others), and Belarus and Kaliningrad have been added.
Added new $.jqx.date.timeZoneOffset(timeZone, date).
Dark themes in charts, gauges and drawings:
Under a dark theme, jqxChart, jqxDraw, jqxGauge, jqxLinearGauge, jqxBarGauge, jqxBulletChart, jqxKnob and jqxTreeMap take the theme's background, line, grid and text colors, and redraw when a theme stylesheet loads after the first render.
Colors the application sets are kept.
jqxHeatMap and jqxTreeMap labels are black or white, whichever reads better on the fill.
jqxChart: new defaults and a color-blind-friendly palette - Charts have no border line, flat fills, lighter grid lines and no category-axis grid lines by default, and the default color scheme is the new scheme28, chosen to stay distinguishable for color-blind readers, with lighter colors on dark themes. formatSettings accept suffix as well as the original sufix.
Grid cell templates on dark themes - The built-in badge, trend, bool and tags templates get a dark palette on dark themes, and cell templates receive a fourth argument, { dark }, so custom templates can do the same.
jqxKanban: initials avatars - A resource without an image shows its initials on a color derived from the name, instead of a broken image.
jqxPickList: searchMode - The filter boxes match anywhere in an item, ignoring case, by default; the new searchMode option sets another mode. Double-click moves the item under the pointer in multiple-selection mode.
jQuery 4 - The library works with jQuery 4.0 as well as 3.x and without jQuery. Uses of the APIs jQuery 4 removed ($.isFunction, $.isArray, $.trim, $.type, $.parseJSON and others) have been replaced throughout, with $.jqx equivalents.
React components:
Only props whose value changed are applied to the widget again, so a re-render no longer rebinds a grid's source, resets its sort or moves a list back to its selectedIndex. val(''), val(0) and val(false) set the value.
Components survive StrictMode's development remount, put back elements the widget moved when they unmount, bind each event once, pass aria-* and data-* props to the host element, accept children in TypeScript, and find their element even when it is rendered inside another widget's template or a tab (previously "Invalid Selector - #Jqx...").
Event props are typed so that event.args compiles in strict mode.
Vue 3 components - v-model works: the model is applied to the widget and update:modelValue carries the widget's value (it was undefined), for any value type. Only changed props are applied again, components destroy their widget when unmounted, and Barcode, QRcode, Chat, CheckBoxGroup, RadioButtonGroup, SplitLayout and PivotDesigner now create their widget. jqxEditor's slot works.
Angular components - ngModel no longer clears a widget while the form starts up, and jqxCheckBox and jqxRadioButton apply the model's value. Method and input types that were generated as undefined (for example setColor, most jqxGantt methods, aiApplyResolution) are now typed. jqxPickList has a searchMode input.
TypeScript definitions:
theme is now declared on the 19 widgets that lacked it (among them jqxBarGauge, jqxBulletChart, jqxChart, jqxGauge, jqxKnob, jqxPivotGrid and jqxRating), so the React and Vue components pass it to the widget.
Callback parameters the library always passes are required, so renderers such as cellsrenderer compile in strict mode; optional method arguments are optional; and many types were corrected against the library, among them jqxGrid's contextmenu options, pagenum and addrow's commit callback, jqxNotification's template, jqxCalendar's titleFormat and jqxTreeMap's renderCallbacks.
Added new ListBoxItem and ChartRenderer interfaces, and the new jqxScheduler members.
Accessibility:
jqxTabs - Tabs and panels publish the tab pattern (role, aria-selected, aria-controls, aria-labelledby) with a roving tabindex, including tabs added with addAt and disabled tabs; only the selected tab is a Tab stop.
Keyboard entry into grids and trees - Tabbing into a jqxGrid or jqxTree with nothing selected and pressing an arrow key now starts at the first visible row or item of the current page and sort order. Previously the keys did nothing until a row or item was clicked.
jqxMenu, jqxTree, jqxSlider, gauges and jqxRibbon:
jqxMenu now writes aria-haspopup, aria-expanded and aria-owns (they were never set) and no longer hides the focus ring.
jqxTree items with children publish aria-expanded.
jqxSlider's arrow buttons are hidden from assistive technology.
jqxGauge, jqxLinearGauge and jqxBarGauge are named by their current reading, which now updates when the value changes.
jqxRibbon keeps the ids the page gave its items.
jqxScheduler - The year view publishes a grid per month with labelled, selectable days; edit dialog fields are named by their labels and rule messages are announced; appointment text color is chosen for contrast with the theme's real background; and focus stays on an appointment after moving or resizing it with the keyboard.
Focus and contrast in the themes - A visible 2px focus ring (:focus-visible) in the base, light, Material and Fluent themes, checkboxes and radio buttons included. Contrast fixes in the light, dark, Bootstrap, black and metrodark themes, and dark no longer upper-cases window titles, buttons and labels.
Security
Strict Content-Security-Policy support - The widgets run under a policy without 'unsafe-inline' and 'unsafe-eval' in script-src and style-src. Inline styles in widget markup, including the markup of application renderers and templates, are applied through the CSSOM by the new $.jqx.csp helpers, and the <style> elements the library adds carry the page's nonce ($.jqx.csp.nonce, <meta name="csp-nonce">, or the nonce of the script that loaded the library). Grid exports work under the policy. javascript: links were replaced. PDF export (pdfmake) still needs 'unsafe-eval'.
No eval in JSON parsing - JSON is parsed with JSON.parse only; the new Function fallback was removed.
jqxKanban resource names are escaped - A resource name containing a quote could break out of the avatar's alt and title attributes.
Correzioni
jqxGrid
destroy() on a grid that shares its dataAdapter (common in React and Vue) left the grid bound to the adapter, so the next grid on it threw.
Switching theme at run time produced classes such as -tailwind-dark-dark and left pop-ups (pager, filter row, editors) in the old theme.
updatebounddata('data') lost the current sort, and a full updatebounddata() kept the old sort state.
A theme forced column lines back on over showcolumnlines: false. cellselect args carry rowindex and datafield as documented.
The filter row applied a filter twice when Enter was pressed.
sortby() with 'asc'/'desc' stored the string.
The column menu button showed when the menu was empty.
Focus entering a nested grid selected the outer grid's first row.
Ever-present row buttons threw after a sort.
A server-side filter that matched nothing (totalrecords: 0) left the previous total in the pager.
jqxDataTable, jqxTreeGrid and jqxPivotGrid
destroy() unbinds the dataAdapter and is safe to call twice. The loading box follows the theme. Pivot values without a formatFunction no longer print a lone prefix or suffix, and destroy() removes the pivot grid's elements from <body>.
jqxScheduler
ICS export: non-ASCII text, free-time status, all-day appointments, recurrence rules, escaping and time zones were wrong, and exporting one file per resource never worked. setAppointmentProperty left getAppointments() stale. Drag feedback trembled or landed on the wrong row after content above the scheduler changed height. Setting width or height at run time collapsed auto-width columns. Agenda times showed no AM/PM. showAllDayRow: false laid out the first row wrongly. ensureAppointmentVisible did not work for recurring series. In RTL, the week view marked the wrong day as today. destroy() left pop-ups and a timer behind.
Date helpers
addMonths went to the wrong year when moving back past January.
jqxSlider and gauges
int64 sliders with ticks were broken in 27.0.0; the tick calculation is restored. int64: true is recognised on sliders and gauges, and setting min or max at run time on a 64-bit gauge works.
More fixes
jqxTabs addAt and removeAt threw under jQuery 4, and jqxDragDrop's handle option threw under jQuery 3 and later.
jqxQRCode handles imageWidth and imageHeight given as "40px".
jqxTimeline places its dots correctly wherever it is on the page, shows dates as dates and no longer prints "undefined" for missing fields.
Closing a modal jqxWindow removed other windows' modal overlays.
jqxRangeSelector with a percentage width was wider than its container.
jqxNavigationBar re-fits when a theme stylesheet loads late. jqxDraw getSize() threw before anything was drawn.
jqxToolbar, jqxBarGauge and jqxChart left elements and handlers behind after destroy().
jqxChat rendered without styles in 27.0.0.
Theme switching with $.jqx.utilities.setTheme changed classes that merely contained the old theme name, and from no theme it suffixed the application's own classes.
Async callbacks were ignored by builds without jQuery.
Globalize threw "Cannot set properties of undefined (setting 'Globalize')" under Vite's dev server.
Packages
jqwidgets-ng: component bundles imported their runtime again (production builds showed "JQXLite is not defined"), jqxPivotDesigner, jqxPickList and jqxButtons got their runtime, its typings find jqwidgets.d.ts again, and sideEffects no longer lets bundlers drop the runtime.
jqwidgets-scripts: the jqxForm, jqxPivotDesigner and jqxTagCloud module bundles include their dependencies, and jqxPickList has a module bundle. The React bundles for jqxChat, jqxSplitLayout and jqxPivotDesigner, and the data widgets' React and Vue bundles, import everything they need.
jQWidgets v27.0.0Versione principale18 set 2026
Funzionalità
PickList (jqxPickList) - A new dual-list widget for moving items between an available and a selected list, with optional search boxes, checkbox selection and a reorderable selected list. Available for jQuery, Angular, React and Vue 3, with demos for each.
All Vue demos migrated to Vue 3 - The Vue demo set now targets Vue 3 and builds with webpack 5. Every demo previously used Vue 2 with webpack 3; Vue 2 reached end of life in December 2023. Demo components now import the Vue 3 wrappers from jqwidgets-scripts/jqwidgets-vue3 and bootstrap with createApp. Vue 2 demos are no longer provided.
Server-side rendering support for React and Vue 3 - jQWidgets components can now be imported in Next.js and Nuxt applications without the build failing. Previously every React wrapper accessed window at module scope and every Vue 3 wrapper called JQXLite in setup(), so importing a component threw "ReferenceError: window is not defined" during a server build.
Component teardown in all framework wrappers - React, Angular and Vue 3 components now unbind their event handlers and destroy the underlying widget when unmounted. Previously each mount/unmount cycle leaked a widget instance, which surfaced under React StrictMode, hot reload and route changes.
Model Context Protocol server (jqwidgets-mcp-server) - Lets AI coding assistants generate correct jQWidgets code for jQuery, Angular, React and Vue 3 from the same API definitions that drive the documentation.
Documentation - A full README covering installation, framework quick-starts, the widget and theme inventory, and the server-side rendering constraint. Release notes for v11 through v24 have also been restored; this file previously ended at v10.1.0.
Accessibility:
ARIA grid semantics in jqxGrid, jqxTreeGrid and jqxDataTable - Row and column counts and 1-based row and column indices are now published. This matters most for virtualized data: previously a screen reader announced "row 3 of 30" while the user was on record 4,312 of 50,000, because only the rendered window existed in the DOM.
Accessible names now reach the element that carries the grid role - Setting aria-label or aria-labelledby on a grid, tree grid or data table had no effect, because the role sits on an inner element. Several grids on one page were all announced simply as "grid".
Hierarchy in jqxTreeGrid - Rows publish their level, expanded state and selected state, under a treegrid role.
Dialog support in jqxWindow - Modal windows are labelled from their header, described by their content, marked aria-modal while open, contain keyboard focus, and restore focus to the element that opened them.
Keyboard access to Scheduler appointments - Appointments are now focusable, reachable by Tab, announced with subject, location and time range, and activatable with Enter. Previously they were plain positioned elements that assistive technology did not report at all.
Status message announcements - Grid filtering, sorting and paging, and validation messages, are announced through shared ARIA live regions. New localizable strings filterresultsstring, sortappliedstring and pagechangedstring have been added to the grid localization object.
Visible keyboard focus indicator in the base theme - The base stylesheet suppressed focus outlines in 92 places and defined no replacement, so keyboard users had no visible indication of focus. A focus-visible indicator is now applied, without showing an outline on mouse interaction.
Verified with the NVDA screen reader - Grid, tree grid, tabs, scheduler and dialog have been tested with NVDA on Windows. A draft conformance report and the reproducible test suite are included under accessibility/.
Breaking Changes:
The vendored jquery.js (jQuery 1.8.3) is no longer included in the SDK download. It was a 2012 release subject to four upstream XSS advisories that could not be patched locally, and nothing in the product or its documentation referenced it. jQWidgets does not require it: load the jQuery of your choice (3.5.0 or later is advised) or use the bundled JQXLite runtime. Applications whose script tags pointed at jqwidgets/jquery.js need to point at a current jQuery instead.
Angular 12 through 18 are no longer supported. The minimum supported version is Angular 19, which is required for the standalone component output. Customers on Angular 18 or earlier should remain on v26.
jqxTabs publishes the tablist role on its list element rather than the container. Stylesheets or scripts that select the container by that role need updating.
jqxNavigationBar is exposed as an accordion rather than a tab set, which changes the roles and states published to assistive technology. Its API and visual appearance are unchanged.
jqxLinkButton no longer overrides the anchor role.
The base theme now draws a visible focus ring on keyboard focus. Applications that supply their own focus styling may want to override it.
Two visually hidden live-region elements are appended to document.body on page load, to carry status announcements.
The Vue demos target Vue 3 and webpack 5. Anyone building the demo projects needs to reinstall dependencies; the Vue 2 demo sources are replaced, not kept alongside.
Tab order in jqxGrid follows document order rather than the previous positive tabindex values. Pages that relied on the grid appearing early in the tab sequence will see a different order.
Correzioni
jqxScheduler getJQXAppointmentByElement returned the wrong appointment. The lookup mixed an appointment's id with its internal key, so it returned a neighbouring appointment.
jqxScheduler appointment text colour used an approximation to decide between light and dark text; it now uses the WCAG relative luminance formula, so text on custom appointment colours stays readable.
jqxScheduler could trap keyboard focus: Tab cycled between appointments and never left the widget.
Seven framework wrappers did not compile or parse and could not be used at all: jqxLinkButton for React, and jqxBarcode, jqxQRCode, jqxDragDrop, jqxLinkButton, jqxForm and jqxGantt for Vue 3.
The React package declared "sideEffects": false while its only link to the runtime is a side-effect import. Aggressive bundlers dropped it, so production builds failed at runtime with "JQXLite is not defined" while development builds worked.
The Vue tree navigation demo contained two unclosed list items. Vue 2 tolerated the markup; the stricter Vue 3 template compiler rejected the file outright.
jqxDataTable rendered a plain table inside a grid role, which is not a valid structure for assistive technology.
jqxLinkButton forced a button role onto an anchor, hiding it from users navigating by link.
The MCP server generated import paths that do not resolve, so AI-assisted React and Vue users received code that failed on the import line. It also targeted Vue 2, which reached end of life in December 2023, and now targets Vue 3.
Accessibility:
Colour contrast in the base theme - Text and placeholder colours that fell below the WCAG AA 4.5:1 threshold have been corrected, and low-opacity label and disabled-state text was raised.
Tab order no longer hijacked - Positive tabindex values have been removed from jqxGrid and its filter and pager rows, and from jqxExpander, jqxNavigationBar, jqxListBox and jqxTree. Positive values pull elements to the front of the page tab sequence; tab order now follows document order.
Correct roles and states across the suite - Includes tab semantics in jqxTabs, accordion semantics in jqxNavigationBar, range semantics in jqxSlider, jqxProgressBar and jqxGauge, group labelling in jqxRadioButtonGroup, and decorative images correctly hidden in jqxRating.
Security:
Prototype pollution in the deep-merge helper (JQXLite.extend / jqxBaseFramework.extend) - Affects every version before 27.0.0. The public CVE record lists 24.0.1 as the last affected version because that is what the reporter tested; the vulnerable path was unchanged through 26.0.0, so customers on 25.x and 26.x are affected and should upgrade. An object carrying an own "__proto__" key - which is what JSON.parse produces for {"__proto__": ...} - could write properties onto Object.prototype when deep merged. Every widget applies its options through a deep merge, so any application that built widget options from untrusted input reached the vulnerable path without calling extend itself. The key is now rejected before the destination object is read.
jQWidgets v26.0.0Versione principale9 lug 2026
Funzionalità
Added a new jqxChat widget.
Brand-new AI chat/assistant widget (jqxchat.js with a provider-agnostic transport supporting Anthropic, OpenAI, and other adapters.
Streaming responses, typing indicator, avatars, timestamps, and a themeable "modern skin" independent of the jqWidgets theme.
Full integration kit (jqxchat-integration/) with server-side streaming proxies (PHP + Node/Express) so API keys stay off the client, plus TypeScript typings.
New API docs (jqxchat-api.htm and pages for chatColorScheme, chatMode, chatProvider, chatRole, etc.).
Added jqxGrid AI features (jqxgrid.ai.js).
aiCommand() - natural language - filter/sort/group.
aiAsk() - conversational analytics over the (filtered) data.
aiSummarize() - summarize selected/visible rows.
aiExplainRow() - explain a row vs. the dataset.
aiClassifyColumn() - AI-generated label per row.
Added new grid options: aiProvider, aiModel, aiProxyUrl, aiHeaders, aiSendRequest, aiMaxRows.
Results fire as gridaiResult/gridaiError events; actions are validated against real columns before being applied (never executed as code).
Added new demos: ai-ask-data.htm, ai-classify-column.htm, ai-command-bar.htm, ai-summarize.htm (JS and Angular versions).
Added a declarative cellTemplate column property (badge, avatar, moustache-style string templates, or a function).
Compiles to a standard cellsrenderer, so sort/filter/page/export keep working unchanged.
Added Angular 22 integration and support.
jqxgrid.js - Accessibility pass: role/aria-label/aria-haspopup have been added to the column-menu button and header filter/sort icons so screen readers announce them properly; added a new columnmenustring localization key.
jqxgrid.filter.js - AI-assisted filter now uses the configurable aiModel option instead of a hardcoded gpt-4.
Styles (jqx.base.css, jqx.darkblue.css, jqx.tailwind.css) - Made substantial additions (theme updates in darkblue/tailwind) for jqxChat and the new cell templates.
Correzioni
jqxgrid.selection.js - Fixed a bug where unselecting filtered rows in checkbox-selection mode left holes in selectedrowindexes (via delete), which kept the header checkbox stuck "checked" even with nothing selected; now rebuilds the array cleanly.
jqxgrid.sort.js - Classic (image-based) themes now get the sort-priority number applied to the asc/desc arrow elements too (previously only the general sort icon), and it's cleared correctly when sorting is removed.
jQWidgets v25.1.09 mar 2026
Correzioni
Grid & Filtering:
Resolved an issue with jqxDateTimeInput filtering in jqxGrid that caused incorrect theming of the component.
Fixed a filter row rendering issue in jqxGrid when using the Fluent and Tailwind themes.
Corrected a problem affecting Grid cell pinning styling in the Dark, Light, Fluent, and Tailwind themes.
Fixed an issue with Pager rendering in jqxGrid when the pager’s Go To input was re-rendered.
PivotGrid:
Fixed a positioning issue in jqxPivotGrid where the itemsRenderer function could behave incorrectly and render elements in the wrong position.
Calendar:
Addressed a re-rendering issue in jqxCalendar when used with the Tailwind theme, ensuring consistent behavior during dynamic updates.
Scrollbar:
Fixed a Content Security Policy (CSP) related issue in jqxScrollbar introduced during previous refactoring.
jQWidgets v25.0.0Versione principale2 gen 2026
Funzionalità
Added Angular 21 support, ensuring compatibility with the latest Angular features, build tooling, and performance optimizations.
Full Content Security Policy (CSP) compliance refactor - All frontend components (scheduler, grid, dialogs, buttons, tables) have been refactored to be fully Content Security Policy (CSP) compliant by removing inline styles, inline event handlers, and any dynamic script execution.
Accessibility - Made WCAG-aligned improvements across all components.
jqxGrid Filtering - Added a new combobox filter in the filter row.
jqxNumberInput - Added an option to hide the prompt when the component is not on focus.
Correzioni
jqxForm - Smart AI Paste fix. With some forms, the AI output was not parsed correctly.
jqxNumberInput - Clipboard handling in the simple input mode.
jqxMaskedInput - Val method was not working correctly.
jqxMaskedInput - Did not work correctly with ngModel.
Fixed Tailwind theme rendering issues in some of the components.
Selezione prodotto
Guida alle funzionalità
Competenza nelle licenze
Fornitore ufficiale
Servizio clienti 24/5
Fidato dal 1995
Contattaci
Chiamaci
Il nostro team è disponibile dal lunedì al venerdì, dalle 9:00 alle 17:00