diff --git a/lib/ash_hq/classes.ex b/lib/ash_hq/classes.ex index 46a5e79..7068a39 100644 --- a/lib/ash_hq/classes.ex +++ b/lib/ash_hq/classes.ex @@ -5,6 +5,8 @@ defmodule AshHq.Classes do |> File.read!() |> Jason.decode!() + def classes(nil), do: nil + def classes(classes) when is_list(classes) do classes |> Enum.filter(fn @@ -22,9 +24,12 @@ defmodule AshHq.Classes do end def classes(base, classes) do - merge(classes(base), classes(classes)) + merge(classes(base), classes(classes)) |> to_string() end + def merge(nil, extension), do: extension |> to_string() + def merge(base, nil), do: base |> to_string() + def merge(base, extension) do AshHq.Tailwind.merge(base, extension) end diff --git a/lib/ash_hq/docs/resources/library_version/library_version.ex b/lib/ash_hq/docs/resources/library_version/library_version.ex index f8b6838..c723f2f 100644 --- a/lib/ash_hq/docs/resources/library_version/library_version.ex +++ b/lib/ash_hq/docs/resources/library_version/library_version.ex @@ -83,6 +83,7 @@ defmodule AshHq.Docs.LibraryVersion do change {AshHq.Docs.Changes.AddArgToRelationship, attr: :id, arg: :library_version, rel: :extensions, generate: &Ash.UUID.generate/0} + # foo change manage_relationship(:guides, type: :create) change manage_relationship(:library, type: :append_and_remove) change manage_relationship(:modules, type: :create) diff --git a/lib/ash_hq/tailwind.ex b/lib/ash_hq/tailwind.ex index 2a57597..3a6cbcb 100644 --- a/lib/ash_hq/tailwind.ex +++ b/lib/ash_hq/tailwind.ex @@ -1,5 +1,5 @@ defmodule AshHq.Tailwind do - defstruct [:p, :m, :w, classes: MapSet.new()] + defstruct [:p, :m, :w, :font_weight, :font_style, classes: MapSet.new()] defmodule Directions do defstruct [:l, :r, :t, :b, :x, :y, :all] @@ -37,6 +37,8 @@ defmodule AshHq.Tailwind do "p-4" iex> merge("p-4", "px-2") |> to_string() "px-2 py-4" + iex> merge("font-bold", "font-thin") |> to_string() + "font-thin" """ def merge(tailwind, classes) when is_binary(tailwind) do merge(new(tailwind), classes) @@ -57,6 +59,8 @@ defmodule AshHq.Tailwind do end @directional ~w(p m)a + @font_weights ~w(thin extralight light normal medium semibold bold extrabold black) + @font_styles ~w(thin extralight light normal medium semibold bold extrabold black) for class <- @directional do string_class = to_string(class) @@ -98,6 +102,14 @@ defmodule AshHq.Tailwind do end end + def merge_class(tailwind, "font-" <> other_weight) when other_weight in @font_weights do + %{tailwind | font_weight: other_weight} + end + + def merge_class(tailwind, "font-" <> other_family) when other_family in @font_styles do + %{tailwind | font_style: other_family} + end + def merge_class(tailwind, class) do %{tailwind | classes: MapSet.put(tailwind.classes, class)} end @@ -105,35 +117,44 @@ defmodule AshHq.Tailwind do defimpl String.Chars do def to_string(tailwind) do [ - directional(tailwind.p, :p), - directional(tailwind.m, :m), - Enum.join(tailwind.classes, " ") + directional(tailwind.p, "p"), + directional(tailwind.m, "m"), + prefix("font", tailwind.font_weight), + prefix("font", tailwind.font_style), + Enum.intersperse(tailwind.classes, " ") ] - |> Enum.filter(& &1) - |> Enum.join(" ") + |> IO.iodata_to_binary() + |> case do + " " <> rest -> rest + value -> value + end end - defp directional(nil, _key), do: nil + defp prefix(_prefix, nil), do: "" + defp prefix(prefix, value), do: [" ", prefix, "-", value] + + defp directional(nil, _key), do: "" defp directional(value, key) when is_binary(value) do - "#{key}-#{value}" + [" ", key, "-", value] end defp directional(%Directions{l: l, r: r, t: t, b: b, x: x, y: y}, key) do [ - direction(t, :t, key), - direction(b, :b, key), - direction(l, :l, key), - direction(r, :r, key), - direction(x, :x, key), - direction(y, :y, key) + direction(t, "t", key), + direction(b, "b", key), + direction(l, "l", key), + direction(r, "r", key), + direction(x, "x", key), + direction(y, "y", key) ] |> Enum.filter(& &1) - |> Enum.join(" ") end - defp direction(nil, _, _), do: nil - defp direction(value, suffix, prefix), do: "#{prefix}#{suffix}-#{value}" + defp direction(nil, _, _), do: "" + + defp direction(value, suffix, prefix), + do: [" ", prefix, suffix, "-", value] end defimpl Inspect do diff --git a/lib/ash_hq_web/components/callout_text.ex b/lib/ash_hq_web/components/callout_text.ex index 5fec205..bbaa28d 100644 --- a/lib/ash_hq_web/components/callout_text.ex +++ b/lib/ash_hq_web/components/callout_text.ex @@ -5,6 +5,7 @@ defmodule AshHqWeb.Components.CalloutText do import AshHq.Classes prop text, :string, required: true + prop class, :css_class def render(%{__context__: %{platform: :ios}} = assigns) do ~F""" @@ -14,7 +15,7 @@ defmodule AshHqWeb.Components.CalloutText do def render(assigns) do ~F""" - + {@text} """ diff --git a/lib/ash_hq_web/components/search.ex b/lib/ash_hq_web/components/search.ex index b4a624b..76ae76b 100644 --- a/lib/ash_hq_web/components/search.ex +++ b/lib/ash_hq_web/components/search.ex @@ -341,7 +341,7 @@ defmodule AshHqWeb.Components.Search do end) |> Enum.reject(&(&1 == "" || is_nil(&1))) - item_list = + %{result: item_list} = AshHq.Docs.Search.run!( socket.assigns.search, versions, diff --git a/lib/ash_hq_web/init_assigns.ex b/lib/ash_hq_web/init_assigns.ex index a1971b6..24a4c89 100644 --- a/lib/ash_hq_web/init_assigns.ex +++ b/lib/ash_hq_web/init_assigns.ex @@ -1,6 +1,7 @@ defmodule AshHqWeb.InitAssigns do @moduledoc "Sets the platform being used with liveview" import Phoenix.LiveView + import Phoenix.Component def on_mount(:default, _params, _session, socket) do case get_connect_params(socket) do diff --git a/lib/ash_hq_web/live_user_auth.ex b/lib/ash_hq_web/live_user_auth.ex index f178eef..68846df 100644 --- a/lib/ash_hq_web/live_user_auth.ex +++ b/lib/ash_hq_web/live_user_auth.ex @@ -10,7 +10,7 @@ defmodule AshHqWeb.LiveUserAuth do """ def on_mount(:live_user, _params, session, socket) do {:cont, - Phoenix.LiveView.assign( + Phoenix.Component.assign( socket, :current_user, AshHqWeb.UserAuth.user_for_session_token(session["user_token"]) @@ -24,7 +24,7 @@ defmodule AshHqWeb.LiveUserAuth do user -> {:cont, - Phoenix.LiveView.assign( + Phoenix.Component.assign( socket, :current_user, user @@ -36,7 +36,7 @@ defmodule AshHqWeb.LiveUserAuth do case AshHqWeb.UserAuth.user_for_session_token(session["user_token"]) do nil -> {:cont, - Phoenix.LiveView.assign( + Phoenix.Component.assign( socket, :current_user, nil diff --git a/lib/ash_hq_web/pages/home.ex b/lib/ash_hq_web/pages/home.ex index dd25118..fb0497e 100644 --- a/lib/ash_hq_web/pages/home.ex +++ b/lib/ash_hq_web/pages/home.ex @@ -55,6 +55,25 @@ defmodule AshHqWeb.Pages.Home do +
+
+
+ Brought to you by +
+
+ + + +
+
+ +
+ + + +
+
+

@@ -185,6 +204,20 @@ defmodule AshHqWeb.Pages.Home do

+
+

+ It wouldn't be possible without our amazing community! +

+ + + + + + + Become a contributor + +
+