Changelog
v0.6.1 (2021-10-26)
- Add
surface_formatter dependency to mix.exs when running mix surface.init (#507) - Allow
Inputs component inside the Field component (#492) - Fix using context with external
.sface templates (#511) - Fix attribute name conversion (#512)
v0.6.0 (2021-10-21)
- Compatibility with Phoenix
v1.6 and Liveview v0.16 - New
mix surface.init task - Add support for function components
- Add support for dynamic function components via
<Component> - Add support for recursive function components
- Optimize change tracking for contexts
- Fix race condition when compiling tests
- Fix recompilation of used components
v0.5.1 (2021-07-13)
- Add property
values to form inputs - Handle doctype as text
- Improve error message when
default_translator is not configured for ErrorTag (#449) - Raise on invalid attribute/directive in
<#slot> (#456) - Raise error on
{#case} without {#match} (#443) - Raise on blocks without expression
- Fix error line on missing closing tag
v0.5.0 (2021-06-17)
- Add
<:slotname> shorthand for <#template slot="slotname"> - Introduce block expressions for surface templates (e.g.,
{#if}..{/if}) - Introduce
{#if} block expression with support for {#elseif} and {#else} sub blocks - Introduce
{#for} block expression with support for {#else} sub block - Introduce
{#unless} block expression - Introduce new shorthand notation for dynamic attributes/props using the
{... } tagged expression - Introduce new shorthand notation for attribute assignment using the
{= } tagged expression - Support private comments using
{!-- --} for comments that are not supposed to hit the browser - Introduce
s- prefix as an alternative to : for directives (i.e. s-if and :if are now equivalent) - Introduce
:values directive for generating multiple phx-value- attributes - Added a convert task to aid migrating to the new syntax
- Evaluate literal attribute values at compile time instead of runtime
- Fix compile error when using single quotes as attribute value delimiters
- Add
quote_surface/2 macro to generate Surface AST from template snippets.
Breaking Changes
- Replace the sigil
~H with ~F to avoid conflict with HEEx - Replace interpolation delimiters
{{ and }} with { and } - Remove support for interpolation inside
<style>...</style> and <script>...</script> nodes - ErrorTag: Renamed prop
phx_feedback_for to feedback_for - Slot directive
:props has been renamed to :args - Option
:props for the slot/2 macro has been renamed to :args - The use of
<template> has been removed in favor of <#template> - The use of
<slot> has been removed in favor of <#slot> - The use of
<If> has been removed in favor of {#if}...{/if} - The use of
<For> has been removed in favor of {#for}...{/for} MacroComponent.eval_static_props!/3 evaluates and returns only props with option static: true
Deprecations
- Support for passing non-string attribute values as literals (i.e.
selected=true or tabindex=3) has been removed.
Any non-string value should be passed as an expression (i.e. selected={true})
v0.4.1 (2021-05-26)
- Fix warning on Phoenix Live View >= 1.15.6
v0.4.0 (2021-05-01)
- Call render when defined in slotable components (#283)
- Support defining form fields as strings. Consequently, fields defined as literal strings will
no longer be auto-converted to
:atom and will keep the original value (#319) - Deprecate auto-conversion of attribute values passed as string literals into atoms
- Do not encode HTML entities when passing attribute values as string literals (#323)
- Extract the Markdown macro component in its repository (#316)
- Renamed
Surface.Components.Button to Surface.Components.Link.Button (#350)
v0.3.2 (2021-03-19)
- Warn if prop is required and has default value (#282)
- Warn if slot is required and has a fallback content (#296)
- Warn on
LiveComponent with another LiveComponent as root - Support escaped three double-quotes in
Markdown content - Improve
Label component compatibility with Phoenix label/2 (#284) - Update props according to new types (#297)
- Fix copying JS hooks multiple times (#294)
v0.3.1 (2021-03-05)
- Fix
index.js generation when no hooks are available - Fix loading hooks from dependencies
- Support
<Link> with scheme (#273)
v0.3.0 (2021-02-24)
- Autoload JS hooks via new surface compiler (#271)
- New
<Link> and <Label> implementation without depending on content_tag to allow receiving
child components in slots (#264) - Don't validate undefined assigns outside render (#263)
- Load subject's default props values before sending them to playgrounds
v0.2.1 (2021-02-01)
- Allow different catalogue options for examples and playgrounds
v0.2.0 (2021-01-27)
- Introduce new testing API using
render_surface/1 - Add experimental support to create examples and playgrounds for catalogues
- Raises compile error if slots are not declared
- Raises compile error on duplicate built-in assign
- Allow defining the assign name for slot through the :as option (#230)
- Implement the
:show directive via hidden attribute (#244) - Add new
<DateSelectComponent> component - Remove default value from
Form method prop - Reintroduce opts prop for the
<Select> component - Fix markdown syntax warning in
<Form> docs - Fix error when using :if + :props in slots (#224)
- Fix line offset when using single-line
~H variants (#246) - Fix UnicodeConversionError when using string literals inside interpolation
v0.1.1 (2020-11-28)
- Add explicit props for the main opts of Checkbox, Select, MultipleSelect, FileInput and Form (#215).
- Add new
slot_assigned?/1 macro to check if a slot has been filled in (#211). - Fix attribute value encoding
v0.1.0 (2020-11-23)
- Update liveview to v0.15
- Add new
Surface.Components.Form.ErrorTag to render error messages in forms (#199). - Disable validation for required props if
:props is passed (#204)
v0.1.0-rc.2 (2020-11-04)
- Update liveview to latest v0.15-dev (f986171)
- New wrapper components
Surface.Components.{For, If} for when the :for and :if directives aren't sufficient (#184) - Allow double braces within interpolation (#171)
- Add new
Surface.Components.FieldContext to support form fields without wrapping divs (#172) - Improve error message for unloaded modules (#174)
- Fix issue with
:for modifiers on components (#176) - Expose form instance as slot prop on
Surface.Components.Form (#183) - Don't initialize data assigns without default value (#195)
v0.1.0-rc.1 (2020-10-21)
- Fix support for Elixir >= v1.11
- Update liveview to latest v0.15-dev (597c5dd)
- Add undefined assign check for
Surface.{LiveComponent,Component,LiveView} - New form controls wrappers:
<DateTimeSelect> and <TimeSelect>. - Force recompilation of the parent component after fixing errors on any of its children.
v0.1.0-rc.0 (2020-10-06)
- Update LiveView to v0.15-dev (0f592a4).
- Make
<slot> mandatory instead of inner_content. - Add attribute
index to <slot> to allow rendering individual named slot items. - Rename macro
property to prop. - Remove macro
context and add a <Context> component to be used instead. - Rename directives
:on-phx-[event] to :on-[event]. - Add support for co-located template files using
.sface suffix. - Add
Surface.init/1 to initialize internal assigns when not using Surface.LiveView. - Add
:props directive to pass dynamic props to a component. - Add
:attrs directive to pass dynamic attributes to a tag. - Add new modifiers
index and with_index for :for. - Update html tag generation to remove the tag if it's value computes to
nil. - Add support for a
transform/1 callback to allow components to manipulate its
own node at compile-time. - New form controls:
<Inputs>, <Checkbox>, <Select>, <MultipleSelect>,
<HiddenInputs>, <FileInput> and <OptionsForSelect>.
v0.1.0-alpha.2 (2020-06-09)
- New Markdown component
- New Link component
- New form components Form, Field, TextArea, Label, TextInput, RadioButton,
HiddenInput, ColorInput, DateInput, DateTimeLocalInput, EmailInput, NumberInput,
PasswordInput, RangeInput, SearchInput, TelephoneInput, TimeInput, UrlInput,
Reset and Submit.
- Automatically define a required :id property for live components that implement
handle_event/3 - New config API for components
- Update LiveView to v0.13
v0.1.0-alpha.1 (2020-04-13)
- Add support for slots
- Add built-in LivePath and LiveRedirect components
- Drop automatic camel-to-kebab conversion for CSS class name
- Drop support for
inner_content.(). Use inner_content.([]) instead - Update LiveView to v0.11.1
v0.1.0-alpha.0 (2020-02-26)