ZK 10.0.0-Beta release notes
Released on Oct 18, 2023
ZK Team is thrilled to introduce ZK 10 (Beta).
ZK 10 focuses on elevating user experiences and optimizing cloud-native scalability. This release showcases groundbreaking features, including stateless components, client-side Model-View-ViewModel (MVVM), and a seamless transition to TypeScript.
Our innovative stateless components bring in enhanced scalability, auto-provisioning, improved performance, and reduced memory consumption.
The introduction of client-side MVVM shifts the View and ViewModel binding to the client-side, thereby minimizing server-side memory usage and response times.
The transition from JavaScript to Typescript opens the door to smart IDE feedback, offering reliable auto-completion and a more Java-like programming experience for your front-end customization.
What's New
- New Feature
- ZK-3853 - Tree supports 3-states selection
- ZK-4065 - ZK theme css shouldn't apply to tag directly
- ZK-4494 - Tree's DOM structure shall provide enough information to decorate lines with CSS
- ZK-4711 - Upgrade integrated reset.less
- ZK-4928 - expose widget private functions and variables as public ones
- ZK-4969 - dropupload supports accept file type
- ZK-5018 - Enhance simplified MVVM syntax
- ZK-5024 - Add a library property to change the default apply composer for MVVM
- ZK-5039 - remove deprecated classicblue theme in ZK 10
- ZK-5049 - Deprecate org.zkoss.zk.ui.uuidRecycle.disabled in ZK10
- ZK-5075 - Provide override options for TS code
- ZK-5091 - Move Layout.java to extend from XulElement
- ZK-5093 - CSS variable helper support in ZK
- ZK-5096 - Consider deprecate Anchorlayout and Anchorchildren
- ZK-5097 - Reconsider the API of Anchornav to make Anchornav more consistent with other ZK component.
- ZK-5119 - Integrate Font Awesome 6 free icons
- ZK-5122 - Integrate a client-side input-masking tool for input-based components
- ZK-5142 - Handle GET and POST requests more strictly
- ZK-5158 - Client MVVM restriction check mechanism
- ZK-5182 - Prevent XSS issue in component attributes
- ZK-5215 - Support load locale-dependent resources in a relative path
- ZK-5221 - Show websocket close reason
- ZK-5228 - Support a IdGenerator for Application-wise, not Desktop-wise for Stateless Component
- ZK-5265 - Add a CSP provider class, which allows the users to define CSPs and provide a nonce used for strict-dynamic support
- ZK-5270 - Adjust ID generation mechanism in ZHTML Component
- ZK-5271 - Client MVVM: Enhance form validation
- ZK-5408 - Enable InaccessibleWidgetBlockService by default
- ZK-5422 - Provide some utile APIs to update IComponent Tree
- ZK-5437 - Upgrade WCAG with the lighthouse 10.x detection tools
- ZK-5441 - Provide a better way to override za11y module
- ZK-5466 - include Guava instead of closure-compiler
- ZK-5469 - Make cloudMode true by default for ZK Stateless
- ZK-5502 - Allow users to customize tooltip on the icon
- ZK-5503 - Allow users to set multiple icons and tooltips on the same LabelImageElement
- ZK-5504 - Components with Model should only update few items or changed data instead of rerendering them all
- ZK-5527 - Upgrade WCAG with the lighthouse latest version
- ZK-5531 - Remove Applet, Flash, and FusionChart components in ZK 10
- ZK-5532 - Remove all unsupported HTML tags in ZK 10 ZHTML
- ZK-5533 - Add all new HTML5 tags in ZK 10 ZHTML
- ZK-5541 - Move widget restriction check to Client MVVM
- ZK-5549 - tabbox provides an add new tab button
- ZK-5550 - Calendar supports to change month and year with a keyboard
- Bugs Fixed
- ZK-4355 - timebox' default cols is too small
- ZK-4861 - Inconsistent input options in Android, cause unreliable timebox input
- ZK-4975 - nested form proxies update original object (without submit to origin)
- ZK-4976 - nested listproxies update original object without outer submit
- ZK-5000 - Inefficient DOM updates for link labels
- ZK-5001 - combobox causing long UI freeze during unrelated widget updates
- ZK-5005 - pdfviewer some fonts are not rendering
- ZK-5017 - Listbox head flickering caused by onClientInfo
- ZK-5025 - redundant selection highlight on a menupopup
- ZK-5035 - listbox renders duplicates checkmark after adding 1st listheader dynamically
- ZK-5037 - invisible first column hide checkmarks in a listbox
- ZK-5052 - make a window's focus-grabbing behavior easy to disable
- ZK-5086 - Should ignore source map file request when the source map is disabled
- ZK-5089 - AfterSizeEvent doesn't return a correct size of a Window component
- ZK-5090 - Window's content should not contain padding when no border on it
- ZK-5092 - Mac's chrome doesn't work with ctrlKeys feature (Windows works)
- ZK-5120 - Combobox smart update emptySearchMessage doesn't work
- ZK-5123 - Searchbox open attribute doesn't work while initializing
- ZK-5132 - Source mapping URL should be ignored when sourcemap is disabled
- ZK-5138 - Grid row setAlign not work after rendered
- ZK-5145 - Chosenbox smart update emptyMessage doesn't work
- ZK-5151 - SelectedItem should be sync in Cascader (getter/setter)
- ZK-5152 - Cascader should use TreeSelectableModel
- ZK-5217 - Timepicker error in Mobile touch
- ZK-5218 - inconsistent top position among different window modes
- ZK-5235 - opening a menupopup moves a scrollbar of a long menu back to top
- ZK-5257 - Ignore unused component NoClassDefFoundError such as jasperreport component
- ZK-5261 - forEach always re-renders all items
- ZK-5266 - Client MVVM: Using parameters in Getter
- ZK-5267 - Client MVVM: ForEach support map iteration
- ZK-5268 - Client MVVM: Force load binding to reload
- ZK-5269 - Client MVVM: Processing Binding Order
- ZK-5272 - Client MVVM: support el expression (${...})
- ZK-5275 - Client MVVM: Support widget properties in command expression
- ZK-5278 - Client MVVM: handling huge data
- ZK-5280 - Client MVVM: Missing orientation when using Hbox in template
- ZK-5281 - Client MVVM: JS error when using expression "each" in load binding with attribute "forEach"
- ZK-5282 - Client MVVM: Selection missing in Listbox
- ZK-5283 - Client MVVM: Listbox/Grid Rod
- ZK-5284 - Client MVVM: converter in template
- ZK-5287 - Client MVVM: Rerender template causing apparently flickering
- ZK-5289 - Client MVVM: Layout/Dimension changed when Template rendering
- ZK-5290 - Client MVVM: Multiple @init and @load
- ZK-5292 - Client MVVM: @ScopeParam shall support custom attribute
- ZK-5293 - Client MVVM: Remote EL should pass evaluated value
- ZK-5294 - Client MVVM: Tree model rendering
- ZK-5295 - Client MVVM: validation exception when validate empty string value as number
- ZK-5297 - Client MVVM: Array/Collection/Map toString in Client side should be the same as Java
- ZK-5298 - Client MVVM: Conditional Binding should work as original behavior
- ZK-5299 - Client MVVM: Grid/Listbox collection model rendering
- ZK-5300 - Client MVVM: wrapped object should display string value in label
- ZK-5301 - Client MVVM: Form binding save and validation
- ZK-5303 - Client MVVM: Form should call NotifyChange automatically
- ZK-5304 - Client MVVM: Listbox/Grid model rendering by Map
- ZK-5306 - Client MVVM: Unable to evaluate expression of validationMessages
- ZK-5307 - Client MVVM: Wrong behavior when using SmartNotifyChange/NotifyChange on Setter
- ZK-5309 - Client MVVM: exception when doing Jackson serialization
- ZK-5310 - Client MVVM: Long operation with server push and Event queue does not work
- ZK-5311 - Client MVVM: Paging does not work
- ZK-5313 - Client MVVM: GroupsModel
- ZK-5314 - Client MVVM: Support widget properties in property binding
- ZK-5315 - Client MVVM: load property binding only works at the first time
- ZK-5316 - Client MVVM: unable to evaluate nested List
- ZK-5317 - Client MVVM: Rendering fail in shadow elements
- ZK-5319 - Client MVVM: Displaying WrongValueException
- ZK-5320 - Client MVVM: serialization and deserialization
- ZK-5321 - Client MVVM: List Object with Jackson serialization
- ZK-5323 - Client MVVM: converter and command param in Form binding
- ZK-5328 - Client MVVM: If and Unless EL condition at client
- ZK-5329 - Client MVVM: Event Conversion
- ZK-5330 - Client MVVM: Processing bindings should follow widget tree
- ZK-5334 - Client MVVM: custom attribute in template
- ZK-5335 - Client MVVM: List data support basic API
- ZK-5338 - Client MVVM: Missing widget string attribute information
- ZK-5339 - Client MVVM: Bindings in zhtml
- ZK-5344 - Client MVVM: miss client attribute w:onClick
- ZK-5346 - Client MVVM: Linelayout
- ZK-5352 - z-columns-bar is invisible when only columns in grid
- ZK-5356 - Client MVVM: NotifyChange in Collection
- ZK-5359 - Client MVVM: non-existent map key should not throw exception
- ZK-5361 - Client MVVM: zscript in included page
- ZK-5362 - Client MVVM: Nested ViewModel
- ZK-5363 - Client MVVM: Native content in template
- ZK-5365 - Client MVVM: Widget Rendering in Include
- ZK-5367 - Client MVVM: command param in global command
- ZK-5370 - Client MVVM: invalidate components
- ZK-5371 - Client MVVM: onCreate event
- ZK-5376 - Client MVVM: Proxying ViewModel Annotations
- ZK-5383 - Client MVVM with Fulfill feature
- ZK-5385 - Client MVVM: Tree selection status
- ZK-5393 - Update ZK jars to jakarta-friendly uploads
- ZK-5400 - Client MVVM: forward="onClick=another.onOK" doesn't work
- ZK-5403 - Client MVVM: EL3 syntax
- ZK-5411 - withAction() cannot accept anonymous class, please convert it to Lambda syntax
- ZK-5412 - Desktop of stateless components is not cleared after reloading [CloudMode]
- ZK-5424 - Client MVVM: Shadow Element should handle ListModel case
- ZK-5435 - desktop timeout config doesn't work as expected
- ZK-5450 - 2 NEXT_SIBLING for targetId don't pass the expected value
- ZK-5454 - nextSibling locator doesn't work in smartUpdate()
- ZK-5468 - Components with Model only renders one item with wrong result if the EL contains forEachStatus.index
- ZK-5476 - client mvvm failed for a tree
- ZK-5488 - Biglistbox's Elements with an ARIA [role] that require children to contain a specific [role] are missing some or all of those required children
- ZK-5489 - Linelayout's Elements with an ARIA [role] that require children to contain a specific [role] are missing some or all of those required children
- ZK-5490 - Grid's [aria-*] attributes do not match their roles
- ZK-5491 - Multislider and Rangeslider's [aria-*] attributes do not match their roles
- ZK-5492 - The elements with an id of 'tpad-tbl' and 'bpad-tbl' do not have the correct role
- ZK-5493 - [user-scalable='no'] is used in the <meta name='viewport'> element or the [maximum-scale] attribute is less than 5
- ZK-5494 - Background and foreground colors do not have a sufficient contrast ratio
- ZK-5498 - Some checkboxes do not have [aria-checked] attribute, and they do not have accessible names
- ZK-5521 - navbar has no focus indicator
- ZK-5523 - chosenbox loses its selection in a model after invalidate()
- ZK-5525 - Checkbox tristate [aria-checked] attribute missing "mixed" state
- ZK-5530 - users cannot focus on the icons on the Calendar header
- ZK-5534 - calling the function before overridden in typescript produces a compiler error
- ZK-5537 - Client MVVM: Open state in TreeModel
- ZK-5539 - $init() will call twice on Keikai component
- ZK-5540 - zk.wpd with browser condition won't work with ZK 10
- Upgrade Notes
- The Java binary-compatible level is Java 11 since ZK 10. Please use Java 11 or a higher version.
- ZK 10 is compatible with modern browsers; IE11 (and lower IE versions) are no longer supported
- Enable InaccessibleWidgetBlockService by default in EE version. Note that it will block Echo Event if the component is disabled or invisible. You can configure it using the library-property org.zkoss.zkmax.au.IWBS.disable.
- Upgrade 3rd party optional dependencies: closure-compiler(v20230802), groovy(5.0.0-alpha-1), gson(2.10.1), jackson-databind(2.15.2), rhino(1.7.14), jasperreports(6.20.5). Drop the itext dependency.
- Refine ZK-3277 to enable multipart file uploads into AUEngine and removed AuUploader.java and AuDropUploader.
- Support ZK-3277 into CE version, and drop the support of IE9 browser for file
upload feature, due to it cannot support HTML FormData.
- Some z-class names are changed, z-combobox-emptySearchMessage becomes z-combobox-empty-search-message and z-combobox-emptySearchMessage-hidden becomes z-combobox-empty-search-message-hidden
- Disable UUID recycle mechanism by default.
- With the fixed of ZK-5435, the desktop timeout mechanism will clean all expired desktop instances
by a timer per session if the setting is enabled. (By default, it's enabled with 1 hour).To disable the cleaner timer per session, you can specify -1 to the desktop timeout value to disable the mechanism.
- Remove outdated Acronym, Big, Center, Dir, Font, isindex, Nobr, Param, Rtc, and Tt in ZHTML module
- Remove Applet, Flash, and FusionChart components
- Deprecated org.zkoss.zk.ui.uuidRecycle.disabled
- Remove Acegi and Hibernate integration utiles in zkplus module
- Upgrade Font Awesome version from 4.7.0 to 6.4.2, previous iconSclass syntax will continue to be supported
- ZSciprt using python and the corresponding jython dependency are now optional.