From 6335fca051bea472dc9c1b0b6017703e614a1507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Caxzilla=E2=80=9D?= Date: Tue, 8 Oct 2024 21:53:20 +0200 Subject: [PATCH] refactor: move icons and compnents into seperate pkg folder --- assets/css/output.css | 4 -- internals/ui/layouts/docs.templ | 2 +- internals/ui/pages/accordion.templ | 2 +- internals/ui/pages/alert.templ | 2 +- internals/ui/pages/avatar.templ | 2 +- internals/ui/pages/button.templ | 4 +- internals/ui/pages/card.templ | 2 +- internals/ui/pages/datepicker.templ | 2 +- internals/ui/pages/icon.templ | 5 +- internals/ui/pages/input.templ | 2 +- internals/ui/pages/landing.templ | 2 +- internals/ui/pages/modal.templ | 2 +- internals/ui/pages/sheet.templ | 2 +- internals/ui/pages/tabs.templ | 2 +- internals/ui/showcase/accordion.templ | 4 +- internals/ui/showcase/alert.templ | 4 +- internals/ui/showcase/avatar.templ | 4 +- internals/ui/showcase/button.templ | 2 +- internals/ui/showcase/card.templ | 2 +- internals/ui/showcase/datepicker.templ | 2 +- internals/ui/showcase/icon.templ | 2 +- internals/ui/showcase/input.templ | 2 +- internals/ui/showcase/modal.templ | 4 +- internals/ui/showcase/sheet.templ | 2 +- internals/ui/showcase/tabs.templ | 4 +- .../ui => pgk}/components/accordion.templ | 0 {internals/ui => pgk}/components/alert.templ | 0 {internals/ui => pgk}/components/avatar.templ | 0 {internals/ui => pgk}/components/button.templ | 0 {internals/ui => pgk}/components/card.templ | 0 .../ui => pgk}/components/datepicker.templ | 0 {internals/ui => pgk}/components/embed.go | 2 +- {internals/ui => pgk}/components/footer.templ | 0 {internals/ui => pgk}/components/icon.templ | 33 +++++------ {internals/ui => pgk}/components/input.templ | 0 {internals/ui => pgk}/components/modal.templ | 0 {internals/ui => pgk}/components/navbar.templ | 0 {internals/ui => pgk}/components/sheet.templ | 0 .../ui => pgk}/components/sidebar.templ | 0 .../ui => pgk}/components/sidebar_right.templ | 0 {internals/ui => pgk}/components/tabs.templ | 0 .../ui => pgk}/components/themeswitcher.templ | 0 pgk/icons/embed.go | 6 ++ .../components => pgk/icons}/icon_contents.go | 4 +- pgk/icons/icons.go | 56 +++++++++++++++++++ 45 files changed, 105 insertions(+), 63 deletions(-) rename {internals/ui => pgk}/components/accordion.templ (100%) rename {internals/ui => pgk}/components/alert.templ (100%) rename {internals/ui => pgk}/components/avatar.templ (100%) rename {internals/ui => pgk}/components/button.templ (100%) rename {internals/ui => pgk}/components/card.templ (100%) rename {internals/ui => pgk}/components/datepicker.templ (100%) rename {internals/ui => pgk}/components/embed.go (62%) rename {internals/ui => pgk}/components/footer.templ (100%) rename {internals/ui => pgk}/components/icon.templ (71%) rename {internals/ui => pgk}/components/input.templ (100%) rename {internals/ui => pgk}/components/modal.templ (100%) rename {internals/ui => pgk}/components/navbar.templ (100%) rename {internals/ui => pgk}/components/sheet.templ (100%) rename {internals/ui => pgk}/components/sidebar.templ (100%) rename {internals/ui => pgk}/components/sidebar_right.templ (100%) rename {internals/ui => pgk}/components/tabs.templ (100%) rename {internals/ui => pgk}/components/themeswitcher.templ (100%) create mode 100644 pgk/icons/embed.go rename {internals/ui/components => pgk/icons}/icon_contents.go (99%) create mode 100644 pgk/icons/icons.go diff --git a/assets/css/output.css b/assets/css/output.css index 94633eb..858ef8f 100644 --- a/assets/css/output.css +++ b/assets/css/output.css @@ -1060,10 +1060,6 @@ body { align-items: flex-start; } -.items-end { - align-items: flex-end; -} - .items-center { align-items: center; } diff --git a/internals/ui/layouts/docs.templ b/internals/ui/layouts/docs.templ index 0fc98b2..c8ab91d 100644 --- a/internals/ui/layouts/docs.templ +++ b/internals/ui/layouts/docs.templ @@ -1,6 +1,6 @@ package layouts -import "github.com/axzilla/goilerplate/internals/ui/components" +import "github.com/axzilla/goilerplate/pgk/components" templ DocsLayout() { @BaseLayout() { diff --git a/internals/ui/pages/accordion.templ b/internals/ui/pages/accordion.templ index 263c16a..0829298 100644 --- a/internals/ui/pages/accordion.templ +++ b/internals/ui/pages/accordion.templ @@ -2,9 +2,9 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" ) templ Accordion() { diff --git a/internals/ui/pages/alert.templ b/internals/ui/pages/alert.templ index 11486f5..dc89fca 100644 --- a/internals/ui/pages/alert.templ +++ b/internals/ui/pages/alert.templ @@ -1,9 +1,9 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" ) templ Alert() { diff --git a/internals/ui/pages/avatar.templ b/internals/ui/pages/avatar.templ index b7e4501..cb2a3b0 100644 --- a/internals/ui/pages/avatar.templ +++ b/internals/ui/pages/avatar.templ @@ -1,9 +1,9 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" ) templ Avatar() { diff --git a/internals/ui/pages/button.templ b/internals/ui/pages/button.templ index c648746..b201ece 100644 --- a/internals/ui/pages/button.templ +++ b/internals/ui/pages/button.templ @@ -1,10 +1,10 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" + "embed" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" - "embed" + "github.com/axzilla/goilerplate/pgk/components" ) templ Button() { diff --git a/internals/ui/pages/card.templ b/internals/ui/pages/card.templ index 1af88f1..f3b6a05 100644 --- a/internals/ui/pages/card.templ +++ b/internals/ui/pages/card.templ @@ -1,9 +1,9 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" ) templ Card() { diff --git a/internals/ui/pages/datepicker.templ b/internals/ui/pages/datepicker.templ index 75870fd..2d3a39d 100644 --- a/internals/ui/pages/datepicker.templ +++ b/internals/ui/pages/datepicker.templ @@ -1,9 +1,9 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" ) templ Datepicker() { diff --git a/internals/ui/pages/icon.templ b/internals/ui/pages/icon.templ index 9358804..dba6a37 100644 --- a/internals/ui/pages/icon.templ +++ b/internals/ui/pages/icon.templ @@ -1,9 +1,10 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" + "github.com/axzilla/goilerplate/pgk/icons" ) templ Icon() { @@ -35,7 +36,7 @@ templ Icon() { { ID: "icons", Title: "Icons", - Content: CodeSnippetFromEmbedded("icon_contents.go", "go", components.TemplFiles), + Content: CodeSnippetFromEmbedded("icon_contents.go", "go", icons.TemplFiles), }, }, TabsContainerClass: "md:w-1/2", diff --git a/internals/ui/pages/input.templ b/internals/ui/pages/input.templ index 227dea7..77a0046 100644 --- a/internals/ui/pages/input.templ +++ b/internals/ui/pages/input.templ @@ -1,9 +1,9 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" ) templ Input() { diff --git a/internals/ui/pages/landing.templ b/internals/ui/pages/landing.templ index 8d89cd6..9f21ab6 100644 --- a/internals/ui/pages/landing.templ +++ b/internals/ui/pages/landing.templ @@ -1,8 +1,8 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" + "github.com/axzilla/goilerplate/pgk/components" ) templ Landing() { diff --git a/internals/ui/pages/modal.templ b/internals/ui/pages/modal.templ index 619d32f..6ea32ef 100644 --- a/internals/ui/pages/modal.templ +++ b/internals/ui/pages/modal.templ @@ -1,9 +1,9 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" ) templ Modal() { diff --git a/internals/ui/pages/sheet.templ b/internals/ui/pages/sheet.templ index 976706f..e33d057 100644 --- a/internals/ui/pages/sheet.templ +++ b/internals/ui/pages/sheet.templ @@ -1,9 +1,9 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" ) templ Sheet() { diff --git a/internals/ui/pages/tabs.templ b/internals/ui/pages/tabs.templ index c5a7960..79e2037 100644 --- a/internals/ui/pages/tabs.templ +++ b/internals/ui/pages/tabs.templ @@ -1,9 +1,9 @@ package pages import ( - "github.com/axzilla/goilerplate/internals/ui/components" "github.com/axzilla/goilerplate/internals/ui/layouts" "github.com/axzilla/goilerplate/internals/ui/showcase" + "github.com/axzilla/goilerplate/pgk/components" ) templ Tabs() { diff --git a/internals/ui/showcase/accordion.templ b/internals/ui/showcase/accordion.templ index f92d231..9e604d5 100644 --- a/internals/ui/showcase/accordion.templ +++ b/internals/ui/showcase/accordion.templ @@ -1,9 +1,7 @@ package showcase -import ( - "github.com/axzilla/goilerplate/internals/ui/components" -) +import "github.com/axzilla/goilerplate/pgk/components" templ AccordionShowcase() {
diff --git a/internals/ui/showcase/alert.templ b/internals/ui/showcase/alert.templ index 3fbcd6e..b7c1d9a 100644 --- a/internals/ui/showcase/alert.templ +++ b/internals/ui/showcase/alert.templ @@ -1,8 +1,6 @@ package showcase -import ( - "github.com/axzilla/goilerplate/internals/ui/components" -) +import "github.com/axzilla/goilerplate/pgk/components" templ RocketIcon() { diff --git a/internals/ui/showcase/avatar.templ b/internals/ui/showcase/avatar.templ index b402ade..1afe8d0 100644 --- a/internals/ui/showcase/avatar.templ +++ b/internals/ui/showcase/avatar.templ @@ -1,8 +1,6 @@ package showcase -import ( - "github.com/axzilla/goilerplate/internals/ui/components" -) +import "github.com/axzilla/goilerplate/pgk/components" templ AvatarShowcase() {
diff --git a/internals/ui/showcase/button.templ b/internals/ui/showcase/button.templ index e745943..493e5b7 100644 --- a/internals/ui/showcase/button.templ +++ b/internals/ui/showcase/button.templ @@ -1,6 +1,6 @@ package showcase -import "github.com/axzilla/goilerplate/internals/ui/components" +import "github.com/axzilla/goilerplate/pgk/components" templ ButtonShowcase() {
diff --git a/internals/ui/showcase/card.templ b/internals/ui/showcase/card.templ index aa5625f..35b4cce 100644 --- a/internals/ui/showcase/card.templ +++ b/internals/ui/showcase/card.templ @@ -1,6 +1,6 @@ package showcase -import "github.com/axzilla/goilerplate/internals/ui/components" +import "github.com/axzilla/goilerplate/pgk/components" templ CardShowcase() {
diff --git a/internals/ui/showcase/datepicker.templ b/internals/ui/showcase/datepicker.templ index 3f762be..cc16da7 100644 --- a/internals/ui/showcase/datepicker.templ +++ b/internals/ui/showcase/datepicker.templ @@ -1,6 +1,6 @@ package showcase -import "github.com/axzilla/goilerplate/internals/ui/components" +import "github.com/axzilla/goilerplate/pgk/components" templ DatepickerShowcase() {
diff --git a/internals/ui/showcase/icon.templ b/internals/ui/showcase/icon.templ index 14571c4..97e7848 100644 --- a/internals/ui/showcase/icon.templ +++ b/internals/ui/showcase/icon.templ @@ -1,6 +1,6 @@ package showcase -import "github.com/axzilla/goilerplate/internals/ui/components" +import "github.com/axzilla/goilerplate/pgk/components" templ IconShowcase() {
diff --git a/internals/ui/showcase/input.templ b/internals/ui/showcase/input.templ index d932dc8..551f16f 100644 --- a/internals/ui/showcase/input.templ +++ b/internals/ui/showcase/input.templ @@ -1,6 +1,6 @@ package showcase -import "github.com/axzilla/goilerplate/internals/ui/components" +import "github.com/axzilla/goilerplate/pgk/components" templ InputShowcase() {
diff --git a/internals/ui/showcase/modal.templ b/internals/ui/showcase/modal.templ index 757660c..2bfb086 100644 --- a/internals/ui/showcase/modal.templ +++ b/internals/ui/showcase/modal.templ @@ -1,8 +1,6 @@ package showcase -import ( - "github.com/axzilla/goilerplate/internals/ui/components" -) +import "github.com/axzilla/goilerplate/pgk/components" templ ModalShowcase() {
diff --git a/internals/ui/showcase/sheet.templ b/internals/ui/showcase/sheet.templ index 88dfcac..d941399 100644 --- a/internals/ui/showcase/sheet.templ +++ b/internals/ui/showcase/sheet.templ @@ -1,6 +1,6 @@ package showcase -import "github.com/axzilla/goilerplate/internals/ui/components" +import "github.com/axzilla/goilerplate/pgk/components" var sides = []components.SheetSide{ components.Left, diff --git a/internals/ui/showcase/tabs.templ b/internals/ui/showcase/tabs.templ index e0e6c62..819c073 100644 --- a/internals/ui/showcase/tabs.templ +++ b/internals/ui/showcase/tabs.templ @@ -1,8 +1,6 @@ package showcase -import ( - "github.com/axzilla/goilerplate/internals/ui/components" -) +import "github.com/axzilla/goilerplate/pgk/components" templ TabsShowcase() {
diff --git a/internals/ui/components/accordion.templ b/pgk/components/accordion.templ similarity index 100% rename from internals/ui/components/accordion.templ rename to pgk/components/accordion.templ diff --git a/internals/ui/components/alert.templ b/pgk/components/alert.templ similarity index 100% rename from internals/ui/components/alert.templ rename to pgk/components/alert.templ diff --git a/internals/ui/components/avatar.templ b/pgk/components/avatar.templ similarity index 100% rename from internals/ui/components/avatar.templ rename to pgk/components/avatar.templ diff --git a/internals/ui/components/button.templ b/pgk/components/button.templ similarity index 100% rename from internals/ui/components/button.templ rename to pgk/components/button.templ diff --git a/internals/ui/components/card.templ b/pgk/components/card.templ similarity index 100% rename from internals/ui/components/card.templ rename to pgk/components/card.templ diff --git a/internals/ui/components/datepicker.templ b/pgk/components/datepicker.templ similarity index 100% rename from internals/ui/components/datepicker.templ rename to pgk/components/datepicker.templ diff --git a/internals/ui/components/embed.go b/pgk/components/embed.go similarity index 62% rename from internals/ui/components/embed.go rename to pgk/components/embed.go index 0ded788..0d03be0 100644 --- a/internals/ui/components/embed.go +++ b/pgk/components/embed.go @@ -2,5 +2,5 @@ package components import "embed" -//go:embed *.templ icon_contents.go +//go:embed *.templ var TemplFiles embed.FS diff --git a/internals/ui/components/footer.templ b/pgk/components/footer.templ similarity index 100% rename from internals/ui/components/footer.templ rename to pgk/components/footer.templ diff --git a/internals/ui/components/icon.templ b/pgk/components/icon.templ similarity index 71% rename from internals/ui/components/icon.templ rename to pgk/components/icon.templ index 15e5d50..f8f9c47 100644 --- a/internals/ui/components/icon.templ +++ b/pgk/components/icon.templ @@ -1,9 +1,6 @@ package components -import ( - "fmt" - "strings" -) +import "github.com/axzilla/goilerplate/pgk/icons" // IconProps defines the properties for the Icon component. type IconProps struct { @@ -47,13 +44,15 @@ func getStroke(stroke, color string) string { return getColor(color) } -// getClasses generates the class string for the icon. -func getClasses(name, class string) string { - classes := []string{"lucide", "lucide-" + strings.ToLower(name)} - if class != "" { - classes = append(classes, class) - } - return strings.Join(classes, " ") +// GenerateSVG generates the SVG for the icon +func (props IconProps) GenerateSVG() (string, bool) { + return icons.GenerateSVG( + props.Name, + getSize(props.Size), + getFill(props.Fill), + getStroke(props.Stroke, props.Color), + props.Class, + ) } // Icon renders a Lucide icon as an SVG element. @@ -69,14 +68,8 @@ func getClasses(name, class string) string { // Class: "my-icon-class", // }) templ Icon(props IconProps) { - if content, ok := iconContents[props.Name]; ok && content != "" { - @templ.Raw(fmt.Sprintf(`%s`, - getSize(props.Size), - getSize(props.Size), - getFill(props.Fill), - getStroke(props.Stroke, props.Color), - getClasses(props.Name, props.Class), - content)) + if svg, ok := props.GenerateSVG(); ok { + @templ.Raw(svg) } else { diff --git a/internals/ui/components/input.templ b/pgk/components/input.templ similarity index 100% rename from internals/ui/components/input.templ rename to pgk/components/input.templ diff --git a/internals/ui/components/modal.templ b/pgk/components/modal.templ similarity index 100% rename from internals/ui/components/modal.templ rename to pgk/components/modal.templ diff --git a/internals/ui/components/navbar.templ b/pgk/components/navbar.templ similarity index 100% rename from internals/ui/components/navbar.templ rename to pgk/components/navbar.templ diff --git a/internals/ui/components/sheet.templ b/pgk/components/sheet.templ similarity index 100% rename from internals/ui/components/sheet.templ rename to pgk/components/sheet.templ diff --git a/internals/ui/components/sidebar.templ b/pgk/components/sidebar.templ similarity index 100% rename from internals/ui/components/sidebar.templ rename to pgk/components/sidebar.templ diff --git a/internals/ui/components/sidebar_right.templ b/pgk/components/sidebar_right.templ similarity index 100% rename from internals/ui/components/sidebar_right.templ rename to pgk/components/sidebar_right.templ diff --git a/internals/ui/components/tabs.templ b/pgk/components/tabs.templ similarity index 100% rename from internals/ui/components/tabs.templ rename to pgk/components/tabs.templ diff --git a/internals/ui/components/themeswitcher.templ b/pgk/components/themeswitcher.templ similarity index 100% rename from internals/ui/components/themeswitcher.templ rename to pgk/components/themeswitcher.templ diff --git a/pgk/icons/embed.go b/pgk/icons/embed.go new file mode 100644 index 0000000..2036d6f --- /dev/null +++ b/pgk/icons/embed.go @@ -0,0 +1,6 @@ +package icons + +import "embed" + +//go:embed icon_contents.go +var TemplFiles embed.FS diff --git a/internals/ui/components/icon_contents.go b/pgk/icons/icon_contents.go similarity index 99% rename from internals/ui/components/icon_contents.go rename to pgk/icons/icon_contents.go index 8aa1d76..8f8b242 100644 --- a/internals/ui/components/icon_contents.go +++ b/pgk/icons/icon_contents.go @@ -1,7 +1,7 @@ // Lucide - New icons 0.451.0 -package components +package icons -var iconContents = map[string]string{ +var IconContent = map[string]string{ "a-arrow-down": ` diff --git a/pgk/icons/icons.go b/pgk/icons/icons.go new file mode 100644 index 0000000..fe1ad8d --- /dev/null +++ b/pgk/icons/icons.go @@ -0,0 +1,56 @@ +package icons + +import ( + "fmt" + "strings" +) + +// Get returns the SVG content for a given icon name +func Get(name string) (string, bool) { + content, ok := IconContent[name] + return content, ok +} + +// List returns a slice of all available icon names +func List() []string { + var names []string + for name := range IconContent { + names = append(names, name) + } + return names +} + +// GetClasses generates the class string for the icon +func GetClasses(name, class string) string { + classes := []string{"lucide", "lucide-" + strings.ToLower(name)} + if class != "" { + classes = append(classes, class) + } + return strings.Join(classes, " ") +} + +// In pkg/icons/icons.go +func GenerateSVG(name, size, fill, stroke, class string) (string, bool) { + content, ok := Get(name) + if !ok { + return "", false + } + svg := fmt.Sprintf(`%s`, + size, + size, + fill, + stroke, + GetClasses(name, class), + content) + return svg, true +}