Packages

Multi-surface application runtime for Elixir. One TEA module renders to terminal, browser (LiveView), SSH, and MCP (agents). 30+ widgets, flexbox + CSS grid, AI agent runtime, distributed swarm with CRDTs, time-travel debugging, session recording, sandboxed REPL, and agentic commerce.

Current section

Files

Jump to
raxol examples components accessibility integrated_accessibility_demo.ex
Raw

examples/components/accessibility/integrated_accessibility_demo.ex

defmodule Raxol.Examples.Demos.IntegratedAccessibilityDemo do
@moduledoc """
A demo showcasing integrated accessibility features.
"""
@behaviour Raxol.Core.Runtime.Application
alias Raxol.Core.Renderer.View
require Raxol.Core.Renderer.View
# If this demo uses Accessibility features directly:
# alias Raxol.Core.Accessibility, as: Accessibility
@impl true
def init(_opts) do
model = %{
message: "Welcome to the Accessibility Demo",
button_clicks: 0,
checkbox_checked: false
}
{:ok, {model, []}}
end
@impl true
def update(model, {:button_clicked}) do
{:ok, %{model | button_clicks: model.button_clicks + 1}}
end
@impl true
def update(model, {:checkbox_toggled}) do
{:ok, %{model | checkbox_checked: !model.checkbox_checked}}
end
@impl true
def update(model, _event), do: {:ok, model}
@impl true
def handle_event(event) do
{:ok, event}
end
@impl Raxol.Core.Runtime.Application
def handle_message(_message, model), do: {:noreply, model}
@impl Raxol.Core.Runtime.Application
def handle_tick(model), do: {:noreply, model}
@impl Raxol.Core.Runtime.Application
def subscriptions(_model), do: []
@impl Raxol.Core.Runtime.Application
def terminate(_reason, _model), do: :ok
@impl Raxol.Core.Runtime.Application
def view(model), do: demo_view(model)
@doc """
Renders the accessibility demo view.
## Parameters
- model: The model to render
## Returns
- The rendered view
"""
def demo_view(model) do
View.column(
do: [
View.text(model.message, style: [[:bold]]),
View.button(
"Click Me (#{model.button_clicks})",
on_click: {:button_clicked},
aria_label: "Increment click counter button",
aria_description:
"Press to increment the number of times this button has been clicked."
),
View.checkbox(
"Enable Feature",
checked: model.checkbox_checked,
on_toggle: {:checkbox_toggled},
aria_label: "Enable or disable the example feature",
aria_description: "Toggles a conceptual feature on or off."
),
View.text(
"Checkbox is: #{if model.checkbox_checked, do: "Checked", else: "Unchecked"}",
aria_live: :polite
),
View.text_input(
placeholder: "Enter your name...",
value: "",
aria_label: "Name input field",
aria_description: "Enter your first and last name here."
)
]
)
end
@doc """
Gets the accessibility settings.
## Parameters
- user_preferences_pid_or_name: The user preferences process ID or name
## Returns
- A map containing the accessibility settings
"""
def get_settings(user_preferences_pid_or_name) do
alias Raxol.Core.Accessibility.Preferences
%{
enabled:
Preferences.get_option(:enabled, user_preferences_pid_or_name, true),
screen_reader:
Preferences.get_option(
:screen_reader,
user_preferences_pid_or_name,
true
),
high_contrast:
Preferences.get_option(
:high_contrast,
user_preferences_pid_or_name,
false
),
reduced_motion:
Preferences.get_option(
:reduced_motion,
user_preferences_pid_or_name,
false
),
keyboard_focus:
Preferences.get_option(
:keyboard_focus,
user_preferences_pid_or_name,
true
),
large_text:
Preferences.get_option(:large_text, user_preferences_pid_or_name, false),
silence_announcements:
Preferences.get_option(
:silence_announcements,
user_preferences_pid_or_name,
false
)
}
end
# Optional: If this demo needs to be run directly
# def main(args \\ []) do
# Raxol.run(__MODULE__, args)
# end
end