# `StarView.Actions`
[🔗](https://github.com/Neophen/star_view/blob/v0.7.0/lib/star_view/actions.ex#L1)

Datastar action expression helpers.

These helpers generate strings for `data-on:*` attributes:

    <button data-on:click={StarView.Actions.post(MyAppWeb.CounterController, "increment")}>

Event names and literal module overrides are percent-encoded as one URL path
segment. The default dynamic module signal is encoded in the browser too.
Empty and exact dot segments are rejected because browsers normalize them.

A `:prefix` must be a local application path containing no dot segments,
backslashes, queries, fragments, controls, or URL scheme. Safe relative paths
such as `"admin"` are normalized to `"/admin"` for compatibility.
A dynamic `:module` override is a literal value, never JavaScript source.
Custom `$`-prefixed overrides raise; only `"$_star_view_module"` retains the
default dynamic signal behavior. Action strings use JSON double quotes.

Pass `:opts` to include a Datastar fetch options object, for example
`opts: "{retry: 'never', retryMaxCount: 0}"`. This is trusted developer
JavaScript emitted verbatim, never submitted signal values. The controller,
page and component helpers use the same options contract.

# `decode_module`

```elixir
@spec decode_module(String.t()) :: {:ok, module()} | :error
```

Decodes a URL-safe module name into an existing Elixir module.

# `delete`

Generates a `@delete(...)` Datastar action expression.

# `delete`

# `encode_module`

```elixir
@spec encode_module(module()) :: String.t()
```

Encodes an Elixir module name for URL path usage.

# `get`

Generates a `@get(...)` Datastar action expression.

# `get`

# `patch`

Generates a `@patch(...)` Datastar action expression.

# `patch`

# `post`

Generates a `@post(...)` Datastar action expression.

# `post`

# `put`

Generates a `@put(...)` Datastar action expression.

# `put`

