# CHANGELOG ## Main ### 0.9.0-rc.0 ### Breaking Changes - Requires Elixir 1.13+ - Whitespace control is now controlled by whether you use `do/end` or `:do` syntax. The `:do` syntax will render "tight" markup. - Components are no longer module based. Any function can now be a component. Now to render a component, you pass a function reference `c &my_component/1`. - Temple.Component has been removed, which removes the `render/1` macro for defining a component. Now all you need to do is define a function and have it take an `assigns` parameter and call the `temple/1` macro that is imported from `Temple`. - The `defcomp` macro has been removed, since now all you need is a function. - All Phoenix related things and dependencies have been removed. If you are going to use Temple with Phoenix, now use the [temple_phoenix](https://github.com/mhanberg/temple_phoenix) package instead. - Config options have changed. Now all you can configure are the aliases (unchanged from before) and now you can configure the EEx.Engine to use. By default it uses `EEx.SmartEngine`. Please see the guides for more in depth migration information. ## 0.8.0 ### Enhancements - Better whitespace control You can now use a "bang" version of any nonvoid tag to forgo the internal whitespace. ```elixir span do "So much room for activities!" end # # So much room for activities! # span! do "It's a little cramped in here!" end # It's a little cramped in here! ``` ## 0.7.0 ### Enhancements - [breaking] Attributes who values are boolean expressions will be emitted as boolean attributes. - Class "object" syntax. Conditionally add classes by passing a keyword list to the `class` attribute. ## 0.6.2 ### Bug fixes - Compile void elements with zero attrs #135 ## 0.6.1 ### Bug fixes - Only collect slots in the root of a component instance #127 ## 0.6.0 The LiveView compatibility release! Temple now is written to be fully compatible with Phoenix LiveView! This comes with substantial internal changes as well as a better component API. ### Phoenix LiveView Temple now outputs LiveView compatible EEx at compile time, which is fed right into the normal LiveView EEx engine (or the traditional HTML Engine if you are not using LiveView). ### Components Temple now has a more complete component API. Components work with anywhere, whether you are writing a little plug app, a vanilla Phoenix app, or a Phoenix LiveView app! Please see the [documenation](https://hexdocs.pm/temple/Temple.html) for more information. To migrate component from the 0.5.0 syntax to the 0.6.0 syntax, you can use the following as a guide ```elixir # 0.5.0 # definition defmodule PageView do defcomponent :flex do div id: @id, class: "flex" do @children end end end # usage require PageView # or import PageView temple do PageView.flex id: "my-flex" do div "Item 1" div "Item 2" div "Item 3" end # with import flex id: "my-flex" do div "Item 1" div "Item 2" div "Item 3" end end ``` to ```elixir # 0.6.0 # definition defmodule Flex do import Temple.Component render do div id: @id, class: "flex" do slot :default end end end # usage temple do c Flex id: "my-flex" do div do: "Item 1" div do: "Item 2" div do: "Item 3" end end ``` ### Other breaking changes 0.6.0 has been a year in the making and a lot has changed in that time (in many cases, several times over), and I honestly can't really remember everything that is different now, but I will list some things here that I think you'll need to change or look out for. - The `partial` macro is removed. - You can now just call the `render` function like you normally would to render a phoenix partial. - The `defcomponent` macro is removed. - You now define components using the API described above. - The `text` macro is now removed. - You can just use a string literal or a variable to emit a text node. - Elements and components no longer can take "content" as the first argument. A do block is now required, but you can still use the keyword list style for a concise style, e.g., `span do: "foobar"` instead of `span "foobar"`. - The `:compact` reserved keyword option was removed. - The macros that wrapped `Phoenix.HTML` are removed as they are no longer needed. - The `temple.convert` task has been removed, but I am working to bring it back. There might be some more, so if you run into any problems, please open a [GitHub Discussion](https://github.com/mhanberg/temple/discussions/new). ## 0.6.0-rc.1 ### Enhancements - Components can now use slots. - Markup is 100% live view compliant. ### Breaking - `@inner_content` is removed in favor of invoking the default slot. - The `compact` reserved keyword for elements has been removed. This is not really intentional, just a side effect of getting slots to a usable place. I expect to add it back, or at least similar functionality in the future. ## 0.6.0-rc.0 - Can pass a keyword list to be evaluated at runtime as attrs/assigns to an element. ```elixir # compile time div class: "foo", id: bar do # something end #