Skip to content

Releases

0.6.9

Choose a tag to compare

@github-actions github-actions released this 06 Nov 16:04
Immutable release. Only release title and notes can be modified.
v0.6.9
5de1dd1

Fixed

  • The session watch reads a submitted form's method and target content
    attributes, so a form that holds a control named target or method
    no longer throws target.toLowerCase is not a function on submit, and
    the watch still tells whether the form loads the next document in its
    tab (#660).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of November 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.

0.6.8

Choose a tag to compare

@github-actions github-actions released this 06 Nov 12:49
Immutable release. Only release title and notes can be modified.
v0.6.8
297f5ff

Fixed

  • Hovering a day of the date range picker repaints the range's preview on
    the days drawn, where it drew both months again. The day that holds the
    keyboard focus keeps it while the pointer moves, and a control a test or
    an assistive technology holds stays the same element (#650).
  • A tab that signs out lands on the signed-out page when the session
    watch's read answers 401 during the sign-out. The watch no longer
    sends a page whose own form is already loading the next document to the
    expired sign-in page; it tells the other tabs, which still leave for
    sign-in with their own address as return (#654).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of November 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.

0.6.7

Choose a tag to compare

@github-actions github-actions released this 06 Nov 09:02
Immutable release. Only release title and notes can be modified.
v0.6.7
1186406

Changed

  • The live regions of the copy button, the code editor's status line, the
    identifier, the top bar's search, the decision dock, the upload field and
    Your preferences' saved mark are <output> elements; the code box, the
    self-description, the document pane's raw text, a refusal's evidence and
    the decision dock are named <section> elements; the user menu's
    separator is an <hr>. Each keeps the role the ARIA attribute gave it,
    and draws as before. A console script or test that selected one by
    [role="status"], [role="region"] or [role="separator"] selects it by
    its element (#624).
  • fui-unit and fui-nowrap keep their text whole from the stylesheet's
    utilities layer, which comes after every component rule, in place of
    !important, so a console's own unlayered rule can now override them. The
    menu sheet's title, the lockup's accent word and the phone's Keyboard tab
    hold by the cascade alone, and draw as before (#626).
  • The pager's range, the filter's count, the countdown's set points, the
    topology's zoom level, the busy spinner and skeleton lines and the date
    pickers' status lines are <output> elements; the data table's,
    compare's, line diff's and root matrix's scroll boxes are named
    <section> elements, and the reading pane's <section> drops its
    redundant role; the action menu's and the filter menu's separators are
    <hr> elements. Each keeps its role and draws as before. A console
    script or test that selected one by [role="status"], [role="region"]
    or [role="separator"] selects it by its element, and
    scripts/checks/markup-rules.sh (M6) refuses a new such role unless a
    NOTE: beside it says why the element keeps it (#639).

Fixed

  • The top bar's typeahead shows its unreadable-answer sentence for an OK
    reply it cannot read (a null answer, groups that is not a list, a
    group with no list of hits), where it said "The search did not answer
    (undefined)." or stopped at "Searching…" (#633).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of November 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.

0.6.6

Choose a tag to compare

@github-actions github-actions released this 03 Nov 16:45
Immutable release. Only release title and notes can be modified.
v0.6.6
23d8394

Added

  • view::line_diff::line_diff(locale, file, diff) draws one file's unified diff (B11) in the code viewer's box: each line with its numbers before and after, a removed line marked "−" on the bad tone's ground and an added line "+" on the ok tone's, each with its word for a screen reader, the hunk heads as muted rows, and long lines scrolling sideways inside the box (#598).
  • table::change::plain_change(locale, before, after) writes a history row's change in prose, as the design draws it (R22): the value before struck through as a del after "−" and the word "was", the value after as an ins after "+" and "now", and a side that is None left out (#602).

Changed

  • table::change::change_table(locale, caption, key, changes) takes its key column's heading as key, None keeping the library's "Setting", and change_table_keyed is gone: a console calls change_table with Some(heading), such as "File" for a revision's changed files (#598).

Fixed

  • A date picker moves the focus to the chosen day at once when it draws its grid again, so a key pressed right after a day is clicked, such as Escape, reaches the picker and no longer falls to the page (#599).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of November 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.

0.6.5

Choose a tag to compare

@github-actions github-actions released this 03 Nov 13:06
Immutable release. Only release title and notes can be modified.
v0.6.5
9d4a351

Changed

  • A component's form is an argument of its one function or a field of what it draws, and the drawn HTML is unchanged. table::view::DataTable carries its shape (a Shape) and is built with DataTable::new(caption, columns, body), .with_sorting and .with_shape; KeyedCombobox carries its remote search. title_cell(level, href, name, sub) takes an Option<u32> level, view::dialog::confirm_dialog(locale, confirmation, stakes, form, confirm) its Stakes and an optional ConfirmForm, info_dialog(locale, explanation, body, width) a Width, view::compare::compare(locale, table, presentation) a Presentation, view::side_panel::side_panel(panel, shortcut), view::shortcuts::shortcut_legend(locale, groups, go_to) and view::secret::secret_state(locale, state, id) an Option, calendar::Moment::parse(text, with_time, order) a DateOrder and table::model::Paging::write(query, sizes) the console's Sizes. docs/consoles.md lists each call (#579).
  • table draws with the view primitives and no module of view imports table, so four parts moved and each console moves its imports at its next pin: view::change, view::mapping and view::versions are table::change, table::mapping and table::versions; view::browser::browser_find is table::filter::browser_find; table::filter::FilterMenu, FilterChoice, MenuForm and filter_menu are in view::filter_menu; and table::model::PAGE_KEY, SIZE_KEY, SORT_KEY and ORDER_KEY are in query. The drawn HTML is unchanged (#580).
  • view::flow, view::chart, view::topology, view::tree, view::date and calendar are module folders with one file per concern, so no library file is over 800 lines, and eight chart and six tree items moved, each console moving its imports at its next pin: view::chart::has_gaps and line_svg are in view::chart::line, tick_label and value_label in view::chart::scale, FiguresWords and figures in view::chart::figures, and LegendEntry and legend in view::chart::legend; view::tree::Shown, in_sight, path_key, path_keys, Move and moved are in view::tree::path. Every other item keeps its path, and the drawn HTML is unchanged (#581).
  • view::dialog::Modal takes stakes: Stakes in place of danger: bool, the same choice the confirmation dialog takes, so each console writes stakes: Stakes::Danger or Stakes::Plain at its next pin. The drawn HTML is unchanged (#587).
  • The layouts have one owner, view::layout: view::surface::split is view::layout::split, the grids, the cluster and the Add row are view::layout::Arrangement, and view::surface::Container draws the surfaces only (Card, PanelBody, PanelSections, Well). Each console moves its calls at its next pin; the drawn HTML is unchanged (#588).

Removed

  • The component functions that only fixed an argument of another are gone; each console calls the general function with the argument at its next pin. view::surface::stack: call view::layout::stack_at(Gap::Loose, children). view::surface::grid, grid_start, stat_grid, cluster and add_row: call wrap on the view::layout::Arrangement of the same name. view::surface::panel, panel_body, panel_sections and well: call wrap on the view::surface::Container of the same name (Container::Card.wrap(body) for panel). table::view::data_table_wide and data_table_unstacked: call data_table on a table with_shape(Shape::Wide) or Shape::Unstacked. table::view::title_cell_at: call title_cell(Some(level), ..). view::dialog::danger_dialog and danger_form_dialog: call confirm_dialog with Stakes::Danger and the form. view::compare::compare_stacked and compare_pair: call compare with Presentation::Stacked { shown } or Presentation::Pair { shown }. view::combobox::searched_combobox: call keyed_combobox with KeyedCombobox::remote set. view::side_panel::side_panel_with_shortcut: call side_panel(panel, Some(shortcut)). view::shortcuts::shortcut_legend_with_go_to: call shortcut_legend(locale, groups, Some(go_to)). view::empty::spinner: call busy(label, Busy::Inline). view::form::keyed_check: call check, which takes the id as &str. calendar::Moment::parse_in: call Moment::parse. table::model::Paging::write_within: call Paging::write. i18n::Locale::english: call Locale::default(), which is English. view::action::ActionGroup::none: call ActionGroup::default() (#579).
  • Four public functions no console called are gone: view::search::answer_id and hit_id, i18n::message_ids and view::surface::wide_card (#580).

Fixed

  • The combobox's input is not spell-checked, like every other text input the library draws, so the browser no longer underlines a choice such as "SNOMED CT" as a misspelling (#596).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of November 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.

0.6.4

Choose a tag to compare

@github-actions github-actions released this 02 Nov 23:55
Immutable release. Only release title and notes can be modified.
v0.6.4
4028d11

Fixed

  • A mapping row's relationship words wrap inside their cell below 40 rem,
    the arrow on their first line, so the longest words ("narrower than the
    target") no longer draw past their box on a 320 px screen (WCAG 2.2 SC
    1.4.10) (#569).
  • The top bar's search submit drops its word from the layout below 40 rem
    and in a squeezed search, where it was clipped into a 1 px box that its
    word ran past on a 320 px screen; the button keeps its name in
    aria-label (WCAG 2.2 SC 1.4.10) (#570).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of November 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.

0.6.3

Choose a tag to compare

@github-actions github-actions released this 31 Oct 20:41
Immutable release. Only release title and notes can be modified.
v0.6.3
db97c64

Added

  • table::view::title_cell_at(level, href, name, sub) draws a row's title
    cell level levels down a hierarchy, as title_cell draws it with the
    fui-depth-N class on its <th>, so a console indents a row under its
    parent (a template's earlier releases under the newest) without writing
    the row header itself. On a phone the stacked card's heading keeps the
    level, one default space per level; past the eighth level the step holds (#559).
  • view::change::change_table_keyed(locale, caption, key, changes) draws a
    change table whose key column the console names from its own catalog (a
    path, a field), for a comparison of something other than a configuration.
    change_table keeps its "Setting" header and draws as before (#560).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of October 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.

0.6.2

Choose a tag to compare

@github-actions github-actions released this 31 Oct 16:56
Immutable release. Only release title and notes can be modified.
v0.6.2
81c4208

Added

  • The loader marks an element data-fui-ready (script::READY) once every
    module its data-fui names has enhanced it, so a console's journey can
    wait for a component whose module changes nothing it can see before it
    drives it by the keyboard; html[data-fui-script] is written before any
    module arrives (#523).
  • The keys module binds every key a control announces in
    aria-keyshortcuts, from 40 rem up: a chord such as Ctrl Enter
    (view::transform::Run::shortcut) or Ctrl S (view::dock::Decision::shortcut)
    presses its control from inside a field too, the one in the focused
    field's form first, and a single key such as l or ] presses its
    control, or focuses a field such as the dock's reason
    (view::dock::DockField::shortcut), outside a field alone. The dock's
    and Run's keys load it themselves, and so does the shortcut legend; a
    console's own control writes data-fui="keys" (view::shortcuts::KEYS_JOB)
    on a page with no legend (#526).
  • view::shortcuts::shortcut_legend_with_go_to lists a console's go-to
    pairs (GoTo with its first key and each GoToPair of a letter and a
    link of the navigation) in their own group, each as the link the keys
    module follows on the pair's keys; GoTo::group gives them as a
    ShortcutGroup for a console's own shortcuts page (#526).
  • view::preferences::typed_preference draws a console's own typed
    preference, a text or a number field (Typed::Text with its length
    bounds, Typed::Number with its min, max and step) with its
    placeholder, in the same plain form as select_preference: its Save
    button posts it with no script, and once the preference module runs it
    posts when the field changes and the row just saved gives the field the
    focus back. The module sends one post when Enter both changes and
    submits a field (#527).
  • view::side_panel::side_panel_with_shortcut draws a side panel whose
    opener announces its keys, such as o: in a work-list row the keys
    module opens the focused row's panel on that key, and the browser
    returns the focus to the row when the panel closes (#530).
  • A form that answers on its page can answer in place: mark it with
    view::answer::Answer::new(region) and the answer module posts it with
    fetch to its own action and moves the answer region of the page that
    route draws into the same region here, the focus kept and the answer
    announced by the region's polite live region. with_settle(ms) also
    posts once a field rests from typing, for a check on the server as you
    type, and an answer to an older request is dropped. With the modules
    refused, or on an answer that is no HTML page holding the region, the
    form posts and the whole page answers as before. It is the third fetch
    wire, in docs/consoles.md § Answered in place (#546).

Changed

  • The script modules take a phrase's words, a number's digit groups and a
    new element from one module, shared.js, and the JSON and XML
    highlighting after an edit moves from highlight.js to its own module,
    rehighlight.js. A console that serves the modules from
    script::MODULES serves both with no change (#541).
  • The script budget measures what a reader pays: 16 KiB a module as
    before, 144 KiB for the modules any one page loads (the loader, the
    page's jobs and their imports), and 72 KiB for every module compressed,
    in place of 160 KiB for every module raw. The caps, their measurements
    on the gallery's pages and their reasons are in
    .claude/rules/console-ui.md §12 (#547).

Fixed

  • A long identifier in a <code> of a stacked table cell wraps inside the
    cell at 320 px, so the page no longer scrolls sideways (WCAG 2.2 SC
    1.4.10). A stacked cell's value is held to its column, where before it
    took the code's whole length (#525).
  • A select in a dense options row keeps to its field below 40 rem, its
    chosen value ending in an ellipsis, so a select whose longest option is
    wider than the phone no longer scrolls the page sideways at 320 px (WCAG
    2.2 SC 1.4.10) (#528).
  • A link in a stacked table's group row wraps inside the row below 40 rem,
    so a name longer than the card no longer scrolls the page sideways at
    320 px (WCAG 2.2 SC 1.4.10) (#529).
  • The code editor highlights a JSON or XML document again only from the
    first line a key changes, up to the line where the highlighting is the
    same as before, where before it highlighted the whole text on every key.
    The stylesheet's rules for a focused work-list row and for a field row
    with a help line select the same elements as before, written so Chrome
    no longer restyles the editor's whole layer on every key. A key typed
    into a 20 kB JSON or XML document now costs 1 to 2 ms at the median,
    script, style and layout together, where it cost 5 to 8 ms, so typing an
    openEHR composition into the editor no longer slows with its length (#531).
  • A work-list row keeps its actions, a glance opener beside the row menu,
    on its one line, where since a row's own key (#530) the menu's …
    wrapped under the opener and every row stood twice as tall. In the row
    a glance opener with a glyph shows the glyph alone, its words kept as
    its accessible name, so the record names keep their line with wider
    fonts too. The side panel's opener writes its words in
    span.fui-side-panel-words. A side panel opened from a table cell
    starts and wraps its text, where it took the cell's end alignment (#540).
  • On a phone, a stacked work-list row whose actions hold a glance opener
    keeps them in the first line's flow, where the opener drew over the
    second record's name (#540).
  • A key that changes a line of the code editor updates that line's
    element in place, so the browser no longer counts every line number
    again, and the caret's line and column are read without walking the
    text before the caret. A key typed at the end of a 20 kB XML document
    costs the same as one in a short document, and in a 20 kB JSON document
    in the operations page it costs about 1.8 ms, where it cost 2.6 to 3.8 ms
    on the same machine (#541).
  • The stylesheet no longer looks for a decision bar, a toast, a work-list
    foot or an open menu sheet anywhere in the page with :has(), which made
    Chrome weigh the whole page again on every key typed into the code
    editor. Each rule now looks only where the shell draws what it looks
    for: the decision bar as the last part of the main area or of its
    column, the work-list's card in the column at most two levels down, the
    toast region beside the body, the menu sheets in the top bar and in a
    transform pane's head, and the editor as a transform pane's own child.
    A code editor with an error mark carries is-invalid, which draws its
    red edge. A key typed at the end of a 20 kB XML document costs 0.2 ms at
    the median where it cost 0.7 to 1.4 ms, and in a 20 kB JSON document 0.5
    to 0.6 ms where it cost 0.9 to 1.0 ms, on the same machine (#544).
  • The script modules answer as the library's Rust does where both decide:
    they trim white space as Rust's str::trim does (a typed date, the
    editor's grammar and empty state, the typeahead's words, a menu's typed
    letter, the filter), a date picker at the calendar's first or last month
    keeps its weeks to the calendar's days, the session watch reads a count
    between tabs as a u32, and the upload field compares a file's extension
    in ASCII case alone. A parity test now feeds each rule written in both
    languages the same inputs and fails on any difference; docs/consoles.md
    lists every pair (#548).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of October 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.

0.6.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 00:13
Immutable release. Only release title and notes can be modified.
v0.6.0
26e3221

Added

  • The combobox answers a fui:choose event on its root, which puts it on a
    listed value, or on none, without a change event. A pick-or-type field's
    back control uses it: back puts the picker on the listed option chosen
    before the another option, or on its first, for a select and a combobox
    picker alike (#517).

Changed

  • Breaking: the library renders server-side HTML from Askama templates
    and depends on no Leptos crate. Every component is a function or a
    struct that returns Html, which a console's own Askama template writes
    unescaped with {{ part }}; a component that needs words takes the
    request's &Locale. The shell writes the whole document, and the
    interactive behaviour comes from small plain ES modules under
    /ferrohealth-ui/<version>/, which the one loader fui.js imports for
    each element that asks for one with data-fui. Every page works with the
    modules refused. serve::axum_router::router() (the default axum feature) serves
    the stylesheet, the brand themes and the modules. docs/migration-0.6.md
    maps every removed item to its successor (#510).
  • The date picker's months view draws an up chevron after its year title,
    as the design draws it, beside the down chevron of the days view's month
    title. Both are hidden from assistive technology (#518).

Removed

  • Breaking: the island and widget modules, whose components now
    live under view beside their script modules, and with them the
    hydration layer: widget::hydration, widget::prefetch,
    widget::submit, the answer mode of widget::action and the
    data-ferroui-hydrated mark. A link is a link and a form posts as the
    browser posts it (#510).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of October 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.

0.5.8

Choose a tag to compare

@github-actions github-actions released this 29 Oct 07:45
Immutable release. Only release title and notes can be modified.
v0.5.8
0832f5a

Added

  • view::dialog::danger_action_dialog draws a danger confirmation with fields
    inside the <ActionForm> a console draws for its server action (class
    view::dialog::DIALOG_FORM): once the page has hydrated, its confirm runs the
    action in the page and the dialog closes when the console's done signal turns
    true; with no WebAssembly the form posts to the server function's address as
    a plain form. danger_form_dialog keeps posting to a plain route (#500).

Changed

  • Every menu item that is not destructive or disabled draws a visible bar under
    the pointer and the keyboard focus, in the new --surface-hover token: a
    neutral tint a little darker than the panel in light and a little lighter in
    dark (1.37:1 and 1.53:1 against it, the most muted text on it allows at
    4.5:1). Danger items keep --bad-ground, a pressed or current item and a
    chosen listbox option keep --accent-tint under the pointer, and a disabled
    item draws no bar. The combobox and listbox options and the tree rows hover
    with the same token (#498).

Fixed

  • A form can mark any number of secret fields: widget::action::secret_mark
    names each mark after the field it marks (ferroui_secret_ and the
    name's bytes in hexadecimal), so a hydrated <ActionForm> with two marks
    no longer fails on serde_qs refusing a name posted twice. The plain post
    still keeps every marked value out of the answered page, and a mark named
    ferroui_secret alone, as 0.5.7 drew it, is still read (#503).

Support period

Only the newest release is supported: there are no maintenance branches, no long-term-support line and no backports, and upgrading is free. Under the Cyber Resilience Act, Cadasto B.V. commits to keep publishing security fixes for at least five years after each release (Art 13(8)) and ships them only in the newest release (Art 13(10)). For this release that commitment runs until the end of October 2031 (Regulation (EU) 2024/2847 Art 13(19)); see SECURITY.md.