OctantisWeb.Core (octantis v0.2.0)
View SourceCore Functionality for Polaris Components.
Summary
Functions
Transform phx_ prefixed assigns to both data-phx- and phx- assigns.
Build the class in the magic way that matches polaris classes
Optionally wrap the inner_block in a div.
Assign common styles based on attributes. Use with the attr_extra_styles macro.
Convenient syntax for sending slot attributes to a slot
Renders slot with render_slot if it is a slot.
Otherwise it renders the inner_block.
Allows for React like child or attribute pattern found repeatedly in Polaris.
Functions
assign_phx_bindings(assigns, binding_keys \\ [:phx_values, :phx_click, :phx_click_away, :phx_change, :phx_submit, :phx_feedback_for, :phx_feedback_group, :phx_disable_with, :phx_trigger_action, :phx_auto_recover, :phx_blur, :phx_focus, :phx_window_blur, :phx_window_focus, :phx_keydown, :phx_keyup, :phx_window_keydown, :phx_window_keyup, :phx_key, :phx_viewport_top, :phx_viewport_bottom, :phx_mounted, :phx_update, :phx_remove, :phx_hook, :phx_connected, :phx_disconnected, :phx_debounce, :phx_throttle, :phx_track_static])
Transform phx_ prefixed assigns to both data-phx- and phx- assigns.
This allows us use bindingPrefix: "data-phx-" in production as required by Shopify's AppBridge (See AppBridge section of the README)
but also use the default bindingPrefix: "phx-" for tests and Storybook.
phx_values is a special case that is expanded to phx-value-key and data-phx-value-key
This should only be used html tags, and not on heex components.
See
https://hexdocs.pm/phoenix_live_view/bindings.html
Examples
iex> assigns |> assign_phx_bindings(%{phx_click={&click}, phx_values={[key: "value"]}}) %{
phx-click={&click}
data-phx-click={&click}
phx-value-key="value"
data-phx-value-key="value"}
heex> <button {@bindings} /> <button
phx-click={&click}
data-phx-click={&click}
phx-value-key="value"
data-phx-value-key="value"/>
Build the class in the magic way that matches polaris classes
Examples
iex> class_for_attribute("Polaris-Badge", :tone, "success") "Polaris-Badge--toneSuccess"
iex> class_for_attribute("Polaris-Badge", :tone, "success--strong") "Polaris-Badge__toneSuccess--strong"
Optionally wrap the inner_block in a div.
This is primarily to address the react pattern:
return descriptionMarkup ? (
<div>
{labelMarkup}
{descriptionMarkup}
</div>
) : (
{labelMarkup}
);which can now be rendered with
<.div_wrapper wrap={@description}>
{@label}
{@description}
</.div_wrapper>Attributes
wrap(:boolean) - Render the div, or just have the inner block. Defaults totrue.- Global attributes are accepted.
Slots
inner_block
Assign common styles based on attributes. Use with the attr_extra_styles macro.
Examples
heex> <.block_stack flex_grow="1"/> <div style="flex-grow:1;"/>
phx_bindings(assigns, binding_keys \\ [:phx_values, :phx_click, :phx_click_away, :phx_change, :phx_submit, :phx_feedback_for, :phx_feedback_group, :phx_disable_with, :phx_trigger_action, :phx_auto_recover, :phx_blur, :phx_focus, :phx_window_blur, :phx_window_focus, :phx_keydown, :phx_keyup, :phx_window_keydown, :phx_window_keyup, :phx_key, :phx_viewport_top, :phx_viewport_bottom, :phx_mounted, :phx_update, :phx_remove, :phx_hook, :phx_connected, :phx_disconnected, :phx_debounce, :phx_throttle, :phx_track_static])
Convenient syntax for sending slot attributes to a slot
Examples
heex> <.block_stack {slot_attributes(@myslot)} />
Renders slot with render_slot if it is a slot.
Otherwise it renders the inner_block.
Allows for React like child or attribute pattern found repeatedly in Polaris.
Examples
heex>
<.slot_wrapper slot={@title}>
<.text variant="headingSm" as="h2">
<%= @title %>
</.text>
</.slot_wrapper>Attributes
- Global attributes are accepted. Supports all globals plus:
["slot"].
Slots
slotinner_block- The block to render ifslotis not not a slot.