Packages
corex
0.1.0-beta.1
0.1.2
0.1.1
0.1.0
0.1.0-rc.1
0.1.0-rc.0
0.1.0-beta.5
0.1.0-beta.4
0.1.0-beta.3
0.1.0-beta.2
0.1.0-beta.1
0.1.0-alpha.33
0.1.0-alpha.32
0.1.0-alpha.31
0.1.0-alpha.30
0.1.0-alpha.29
0.1.0-alpha.28
0.1.0-alpha.27
0.1.0-alpha.26
0.1.0-alpha.25
0.1.0-alpha.24
0.1.0-alpha.23
0.1.0-alpha.22
0.1.0-alpha.21
0.1.0-alpha.20
0.1.0-alpha.19
0.1.0-alpha.18
0.1.0-alpha.17
0.1.0-alpha.16
0.1.0-alpha.15
0.1.0-alpha.14
0.1.0-alpha.13
0.1.0-alpha.12
0.1.0-alpha.11
0.1.0-alpha.10
0.1.0-alpha.9
0.1.0-alpha.8
0.1.0-alpha.7
0.1.0-alpha.6
0.1.0-alpha.5
0.1.0-alpha.4
0.1.0-alpha.3
0.1.0-alpha.2
0.1.0-alpha.1
Accessible and unstyled UI components library written in Elixir and TypeScript that integrates Zag.js state machines into the Phoenix Framework.
Current section
Files
Jump to
Current section
Files
lib/corex/animation/scale.ex
defmodule Corex.Animation.Scale do
@moduledoc """
Web Animations config for **dialog** when `animation` is `js`:
**opacity** and **transform scale** on the `content` node; **opacity only** on the **backdrop** (handled in the hook).
No height keyframes, no translate.
`to_dataset/1` is merged on the host only for `js`. Custom `animation` does not use this on the server; the hook may still apply an optional lock using client defaults when the `data-anim-scale-*` attributes are absent.
Set `block_interaction` to `false` to allow pointer input on the dialog shell during the built-in WAAPI transition.
"""
defstruct duration: 0.3,
easing: "ease",
opacity_start: 0.0,
opacity_end: 1.0,
scale_start: 0.96,
scale_end: 1.0,
block_interaction: false
@type t :: %__MODULE__{
duration: float(),
easing: String.t(),
opacity_start: float(),
opacity_end: float(),
scale_start: float(),
scale_end: float(),
block_interaction: boolean()
}
@spec to_dataset(t()) :: %{String.t() => term()}
def to_dataset(%__MODULE__{} = a) do
base = %{
"data-anim-scale-duration" => a.duration,
"data-anim-scale-easing" => a.easing,
"data-anim-scale-opacity-start" => a.opacity_start,
"data-anim-scale-opacity-end" => a.opacity_end,
"data-anim-transform-scale-start" => a.scale_start,
"data-anim-transform-scale-end" => a.scale_end
}
if a.block_interaction,
do: base,
else: Map.put(base, "data-anim-scale-block-interaction", "false")
end
end