diff --git a/sources/lib/components/station_ui/html/accordion.ex b/sources/lib/components/station_ui/html/accordion.ex
new file mode 100644
index 0000000..8a2f888
--- /dev/null
+++ b/sources/lib/components/station_ui/html/accordion.ex
@@ -0,0 +1,139 @@
+defmodule StationUI.HTML.Accordion do
+ use Phoenix.Component
+
+ import StationUI.HTML.Icons, only: [icon: 1]
+ alias Phoenix.LiveView.JS
+
+ @moduledoc """
+ The accordion component renders a list of items with child content that can be expanded or collapsed.
+
+ ## Example
+
+ <.accordion_set>
+ <:header>
+ Title something 1
+
+ <:content>
+ Content something 1
+
+
+
+ Suggested size classes
+
+ The Default size for accordions is "md" but the size can be change by passing in these additional classes
+ using `header_size_class="..."` and `content_size_class="..."` as follows
+
+ header_size_class:
+
+ sm: "p-1 text-base sm:text-lg gap-x-0.5"
+ md: "p-1 text-base sm:text-lg md:text-xl md:py-1 md:pr-1 md:pl-1.5 md:gap-x-1"
+ lg: "p-1 text-base sm:text-lg md:text-xl lg:text-2xl md:py-1 md:pr-1 md:pl-1.5 lg:pl-2 md:gap-x-1 lg:gap-x-1.5"
+ xl: "p-1 text-base sm:text-lg md:text-xl lg:text-2xl xl:text-3xl md:pt-1 md:pb-0 md:pr-1 md:pl-1.5 lg:pl-4 sm:gap-x-3 md:gap-x-4 lg:gap-x-5"
+
+ content_size_class:
+
+ sm: "text-base"
+ md: "grid transition-grid-rows text-base md:text-lg"
+ lg: "md:text-lg lg:text-xl"
+ xl: "md:text-lg lg:text-xl xl:text-2xl"
+ """
+
+ def accordion(assigns) do
+ ~H"""
+ <.accordion_set>
+ <:header>
+ Title something 1
+
+ <:content>
+ Content something 1
+
+
+ """
+ end
+
+ slot :header, required: true do
+ attr :button_id, :string
+ end
+
+ slot :content, required: true
+ attr :header_size_class, :string, default: "text-base sm:text-lg md:text-xl"
+ attr :content_size_class, :string, default: "text-base md:text-lg"
+ attr :rest, :global
+
+ def accordion_set(assigns) do
+ assigns =
+ assigns
+ |> assign(:header, List.wrap(assigns.header))
+ |> assign(:content, List.wrap(assigns.content))
+ |> assign(:random_id, :rand.uniform(9999))
+ |> assign(:items, Enum.with_index(Enum.zip(List.wrap(assigns.header), List.wrap(assigns.content))))
+
+ ~H"""
+