defmodule Shadix.MixProject do
use Mix.Project
@version "0.0.1"
@source_url "https://tangled.org/workinghypothes.is/shadix"
def project do
[
app: :shadix,
version: @version,
elixir: "~> 1.20",
start_permanent: Mix.env() in [:prod, :docs],
elixirc_paths: elixirc_paths(Mix.env()),
deps: deps(),
aliases: aliases(),
description: "shadcn-style copy-paste UI components for Phoenix LiveView",
package: package(),
source_url: @source_url,
docs: docs(),
releases: releases()
]
end
# Run "mix help compile.app" to learn about applications.
#
# The docs deployment (built with MIX_ENV=docs) starts a supervised endpoint
# via Shadix.Website.Application. When Shadix is consumed as a library dependency it is
# compiled in :prod, so `mod:` is absent and no server is ever started.
def application do
[extra_applications: [:logger]] ++ docs_application(Mix.env())
end
defp docs_application(:docs), do: [mod: {Shadix.Website.Application, []}]
defp docs_application(_), do: []
# The deployable docs site (the dev harness compiled for production). Built
# with `MIX_ENV=docs mix release shadix_docs`; see Dockerfile / fly.toml.
defp releases do
[
shadix_docs: [
include_executables_for: [:unix],
applications: [shadix: :permanent]
]
]
end
# The docs site lives in website/ and is only compiled outside :prod.
# The :docs env compiles it for the production docs-site release.
defp elixirc_paths(:prod), do: ["lib"]
defp elixirc_paths(:test), do: ["lib", "website", "test/support"]
defp elixirc_paths(:docs), do: ["lib", "website"]
defp elixirc_paths(_), do: ["lib", "website"]
# Run "mix help deps" to learn about dependencies.
defp deps do
[
{:phoenix_live_view, "~> 1.1"},
{:jason, "~> 1.4"},
# Dev/test harness + docs deployment: assertion helpers and TS hook builds.
# The :docs env reuses these to build the public site.
# (phoenix itself arrives transitively via phoenix_live_view)
{:esbuild, "~> 0.10", only: [:dev, :docs], runtime: false},
{:floki, "~> 0.38", only: :test},
{:lazy_html, ">= 0.1.0", only: :test},
{:ex_doc, ">= 0.0.0", only: :dev, runtime: false},
# HEEx syntax highlighting for the component docs (server-side, no JS dep).
{:makeup_eex, "~> 2.0", only: [:dev, :test, :docs]},
{:makeup_html, ">= 0.0.0", only: [:dev, :test, :docs]},
# Icons for the docs-site examples (not used by the library itself).
{:phosphor_live_view, "~> 2.1", only: [:dev, :test, :docs]},
# Dev harness / docs-site HTTP server + Tailwind v4 CLI wrapper.
{:bandit, "~> 1.5", only: [:dev, :docs]},
{:tailwind, "~> 0.3", only: [:dev, :docs], runtime: false}
]
end
defp aliases do
[
"assets.build": ["tailwind app", "esbuild docs"],
dev: ["run --no-halt dev.exs"]
]
end
defp package do
[
licenses: ["MIT"],
links: %{"Source" => @source_url},
files: ~w(lib priv/registry .formatter.exs mix.exs README.md LICENSE)
]
end
defp docs do
[
main: "readme",
extras: ["README.md"],
source_ref: "v#{@version}"
]
end
end