Releases: ArthurClemens/primer_live
0.9.0
Changes
Note: access links from the official documentation
- Text input: Set disabled color on read-only field with inset style.
- Checkbox group and Radio group: Show required marker in legend.
- Action menu and Select menu: Added attribute
offset_x
to define the absolute offset for the menu on the horizontal axis. - Header: added attributes
variant="base"
to create a light colored header, andis_compact
for a smaller vertical height. - Updated upstream Primer Design System libraries. This update includes a number of changes to modified CSS Custom Properties.
- Updated upstream dependency
@primer/css
to21.5.0
. - Added
@primer/view-components
version0.34.0
. This is the Rails version of Primer Design, which is the most developed so far. - Updated Octicon icons to version
v19.12.0
.
- Updated upstream dependency
- Added support for right-to-left languages.
- Added support for
@scope
, allowing PrimerLive to be used alongside other CSS libraries. See usage instructions in Installation. - Added documentation Styling. This contains notes about styling with custom CSS and pre-made classes, reusing styled components and support for right-to-left languages.
Depreciations
Standalone form_control
as wrapper is soft-deprecated.
The use of form_control
as wrapper component around a form input component was causing compatibility issues with displaying validation messages. Since input components should be able to display a validation message even when not wrapped inside a form_control
, it became difficult to distinguish between a validation messages originating from the form_control
and one originating from the nested input.
With the introduction of checkbox_group
and radio_group
in version 0.5, there has been less need for a standalone form control wrapper.
Overall, moving form_control
to the background and using it only as an internal component resolves a range of problems.
See "Updating to 0.9" below.
Removals
form_group
was soft-deprecated in 0.5.0 and has been removed, along with component attributesform_group
andis_form_group
.
Bug fixes
- Checkbox group and Radio group: Restored display of validation message.
- Textarea: Set correct success color when displaying success feedback.
Updating to 0.9
form_control
There have 2 ways to create a form control: as a wrapper, and as an input attribute. If you've been using form_control
as wrapper around inputs, change:
<.form :let={f} for={@changeset}>
<.form_control form={f} field={:first_name} for="first-name">
<.text_input form={f} field={:first_name} id="first-name" />
</.form_control>
</.form>
to
<.form :let={f} for={@changeset}>
<.text_input form={f} field={:first_name} id="first-name" is_form_control />
</.form>
0.8.0
Changes
Refactoring of dialogs, drawers, and menus
This refactoring builds on the Phoenix.LiveView.JS
API - taking example from CoreComponent
's modal component. These changes reduce reliance on additional JavaScript, improve alignment with standard practice, and include accessibility improvements.
Overview:
See component documentation for further details:
Additions
- Dialogs, drawers and menus can now be shown conditionally, for example on a
live_action
route:
<.dialog
:if={@live_action == :create}
is_show
id="new-post-dialog"
on_cancel={JS.patch(~p"/posts")}
>
...
</.dialog>
- Added
PrimerLive.StatefulConditionComponent
. - Dialog state is now preserved on form updates.
- Added attribute
focus_after_closing_selector
, mirroring the (renamed)focus_after_opening_selector
. - Added attribute
on_cancel
. - Added attribute
transition_duration
. - Added attribute
show_state
to persist dialogs, drawers and menus across different LiveViews. - Added
backdrop_tint
with values "dark" (default) and "light". The latter (combined withbackdrop_strength="strong"
) (see below) creates a backdrop that is similar to the CoreComponent's modal. - Added focus trap.
Changes and removals
See for update instructions: "Updating to 0.8" below.
- Prompt functions
show
andhide
are replaced withopen_dialog
,close_dialog
andcancel_dialog
. - Replaced attribute
prompt_options
for status callbacks withstatus_callback_selector
that sends status events to the component, so that state changes can be used in Elixir code. - Removed attribute
phx_click_touch
in favor of usingstatus_callback_selector
, because closing can be initiated in several ways, not only through backdrop clicks, and we can't assume that the event handler always hosts the dialog/drawer as well. - Renamed attribute
focus_first
tofocus_after_opening_selector
. Focus on the first interactive element is now default; withfocus_after_opening_selector
a specific element can be appointed. - Removed attrs
form
andfield
from all prompt components. - Added separate
z-index
settings for menus, so that the menu panel (and optional backdrop) are closer to the page, allowing them to be covered by other elements such as top bars. Using az-index
of100
for a top bar ensures that it sits in between menus and dialogs/drawers. - Replaced backdrop attributes
is_dark_backdrop
,is_medium_backdrop
andis_light_backdrop
withbackdrop_strength
and values"strong"
,"medium"
and"light"
. - Menus and dialogs can now be closed with Escape by default.
Other changes
Box with streams
The box component now supports streams:
<.box stream={@streams.clients} id="clients">
<:row :let={{_dom_id, data}}>
<%= data.name %>
</:row>
</.box>
This includes a breaking change: let
is now reserved for stream data, so the callback data no longer contains classes
.
Event attributes for slots
Slots now accept these "all-purpose" event attributes:
phx-click
phx-target
phx-value-item
Components:
box
: slotrow
breadcrumb
: slotitem
dialog
: slotrow
dropdown
: slotitem
filter_list
: slotitem
header
: slotitem
menu
: slotitem
select_menu
: slotitem
side_nav
: slotitem
subnav_links
: slotitem
tabnav
: slotitem
truncate
: slotitem
underline_nav
: slotitem
Example with tabnav
:
<:item
:for={%{label: label, id: tab_id} <- @tabs}
is_selected={id == @selected_tab}
phx-click="set_tab"
phx-value-item={tab_id}
>
...
def handle_event(
"set_tab", %{"item" => tab_id}, socket) do
...
Fieldset wrapper for checkbox_group and radio_group
The form group created by checkbox_group and radio_group is now automatically wrapped in a fieldset. The label
attribute generates a legend
element.
Updated Octicons
This update to version 19.11.0
includes around 50 additions. See primer-live.org/octicon for a visual list.
Accessibility
- Added ARIA tags
aria-haspopup
andaria-owns
. - DOM ids are reformatted to a DOM-safe ID string.
Updating to 0.8
-
Replace
Promp.show
andPrompt.hide
:-
For example:
onclick="Prompt.show('#my-dialog')" onclick="Prompt.hide('#my-dialog')"
-
Becomes:
phx-click={open_dialog("my-dialog")} phx-click={close_dialog("my-dialog")}
-
-
Replace backdrop darkness attributes:
is_dark_backdrop
becomesbackdrop_strength="strong"
is_medium_backdrop
becomesbackdrop_strength="medium"
is_light_backdrop
becomesbackdrop_strength="light"
-
Attribute
is_escapable
can be removed because this is now the default. If the component should not be removed using Escape, useis_escapable={false}
.
Less used attributes
-
Form state: the previous method to preserve state, using "a fictitious and unique field name" can be removed.
- Remove
form
andfield
from menu and dialog component attributes.
- Remove
-
Because
focus_first
(without a selector) is now the default, nothing needs to be changed when using this attribute.- If in existing code a selector value is used, rename the attribute to
focus_after_opening_selector
.
- If in existing code a selector value is used, rename the attribute to
-
Replace
prompt_options
andphx_click_touch
withstatus_callback_selector
. There's no simple way to replaceprompt_options
, because passing JavaScript functions is no longer supported. A solution could be very similar to the previousphx_click_touch
method. See Status callbacks for an example. -
If you use
checkbox_group
orradio_group
inside afieldset
, remove the fieldset as it is now redundant. -
If you are using
box
with a:let
callback:-
Previous:
<:row :let={classes}> <.link href="/" class={classes.link}>Home</.link> </:row>
-
Becomes:
<:row> <.link href="/" class="Box-row-link">Home</.link> </:row>
-
0.7.2
0.7.1
- Added dialog attr
is_show_on_mount
. - Downgraded dependency
@primer/css
to21.0.7
due to regressions.
0.7.0
Updated dependencies:
phoenix_ecto
to4.5
phoenix_html
to4.1
- Added
phoenix_html_helpers
- Added
phoenix_live_view
to0.20
@primer/css
to21.2.2
Removed support for Ash Framework due to incompatible dependencies.
0.6.4
Reverted dependency @primer/css
to 21.0.9
because of an excessively increased file size in later versions.
Upstream bug report: primer/css#2567
0.6.3
Changes
- Class attrs now support class notation from Surface. Thanks @tunchamroeun!
- Component
pagination
: added class entry for "current_page" which now can receive a custom class.
0.6.2
Bug fixes
- Pagination: fixes the calculation when a gap between page numbers should be shown.
Other changes
- Pagination: added
role
and improved ARIA labels.
0.6.1
0.6.1
Fixes reading the required state of input fields.
0.6.0
0.6.0
Added support for forms created with Ash Framework. See test/frameworks/ash/form_test.exs for an example.