All notable changes to Erabi are documented in this file.
The format follows Keep a Changelog, and Erabi follows Semantic Versioning.
[Unreleased]
[0.1.0] - Unreleased
Added
- The pickers, in
Erabi.Components:select/1,multi_select/1,combobox/1,tags/1andperson_picker/1. Each is a field of a form that posts what the browser's own<select>would (name[]after an empty one, in the order chosen), and is that<select>before the hook mounts. - Options as a
<select>takes them, or richer (Erabi.Option): hints, colors from a palette of nine checked for contrast, icons drawn by the app's:iconslot, groups, keywords, priorities, disabled options with their reason; user structs by:idand:name. - People and agents: avatars, agents marked,
mefirst. color_picker/1: the palette's swatches (Erabi's nine by name, or the app's colors), and withcustomany color as#rrggbb: an OKLCH area of lightness and chroma that holds only colors a screen shows, a hue slider, a hex box, the eyedropper, recent colors, and the contrast with a background (contrast). It is an entry of its own (import "erabi/color"), so that apps without one do not load it; without the import it stays the browser's<select>, and says so in the console.- Color columns in Masu:
Erabi.cell_editor(:color, ...), saved as the popup closes; a select of the palette withouterabi/color. emoji_picker/1: every emoji by category, a search by name, tag and:shortcode:in eight languages, skin tones, recent emoji, a preview, emoji newer than the device draws left out, and a tab of the app's icons;icon_picker/1, the app's icons alone. An entry of its own (import "erabi/emoji"); its emoji, from Emojibase, a file a language inpriv/emojithat the endpoint serves and the picker fetches as it first opens.Erabi.Emojisearches and names them on the server, as the browser does, and checks a changeset's value. Emoji columns in Masu:Erabi.cell_editor(:emoji, ...).mix erabi.installadds the endpoint'sPlug.Staticof the emoji.- On phones, every picker's popup is a sheet from the bottom of the
screen: a dimmed page that does not scroll and takes no taps, the
picker's name and Done, a swipe down to close, above the on-screen
keyboard, with a combobox's box to type in moved into it. The
sheetattribute (andconfig :erabi, sheet:)::auto,:always,:never. - Tags typed with Enter or a comma, and "Create “…”" under the rules.
Erabi.Rules, the same in the browser and inErabi.Changeset.validate_choice/4: required, counts, creation, lengths in graphemes, a pattern; held to the same answers bytest/fixtures/rules.json.Erabi.Match, Jumon's matcher, in Elixir and in the browser.- Search on the server as people type (
Erabi.Live): pages,async, stale answers dropped, a cache of recent answers, a retry. - Lists of thousands of options, drawn a screenful at a time.
- The WAI-ARIA combobox and listbox patterns, typeahead, announcements.
- Words in English, Portuguese, Spanish, French, German, Italian, Dutch
and Japanese (
Erabi.Messages). - Editors of Masu's cells:
Erabi.cell_editor/2anderabiEditors(). - With Issho (
Erabi.Issho,isshoanduserattributes): who else has a picker open, the option each is on, a read-only peek of the list where they are, one at a time (the first to open the list holds the picker's lock;lock: falsefor none), andErabi.Issho.choose/5for an agent to go through the options before its change lands; an agent that a person paused or stopped (Issho 0.4'sIssho.Work) does not choose, and gets{:error, {:interrupted, by}}. Issho 0.4 or later. Erabi.Test:choose/3,choices/2,chosen/2,search/3.- The Sumi theme (
erabi-sumi.css), dark mode, forced colors, reduced motion. mix erabi.install.