Repository navigation
Releases
REDZ.UI 0.19.0
Added
-
A banner for a state of the whole system,
app-bannerwith the tonesapp-banner-info(the default),
app-banner-success,app-banner-warningandapp-banner-danger: the first row ofapp, above its header, across
the window and sticky with the header under it; first in the body of a page without the shell; off paper.
REDZ.ui.banner({tone, text})shows the one banner or replaces it, and answers a function that removes it;
REDZ.ui.banner(null)removes it. The same tone and words again change nothing and say nothing, so a page may call it
on every answer of its server. The words are said once, politely, at once fordanger. Its height goes to
--redz-app-banner-heighton the root, which the header, the side navigation,--redz-sticky-topand the scroll
padding add. -
redz-ui-tools-<version>.zipin every release: the tools a project runs on its own server and never serves, each
the very file the release was built and checked with -floor.php, the browser floor checker, with its list
floor.json, andmin.php, the minifier -, PHP 8.4 or newer with no extension, no network, and their passport
redz-ui-tools.json: the PHP they need, the file of each tool and the sha256 of every file.tools/dist/of the tag,
written byphp tools/build.php; the Check workflow runs both on PHP 8.4 with no extension loaded. -
The floor checker for a project:
php floor.php check [--allow=FILE] [--json] FILE…, a finding a line on standard
output and the summary on standard error, exit 0 clean, 1 findings, 2 for anything else;--jsonprints the findings
as objects. An exception of a project's own carries its reason:/* floor-allow NAME[, NAME…] -- reason */covers its
lines and the next one,--allow=FILEa set of files; one that allows nothing is a finding. It applies the release's
exceptions of scopeanyonly. -
The minifier for a project:
MIN__JsBlocks([$label => $js, …])joins classic scripts, each in a block of its own, for
one ES module, and refuses what reads otherwise there - a staticimportorexport, avaror a function declared
outside any function,thisoutside any function but an arrow,with, an HTML-like comment, a legacy octal number or
escape;MIN__SelfTest()gives the samples it proves itself on that misfire. A class's private names#nameare read. -
Outside judges of the minifier on every commit,
php tools/judge.php: Lightning CSS reprints every stylesheet it
squeezes, the library's and the css-tokenizer-tests corpus, as written and as squeezed, which must read the same;
esbuild parses every script it writes for the browser floor; a watch on the size of the two main files against esbuild
--minify. Both are native binaries from npm, pinned by version and sha512. -
The passport names the arguments of every text:
argsbesidetextsandplurals, andeditor.argsbeside
editor.texts, give each key the{names}the library fills in it,[]for none,["count"]for a count. They
are read from the scripts' calls, and the build fails when two calls of one key pass different names or the
library's own English text of a key uses other names than its calls pass. -
A combination that a button's or a link's
aria-keyshortcutsnames is the page's even while none of them can be
pressed: disabled, busy, hidden, inert or outside the open modal, it never reaches the browser, so a page's save keeps
Ctrl Sfrom the browser's own save while it saves or has nothing to save. The first that can be pressed is pressed. -
A password field tells the page each time its text is shown or hidden, by the person or on its form's submit or the
page's return from the history:redz:revealbubbles from it,detail.revealedtrue or false. -
data-ago="short"on a tickingtimesays how long ago it was in the short words of the page's language ("42 min.
ago", "42 мин. назад") for a narrow place such as a stat tile;data-agoalone keeps the long words. -
Filter buttons: a button with
command="--filter"andaria-controlsnaming a region shows only the items whose
data-NAMEholds a word of itsvalue-NAMEis the button'sname,statewithout one. The buttons of one name
are one choice,value=""shows all, and pressing the pressed one again shows all; names narrow together and with the
search field.data-filter-countcounts: in a button its items, in adata-filter-groupthe group's, with a region's
id the page's textfilter.count. Adata-filter-grouphides while none of its items shows. A press says the count;
the region firesredz:filterwith{count, total}; items the page puts in or changes are filtered again.
REDZ.ui.filter(region, {name: value})chooses from code and answers the count,nullclears. Any element with a
data-searchis an item, and a table row matches its band's label too. -
A search on the server: a field with
data-filter-serverfiresredz:searchwith{query, form, signal}on the
field 600 ms after the typing pauses, at once on Enter and Escape and when another control of its<search>or form
changes; answered with a promise, the region isaria-busyand a field in aform-adornshows a ring, a newer
question aborts the one before and a late answer is dropped, and the count is said - the answer'scount, else the
items there are. -
Show more: a button with
command="--more"andaria-controlsnaming a list firesredz:morewith{shown, signal}on the list; answered with a promise, the button is busy, then the focus goes to the first new item and the
page's textmore.loadedsays how many came. The answer may say{total}or{done: true};data-more-totalis a
total known from the start,data-more-maxa cap whosedata-more-capsentence takes the button's place, and a
data-more-countreadsmore.count("10 of 23") ormore.some("10+").list-moreis the row under a list that
holds them. A server search over the list starts it again. -
Selection: an element with
data-selectholds a selection; a check withdata-select-allheads its checks (or those
of the scopes itsaria-controlsnames) - checked, mixed or clear, and pressed it checks or clears them all. Only
enabled checks in items a filter shows count: a checked row a filter hides leaves the count while hidden and is
checked again when shown. Aselection-barinside hides at zero, adata-select-countsays the page's text
selected, and the scope firesredz:selectionwith{count, total, values}.data-select="rows"checks a row
clicked anywhere but on its controls; adata-selectinside another is a group;command="--select-all"and
"--select-none"buttons do what a head does. -
Sorting in place: a
table-sortbutton with avaluesorts its table's rows by each row'sdata-sort-VALUE, else
the cell'sdata-sort-value, else its text - numbers as numbers, words in the page's language, an empty value last
both ways, ties in the drawn order, a band's rows under it with its subtotal last.data-sort-first="descending"
starts the other way;data-sort-reseton the table makes a third press bring back the drawn order. The page's texts
sort.ascending,sort.descendingandsort.nonesay it. The table fires the cancelableredz:sortwith{key, direction}first, for a page that sorts itself; rows the page puts in are sorted the same, andREDZ.ui.sort(table)
sorts again. -
A question that waits for the server:
REDZ.ui.confirm({..., run})carries the answer out before the dialog closes -
run({choice, phrase, signal})answers a promise; meanwhile OK is busy, the other buttons unavailable, the body inert,
Escape and a click outside held. Refused with words, a danger alert with them stands right above the footer, said at
once, the buttons wake and the focus stays on OK. A dialog closed by code meanwhile aborts the signal, and a later
refusal is a danger toast.choice: {label, items: [{value, text, hint}], value}puts radios above the phrase, and
the answer is then the chosen value. A dialog of the page's own waits the same way: aform[method="dialog"]fires
the cancelableredz:savewith{form, data, submitter, signal}on its submit. -
A third answer:
REDZ.ui.confirm({..., alt: {text, tone, value}})puts a button at the footer's start - Discard
beside Stay and Save - that answers its value;focus: 'ok'or'alt'starts the focus there instead of on Cancel.
dialog-footer-startis that place in any footer, and a footer of three buttons in a dialog narrower than 368 px
stacks them full width, the confirming one on top. -
REDZ.ui.alert(box, {tone, text})fills a box with an alert of the tone, its icon and the words, and says them -
politely, at once fordanger, the same words again said again;nullempties it; a promise shows the page's text
busypast 400 ms, then what it answers or its rejection. No live role on the box. -
REDZ.ui.status(line, {tone, text, keep: true})keeps a success or an info in the line. -
A text download:
command="--download"naming a field, a textarea or any element downloads its value or its text,
data-file,data-type; atext/csvfile starts with a UTF-8 byte order mark unlessdata-bom="false".
REDZ.ui.download({text, file, type, bom})or({blob, file})does it from code. Each download is said, in the
page's textdownloaded. -
busy()on an item of a menu holds the button that opened the menu busy too, the outermost one for a menu inside a
menu. A region'sdata-busyshows its words under the spinner and says them instead ofbusy. Any other element - a
cell that checks - shows a small ring after 400 ms and, for a screen reader, the words of itsdata-busyorbusy,
saying nothing aloud. -
Contents loaded the first time they show:
data-lazyon adetailsor itsaccordion-body, a region a--toggle
button ope...
REDZ.UI 0.18.2
Pack it found a row's menu turning see-through, and the cause reaches further. Browsers now stop :hover, :active and
:focus-within at the top layer, so an open menu or dialog no longer tells the row around it that the pointer or the focus is inside.
A row now asks whether it holds an open layer. It no longer asks only where the pointer and the focus are.
Fixed
- A
menuordialoginsidetable-actionsis not dimmed with the row's actions. - A row keeps its actions lit while its menu is open, wherever the pointer goes, for a menu in the row and for one shared from outside
the table.tree-actionstoo: they used to vanish while a button among them had its menu open. - A
dialogor[popover]takes notext-alignorwhite-spacefrom where it stands. A long item of a menu in a table cell wraps, where
it ran out of the menu.
Changed
- A row holds its light while its menu is open.
- The release files carry a banner of the name and the address, and the editor's its license too.
css/icons.min.cssstays as it is.
Docs
- The table page shows a menu in a row.
- On these pages a row's actions stayed dim under a real pointer and a tree's stayed hidden: the page's own state mirror did that, the
library did not, and it is fixed.
Files. redz-ui-0.18.2.zip - the folder a project serves, as it is: css/, js/, LICENSE, LICENSE-editor, NOTICE and redz-ui.json, the passport (the version, the floor, the files to link, the vocabulary and the sha256 of every file). This release needs the icon pack redz-ui-icons 1.13.2, a release of its own. checks.zip - the sheet of the probes this release passed in every engine, also at https://redz-tech.github.io/REDZ.UI/0.18.2/checks/.
Check the archive: gh release verify-asset v0.18.2 redz-ui-0.18.2.zip --repo redz-tech/REDZ.UI.
REDZ.UI 0.18.1
Two fixes the ERP found moving onto 0.18.0.
Fixed
- A
step-list-bodythat is also avstacktakes a line of its own under the step's name. 0.18.0 put it beside the name. - A caption of a board's scale that would touch the one before it hides, by measure, in any language and at any width. It replaces
the rule that hid every second caption in a narrow region, which let a long first word run into the next one.
Files. redz-ui-0.18.1.zip - the folder a project serves, as it is: css/, js/, LICENSE, LICENSE-editor, NOTICE and redz-ui.json, the passport (the version, the floor, the files to link, the vocabulary and the sha256 of every file). This release needs the icon pack redz-ui-icons 1.13.2, a release of its own. checks.zip - the sheet of the probes this release passed in every engine, also at https://redz-tech.github.io/REDZ.UI/0.18.1/checks/.
Check the archive: gh release verify-asset v0.18.1 redz-ui-0.18.1.zip --repo redz-tech/REDZ.UI.
REDZ.UI 0.18.0
What the ERP's walk and the move of its screens left: a step that waits for a press, step details that fit a phone without a
width in sight, and every table lighting its row.
Changed
- Every
tablelights the row under the pointer, on a device with hover, sotable-hoverdoes nothing now and can go.
--redz-row-hoversets the light, on the page or on one table, andtable-statickeeps a table's rows still. A tinted row keeps
its tone and a selected one its color. The editor's Hover property writestable-staticfor no. - A
step-list-detailstays at the end of the line while the name and it fit, and falls under the name, aligned with it, when
they do not, at any width of the page. An empty one takes no room. The step's icon stands in its padding, out of the flow. .diffscrolls in its own box past 25rem and prints in full; amax-h-*utility sets another height. One that may scroll
takestabindex="0"and a name.- A link
nav-overflowfolds is markeddata-overflowalone, sohiddenis always the page's. A page that read.hiddento
find a folded link reads[data-overflow].
Added
data-state="ready"onstep-listandstage-list: next, it waits for a press. It wears the look ofcurrent, and its icon
stays still.data-highlighted="hold": a mark the page sets itself stays until the page takes it away, whatever the pointer does.--redz-lanes-track, the color of a board's track.
Fixed
d-nonebeats every display class on its element,vstack,hstackandgridamong them; a width prefix still beats it.nav-overflowlooks again when the page sets or clearshiddenon a link, a folded one too.- A
statkeeps the tone of anicon-tile-*on its tile. - A
vstackas analert's words stays beside the icon however long its text. REDZ.ui.confirm({title})with nothing else has no empty body.- A lit lane of a board tints its track too, the grid on top.
- A row with a
stretched-linklights in the row's color, not a gray of its own.
Documentation
- Icons from another host: a browser fetches a mask in CORS mode, so that host must send
Access-Control-Allow-Originon.svg.
Files. redz-ui-0.18.0.zip - the folder a project serves, as it is: css/, js/, LICENSE, LICENSE-editor, NOTICE and redz-ui.json, the passport (the version, the floor, the files to link, the vocabulary and the sha256 of every file). This release needs the icon pack redz-ui-icons 1.13.2, a release of its own. checks.zip - the sheet of the probes this release passed in every engine, also at https://redz-tech.github.io/REDZ.UI/0.18.0/checks/.
Check the archive: gh release verify-asset v0.18.0 redz-ui-0.18.0.zip --repo redz-tech/REDZ.UI.
REDZ.UI 0.17.0
The editor gets the rest of what was decided on the mockup: live facts, an AI that only suggests, a review word by word, the
tone pad, translations side by side, the page's reading, and who wrote what. No model is ever called from a page.
Changed - the license of the editor
- From this release the editor,
editor/and its built files, is under PolyForm Strict 1.0.0, indist/LICENSE-editor: noncommercial
use only, no changes, no redistribution. It comes with REDZ products under their terms; anything else needs a separate license, see
LICENSING.md. The library stays under MIT, and versions up to 0.16.0 stay under MIT as released.
Added - the editor
- Live facts:
<data value="KEY">stands in every place a price, a date or a phone number is used, byoptions.facts.
@in the text puts one in, Facts in the foot counts its places and changes it in all of them throughoptions.onFact.
A value typed by hand where a fact holds it is found by the checks. - The AI's seam:
options.ai(task, {signal, progress})is the host's and async. Tasksrewrite,tones,translate,
write,readandaltcarry plain words, a fact as a token⟦KEY⟧. A refusal answers{refusal}and is said as one. A
closed block is never sent, and an answer whose block changed, whose fields do not fit or that lost a fact is left out. - The review: a suggestion is drawn word by word by
Intl.Segmenter, each change taken or left alone, and the value stays
what it was until the last one is decided. Marks on the words around a change stay. One task is one step of undo, and
options.onBatchhears it as one batch. - The lock on what an AI writes: it answers flat blocks of the passport's schema
editor.write, and the editor writes them
as REDZ.UI markup by the catalog, so a kind, a tone or a size the library does not have cannot come out. - The tone pad: nine versions from one request, shorter to longer and stricter to warmer, opened at once and tried on the block.
- Side by side: the source language in a frame of its own, row by row.
data-fromkeeps the hash of the source's words a block
was made from, so only the block that changed goes stale; a price that changes stales nothing. A stale row says what changed, by
languages[].versions. Translate all sends every row left as one task.options.sourcenames the language. - Ask the page: what a visitor's assistant would answer from this page alone.
- Who wrote it:
data-byanddata-checkedon a block, shown by the strip, kept withids. Text nobody checked is listed in the
checks. The rightreviewsigns it; a person without it can take a suggestion, and it stays unchecked.
Changed
languages: a language the session left keeps what was written in it when the session comes back to it, also withoutgetLanguage.- The foot holds the AI's menu, Facts and Check. A page that looked for the Check button as the foot's first button looks for
[data-editor-foot="check"].
Changed - the library
- The budgets: the stylesheet at most 36 KB, the script 34 KB, gzipped.
- A plain
btnin aninput-groupwears the field's line, an accent face and weight 600, so the group reads as one control; a plain
btn-iconthere reads asinput-group-text. Solid, outline, subtle and text buttons stay as they are. - A click on a control with
aria-disabled="true"and a title shows the title for three seconds and says it, as a tap always did. - The mark of a
table-danger,table-warning,table-activeor current row stands on the first cell a phone shows, when ad-none
cell comes first.
Fixed
- The caret in a block whose text changed under it threw in Safari, which stopped undo.
- A dialog and the palette keep their column while they close: for 0.2 s the header, the body and the footer stood in a row.
stat-labelandstat-subbreak one long word instead of running past a narrow tile.- A deep link to a tab's panel leaves the tabs in view, under a sticky header too.
Added
REDZ.ui.combobox.set(list, values)sets what a list holds from the page, as a choice does: its hidden fields, its button
or chips, theninputandchange. A form's Discard can go back to the last saved value;resetgoes back to the first.data-changedon anav-linkdraws the dot a field's mark has; the tab'saria-labelsays it to a screen reader.form-moreon adetailsfolds a long hint under a field, with a chevron that turns.data-tooltip-delayon a title or around it sets the wait of its tooltip;0shows it at once.- A folded rail's tooltip stands beside its link, so it covers no other icon.
--redz-progress-top-size,--redz-progress-top-trackand--redz-progress-top-glowset how much the request bar shows.- A flush list group with an
edge-start-*, a tintedbg-*-subtleor analertrow gives every row a card's side room, and edged rows keep
their starts in line. --redz-card-header-bg,--redz-drawer-header-bgand--redz-dialog-header-bgtint a section's head; a dialog's takes
--redz-dialog-header-endand--redz-dialog-header-linefor the room and the line under it.table-scroll-lastholds a wide table's last column in place, where a row's buttons stay in view.--redz-table-head-bg,--redz-table-head-text,--redz-table-head-weightand--redz-table-head-borderset the look of every
table head from a product's tokens.
Fixed
data-show-whenand a switch's hidden twin: a hidden field beside a checkbox or a radio of its name is what the form sends
while none is checked, sodata-show-incan name its value and a region withoutdata-show-inno longer counts it.
Files. redz-ui-0.17.0.zip - the folder a project serves, as it is: css/, js/, LICENSE, LICENSE-editor, NOTICE and redz-ui.json, the passport (the version, the floor, the files to link, the vocabulary and the sha256 of every file). This release needs the icon pack redz-ui-icons 1.13.2, a release of its own. checks.zip - the sheet of the probes this release passed in every engine, also at https://redz-tech.github.io/REDZ.UI/0.17.0/checks/.
Check the archive: gh release verify-asset v0.17.0 redz-ui-0.17.0.zip --repo redz-tech/REDZ.UI.
REDZ.UI 0.16.0
The editor is rebuilt around a living block: nobody needs HTML to change a REDZ.UI element, and every setting the
library has is one click away. Every block has a stable id, so its history, protection and, later, its translations stay
with it.
Changed - the editor's words and marks, so update your pages
- The editor's texts changed: the passport's
editor.textslists about 150 new keys, andeditor.block,editor.block.up,
editor.block.down,editor.block.edit,editor.block.columns,editor.block.delete,editor.columns.*and
editor.imageare gone. A page gives its island what the passport lists. editor/is split into modules, still one file indist/. The classeseditor-island*are gone.- A block's parts are no longer edited as HTML by everyone: the HTML of a block and of the page is an expert's, under the
righthtml. - The value holds every block's
data-blockanddata-lockonly with the optionids. A CMS passes it.
Added - the editor
- Blocks you can change without HTML: the words of a block are fields found by walking it, so typing never breaks its
markup. Hover a table for the bars of its row and column, a list for the bar of its item, with plus, trash and arrows.
Click a word for the element bar: the path of the block down to that word, its settings, copy, move and delete. - The catalog:
tools/catalog.jsonnames what can be changed on 19 elements, nested ones too, also in the passport as
editor.catalog. The build refuses a class the stylesheets do not have, and a variant of a covered component that is
neither in the catalog nor set aside with a reason, so a new variant cannot be forgotten. - The card of a block: settings tried on while hovered or focused and kept by a click, Esc takes them back; a list's
words as bullets, numbers, a list group, cards, an accordion, steps or a table of two columns, the words untouched; the
block's own history, one block going back while the others stay,options.versionsadding what the host stored; on a
table, the numbers of rows and columns and the header row. It stands beside the editor, and on a phone as a sheet on the
side away from its block, so it never covers what it changes. - Rights:
options.rights, flagshtml,ai,design,structure,facts,lock,review, andlangs; left out,
all but HTML and protection; given, a key left out is off.setRights()changes them on the open page. The passport lists
them aseditor.rights. They only hide controls: the server decides on every save. - Protection:
data-lock="form"keeps the words open and closes the form, the place and the removal;data-lock="all"
closes the words too. Neither a selection nor Backspace deletes a protected block, and in the page's source it is a
marker that comes back untouched, even when its line is removed. - The expert mode: the HTML tab of a block and the source of the page, cleaned, naming what was taken out and the classes
REDZ.UI does not know. - Typing:
##,###,####,>,-,*,1.,**bold**,*italic*and`code`;/on an empty line for the
blocks; ⌘/ for all the commands; Alt Enter for the card; ⌘⇧ and an arrow to move a block; Tab and Shift Tab to nest a list;
Tab through a table and a new row after its last cell. - The handle: a block moves by dragging it, with a drop line and a View Transition where there is one; pressed, it opens
the card. - Paste: Word, Google Docs, spreadsheets and Markdown from a chat come in as REDZ.UI markup: a table stays a table, a
heading a heading, every style and font stays behind. A link pasted over selected words links them. - The lens: the strip above the text changes the width, the theme, the site's stylesheets and the language under it, and
the text stays editable. - The checks: the foot counts the words by the language's own word breaks, so Thai and Burmese count too, and lists an
empty heading, a skipped level, an image without words, a vague link, a long paragraph and a table without a head. - The toolbar: 36 px buttons with 20 px icons, a filled pressed state, the block's style as a word, an Insert that stands
out, one scrolling row on a phone, undo and redo from the editor's own history, the caret back where a change started. - Lists and formats are the editor's own: the browser's commands keep a paragraph with attributes around a list. The value
saysstrongandemwhatever the browser wrote. - The keys hold in fields in every engine: Safari no longer throws the caret out on Enter or pulls words out on Backspace,
Firefox crosses blocks by the arrows. Nothing touches the text while a character is composed. - A line to type in between two blocks takes no room until the caret is in it, so the text stands as the page will.
- Markup the catalog does not know, as a migrated body has it, comes back as it came: old
fontandcenter, styles, tables
withcolspan. Its words can be typed, and a command takes away only what it wrote itself. - The frame follows the page's theme live. The editor's preview names its script hosts: Firefox never matches
'self'in a
frame of its own, and the library may live on another host.
Added - the library
REDZ.ui.status(line, null)empties a status line.data-density="comfortable"and"spacious", for tables and rows: the editor's sizes of a table.badge-sm,badge-lg,alert-sm,alert-lg.tree-itemis in the class vocabulary.
Fixed
- An inline edit in a
threadkeeps the message's full width. - Escape closes a menu whose item shows a tooltip: the tooltip no longer holds the first press back.
- A tooltip survives a page that replaces its body.
Probes
- A behaviour check can be a walk that yields real input: clicks, moves of the pointer, keys, typed text and drags. The
editor's walk runs on every desktop engine: every kind of block, every level of rights, lists, paste, the lens and the keys.
Budgets
- The editor's script has a soft ceiling of 70 KB gzipped, it was 30, and its styles 8 KB, they were 5. It is 30 KB today.
Files. redz-ui-0.16.0.zip - the folder a project serves, as it is: css/, js/, LICENSE, NOTICE and redz-ui.json, the passport (the version, the floor, the files to link, the vocabulary and the sha256 of every file). This release needs the icon pack redz-ui-icons 1.13.2, a release of its own. checks.zip - the sheet of the probes this release passed in every engine, also at https://redz-tech.github.io/REDZ.UI/0.16.0/checks/.
Check the archive: gh release verify-asset v0.16.0 redz-ui-0.16.0.zip --repo redz-tech/REDZ.UI.
REDZ.UI 0.15.0
A release is now the folder a project serves, and the icons are a release of their own: 13 files of 480 KB in place of
2,219 files of 8.9 MB, and a new version of the library no longer moves 2,078 icons nor empties their cache.
Changed - renames, so update your links
-
The archive
redz-ui-<version>.zipis the folder a project serves, as it is:css/,js/,LICENSE,NOTICEand
redz-ui.json. There is nodist/in it, and every CSS and JS file is minified:Before Now dist/redz-ui.min.css,dist/redz-ui-NAME.min.csscss/redz-ui.min.css,css/redz-ui-NAME.min.cssdist/redz-ui.min.js,dist/redz-ui-NAME.min.jsjs/redz-ui.min.js,js/redz-ui-NAME.min.jsjs/floor.jsjs/floor.min.jscss/icons.csscss/icons.min.css, in the icon pack -
The sources, the docs, this file, the README and
floor.jsonare no longer in the archive: they stay in the
repository and in the tag's source archive. -
The passport:
distis nowmain,{css, js, floor}, each path relative to the version's folder, as are the paths of
editorandpackages.iconsis{name, version, css}, the pack this release needs.cssandjs, the lists of
source files, are gone, andfileslists what the archive holds beside the passport. -
In the repository
dist/is that folder, passport included, and a CDN readsdist/css/...anddist/js/...by a tag.
Added
- The icon pack:
redz-ui-icons-1.13.2.zipunder the tagicons-1.13.2, a release that changes only with Bootstrap Icons.
It holdscss/icons.min.css,icons/and its own passportredz-ui-icons.json, with the sha256 of every file. A
project keeps it in a folder of its own, whose address does not change with the library's version.
Fixed
- A
thintfootreads as a row's head, not the table's: it kept the head's band, 12 px,nowrapand sticky place (#99).
Changed in the editor
- Its frames take the icon masks from the address the page links
icons.min.cssfrom at that moment, whatever its host
and query. A page that links no icons has none in the frame.
Checks
php tools/build.php --checkrefuses icons that changed under a published pack's version;tools/release.phprefuses
an archive that differs from what its passport lists. A behavior check of athintfoot.
Files. redz-ui-0.15.0.zip - the folder a project serves, as it is: css/, js/, LICENSE, NOTICE and redz-ui.json, the passport (the version, the floor, the files to link, the vocabulary and the sha256 of every file). This release needs the icon pack redz-ui-icons 1.13.2, a release of its own. checks.zip - the sheet of the probes this release passed in every engine, also at https://redz-tech.github.io/REDZ.UI/0.15.0/checks/.
Check the archive: gh release verify-asset v0.15.0 redz-ui-0.15.0.zip --repo redz-tech/REDZ.UI.
REDZ.UI 0.14.1
Four fixes from a walk of the ERP's screens in Chrome and Safari, and from the ERP's list.
Fixed
- A title's tooltip no longer opens when the focus comes back from a closed menu or dialog. In Chrome it threw
InvalidStateError: Invalid to show a popover during another show operationonEscfrom a menu opened by a titled
button, such as a drag handle's menu of moves. btn-linkwraps a long text. On a phone a long title in abtn-linkstayed on one line and pushed the page sideways;
text-breakalone cannot change that.- A
data-show-whenregion inside a hidden region counts as hidden: its own field no longer shows it and turns its
fields back on, so the form does not send them. It follows its field again once the outer region shows. - A
table-scrollis a tab stop only while its table is wider than it. The library sets and removestabindex, so a
page drops its own: a table that fits leaves no stop that does nothing.
Checks
- Behaviour checks of each fix: a title's tooltip with the focus back from a menu and a dialog, a region inside a
hidden region, the tab stop of a scroller that fits and of one that does not. The docs' longbtn-linkis judged by
the overflow check at the phone widths.
Files. redz-ui-0.14.1.zip - the library as released: redz-ui.json, its passport (the version, the floor, the two files a project serves, the stylesheets a bundle joins in their order, the modules, the vocabulary and the sha256 of every file), and every file it names - dist/redz-ui.min.css and dist/redz-ui.min.js among them. checks.zip - the sheet of the probes this release passed in every engine, also at https://redz-tech.github.io/REDZ.UI/0.14.1/checks/.
Check the archive: gh release verify-asset v0.14.1 redz-ui-0.14.1.zip --repo redz-tech/REDZ.UI.
REDZ.UI 0.14.0
The ERP's #98: a file the page sends becomes a stored one when the server answers its id.
Added
- An upload's
redz:filespromise resolved with a string or a number is the id the server keeps the file under: the
row getsdata-file-stored, and from then on its Remove asks the page inredz:remove, as a row the server wrote
does. Resolved with a Blob, or with nothing, it works as before. The row gets no field of its own: a form that
posts the ids it keeps adds one, or readsdata-file-stored.
Checks
- The behaviour check of stored files sends one and removes it: kept under the id the docs' server answers, its
Remove asks the page for that id. - An opened layer is measured once its box rests two frames running, within a second: in CI's iOS 18 simulator, which
has no anchor positioning, the menu guard placed a menu later than two frames after it opened.
Files. redz-ui-0.14.0.zip - the library as released: redz-ui.json, its passport (the version, the floor, the two files a project serves, the stylesheets a bundle joins in their order, the modules, the vocabulary and the sha256 of every file), and every file it names - dist/redz-ui.min.css and dist/redz-ui.min.js among them. checks.zip - the sheet of the probes this release passed in every engine, also at https://redz-tech.github.io/REDZ.UI/0.14.0/checks/.
Check the archive: gh release verify-asset v0.14.0 redz-ui-0.14.0.zip --repo redz-tech/REDZ.UI.
REDZ.UI 0.13.0
The packages built into dist/ like the main two files, the ERP's #95-#97, and probes that wait for what they read:
a full CI run in 15 minutes, 25 to 35 before.
Added
- Each package's files in
dist/, built bytools/min.phpfrom its folder as the main two are fromcss/andjs/:
redz-ui-charts.min.cssand.min.js,redz-ui-calendar.min.css,redz-ui-media.min.css,
redz-ui-editor.min.cssand.min.js, andredz-ui-editor-surface.min.css, which the editor's frame links. The
passport'spackagesandeditorkeep their shape, their paths now these, each hashed infiles; the budgets
hold these files; the folders stay to read, and the release archives both. The editor's script is 8.4 KB gzipped,
11.0 as written. - The class list knows the packages' classes (#97): the passport's
classesandassets/classes.txtof both skills
holdcalendar,chart,spark,lanes,media-gridand the rest, soscan.sh --movedno longer reports them
as unknown; a page that uses one links its package.
Changed
- The docs link the packages from
dist/, the editor's example as the others: the probes run what a project serves.
Fixed
- A popover that several buttons open - the handles of a list sharing one menu of moves - marked every one of them
aria-expanded="true", drawn pressed and said "expanded" (#96). Only its opener is now: the toggle event's source,
else the button just pressed, else the one with the focus, else the only one; the others sayfalse. - The Print docs named Bootstrap's
d-print-none; REDZ.UI's class isprint:d-none(#95).
Checks
- The probes wait for what they read, not for fixed pauses: a key, a click or a drag waits two frames, in which every
state they read is set, and a layer's transitions only where its box is read live; a popover is measured at rest
whatever its transition. Chrome's driver answers as soon as its message is in.docs/all.htmlin Chrome: 5:55 to
1:46, the same findings. - A part of CI may run a share of its engines' pages, split by a hash of each page's name, so a page keeps its share
whatever pages come or go: the current Chrome and NVDA in Chrome and in Firefox run in two shares each, iOS 18 and
iOS 26 in a job each - five macOS jobs, no queue. Measured on run 41961288948: Chrome 24 to 13 minutes in one job,
Firefox 15 to 7, Safari 18 to 9, iOS 17 to 7 and 9, the floor 7 to 3-4, NVDA 21 to 11-12, VoiceOver 10. - Sharper reach: the behaviour checks reach the full pages of the desktop browsers, a package's file the pages that
link it; an exception of the config is marked used by its own text, not by its place in the list. - The minifier's cell holds each package's stylesheet squeezed against it as written, in every engine.
tools/docs.phprefuses docs prose that names a Bootstrap class the map renames or removes.- On the Mac before CI: Chrome, Firefox and Safari Technology Preview (
safari-preview), whose own driver takes a
session while the Mac owner's Safari is open; CI keeps the shipping Safari.
Files. redz-ui-0.13.0.zip - the library as released: redz-ui.json, its passport (the version, the floor, the two files a project serves, the stylesheets a bundle joins in their order, the modules, the vocabulary and the sha256 of every file), and every file it names - dist/redz-ui.min.css and dist/redz-ui.min.js among them. checks.zip - the sheet of the probes this release passed in every engine, also at https://redz-tech.github.io/REDZ.UI/0.13.0/checks/.
Check the archive: gh release verify-asset v0.13.0 redz-ui-0.13.0.zip --repo redz-tech/REDZ.UI.