diff --git a/.gitignore b/.gitignore
index a432dc9..30d9271 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,4 @@ node_modules
# Ignore Surface generated files
assets/js/_hooks/
assets/css/_components.css
+assets/css/_variants.js
diff --git a/lib/surface/catalogue/components/component_tree.ex b/lib/surface/catalogue/components/component_tree.ex
index 4888434..3964396 100644
--- a/lib/surface/catalogue/components/component_tree.ex
+++ b/lib/surface/catalogue/components/component_tree.ex
@@ -8,6 +8,7 @@ defmodule Surface.Catalogue.Components.ComponentTree do
prop selected_component, :string
prop single_catalogue?, :boolean
prop components, :map
+ prop examples_and_playgrounds, :map
def render(assigns) do
~F"""
@@ -15,61 +16,167 @@ defmodule Surface.Catalogue.Components.ComponentTree do
class="section column is-narrow is-narrow-mobile is-fullheight is-hidden-mobile"
style="background-color: #f5f5f5; min-width: 270px;"
>
- {render_node(assigns, @components, @selected_component, @single_catalogue?)}
+ {render_node(
+ assigns,
+ @components,
+ @selected_component,
+ @single_catalogue?,
+ @examples_and_playgrounds
+ )}
"""
end
- def render_node(assigns, node, selected_component, single_catalogue?, parent_keys \\ []) do
+ def render_node(
+ assigns,
+ node,
+ selected_component,
+ single_catalogue?,
+ parent_keys \\ [],
+ examples_and_playgrounds
+ ) do
~F"""
"""
end
+ def maybe_render_home_entry(assigns, parent_keys, selected_component) do
+ ~F"""
+
+
+
+
+
+ Home
+
+
+ """
+ end
+
+ def maybe_render_component_entry(
+ assigns,
+ module,
+ mod_path,
+ selected_component,
+ component_type,
+ key,
+ examples_and_playgrounds
+ ) do
+ ~F"""
+
+
+
+
+
+ {key}
+
+
+ """
+ end
+
+ def maybe_render_single_catalog_components_entry(
+ assigns,
+ value,
+ selected_component,
+ single_catalogue?,
+ parent_keys,
+ mod_path,
+ examples_and_playgrounds
+ ) do
+ ~F"""
+
+
+
+
+
+ Components
+
+ {render_node(
+ assigns,
+ value,
+ selected_component,
+ single_catalogue?,
+ mod_path,
+ examples_and_playgrounds
+ )}
+
+ """
+ end
+
+ def maybe_render_folder_entry(
+ assigns,
+ has_child_selected?,
+ key,
+ value,
+ selected_component,
+ single_catalogue?,
+ parent_keys,
+ mod_path,
+ examples_and_playgrounds
+ ) do
+ ~F"""
+
+
+
+
+
+ {key}
+
+ {render_node(
+ assigns,
+ value,
+ selected_component,
+ single_catalogue?,
+ mod_path,
+ examples_and_playgrounds
+ )}
+
+ """
+ end
+
defp component_icon(type) do
case type do
Surface.MacroComponent ->
@@ -111,4 +218,12 @@ defmodule Surface.Catalogue.Components.ComponentTree do
has_child_selected?(parent_keys, selected_component) or
(single_catalogue? and length(parent_keys) == 1)
end
+
+ defp has_examples_or_playground?(module, examples_and_playgrounds) do
+ case examples_and_playgrounds[module] do
+ %{examples: [_one | _rest]} -> true
+ %{playgrounds: [_one | _rest]} -> true
+ _ -> false
+ end
+ end
end
diff --git a/lib/surface/catalogue/live/page_live.ex b/lib/surface/catalogue/live/page_live.ex
index 11356bb..0b14372 100644
--- a/lib/surface/catalogue/live/page_live.ex
+++ b/lib/surface/catalogue/live/page_live.ex
@@ -81,6 +81,7 @@ defmodule Surface.Catalogue.PageLive do
components={@components}
selected_component={@component_name}
single_catalogue?={@single_catalogue?}
+ examples_and_playgrounds={@examples_and_playgrounds}
/>