Skip to main content

bones_ui 3.1.7 copy "bones_ui: ^3.1.7" to clipboard
bones_ui: ^3.1.7 copied to clipboard

Platformweb

Bones_UI - An intuitive and user-friendly Web User Interface framework for Dart.

3.1.7 #

  • UIMultiSelection: the options panel is shown attached to the document's body, and returns to the component when hidden (also on dispose). Inside the component it was positioned in page coordinates, so under an ancestor that is the containing block of absolute elements (position, transform, filter, backdrop-filter...) it was displaced by that ancestor's offset, and the ancestor's overflow clipped it: clicking the input showed nothing.
    • Its default look (white background, left alignment, padding) is no longer inline: it's a :where(...) rule (no specificity), so an app rule styling .ui-multi-selection-options-menu now applies (inline, the white background always won: on a dark theme, light text over white).
    • In the body it keeps the component's inherited color, font-family, font-size, font-style, font-weight, line-height, letter-spacing and direction, passed as --ui-multi-selection-* properties to that same rule: an app rule still takes precedence, as over inheritance. CSS rules selecting the panel through the component's ancestors no longer match it while shown.
    • Its position is corrected by where it lands (a positioned body).
    • A new render keeps it shown (as before), with the new options, re-positioned.
    • While shown, it's hidden if the input stops being displayed (an ancestor with display: none, e.g. a hidden dialog), notifying the selection as on any hide; or if the input leaves the document (a removed component), without notifying it, also later (its pending selection is cancelled). No mouseleave would hide it there. It isn't shown for an input out of the document.
    • Single selection: each instance has its own radio group (in the body, the radios of an instance in a <form> and of one out of it shared a group, unchecking each other's).
  • Tests:
    • bones_ui_components_b_test.dart ("options panel placement"): under a backdrop-filter + overflow ancestor the panel is shown right under the input, in the body, with the component's font and color, and its options work; back after the input when hidden; the app's CSS overrides its defaults. Also on a scrolled page, a positioned body, above the input near the bottom of the viewport, and after a window resize. A new render keeps it shown; a removed component and a hidden ancestor hide it (a removed one notifying nothing); dispose doesn't leave it in the body; single selections in and out of a <form> keep theirs.

3.1.6 #

  • UIRoot: new registerComponents parameter, the components that markup can create by tag (<ui-button>, <ui-document>, <ui-dialog>...) to register when the first root is constructed. Without it all of them are registered, as before (the new static UIRoot.registerAllComponents). Whatever is registered is compiled in, so an app that writes none of those tags can pass () {}, or register only those it uses (UIDialog.register): <ui-document> alone brings in the markdown package. Every UIRoot of the app must pass it. In a real app (a game whose only component, a dialog, is created in code) the dart2js output went from 474 KiB gzipped to 389 KiB, 18% smaller.
  • Tests:
    • bones_ui_root_register_components_test.dart: a root registering only UIDialog has <ui-dialog> and none of the others; the registration runs once, before the first render; a registered tag becomes its component, an unregistered one (<ui-document>) stays a plain element, and a component created in code needs none.
    • bones_ui_root_register_all_components_test.dart: without registerComponents every tag component is registered, and <ui-document> renders its markdown.
    • register_components_tree_shaking_test.dart (VM): compiles minimal apps (test/register_components/) with dart compile js -O2. Registering none leaves every component and the markdown package out (about 30% smaller), registering UIDialog alone keeps only it, and one root without registerComponents keeps them all.

3.1.5 #

  • bones_ui test (BonesUITestCLI): runs the tests through test_core's main, which also works with test_core 0.6.21. That release removed the runTests/completeShutdown pair, so dart pub global activate bones_ui failed to build the CLI (Method not found: 'runTests').
  • CI: actions/checkout@v6 and codecov/codecov-action@v5 (Node 24, no Node 20 deprecation warning); a new push cancels the branch's running jobs; read-only permissions; job timeouts.

3.1.4 #

  • intl_messages: ^3.0.2: IntlLocale.onDefineDefaultLocale no longer throws a TypeError on access, so an app can listen to locale definitions through it.

3.1.3 #

  • UIRoot.setDocumentLang is an instance method (was static), so a UIRoot can override it to customize how <html lang> is set (another tag, another element, or not at all). Its first call can come during the UIRoot construction, before a subclass's constructor body runs.

3.1.2 #

  • UIRoot: <html lang> follows the locale. It is set on every locale definition, at start-up and on a change without a reload (setPreferredLocale, a language selector), as a BCP 47 tag (pt-BR, not pt_BR), so fonts (the right CJK glyphs), screen readers and hyphenation follow the language of the texts. New static UIRoot.setDocumentLang.

3.1.1 #

  • dom_builder: ^3.2.0: a false boolean attribute (selected="false", hidden="false"...) no longer turns it on; every selected="false" option was selected, so a <select> (as an app's language menu) showed its last option. Also resource_portable: ^3.1.4 and build_web_compilers: ^4.8.11.

  • Component boolean attributes are read as HTML does (DOMAttribute.parseBooleanValue): a bare one, an empty one or one set to its own name is on. <ui-dialog show> is shown, and <bui hide-from-menu> hidden (both were off). Explicit "true"/"false" values are unchanged. New parseAttributeBool reads one, or its default if absent: show, show-close-button, remove-on-hide and on-click-listen-only-for-dialog-button-class of <ui-dialog>, with-progress of <ui-button-loader>.

  • InputConfig: a checked checkbox and a selected option also get the attribute (defaultChecked, defaultSelected), not only the property, so a form reset keeps them (it unchecked the box and selected the first option).

  • Tests: boolean attributes in rendered components, <ui-dialog>, <bui> and InputConfig attributes (bones_ui_boolean_attributes_test.dart).

  • Tests: a <ui-dialog remove-on-hide="false"> with a locale <select> in a <ui-template> (as an app's language menu), opened by an action="#id.show()": the option of the current locale is selected, also after the locale changes and the component (or the root) renders again; no copy of an earlier render is left in the page; a language picked with UIRoot.setPreferredLocale becomes the current locale, and a regional one (a browser's pt-BR) resolves to the language with messages (pt).

3.1.0 #

  • sdk: ^3.13.0

  • Now based on dom_builder 3.1.0, dom_tools 3.1.0, web_utils 1.1.0 and js_interop_utils 1.1.1 (Dart 3.13 versions, with many bug fixes; see their changelogs). Notably, UIColorPickerInput colors are now opaque (they were parsed with alpha 0) and rgba(...) colors keep their alpha (via Color.parse).

  • Adopted Dart 3.8–3.12 features (flagged by lints 6): private named parameters (this._x, same named arguments), null-aware elements, explicit types; Object?.isA<T>() instead of asJSAny.isA<T>().

  • Performance (render time and memory; see doc/benchmarks.md):

    • Rendering no longer walks the whole rendered tree through JS interop several times per render: the elements with parsed attributes (navigate, action, onEventClick, uiLayout...), bg-blur and div-centered-* classes and sub-components are selected with native querySelector(All).
    • Placing the rendered children no longer calls childNodes.indexOf per element (O(n²) per render).
    • UIComponentsTree replaces DOMTreeReferenceMap as the tree of components of a UIRootComponent: with dart2wasm JS objects have a constant Dart hashCode, making each registration and lookup O(n); nodes are now hashed by JS identity (up to 10x faster renders of many components with dart2wasm).
    • Purged components (no longer in the tree) are held weakly (still resolvable while referenced elsewhere, up to the same 1 minute), and the purge after rendering is time-sliced (it yielded ~4ms per component): discarded renders are released promptly (-16% heap in a real app after navigating and re-rendering). The slice length is UIComponent.purgeSliceTime (8ms by default).
    • New benchmark/render_benchmark.dart (synthetic render scenarios, dart2js and dart2wasm), benchmark/compare.dart, and chrome-bench/chrome-prof test platforms.
  • UIComponent:

    • Fix (dart2wasm): getContentUIComponent (and so element.uiComponent) missed components when the content element was re-read from the DOM: the association was an Expando keyed by the Dart wrapper; it's now a JS WeakMap (JS identity).
    • parent is recorded when the content is already a child of the parent (it stayed null, e.g. after addExternalElementToElement/replaceChildElement).
    • getFields returns the value of UIField components (it resolved their container: '').
    • setAttribute('style' | 'class', '') no longer fails a null check.
    • A render() returning a Map without renderable entries is rendered as JSON (as documented).
  • UIComponentGenerator.clearAttribute: uses the attribute handler's cleaner (it always set null).

  • UIConsole: formatting a List message no longer recurses until a stack overflow; tail(n) no longer throws a RangeError with fewer than n logs (tail() threw with fewer than 100).

  • CSSProvider.cssFromElement: returns the computed CSS of elements in the DOM (Chromium's computed cssText is empty).

  • TextProvider without a source throws a StateError (it overflowed the stack). UIDeviceOrientation no longer throws on each deviceorientation event where window.orientation is undefined (desktop).

  • UIDocument: text documents are HTML-escaped (<tag> in a .txt became an element).

  • Navigation: parameterAsNumList/parameterAsBoolList no longer throw a TypeError; UINavigableContent fires onChangeRoute.

  • Components:

    • $uiDialog creates a ui-dialog (it created a ui-button-loader). Constructing a UIDialog no longer fires onShow (or hides the UIRoot with hideUIRoot) before it's shown.
    • UIButtonLoader: the button is hidden while loading and restored on stop; loadedTextStyle no longer shows the loaded message before loading ends.
    • UICalendar:
      • Week mode (CalendarMode.week, the default mode) is implemented: it rendered nothing. The days of the week of currentDate (from firstDayOfWeek) × time slots, with nextWeek/previousWeek navigation, onDayClick (day headers), onHourClick, onEventClick, and ↑/↓ to the month/day modes (per allowedModes). New currentWeekDays.
      • Events longer than a time slot (or spanning days in the month view) are shown in every slot/day they overlap (only events entirely inside a slot were shown). selectEvents returns overlapping events; new CalendarEvent.overlapsTimeRange (isInTimeRange is unchanged). Continuation slots are rendered with the ui-calendar-event-continuation class (CalendarEvent.render(continued:)).
      • The month view no longer drops the last day of some months; clicking the title date shows the date input and updates the title.
    • UILoadingConfig/$uiLoading: inline: false is applied.
    • UIDataSource: its content is hidden (display: 'node' typo).
    • UIJsonRender: HTML inside JSON values is shown as text.
    • htmlAsSvgContent: applies rootClass, uses the title's text, no debug print. UISVG: renderedElement/ isRenderedAsSVG are set for svgContent.
    • BUIRender: fixed a TypeError on construction; BUIViewProvider.routes/menuRoutes no longer throw; BUIRenderSource.sourceAsDOMElement works with an Element source on dart2wasm; renderThumbnail includes the document styles (they were dropped) and appends styles instead of replacing them.
    • UIMasonry: Element items render; fixed TypeErrors in the size calculation and with DOMElement items.
    • UIMultiSelection: filtering re-renders the options panel; the inline options attribute (a: A ; b: B) works.
    • UIInputTable: extra rows keep their text; extra rows of non-table elements no longer crash; the path input's value-provider button works.
    • ui-template: variables are applied, including JSON variables.
    • UICapture.selectedFileDataAsBase64: fixed for data URL data.
  • UILayout: #id[n] expressions work on dart2wasm; negative values get their unit (-5px).

  • UIExplorer: query explorers render (a TypeError in the controllers' properties); YAMLConfig/JSONConfig toString() closing }. isGeneratedElement: removed debug prints.

  • Test tools: testUISleep applies maxMs and the 1 ms minimum; testUISleepUntil applies minMs; selectUntilTyped rejects elements of the wrong type (JS interop types erase at runtime); the selectWhereUntil/selectWhereUntilTyped future extensions no longer throw a TypeError.

  • Test CLI: an empty --log-dir is no longer the current directory; a missing <title> is inserted in reports; compile() awaits the compile directory creation.

  • Dependencies:

    • dom_builder: ^3.1.0
    • dom_tools: ^3.1.0
    • web_utils: ^1.1.0
    • js_interop_utils: ^1.1.1
    • statistics: ^1.2.2
    • yaml: ^3.1.4
    • archive: ^4.3.0
    • test: ^1.32.0
    • test_api: ^0.7.14
    • test_core: ^0.6.20
    • stack_trace: ^1.12.2
    • build_web_compilers: ^4.8.10
    • build_runner: ^2.16.1
    • lints: ^6.1.0
    • dependency_validator: ^5.1.0
  • Tests: new browser integration tests (bones_ui_core_integration_test.dart, bones_ui_components_a_test.dart, bones_ui_components_b_test.dart, bones_ui_generator_explorer_test.dart, bones_ui_regression_test.dart) and VM tests for the test CLI (bones_ui_cli_test.dart).

3.0.20 #

  • Test tools: a failing step in a test chain no longer hangs the test.
    • _chainCapture ran each step in Chain.capture with an onError, which makes it an error zone. An error can't leave an error zone, so a failing expect inside thenChain (e.g. selectFirstWhereUntil not finding its element) was reported as an uncaught error — the test showed as failed — while the future the test body awaited never completed. The body then hung until the test's own timeout, holding up every suite after it.
    • Now Chain.capture(errorZone: false): the chain is still tracked, and the error completes the awaited future.
    • New bones_ui_test_chain_test.dart covers it.

3.0.19 #

  • UIComponent:

    • onChildRendered: fixed the notification passing the parent component instead of the rendered child (_callOnChildRendered called onChildRendered(this)).
    • _parseOnEventKeyPress: an onEventKeyPress attribute without a key:action delimiter threw a RangeError that aborted the whole render (toContentElements returned an empty list). The value is now handled as an action triggered by any key.
    • focusField: was looking for the text input in the component itself instead of in the resolved field component.
    • getFieldsComponentsMap: for a repeated field name it now keeps the UIField component instead of letting a plain element overwrite it. getFieldsExtended had a sort with the same intent, but it compared MapEntry is UIComponent (always false) over an already deduplicated map.
    • appendStyle: ensures the previous declarations are terminated before appending.
  • UIAsyncContent:

    • _ensureElementForDOM: an HTML content with multiple root nodes returned the raw String instead of the built element (missing return in the branch).
  • UILayout:

    • _getElementIndexByID: an element without an id built the invalid CSS selector #, throwing a SyntaxError. This broke any evaluated uiLayout command (e.g. x(10px)) on elements without an id.
    • _parseValuePx: crashed with a FormatException on fractional values (e.g. 4.5px); now parsed as a num and ignored when not a plain px value (e.g. calc(...)).
    • _valueXY: returned the invalid CSS value '0 px' (with a space) when the parent had no dimensions.
    • The window resize listener is now registered once per Window (it was registered by every UILayout instance, since _registeredWindow was not static).
    • _configure: removed a no-op split() over a regex passed as a literal String.
    • _getElementIndex/_getElementIndexByID: null-safe for detached elements.
  • UINavigator:

    • navigateOnClick: a null/empty route threw a null-check error; it now clears a previously registered route and returns null.
    • _navigateTo: the "navigable not found" retry dropped the fromURL flag, pushing a duplicated entry in the browser history for URL-driven navigations.
  • UIElementExtension.resolveUIComponent: no longer throws when there is no UIRoot.

  • $uiButtonLoader:

    • button-style was only emitted when buttonClasses was provided (and was emitted empty when only buttonClasses was given).
    • loaded-text-classes was built from buttonClasses instead of loadedTextClass.
    • UIButtonLoader.generator now also accepts the loaded-text-classes attribute (the one generated by $uiButtonLoader).
  • UIEventHandler.trackAllRegisteredEventListeners: fixed an empty-check using isElement.

  • getUILoadingType: the dualRing case was unreachable, since the value is lower-cased before the switch. UILoadingType.dualRing could never be parsed from a String and silently fell back to UILoadingType.ring. Also accepts dual-ring and dual_ring.

  • UILoadingConfig:

    • toInlineProperties emitted textZoom, but fromMap only read text-zoom, and withProgress was not emitted at all. Both were silently lost on a toInlineProperties → parse round-trip (used by the ui-button-loader tag).
  • UIDialog.getAllDialogs/removeAllDialogs: resolved the dialogs by mapping the .ui-dialog elements back to their components through an Expando. An Expando is keyed by identity, and on dart2wasm an element re-read from the DOM is a new Dart wrapper, so the lookup always missed and both methods were no-ops. They now resolve the instances through UIRootComponent.getInstances.

  • Lints (dart analyze --fatal-infos --fatal-warnings):

    • BUIViewProvider.fromManifestContent: the return of the async fromManifestTree was inside a try block, so its errors were never caught by the catch (unawaited_return_in_try_block). Moved out of the try, which keeps the behavior and makes the guarded scope explicit.
    • Converted the forwarded constructor parameters to super parameters in UIDocument, BUIRender, UIButtonCapture, UIDialogInput, UIDialogAlert and UIDialogLoading (use_super_parameters).
  • Tests:

    • Added test/bones_ui_component_test.dart, test/bones_ui_async_content_test.dart, test/bones_ui_layout_test.dart, test/bones_ui_navigator_test.dart and test/bones_ui_button_test.dart.
    • Coverage: added test/bones_ui_extension_test.dart, test/bones_ui_component_async_test.dart, test/bones_ui_fields_test.dart, test/bones_ui_navigable_test.dart, test/bones_ui_utils_test.dart and test/bones_ui_dialog_test.dart.
    • Line coverage: 47.8% → 60.8%.

3.0.18 #

  • UIDocument:
    • Constructor: added initialization of _markdownExtensionSet field.

3.0.17 #

  • UIDocument:
    • Added support for custom Markdown extension sets via new markdownExtensionSet field.
    • Updated renderAsync to pass markdownExtensionSet to markdownToDiv when rendering Markdown content.
  • Dependencies:
    • Added markdown package dependency (^7.3.1).
    • Updated dom_tools to ^3.0.1.
    • Updated intl to ^0.20.3.
    • Updated build_web_compilers to ^4.8.0.

3.0.16 #

  • UILayoutEvaluator:

    • Fixed a null-check crash when a layout expression referenced an unresolvable element or this target (e.g. #missing.center.x). _evalMemberExpressionImpl and _evalThisImpl now return null instead of force-unwrapping a null resolved expression, so processLayout correctly falls back to its defaultValue.
  • lib/src/component/capture.dart:

    • UICapture.getInputFile: hardened against a null HTMLInputElement.files, returning null instead of throwing (matching the null-safe handling already used in _readFile).
  • Tests:

    • Added test/capture_test.dart covering the UICapture data-format conversion matrix (arrayBuffer/base64/string/dataUrlBase64), field value round-trips, null clearing and latin1 encoding.
    • Expanded test/layout_expression_test.dart with unit arithmetic, fallback-unit application, mixed-unit rejection and the unresolvable-element fallback (regression test for the fix above).

3.0.15 #

  • lib/src/component/capture.dart:

    • Reformatted capture component constructors and methods with trailing commas.
    • _CapturedData.data: casts with toString() for safer conversions
  • pubspec.yaml:

    • Updated SDK constraint to >=3.10.0 <4.0.0.
    • Updated dependencies:
      • intl_messages: ^3.0.1
      • dom_builder: ^3.0.9
      • archive: ^4.0.9
      • test: ^1.31.1
      • test_api: ^0.7.12
      • test_core: ^0.6.18
      • build_web_compilers: ^4.4.19
      • build_runner: ^2.15.0
      • dependency_validator: ^5.0.5

3.0.14 #

  • UIComponent:

    • Updated rendering logic to mark renderingZone with this [UIComponent] if the rendered result is a DOMNode with future elements or an iterable containing such nodes.
    • Renamed _renderedUIRoots to _renderedUIRootComponents and updated related methods and fields accordingly.
    • Updated _markRenderTime, _scheduleCheckFinishedRendered, and _purgeUI methods to use UIRootComponent instead of UIRoot.
    • Improved render finish notification and purge logic to handle UIRootComponent instances.
  • Dependencies:

    • Updated dom_builder from ^3.0.7 to ^3.0.8.
    • Updated build_web_compilers from ^4.4.13 to ^4.4.14.

3.0.13 #

  • UINavigator:
    • _callNavigateTo:
      • Fix null-pointer: updated to handle null route by assigning an empty string before checking navigables and calling _navigateTo.

3.0.12 #

  • ConfigDocument:

    • getPath: fixed traversal logic to correctly handle nested maps by checking type and updating value at each key.
  • UITestChain:

    • logDocument: renamed local variable to avoid shadowing and correctly encode compressed data length in log message.
  • Internal utility:

    • _equalsParameters: refactored parameter comparison logic for clarity and correctness, ensuring full match checks for extra keys.
  • bones_ui_utils.dart:

    • stackTraceSafe: improved error message when failing to get current stack trace.
  • Dependencies:

    • Updated dom_builder to ^3.0.7.
    • Updated test to ^1.30.0, test_api to ^0.7.10, and test_core to ^0.6.16.

3.0.11 #

  • UIComponent:

    • clear: fixed _renderedElements nullification to occur after element removal.
    • ensureRendered: updated to call callRender(clear: true) if isDisposed is true or locale changed.
    • _dispose:
      • Fix issue: removed redundant clear(force: true) and _rendered = false assignments.
  • UIRootComponent:

    • purgeRoot: added optional disposePurgedComponents parameter to dispose purged components after purge.
  • UIRoot:

    • close: updated to call purgeRoot(disposePurgedComponents: true) before refreshing UI and emitting close events.
    • close: updated refresh calls to include clearPreservedRender: true flag.

3.0.10 #

  • UIComponent:

    • clear:
      • Prevent clearing when preserveRender is true and any async content is loading, to avoid breaking async content attachment.
      • Added _renderedElements = null after removing elements.
    • dispose:
      • Added call to clear(force: true) before resetting _rendered and clearing rendered state fields.
  • _UIDOMTreeReferenceMap:

    • isValidEntry:
      • Components with loading async content are always valid to keep them alive.
      • Components with preserveRender are always valid even if outside the DOM.
      • Components not disposed and still in initial rendering phase are considered valid.
      • Default validation falls back to superclass isValidEntry.

3.0.9 #

  • UIComponent:
    • clear:
      • Added check to prevent clearing when preserveRender is true and there are loading or rendered async contents.
    • render:
      • Reset _renderedAsyncContents to null when not preserving render.
  • _UIDOMTreeReferenceMap:
    • isValidEntry:
      • Added condition to always consider entries valid if their component's preserveRender is true.

3.0.8 #

  • UIEventHandler:

    • Renamed base class to _EventHandlerPrivate.
    • Added event listener tracking methods:
      • addTrackedEventListener, trackRegisteredEventListener, trackAllRegisteredEventListeners, untrackRegisteredEventListener, cancelRegisteredEventListeners.
    • Updated event listener registration methods to use new internal implementations.
  • _EventHandlerPrivate:

    • Added support for tracked event listeners with automatic unregistering.
    • Added internal management of _registeredEventListeners.
  • UIDeviceOrientation:

    • Updated to extend _EventHandlerPrivate.
    • Updated event listener registration to use _addEventListener.
  • UIComponent:

    • Improved resolveParentUIComponent logic to handle recursive resolution more robustly.
    • Added hasUIComponentClass static method to check for 'ui-component' CSS class.
    • Updated style and refresh methods to support clearPreservedRender parameter.
    • Enhanced rendering zone management with _releaseRenderingZoneUIComponent.
    • Changed rendering stack from Queue to List for _renderingUIComponent.
    • Improved parentRenderingUIComponent to check async rendering zones.
    • Updated _callRenderImpl and _doRender to support clearing preserved render.
    • Improved _doRender to reset _renderedElements when not preserving render.
    • Added _ensureAllElementsRendered helper to recursively ensure rendering of nested elements.
    • Updated event listener registration in _parseAction, _parseOnEventKeyPress, _parseOnEventClick to use tracked event listeners.
    • Added cancelRegisteredEventListeners call in dispose to unregister all tracked listeners.
    • Added static handledElementAttributes list for attributes that trigger event handling.
    • Improved _getUIComponent to search all UIRootComponent instances.
    • Updated _getUIComponentByChild and related methods to use new logic.
  • UIDOMGenerator:

    • Refactored isMappable to use iterative stack-based traversal.
    • Added detection of handled element attributes and event listeners to determine mappability.
    • Added _isNoEventDOMElement helper to exclude certain tags from event handling.
  • UIRoot:

    • Updated callRender to support clearPreservedRender parameter.
  • UIButtonBase:

    • Updated event listener registration to use tracked event listeners.
    • Added dispose override in UIButtonLoader to clear internal fields.
  • UICapture:

    • Updated event listener registration to use tracked event listeners.
  • URLFileReader:

    • Added tracked event listeners for FileReader events with automatic unregistering on load/error.
  • UIButtonCapturePhoto:

    • Updated event listener registration to use tracked event listeners.
  • InputConfig:

    • Updated event listener registration in input elements to use tracked event listeners.
  • UIInputTable:

    • Updated event listener registration to use tracked event listeners for focus, change, keyUp, and complete events.
  • UISVG:

    • Added _onLoadContent handler to refresh component on resource load.
  • Dependency updates:

    • js_interop_utils: ^1.0.11
    • web_utils: ^1.0.23
    • dom_builder: ^3.0.6
    • swiss_knife: ^3.3.14
    • build_web_compilers: ^4.4.13

3.0.7 #

  • UIComponent:

    • Rollback: avoid WeakReference issues with WASM on Chrome/Android.
      • Replaced DualWeakMap<UIElement, UIComponent> with Expando<WeakReference<UIComponent>> for _contentsUIComponents.
      • Updated _setContent and _recycle to store WeakReference(this) in _contentsUIComponents.
      • Updated getContentUIComponent to retrieve the target from the weak reference.
      • Removed _contentsUIComponents.purge() call from purgeGlobals.
  • Dependencies:

    • Updated dom_builder from ^3.0.4 to ^3.0.5.
    • Updated swiss_knife from ^3.3.7 to ^3.3.9.

3.0.6 #

  • UIComponent:

    • getContentUIComponent: replaced direct map access with DualWeakMap.getNoPurge for _contentsUIComponents.
  • UIDOMGenerator:

    • Added override for isMappable method to exclude TextNode and certain DOMElement tags (br, p) from being mappable.
  • Dependencies:

    • Updated dom_builder from ^3.0.2 to ^3.0.4.
    • Updated swiss_knife from ^3.3.5 to ^3.3.7.

3.0.5 #

  • UIComponent:

    • toRenderableList:
      • Changed return type from List<dynamic>? to List<Object>?.
      • Simplified list conversion logic; now accepts List<Object>, Iterable<Object?>, and Map with renderable keys/values.
    • _toContentElementsImpl:
      • Replaced _normalizeRenderListValue usage for HTML string rendering with direct $html call and DOM node building.
    • _normalizeRenderListValue:
      • Added null check returning null immediately.
      • Reordered and refined type checks for better clarity and correctness.
      • Removed redundant UIComponent check duplication.
    • _buildRenderList:
      • Added null check after normalization to skip null values.
  • Dependency updates:

    • dom_builder: ^3.0.2

3.0.4 #

  • UIComponent:
    • _notifyFinishRendered: updated to prevent concurrent executions by caching a future and resetting it on completion.
    • _notifyFinishRenderedImpl: refactored to async method called by _notifyFinishRendered.
    • _onPurge: added early return if _subComponent is true to skip purging for subcomponents.

3.0.3 #

  • Dependency updates in pubspec.yaml:
    • Updated dom_builder from ^3.0.0 to ^3.0.1.
    • Updated build_web_compilers from ^4.4.11 to ^4.4.12.

3.0.2 #

  • UIComponent:

    • Added private _subComponent flag to distinguish subcomponents.
    • Refactored constructors:
      • Added private named constructor UIComponent._ to centralize initialization.
      • Added public mirror constructor UIComponent with detailed documentation on parameters controlling rendering, styling, and structure.
      • Added new constructor UIComponent.subComponent for creating components attached to an existing parentComponent, sharing its DOM mapping context.
    • Updated dispose method to avoid disposing shared domTreeMap when the component is a subcomponent.
  • UIButton (button.dart):

    • Extended $uiButtonLoader function to support additional attributes for loaded text styling and content:
      • Added parameters: loadedTextClass, loadedTextStyle, loadedTextErrorClass, loadedTextErrorStyle, loadedTextOK, loadedTextError.
      • Added corresponding attributes to the returned DOM element for these new parameters.

3.0.1 #

  • UIComponent:

    • Updated render to notify UI roots finish render before purging UI components and roots asynchronously after a 300ms delay.
    • Added private async method _purgeUI to purge components and roots with yielding.
    • Replaced synchronous _onFinishRender with async _onPurge that purges DOM tree map and yields.
    • Made purgeGlobals async and added yields between purge calls.
  • UIRootComponent:

    • Modified notifyFinishRender to only emit event without purging.
    • Made purgeRoot async, purging UI components tree and DOM tree map with yields, and awaiting UIComponent.purgeGlobals.
  • bones_ui_utils.dart:

    • Added yeld utility function to yield to event loop for at least 1 millisecond.
  • UICapture:

    • Replaced all internal _yeld calls with yeld from bones_ui_utils.dart for consistent async yielding.

3.0.0 #

  • Release v3.0.0

  • Dependencies:

    • Updated dom_tools from ^3.0.0-beta.19 to ^3.0.0.
    • Updated dom_builder from ^3.0.0-beta.11 to ^3.0.0.
    • intl_messages: ^3.0.0

3.0.0-beta.20 #

  • UIEventHandler:

    • Added unregisterEventListener and clearEventListeners methods.
  • EventHandlerPrivate:

    • Changed _eventListeners to nullable and lazily initialized.
    • Added _unregisterEventListener and _clearEventListeners implementations.
  • ElementProvider and CSSProvider:

    • Updated calls to buildDOM to include treeMap and setTreeMapRoot parameters.
  • UIComponent:

    • Replaced Expando with DualWeakMap for static field _asyncRenderingZoneComponent.
    • Added _domTreeMap field and domTreeMap getter for lazy DOM tree mapping.
    • Added domTreeMapIfInitialized getter and static domTreeMapDummy.
    • Replaced Expando with DualWeakMap for _contentsUIComponents.
    • Updated parent setting methods to use named parameter addToParent.
    • Added _resolveParentFromParentUIComponent to better resolve _parent.
    • Updated many list conversions from .toList() to .asListViewFixed for performance.
    • Added _onRender and _onChange lazy event streams.
    • Added _renderedUIRoots and _renderedUIComponents sets to track rendering.
    • Improved _markRenderTime and rendering finish notification logic.
    • Added dispose and _recycle methods for lifecycle management.
    • Added static purgeGlobals to clear global UI state.
    • Updated rendering and async content handling to use nullable collections.
    • Updated event listener attachment to use addEventListenerTyped.
  • bones_ui_extension.dart:

    • Added ElementStreamExtension and StreamSubscriptionExtension to track subscriptions in DOMTreeMap.
  • UIDOMGenerator:

    • Updated addExternalElementToElement and toElements to accept treeMap and context parameters.
    • Updated calls to buildDOM to pass treeMap and setTreeMapRoot.
  • UIRootComponent:

    • Changed _uiComponentsTree to nullable and lazily initialized.
    • Added _onPurgedUIComponents callback to dispose purged components.
    • Updated methods to safely handle nullable _uiComponentsTree.
    • Added purgeRoot method to purge tree and global UI state.
  • Added _UIDOMTreeReferenceMap subclass to prevent premature purging of components not fully initialized or disposed.

  • UIButtonBase and UIButtonLoader:

    • Updated event listener attachment to use addEventListenerTyped.
    • Fixed null safety and type checks for button elements.
  • UICapture:

    • Added new CaptureDataFormat.urlOrBlobUrl format.
    • Added selectedFileDataAsURLOrDataURLBase64 getter.
    • Updated _readFile and _filterCapturedData to support new format and improved async flow with _yeld helper.
    • Updated _CapturedData class to store optional MIME type and support new format.
    • Improved data format conversions to preserve MIME type.
    • Added helper _yeld function for async yielding.
  • UIDialogBase:

    • Fixed background color style to use rgb when alpha is 1.0.
  • _CanvasEditImage:

    • Added delayed _configure call after construction.
    • Updated _updateCanvasDimension to return bool indicating if dimension changed.
    • Improved zoom and translate setters to avoid unnecessary renders.
  • InputConfig:

    • Added optional parent parameter to rendering methods.
    • Updated DOM building calls to pass treeMap and setTreeMapRoot.
    • Updated _resolveValueText to use parent for intl message resolution.
  • UIInputTable:

    • Updated rendering of inputs and labels to pass domTreeMap and setTreeMapRoot.
  • UILoading:

    • Updated asDIVElement buildDOM calls to pass treeMap and setTreeMapRoot.
  • MasonryItem and _MasonryRenderItem:

    • Updated DOM generation calls to pass treeMap and setTreeMapRoot.
  • UITemplateElementGenerator:

    • Updated DOM generation calls to pass treeMap, context, and setTreeMapRoot.
    • Updated template building to use dsxResolution enum instead of boolean flags.
  • pubspec.yaml:

    • Updated dependencies:
      • web_utils: ^1.0.21
      • dom_tools: ^3.0.0-beta.19
      • dom_builder: ^3.0.0-beta.11
      • swiss_knife: ^3.3.5
      • statistics: ^1.2.1
      • test: ^1.29.0
      • test_api: ^0.7.9
      • test_core: ^0.6.15
      • build_web_compilers: ^4.4.11
      • build_runner: ^2.11.1
      • dependency_validator: ^5.0.4

3.0.0-beta.19 #

  • dom_tools: ^3.0.0-beta.13
  • dom_builder: ^3.0.0-beta.7
  • web_utils: ^1.0.19

3.0.0-beta.18 #

  • UIDOMGenerator:

    • toElements:
      • Fix resolution of UIComponent, calling UIComponent.ensureRendered before return UIComponent.content.
  • dom_builder: ^3.0.0-beta.6

3.0.0-beta.17 #

  • UIComponent:

    • getFieldElementTyped: use asElementOfNullable.
  • web_utils: ^1.0.18

3.0.0-beta.16 #

  • UIDOMGenerator:

    • addExternalElementToElement: improve external element resolution.
    • attachFutureElement: improve element resolution.
  • js_interop_utils: ^1.0.9

  • web_utils: ^1.0.17

  • dom_tools: ^3.0.0-beta.12

  • dom_builder: ^3.0.0-beta.5

  • expressions: ^0.2.5+3

  • collection: ^1.19.1

  • test: ^1.28.0

  • test_api: ^0.7.8

  • test_core: ^0.6.14

  • build_web_compilers: ^4.4.3

  • build_runner: ^2.10.4

  • dependency_validator: ^5.0.3

3.0.0-beta.15 #

  • Merge 2.5.21
    • InputConfig:
      • Added field precision.
      • Added support for type decimal.

3.0.0-beta.14 #

  • Merge 2.5.20:
    • UIComponent:
      • Optimize findChildDeep with a BFS queue.

3.0.0-beta.13 #

  • Merge 2.5.19:

    • UIComponent:
      • _getContentChildrenImpl, _findInContentChildDeepImpl, _findChildrenDeepImpl, _listFieldsEntriesInContentDeepImpl: Switched to iterative breadth-first search for up to 10× faster element lookup in deep UI trees.
      • getFields, getFieldElementByValue, getElementFieldName, getFieldsElementsMap, parseChildElementValue:
        • added parameter resolveUIComponents = true.
  • test: ^1.26.3

  • test_api: ^0.7.7

  • test_core: ^0.6.12

3.0.0-beta.12 #

  • Merge 2.5.17:

    • UIDialog:
      • Added properties autoScrollY and autoScrollX.
  • dom_tools: ^3.0.0-beta.11

  • swiss_knife: ^3.3.1

  • build_web_compilers: ^4.2.0

  • build_runner: ^2.5.4

3.0.0-beta.11 #

  • Merge 2.5.16:
    • UIComponent:
      • Optimized subUIComponentsDeeply and getRenderedUIComponents

        • Both now return Iterable<UIComponent>.
        • subUIComponentsDeeply is optimized as a lazy sync* generator and recursively calls subElem.subUIComponentsDeeply.
      • Improve _resolveUIRootComponent.

      • _callRenderImpl: fix issue when parent is passed on constructor but it's already appended in a sub-element.

      • test: ^1.26.2

      • test_api: ^0.7.6

      • test_core: ^0.6.11

      • dependency_validator: ^5.0.2

3.0.0-beta.10 #

  • UISVG:

    • replace createHTML with createElement for SVG element creation.
  • UIComponent:

    • replace append with appendChild for DOM consistency.
  • js_interop_utils: ^1.0.8

  • web_utils: ^1.0.15

  • dom_tools: ^3.0.0-beta.10

  • archive: ^4.0.7

  • test: ^1.26.2

  • test_api: ^0.7.6

  • test_core: ^0.6.11

  • build_web_compilers: ^4.1.5

3.0.0-beta.9 #

  • Merge v2.5.15

    • UIComponent:
      • Added renderedElementsAsync.
    • UIDialogBase:
      • Added configureButtons to configure the buttons onClick.
      • posRender and posAsyncRender calls configureButtons.
  • js_interop_utils: ^1.0.7

  • web_utils: ^1.0.14

  • dom_tools: ^3.0.0-beta.9

  • dom_builder: ^3.0.0-beta.4

  • archive: ^4.0.5

3.0.0-beta.8 #

  • web_utils: ^1.0.12

  • dom_tools: ^3.0.0-beta.8

  • project_template: ^1.1.1

  • archive: ^4.0.4

  • dependency_validator: ^5.0.2

3.0.0-beta.7 #

✨♻️ refactor(bones_ui_test_tools):

  • Standardize selectNonTyped and rename it to select.

  • Standardize selectNonTypedAll / selectAllNonTyped and rename it to selectAll.

  • Ensure that selectTyped exists where querySelectorTyped exists.

  • web_utils: ^1.0.11

3.0.0-beta.6 #

  • Avoids using identical with Element (JSObject) to avoid inconsistencies in Wasm.

  • dom_tools: ^3.0.0-beta.7

  • dom_builder: ^3.0.0-beta.3

  • web: ^1.1.1

  • mercury_client: ^2.3.0

3.0.0-beta.5 #

  • web_utils: ^1.0.9
  • intl_messages: ^3.0.0-beta.1
  • dom_tools: ^3.0.0-beta.5
  • swiss_knife: ^3.3.0
  • statistics: ^1.2.0
  • resource_portable: ^3.1.2
  • intl: ^0.20.2

3.0.0-beta.4 #

  • js_interop_utils: ^1.0.6

3.0.0-beta.3 #

  • web_utils: ^1.0.7
  • mercury_client: ^2.2.5

3.0.0-beta.2 #

  • web_utils: ^1.0.6
  • dom_tools: ^3.0.0-beta.4
  • dom_builder: ^3.0.0-beta.2

3.0.0-beta.1 #

  • CI: test with dart2js and dart2wasm (on Chrome).

  • sdk: '>=3.6.0 <4.0.0'

  • js_interop_utils: ^1.0.5

  • web_utils: ^1.0.5

  • dom_tools: ^3.0.0-beta.3

  • dom_builder: ^3.0.0-beta.1

  • web: ^1.1.0

  • collection: ^1.19.0

  • test: ^1.25.15

  • stream_channel: ^2.1.4

  • lints: ^5.1.1

  • build_web_compilers: ^4.1.1

  • build_runner: ^2.4.15

2.5.21 #

  • InputConfig:
    • Added field precision.
    • Added support for type decimal.

2.5.20 #

  • UIComponent:
    • Optimize findChildDeep with a BFS queue.

2.5.19 #

  • UIComponent:

    • _getContentChildrenImpl, _findInContentChildDeepImpl, _findChildrenDeepImpl, _listFieldsEntriesInContentDeepImpl: Switched to iterative breadth-first search for up to 10× faster element lookup in deep UI trees.
    • getFields, getFieldElementByValue, getElementFieldName, getFieldsElementsMap, parseChildElementValue:
      • added parameter resolveUIComponents = true.
  • test: ^1.26.3

  • test_api: ^0.7.7

  • test_core: ^0.6.12

2.5.18 #

  • UIDialog:
    • Added properties autoScrollY and autoScrollX.

2.5.17 #

  • Migrate to archive: ^4.0.7.

  • project_template: ^1.1.1

  • archive: ^4.0.7

2.5.16 #

  • UIComponent:

    • Optimized subUIComponentsDeeply and getRenderedUIComponents
      • Both now return Iterable<UIComponent>.
      • subUIComponentsDeeply is optimized as a lazy sync* generator and recursively calls subElem.subUIComponentsDeeply.
    • Improve _resolveUIRootComponent.
    • _callRenderImpl: fix issue when parent is passed on constructor but it's already appended in a sub-element.
  • test: ^1.26.2

  • test_api: ^0.7.6

  • test_core: ^0.6.11

  • dependency_validator: ^5.0.2

2.5.15 #

  • UIComponent:

    • Added renderedElementsAsync.
  • UIDialogBase:

    • Added configureButtons to configure the buttons onClick.
    • posRender and posAsyncRender calls configureButtons.
  • args: ^2.7.0

  • dependency_validator: ^4.1.3

2.5.14 #

  • bones_ui_test_tools.dart:

    • _testUISleepUntilImpl: default timeout change from 1000 ms to 3000 ms.
  • sdk: '>=3.6.0 <4.0.0'

  • intl_messages: ^2.3.5

  • mercury_client: ^2.2.5

  • resource_portable: ^3.1.2

  • collection: ^1.19.0

  • test: ^1.25.15

  • stream_channel: ^2.1.4

  • build_web_compilers: ^4.1.1

  • build_runner: ^2.4.15

  • lints: ^5.1.1

2.5.13 #

  • UIComponent:
    • requestRefresh: added optional parameter delay.

2.5.12 #

  • UIComponent:

    • Optimize parseClasses, configureClasses, appendClasses and appendStyle.
    • _callRenderImpl: optimize check if parent contains content.
    • _normalizeRenderListValue: optimize type check order.
    • Improve null-safe code.
  • bones_ui_layout: optimize.

  • dom_tools: ^2.3.2

  • dom_builder: ^2.2.7

  • swiss_knife: ^3.2.3

  • yaml: ^3.1.3

  • test: ^1.25.14

  • stream_channel: ^2.1.3

  • stack_trace: ^1.12.1

2.5.11 #

  • UIComponent:
    • Optimize_notifyRendered.
    • Optimize _scheduleCheckFinishedRendered.

2.5.10 #

  • sdk: '>=3.5.0 <4.0.0'

  • intl_messages: ^2.3.4

  • dom_builder: ^2.2.6

  • swiss_knife: ^3.2.2

  • statistics: ^1.1.3

  • mercury_client: ^2.2.4

  • extended_type: ^2.1.1

  • expressions: ^0.2.5+2

  • args: ^2.6.0

  • logging: ^1.3.0

  • path: ^1.9.1

  • test: ^1.25.13

  • test_api: ^0.7.4

  • test_core: ^0.6.8

  • stack_trace: ^1.12.0

  • build_web_compilers: ^4.1.0

  • build_runner: ^2.4.14

2.5.9 #

  • UIRootComponent:

    • Constructor:
      • register at _rootComponentInstances, using WeakReference.
    • Added getInstances.
  • UIComponent:

    • _getUIComponentByContent, _getUIComponentByChild:
      • Search first through UIRoot.getInstance() and also through UIRootComponent.getInstances().

2.5.8 #

  • sdk: '>=3.4.0 <4.0.0'

  • intl_messages: ^2.3.1

  • statistics: ^1.1.1

  • extended_type: ^2.1.0

2.5.7 #

  • UIElementExtension:

    • setValue: handle SelectElement.
  • dom_tools: ^2.3.1

  • archive: ^3.6.1

  • test: ^1.25.8

  • test_api: ^0.7.3

  • test_core: ^0.6.5

2.5.6 #

  • ElementExtension:

    • resolveElementValue: optimize for InputElement.
    • Added resolveInputElementValue.
  • UIComponent:

    • Added selectElementsValues
  • dom_builder: ^2.2.5

  • test: ^1.25.7

  • test_api: ^0.7.2

  • test_core: ^0.6.4

2.5.5 #

  • New UIRootComponent:

    • Implemented by UIRoot and UIDialogBase
  • UIComponent:

    • Extends UIRootComponent.
    • Added getter uiRootComponent.
    • Added renderingUIComponent: returns the current rendering component in the stack,
    • Added parentRenderingUIComponent: can resolve asynchronous parent renderer.
    • _construct: improved parent UIComponent resolution.
    • resolveTextIntl: improve resolution of uiRoot and call to intlMessageResolver.
  • UIDialogBase extends UIRootComponent:

    • getRenderedUIComponentById, getRenderedUIComponents: fix resolution of child UIComponents.
  • UIInputTable:

    • Added field scrollToInvalidElement.
  • InputConfig:

    • Added field labelVerticalAlign
  • dom_builder: ^2.2.3

  • archive: ^3.5.1

  • args: ^2.5.0

  • test: ^1.25.5

  • test_core: ^0.6.2

2.5.4 #

  • New UIComponentDOMContext.

  • UIDOMGenerator:

    • Optimize attachFutureElement using UIComponentDOMContext.uiComponent to resolve parentComponent.
  • mercury_client: ^2.2.2

  • test: ^1.25.3

  • test_api: ^0.7.1

  • test_core: ^0.6.1

  • build_web_compilers: ^4.0.10

  • build_runner: ^2.4.9

2.5.3 #

  • testUI:

    • Fix tearDownAll, declared before setUpAll (before call to spawnHybridUri).
  • SpawnHybrid: added field finalizer.

2.5.2 #

  • UIElementExtension:
    • Fix setValue for checkbox.

2.5.1 #

  • bones_ui_web:
    • setValue: Update handling of CheckboxInputElement.

2.5.0 #

  • sdk: '>=3.3.0 <4.0.0'

  • intl_messages: ^2.3.0

  • dom_tools: ^2.3.0

  • json_render: ^2.1.0

  • swiss_knife: ^3.2.0

  • statistics: ^1.1.0

  • project_template: ^1.1.0

  • intl: ^0.19.0

  • test: ^1.25.2

  • test_api: ^0.7.0

  • test_core: ^0.6.0

  • build_web_compilers: ^4.0.9

  • build_runner: ^2.4.8

2.4.1 #

  • UIDialog:

    • Added getAllDialogs and removeAllDialogs.
  • mercury_client: ^2.2.1

  • swiss_knife: ^3.1.6

  • archive: ^3.4.10

  • build_web_compilers: ^4.0.8

2.4.0 #

  • New bones_ui_web.dart:

    • Avoid imports to dart:html in preparation to use of dart:web or other alternatives.
    • New typedef UINode and UIElement.
  • Replace usage of Element to UIElement and Node to UINode.

  • UIComponent:

    • Constructor:
      • parameter parent now accepts Element or UIComponent.
    • toContentElements: changed to named parameters.
  • intl_messages: ^2.2.3

  • dom_tools: ^2.2.0

2.3.3 #

  • UIComponent:

    • Optimize: getFields, parseChildElementValue and getFieldExtended.
  • ElementExtension:

    • Optimize: resolveElementValue
  • intl_messages: ^2.2.2

  • path: ^1.9.0

2.3.2 #

  • UIDialogBase, UIDialog:
    • Added onClickListenOnlyForDialogButtonClass to constructor.

2.3.1 #

  • UITestChain
    • Added selectUntil

2.3.0 #

  • selectFirstWhereUntil:

    • Removed parameter expected.
    • Throw exception when can't select element.
  • sdk: '>=3.2.0 <4.0.0'

  • intl_messages: ^2.2.1

  • archive: ^3.4.9

2.2.8 #

  • UITestChainNode:
    • Added: selectWhere, selectFirstWhere, selectWhereUntil, selectFirstWhereUntil.

2.2.7 #

  • statistics: ^1.0.26
  • expressions: ^0.2.5+1
  • archive: ^3.4.7
  • test: ^1.24.9
  • test_core: ^0.5.9
  • build_web_compilers: ^4.0.6

2.2.6 #

  • UINavigableContent: added style to constructor.
  • Fix UIMasonry.
  • Fix $uiSVG.
  • UINavigator:
    • clearDetachedNavigables: added parameter ignore.
  • dom_builder: ^2.2.2

2.2.5 #

  • dom_builder: ^2.2.1
  • archive: ^3.4.2
  • dependency_validator: ^3.2.3

2.2.4 #

  • Bones_UI CLI:

    • Added options --enable-deferred-libraries and --disable-deferred-libraries.
  • BonesUITestRunner: added field enableDeferredLibraries.

  • Fix typos.

  • archive: ^3.3.8

2.2.3 #

  • UIDialogBase:

    • Execute the onClick listeners of the buttons asynchronously (to allow custom listeners to be executed 1st).
  • dom_builder: ^2.2.0

2.2.2 #

  • UIComponent:

    • Added selectElement and selectElements: aliases to querySelector and querySelectorAll.
    • getField: add parameter def.
    • Added getFieldAs.
    • Added getFieldsGroupEntriesByPrefix, getFieldsGroupListByPrefix, getFieldsGroupByPrefix.
    • Added getFieldsGroupKeysByPrefix, getFieldsGroupValuesByPrefix.
    • Added getFieldsGroupChecks, getFieldsGroupCheckedKeys.
  • Dart CI: update and optimize jobs.

  • intl_messages: ^2.2.0

  • statistics: ^1.0.25

  • test: ^1.24.6

  • test_core: ^0.5.6

2.2.1 #

  • SelectElementExtension: added selectedOptionsSafe.

  • ElementExtension.resolveElementValue:

    • Handle bug on SelectElement.selectedOptions calling selectedOptionsSafe.
  • intl_messages: ^2.1.15

  • resource_portable: ^3.1.0

2.2.0 #

  • UIComponent:

    • Expose getContentUIComponent
    • addTo, insertTo, setParent: new parameter parentUIComponent.
    • New static function resolveParentUIComponent.
  • UIDOMGenerator:

    • New _resolveParentUIComponent.
  • UIInputTable:

    • _addTableRowCell: call UIComponent.resolveParentUIComponent for child elements.
  • sdk: '>=3.0.0 <4.0.0'

  • intl_messages: ^2.1.14

  • dom_builder: ^2.1.9

  • collection: ^1.17.2

  • args: ^2.4.2

  • logging: ^1.2.0

  • test: ^1.24.4

  • test_api: ^0.6.1

  • test_core: ^0.5.4

  • stream_channel: ^2.1.2

  • stack_trace: ^1.11.1

  • build_web_compilers: ^4.0.4

  • build_runner: ^2.4.6

  • lints: ^2.1.1

2.1.25 #

  • dom_tools: ^2.1.17
  • dom_builder: ^2.1.8

2.1.24 #

  • UIComponent:
    • Added requestRefresh.
  • UIButton and UIButtonLoader:
    • Changed text to buttonContent
    • text getter/setter now is an String alias to buttonContent.
  • UICalendar, UIColorPicker, UIMasonry, UIMultiSelection:
    • Call requestRefresh when possible
  • UIMultiSelection:
    • Constructor: added parameter selections for initial selections.
    • Added field autoInputFontShrink.
  • intl_messages: ^2.1.6
  • dom_tools: ^2.1.16

2.1.23 #

  • New UIDialogEditImage.
  • UICapture:
    • Added field photoEditor and editCapture.
  • intl_messages: ^2.1.5
  • intl: ^0.18.1

2.1.22 #

  • Allow nullable parent in components:
    • UIButtonCapture, UIInfosTable, UIMasonry, UIMenu, BUIManifestRender.
  • Fix toContentElements and toRenderableList:
    • Ensure that always return a casted List<dynamic>.
  • intl_messages: ^2.1.4
  • dom_tools: ^2.1.15
  • yaml: ^3.1.2
  • args: ^2.4.1
  • test: ^1.24.2
  • test_api: ^0.5.2
  • test_core: ^0.5.2

2.1.21 #

  • swiss_knife: ^3.1.5
  • intl_messages: ^2.0.7
  • dom_tools: ^2.1.14
  • dom_builder: ^2.1.7
  • archive: ^3.3.7
  • resource_portable: ^3.0.2

2.1.20 #

  • InputConfig:
    • Added field labelStyle.
  • UIInputTable:
    • Added field tableClasses, tableStyle.
  • dom_builder: ^2.1.6

2.1.19 #

  • UIDialog:
    • Tag ui-dialog:
      • added attribute remove-on-hide.
  • dom_builder: ^2.1.5
  • swiss_knife: ^3.1.4

2.1.18 #

  • InputConfig:
    • textare: width: 100%
    • select: max-width: 100%
  • dom_builder: ^2.1.4

2.1.17 #

  • Navigation:
    • Added encodeParameters, encodeRouteAndParameters and routeAndParameters.

2.1.16 #

  • UIComponent:
    • Added static getter domContext.
  • dom_tools: ^2.1.13
  • dom_builder: ^2.1.3
  • archive: ^3.3.6
  • args: ^2.4.0
  • logging: ^1.1.1

2.1.15 #

  • BonesUITestRunner:
    • _processJsonReportFile:
      • Allow suites with paths ending with .dart, not only _test.dart.
  • intl_messages: ^2.0.6

2.1.14 #

  • UITestChain:
    • Added checkbox.

2.1.13 #

  • UIRoot:
    • Added field name.
  • bones_ui_test_tools.dart:
    • Added testMultipleUI.
    • testUISleepUntilRoute, sleepUntilRoute:
      • Added parameters and partialParameters.
    • UITestContext:
      • Added setTestWindowTitle.
    • testUI:
      • Now updates the window.top.title for each test(...).
  • bones_ui_test_cli.dart:
    • Compatibility with testMultipleUI and saving of logDocument to the log directory.
  • test: ^1.23.1
  • test_core: ^0.4.24

2.1.12 #

  • bones_ui_test_tools.dart:
    • Using Chain.capture for better StackTrace.
  • Added linter rules:
    • avoid_dynamic_calls.
    • avoid_type_to_string.
    • no_runtimeType_toString.
    • no_adjacent_strings_in_list.
  • dom_tools: ^2.1.11
  • stack_trace: ^1.11.0

2.1.11 #

  • Test Tools:
    • testUISleepUntil and sleepUntil:
      • Now accepts FutureOr<bool> return in the ready function.
    • testUISleepUntilElement, sleepUntilElement and expectElement:
      • Added mapper parameter.
  • bones_ui_test:
    • Show done event at the end of the tests if --log-directory is passed.

2.1.10 #

  • bones_ui_test_tools.dart:
    • UITestChain with Iterable element:
      • Added elementsLength expectElementsLength, elementAt, first, firstOr
    • Moved from extension to UITestChain:
      • click, setValue and selectIndex.
    • _mergeStackStraces:
      • Remove some bottom lines from stack1 (after TestFutureExtension.thenWithStackTrace).
  • bones_ui_test_cli.dart:
  • _DocumentLog:
    • Now appending to the document <title> the logging id.

2.1.9 #

  • ElementExtension:
    • added dispatchChangeEvent.
  • Added SelectElementExtension:
    • selectIndex.
  • BonesUITestRunner:
    • Fix copy of build directory when it's already populated.
    • Improved console logging.
  • UITestChain:
    • Added selectIndex, where.
  • UITestChainNode:
    • Added elementAs.
  • Added TestNodeExtension (on dart:html.Node):
    • simplify.

2.1.8 #

  • UITestChain:
    • added logDocument.
  • BonesUITestRunner
    • Added logDirectory.

2.1.7 #

  • UIField:
    • Added setFieldValue.
  • UIComponent:
    • Added click.
  • UIRoot:
    • Added isTest.
  • bones_ui_test_tools.dart:
    • Added testUI and UITestContext.
    • Added SpawnHybrid.
    • Added UITestChain tools.
  • dom_tools: ^2.1.10
  • test: ^1.22.2
  • test_api: ^0.4.18
  • test_core: ^0.4.22
  • stream_channel: ^2.1.1

2.1.6 #

  • bones_ui_test (cli):
    • Added selected tests path to the arguments passed to the test runner.

2.1.5 #

  • InputConfig:
    • Fix getInputConfig when field was not found.
  • expressions: ^0.2.5
  • mercury_client: ^2.1.8
  • dom_tools: ^2.1.9
  • json_object_mapper: ^2.0.1

2.1.4 #

  • UIRoot:
    • Added close, closeOperations, renderClosed, isClosed.
  • UIComponent:
    • refresh: added parameter forceRender.
    • clear: added parameters force and removeFromParent.

2.1.3 #

  • swiss_knife: ^3.1.3
  • intl_messages: ^2.0.5
  • json_render: ^2.0.5
  • intl: ^0.18.0
  • resource_portable: ^3.0.1
  • build_runner: ^2.3.3

2.1.2 #

  • bones_ui CLI:
    • Command test:
      • Now calls dart run bones_ui:bones_ui_test executable to run the tests.

2.1.1 #

  • bones_ui_test_cli:
    • Use absolute paths to resolve directories and files.

2.1.0 #

  • bones_ui CLI:
    • Added test command, for Bones_UI unit tests.
  • Added libraries:
    • bones_ui_test to import the Bones_UI Test tools.
    • bones_ui_test_clit to import the Bones_UI Test CLI (used by test command).
  • UIComponent
    • Added waiteRender, callRenderAndWait, querySelector, querySelectorAll.
      • These methods can be useful in unit tests.
  • ElementExtension:
  • Fix UINavigator behavior when findNavigable can't find a UINavigableComponent for the route.
  • intl_messages: ^2.0.4
  • dom_tools: ^2.1.8
  • archive: ^3.3.5
  • test: ^1.22.0
  • test_api: ^0.4.17
  • test_core: ^0.4.21
  • path: ^1.8.3

2.0.27 #

  • UIInputTable:
    • Exposing onChangeTriggerDelay in the constructor.
    • Fix onChange based on InteractionCompleter: wasn't notifying to the InputConfig.onChangeListener.
  • Added pre-defined filed validators:
    • FieldLengthValidator, fieldEmailValidator, fieldURLValidator, fieldURLDataBase64Validator.
  • Added filed normalized:
    • fieldNormalizerTrim.
  • Added FieldNormalizerGroup and FieldValidatorGroup.
  • extended_type: ^2.0.1

2.0.26 #

  • UICapture:
    • Added captureAspectRatio.
  • test: ^1.22.0

2.0.25 #

  • UICapture:
    • Added CaptureDataFormat.url.
    • Field _selectedFileData is now an internal _CapturedData capable to handle different interchangeable data formats.
    • Added field captureMaxWidth and captureMaxHeight for maximum captured image size.
    • Added field photoScaleMimeType and photoScaleQuality for scale operations.
  • UIComponent:
    • Optimized configureClasses.
    • Show error message when trying to render an InputConfig.
  • swiss_knife: ^3.1.2
  • mercury_client: ^2.1.7
  • archive: ^3.3.4

2.0.24 #

  • UIDialogBase:
    • Added selectDialogButtons and isDialogButton for better dialog button definition.
  • UIDialog:
    • dialogContent now can be null and renderContent should be overwritten.

2.0.23 #

  • InputConfig: added field checked.
  • UIDialog: added parameter id to constructor.
  • dom_builder: ^2.1.2

2.0.22 #

  • UIRoot:
    • Expose parameter super.clearParent.
    • Added readyTimeout: allows personalization of isReady timeout.
  • dom_tools: ^2.1.7

2.0.21 #

  • InputConfig:
    • Added onActionListener: triggered when the element is clicked or ENTER is pressed.
  • dom_tools: ^2.1.6
  • archive: ^3.3.2
  • collection: ^1.17.0
  • logging: ^1.1.0
  • build_web_compilers: ^3.2.7
  • build_runner: ^2.3.2
  • lints: ^2.0.1
  • sdk: '>=2.18.0 <3.0.0'

2.0.20 #

  • Improve logging.
  • Integrate with package logging.
  • logging: ^1.0.2

2.0.19 #

  • UIDialogBase: added parameter removeFromDomOnHide.
  • UIComponent: added focusField.
  • dom_builder: ^2.1.1

2.0.18 #

  • InputConfig:
    • inputRender: Added support to render DOMElement.
  • archive: ^3.3.1
  • test: ^1.21.6
  • path: ^1.8.2
  • build_web_compilers: ^3.2.6
  • build_runner: ^2.2.1
  • sdk: '>=2.17.0 <3.0.0'

2.0.17 #

  • UICapture:
    • Added constructor parameter selectedFileData.
    • Added setter selectedFileData.
  • InputConfig:
    • _renderSelect: selected element can also match the options key from inputValue.

2.0.16 #

  • Renamed findInContentFieldComponentDeep to findChildDeep.
  • Added findChildrenDeep.
  • Added getFieldElements and getFieldElementByValue.

2.0.15 #

  • UIButtonLoader:
    • Now resolves intl messages for okMessage and errorMessage.
  • UIComponent:
    • Added resolveTextIntl.

2.0.14 #

  • Added UIComponents DOMElement helpers:
    • $uiButton, $uiDialog, $uiSVG.
  • dom_builder: ^2.1.0
  • expressions: ^0.2.4
  • lints: ^2.0.0
  • dependency_validator: ^3.2.2
  • test: ^1.21.4

2.0.13 #

  • UIField:
    • Added String get fieldName.
    • getFieldValue can now return types other than String.
  • UIDialog:
    • Added blockScrollTraversing.
  • New componentsUICalendar and UICalendarPopup.
  • InputConfig:
    • Now supports IntlMessages in texts.
  • Improved example.
  • mercury_client: ^2.1.6
  • intl_messages: ^2.0.3
  • dom_tools: ^2.1.3
  • dom_builder: ^2.0.10
  • mercury_client: ^2.1.6
  • build_runner: ^2.1.11
  • yaml: ^3.1.1
  • args: ^2.3.1

2.0.12 #

  • Improve UIColorPickerInput and UIInputTable.
  • InputConfig:
    • Added support for IntlMessages keys for select options.
    • Added onChangeListener.
  • UIRoot:
    • Add default call to initializeDateFormatting while calling initializeLocale.
  • dom_tools: ^2.1.2

2.0.11 #

  • Improved GitHub CI.
  • swiss_knife: ^3.1.1
  • mercury_client: ^2.1.5
  • intl_messages: ^2.0.2
  • json_render: ^2.0.4
  • archive: ^3.3.0

2.0.10 #

  • Added extensions: ElementExtension, IterableElementExtension and IterableUIComponentExtension.
  • Improved resolution of UIComponent from an Element.
  • UINavigator:
    • Added equalsToCurrentRoute and equalsToCurrentRouteParameters.
  • dom_tools: ^2.1.1
  • dom_builder: ^2.0.9

2.0.9 #

  • UIComponent:
    • New uiRoot getter.
    • Improve parentUIComponent resolution.
  • UIRoot.renderLoading now is the default render for loading children UIComponents.
  • dependency_validator: ^3.1.0

2.0.8 #

  • Dart 2.16:
    • Organize imports.
    • Fix new lints.
  • sdk: '>=2.15.0 <3.0.0'
  • json_render: ^2.0.2
  • dom_tools: ^2.1.0
  • mercury_client: ^2.1.3
  • args: ^2.3.0

2.0.7 #

  • dom_builder: ^2.0.8

2.0.6 #

  • Added helper $uiLoading.
  • Improved Element field name resolution: now also accepts the name attribute for <input> elements.
  • mercury_client: ^2.1.1
  • dom_builder: ^2.0.7

2.0.5 #

  • Updated bones_ui_app_template.tar.gz.

2.0.4 #

  • Added CLI bones_ui.
    • Added Bones_UI App template.
  • Re-factor.
    • Files structure.
    • Change from package pedantic to lints.
  • Improve example.

2.0.3 #

  • ui-template:
    • Allow DOM elements in template.
    • DSX integration.
    • Better resolution of variables and blocks.
    • Allow simple variables outside ui-template.
  • ui-button:
    • Added attributes: loaded-text-class, loaded-text-error-class, loaded-text-error-classes, button-class
  • New registered tag: ui-svg
  • dom_builder: ^2.0.6
  • swiss_knife: ^3.0.8

2.0.2 #

  • swiss_knife: ^3.0.7
  • mercury_client: ^2.0.3
  • sdk: '>=2.13.0 <3.0.0'

2.0.1 #

  • Sound null safety compatibility.
  • dynamic_call: ^2.0.1
  • mercury_client: ^2.0.1
  • intl_messages: ^2.0.1
  • dom_tools: ^2.0.1
  • json_render: ^2.0.1
  • html_unescape: ^2.0.0
  • enum_to_string: ^2.0.1
  • collection: ^1.15.0

2.0.0-nullsafety.0 #

  • Initial compatibility with Null Safety.
  • Better render of async content.
  • dom_builder compatibility.
  • removed PWA support (waiting null safety of package service_worker).

1.2.0 #

  • UIComponent:
    • Optimized performance of render call tree.
    • Support to render values of type Future.
      • Methods renderLoading and renderError for Future values.
    • Improved getFields and parseElementValue (added parseChildElementValue).
    • New fields:
      • preserveRender, subUIComponents, subUIComponentsDeeply, refreshOnNavigate.
    • New methods:
      • getRenderedElementById, getRenderedUIComponentById, getRenderedUIComponentsByIds, getRenderedUIComponentByType, getRenderedUIComponents.
      • isAnyComponentRendering.
  • UIRoot:
    • Adde renderAlert and alert.
    • New DOMTreeReferenceMap to control handling of UIRoot tree of components and content elements.
  • UINavigator:
    • Added navigateToMainRoute and navigableRoutesAndNames.
  • UIComponentAsync:
    • Added field cacheRenderAsync.
  • UIAsyncContent:
    • Added error field.
    • Now accepts Function as content.
  • UILoadingConfig: improve constructors.
  • UIButtonLoader:
    • Added properties: buttonClasses and buttonStyle.
  • Helper: $ui_button_loader.
  • UIButtonCapturePhoto:
    • New fields buttonContent, selectedImageClasses, selectedImageStyle and onlyShowSelectedImageInButton.
    • Changed to call code moved to dom_tools.
  • swiss_knife: ^2.5.24
  • dynamic_call: ^1.0.16
  • mercury_client: ^1.1.16
  • intl_messages: ^1.1.13
  • dom_tools: ^1.3.20
  • dom_builder: ^1.0.24
  • json_render: ^1.3.8
  • enum_to_string: ^1.0.14

1.1.1 #

  • Improved BUIRender:
    • Added support for IntlMessages keys in the BUI Code: {{intl:keyX}}
    • Improve route support.
  • Improved UILoadingConfig.
  • UIButtonLoader: using all properties of UILoadingConfig.
  • UIDialogBase.show: ensure that is in DOM.
  • UITemplateElementGenerator: support to intl.
  • UIDOMActionExecutor: implementation of callLocale.
  • UINavigableComponent: check changed route to notify also when rendering.
  • swiss_knife: ^2.5.18
  • dynamic_call: ^1.0.14
  • mercury_client: ^1.1.13
  • intl_messages: ^1.1.12
  • dom_tools: ^1.3.15
  • dom_builder: ^1.0.22

1.1.0 #

  • Added UIButtonLoader.
  • Added UIMasonry.
  • Added UIDocument.
  • Added UILoading and loading elements.
  • Added UIDialogInput.
  • Added htmlAsSvgContent.
  • UIMultiSelection: added attribute multi-selection.
  • Added BUIRender: render framework of bui files and bui-manifest tree.
  • Improved UIDialog and UIDialogBase.
  • swiss_knife: ^2.5.16
  • dom_tools: ^1.3.14
  • dom_builder: ^1.0.20
  • json_render: ^1.3.7
  • json_object_mapper: ^1.1.3
  • Added dependency: archive: ^2.0.13
  • Removed dependency mustache_template. Using dom_builder templates.

1.0.20 #

  • Changed library:
    • bones_ui: exports only bones_ui components and base classes.
    • bones_ui_kit: exports bones_ui and other packages like swiss_knife, dom_builder, dom_tools and mercury_client

1.0.19 #

  • UIInputTable: actionListenerComponent and actionListener.
  • mercury_client: ^1.1.12

1.0.18 #

  • Better behavior of UINavigableComponent when UIRoot makes the 1st render, and the route is not accessible and redirected to another route.
  • Fixed navigation to a route not registered yet (when UIRoot does the 1st render).
  • Avoid 'loop' of navigations to the same route.
  • swiss_knife: ^2.5.13

1.0.17 #

  • Added support to DataSource into UIComponent.
  • Added UIMenu and UIPopupMenu: Creates a top menu with popups and icons.
  • Added UISVG: Renders SVG links or tags.
  • Added UIDataSource: Connects a DataSource to UIComponent.
  • Added UIColorPickerInput: A simple and compact color picker component.
  • Added placeholder support into InputConfig.
  • UIInfosTable: headerColumnsNames, headerColor, rowsStyles, cellsStyles.
  • swiss_knife: ^2.5.12
  • dynamic_call: ^1.0.12
  • mercury_client: ^1.1.10
  • intl_messages: ^1.1.10
  • dom_tools: ^1.3.9
  • dom_builder: ^1.0.17
  • json_render: ^1.3.5
  • json_object_mapper: ^1.1.2
  • mustache_template: ^1.0.0+1

1.0.16 #

  • UIDialog: handle closing/cancel buttons.
  • UIMultiSelection: fix when selecting all entries and showing an unnecessary <hr>. _allowInputValue now triggers onChange.
  • swiss_knife: ^2.5.7
  • mercury_client: ^1.1.9
  • dom_tools: ^1.3.5

1.0.15 #

  • dartanalyzer.

1.0.14 #

  • Refactor: move components implementations to directory components.
  • Added UIControlledComponentsetupControllersOnChange.
  • UIMultiSelection: mutable options; options panel with scroll bars.
  • Usage of IntlBasicDictionary for some messages.
  • dartfmt.
  • swiss_knife: ^2.5.6
  • intl_messages: ^1.1.9

1.0.13 #

  • Renamed UIButton to UIButtonBase.
  • Renamed UISimpleButton to UIButton.
  • UIDialog: improved implementation.
  • UICapture: Added generic file support.
  • dartfmt.
  • swiss_knife: ^2.5.5
  • dom_tools: ^1.3.4
  • dom_builder: ^1.0.13
  • json_render: ^1.3.4
  • mercury_client: ^1.1.8

1.0.12 #

  • Removed UICodeHighlight.
  • dom_tools: ^1.3.2
  • json_render: ^1.3.3

1.0.11 #

  • Remove debugging code: UIConsole.enable();

1.0.10 #

  • dom_builder: ^1.0.7
  • Update README.md to indicate bones_ui_bootstrap.

1.0.9 #

  • Fix README LICENSE title.

1.0.8 #

  • dartfmt.
  • Fix typos.

1.0.7 #

  • Added API Documentation.
  • Updated LICENSE.
  • UISimpleButton
  • UIButtonCapturePhoto
  • UICapture: now handles loaded data and converts to a CaptureDataFormat type.
  • UIExplorer: modelType catalog.
  • UIComponent: better automatic resolution of parentUIComponent
  • UIComponent: fields are views now. Removed UIComponent._fields Map.
  • InputConfig: now renders the components (moved from UIInputTable).
  • getLanguageByExtension(): fixed markdown extension.
  • json_render: ^1.3.2
  • dom_tools: ^1.3.1
  • dom_builder: ^1.0.6
  • intl_messages: ^1.1.8
  • mercury_client: ^1.1.7
  • swiss_knife: ^2.5.2

1.0.6 #

  • UIRoot with better load of locales.
  • UIComponent._parentUIComponent better populated.
  • UIComponent.isShowing
  • UIComponent.isRendered() -> UIComponent.isRendered
  • UIAsyncContent doesn't accept anymore as sub content another UIAsyncContent (throws StateError).
  • UIInputTable now when re-rendering respects previous set values.
  • UIRoot.buildAppStatusBar()
  • getLanguageByExtension()
  • mercury_client: ^1.1.4
  • swiss_knife: ^2.3.9
  • intl_messages: ^1.1.6
  • dom_tools: ^1.2.7
  • json_render: ^1.2.7
  • yaml: ^2.2.0

1.0.5 #

  • UIComponent: accepts null parent (will be set when rendered by parent).
  • UIComponent.onChange: should be called every time a component status changes or interactive event happens.
  • UIAsyncContent.equalsProperties() now makes deep check.
  • UIControlledComponent
  • UIComponentAsync
  • swiss_knife: ^2.3.8

1.0.4 #

  • UIComponent.isRendering
  • UIMultiSelection: fix options panel position on window resize. onTouchEnter/onTouchLeave
  • UINavigableComponent: alerts/exception for empty route.
  • dom_tools: ^1.2.6
  • swiss_knife: ^2.3.7
  • intl_messages: ^1.1.5

1.0.3 #

  • UIComponent.parentUIComponent
  • UIComponent.onChildRendered()
  • Navigation.parameterAsInt/parameterAsNum/parameterAsBool
  • Navigation.parameterAsStringList/parameterAsIntList/parameterAsNumList/parameterAsBoolList
  • UINavigator._encodeRouteParameters(): Comma ',' won't be encoded as %2C
  • swiss_knife: ^2.3.5

1.0.2 #

  • of prefix 'ui-' for css.

1.0.1 #

  • UIAsyncContent.isValid(properties]): properties optional.
  • Declaration of UIRoot.renderMenu() optional.

1.0.0 #

  • Initial version, created by Graciliano M. P. (Jan 2019)