avances en tablas
This commit is contained in:
parent
65f7715b05
commit
cc0c524337
7 changed files with 339 additions and 255 deletions
|
|
@ -69,21 +69,28 @@ func TablerNavbar(c *core.Context) *core.Response {
|
|||
return c.Response.Template("tabler_default.html", data)
|
||||
}
|
||||
|
||||
// TablerTables renders a page with table components
|
||||
// TablerTables renders a page with table components.
|
||||
// Uses a page-specific struct that embeds TablerPageData and adds the Tables field.
|
||||
// The template detects tables via hasField and renders them.
|
||||
func TablerTables(c *core.Context) *core.Response {
|
||||
data := TablerPageData{
|
||||
PageTitle: "Tables",
|
||||
PageDescription: "Table demo page",
|
||||
ShowTopbar: true,
|
||||
Sidebar: false,
|
||||
PageHeader: "Tables",
|
||||
PagePretitle: "Components",
|
||||
UserName: "Jane Doe",
|
||||
UserRole: "Administrator",
|
||||
NavbarMenu: SampleNavbarMenu(),
|
||||
TableHeaders: SampleTableHeaders(),
|
||||
TableRows: SampleTableRows(),
|
||||
Content: template.HTML(""),
|
||||
type tablesPageData struct {
|
||||
TablerPageData
|
||||
Tables []TableComponent
|
||||
}
|
||||
data := tablesPageData{
|
||||
TablerPageData: TablerPageData{
|
||||
PageTitle: "Tables",
|
||||
PageDescription: "Table demo page",
|
||||
ShowTopbar: true,
|
||||
Sidebar: false,
|
||||
PageHeader: "Tables",
|
||||
PagePretitle: "Components",
|
||||
UserName: "Jane Doe",
|
||||
UserRole: "Administrator",
|
||||
NavbarMenu: SampleNavbarMenu(),
|
||||
Content: template.HTML(""),
|
||||
},
|
||||
Tables: SampleTables(),
|
||||
}
|
||||
return c.Response.Template("tabler_tables.html", data)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,133 +44,173 @@ func SampleNavbarMenu() TablerMenu {
|
|||
}
|
||||
}
|
||||
|
||||
// SampleTableRows returns sample data for table demos
|
||||
// Migrated from liquid/data/people.json
|
||||
func SampleTableRows() []TableRow {
|
||||
return []TableRow{
|
||||
{
|
||||
ID: "1",
|
||||
Name: "Paweł Kuna",
|
||||
AvatarID: "000m",
|
||||
Email: "paweluna@howstuffworks.com",
|
||||
City: "Peimei",
|
||||
Country: "China",
|
||||
Status: "VIP",
|
||||
JobTitle: "UI Designer",
|
||||
Department: "Training",
|
||||
Date: "2025-04-07",
|
||||
Tags: []string{"High Volume"},
|
||||
Category: "Training",
|
||||
// SampleTables returns two sample table components for the tables demo page.
|
||||
// Table 1: Users table (avatar, name, city, status, date, tags, category).
|
||||
// Table 2: Projects table (name, description, progress, priority, assignee, deadline).
|
||||
func SampleTables() []TableComponent {
|
||||
table1 := TableComponent{
|
||||
ID: "users-table",
|
||||
Title: "Users",
|
||||
Striped: false,
|
||||
Hover: true,
|
||||
Headers: []TableComponentHeader{
|
||||
{Name: "Name", Sort: "sort-name"},
|
||||
{Name: "City", Sort: "sort-city"},
|
||||
{Name: "Status", Sort: "sort-status"},
|
||||
{Name: "Start date", Sort: "sort-date"},
|
||||
{Name: "Tags", Sort: "sort-tags"},
|
||||
{Name: "Category", Sort: "sort-category"},
|
||||
},
|
||||
{
|
||||
ID: "2",
|
||||
Name: "Jeffie Lewzey",
|
||||
AvatarID: "052f",
|
||||
Email: "jlewzey1@seesaa.net",
|
||||
City: "Indaial",
|
||||
Country: "Brazil",
|
||||
Status: "New",
|
||||
JobTitle: "Chemical Engineer",
|
||||
Department: "Support",
|
||||
Date: "2024-12-12",
|
||||
Tags: []string{"No Refunds"},
|
||||
Category: "Support",
|
||||
},
|
||||
{
|
||||
ID: "3",
|
||||
Name: "Mallory Hulme",
|
||||
AvatarID: "002m",
|
||||
Email: "mhulme2@domainmarket.com",
|
||||
City: "Cimuncang",
|
||||
Country: "Indonesia",
|
||||
Status: "VIP",
|
||||
JobTitle: "Geologist IV",
|
||||
Department: "Support",
|
||||
Date: "2025-01-09",
|
||||
Tags: []string{"High Value", "No Refunds", "Loyal"},
|
||||
Category: "Support",
|
||||
},
|
||||
{
|
||||
ID: "4",
|
||||
Name: "Dunn Slane",
|
||||
AvatarID: "003m",
|
||||
Email: "dslane3@epa.gov",
|
||||
City: "Liutang",
|
||||
Country: "China",
|
||||
Status: "Regular",
|
||||
JobTitle: "Research Nurse",
|
||||
Department: "Sales",
|
||||
Date: "2022-10-01",
|
||||
Tags: []string{"No Refunds"},
|
||||
Category: "Sales",
|
||||
},
|
||||
{
|
||||
ID: "5",
|
||||
Name: "Emmy Levet",
|
||||
AvatarID: "000f",
|
||||
Email: "elevet4@senate.gov",
|
||||
City: "Kaliprak",
|
||||
Country: "Indonesia",
|
||||
Status: "Regular",
|
||||
JobTitle: "VP Product Management",
|
||||
Department: "Accounting",
|
||||
Date: "2025-05-18",
|
||||
Tags: []string{"Standard"},
|
||||
Category: "Accounting",
|
||||
},
|
||||
{
|
||||
ID: "6",
|
||||
Name: "Maryjo Lebarree",
|
||||
AvatarID: "001f",
|
||||
Email: "mlebarree5@unc.edu",
|
||||
City: "Hantai",
|
||||
Country: "China",
|
||||
Status: "Regular",
|
||||
JobTitle: "Civil Engineer",
|
||||
Department: "Product Management",
|
||||
Date: "2025-06-06",
|
||||
Tags: []string{"No Refunds", "Loyal"},
|
||||
Category: "Product Management",
|
||||
},
|
||||
{
|
||||
ID: "7",
|
||||
Name: "Egan Poetz",
|
||||
AvatarID: "004m",
|
||||
Email: "epoetz6@free.fr",
|
||||
City: "Villaguay",
|
||||
Country: "Argentina",
|
||||
Status: "New",
|
||||
JobTitle: "Research Nurse",
|
||||
Department: "Engineering",
|
||||
Date: "2024-08-21",
|
||||
Tags: []string{"No Refunds"},
|
||||
Category: "Engineering",
|
||||
},
|
||||
{
|
||||
ID: "8",
|
||||
Name: "Kellie Skingley",
|
||||
AvatarID: "002f",
|
||||
Email: "kskingley7@columbia.edu",
|
||||
City: "Sidon",
|
||||
Country: "Lebanon",
|
||||
Status: "VIP",
|
||||
JobTitle: "Teacher",
|
||||
Department: "Services",
|
||||
Date: "2025-02-23",
|
||||
Tags: []string{"No Refunds", "Loyal"},
|
||||
Category: "Services",
|
||||
Rows: []TableComponentRow{
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "avatar", Value: "Paweł Kuna", AvatarID: "000m", Subtext: "paweluna@howstuffworks.com"},
|
||||
{Type: "text", Value: "Peimei, China"},
|
||||
{Type: "status", Value: "VIP", StatusColor: "bg-blue"},
|
||||
{Type: "date", Value: "2025-04-07"},
|
||||
{Type: "tags", Tags: []string{"High Volume"}},
|
||||
{Type: "badge", Value: "Training", BadgeColor: "bg-muted-lt"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "avatar", Value: "Jeffie Lewzey", AvatarID: "052f", Subtext: "jlewzey1@seesaa.net"},
|
||||
{Type: "text", Value: "Indaial, Brazil"},
|
||||
{Type: "status", Value: "New", StatusColor: "bg-green"},
|
||||
{Type: "date", Value: "2024-12-12"},
|
||||
{Type: "tags", Tags: []string{"No Refunds"}},
|
||||
{Type: "badge", Value: "Support", BadgeColor: "bg-blue-lt"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "avatar", Value: "Mallory Hulme", AvatarID: "002m", Subtext: "mhulme2@domainmarket.com"},
|
||||
{Type: "text", Value: "Cimuncang, Indonesia"},
|
||||
{Type: "status", Value: "VIP", StatusColor: "bg-blue"},
|
||||
{Type: "date", Value: "2025-01-09"},
|
||||
{Type: "tags", Tags: []string{"High Value", "No Refunds", "Loyal"}},
|
||||
{Type: "badge", Value: "Support", BadgeColor: "bg-blue-lt"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "avatar", Value: "Dunn Slane", AvatarID: "003m", Subtext: "dslane3@epa.gov"},
|
||||
{Type: "text", Value: "Liutang, China"},
|
||||
{Type: "status", Value: "Regular", StatusColor: "bg-muted"},
|
||||
{Type: "date", Value: "2022-10-01"},
|
||||
{Type: "tags", Tags: []string{"No Refunds"}},
|
||||
{Type: "badge", Value: "Sales", BadgeColor: "bg-green-lt"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "avatar", Value: "Emmy Levet", AvatarID: "000f", Subtext: "elevet4@senate.gov"},
|
||||
{Type: "text", Value: "Kaliprak, Indonesia"},
|
||||
{Type: "status", Value: "Regular", StatusColor: "bg-muted"},
|
||||
{Type: "date", Value: "2025-05-18"},
|
||||
{Type: "tags", Tags: []string{"Standard"}},
|
||||
{Type: "badge", Value: "Accounting", BadgeColor: "bg-yellow-lt"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "avatar", Value: "Maryjo Lebarree", AvatarID: "001f", Subtext: "mlebarree5@unc.edu"},
|
||||
{Type: "text", Value: "Hantai, China"},
|
||||
{Type: "status", Value: "Regular", StatusColor: "bg-muted"},
|
||||
{Type: "date", Value: "2025-06-06"},
|
||||
{Type: "tags", Tags: []string{"No Refunds", "Loyal"}},
|
||||
{Type: "badge", Value: "Product Management", BadgeColor: "bg-orange-lt"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "avatar", Value: "Egan Poetz", AvatarID: "004m", Subtext: "epoetz6@free.fr"},
|
||||
{Type: "text", Value: "Villaguay, Argentina"},
|
||||
{Type: "status", Value: "New", StatusColor: "bg-green"},
|
||||
{Type: "date", Value: "2024-08-21"},
|
||||
{Type: "tags", Tags: []string{"No Refunds"}},
|
||||
{Type: "badge", Value: "Engineering", BadgeColor: "bg-blue-lt"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "avatar", Value: "Kellie Skingley", AvatarID: "002f", Subtext: "kskingley7@columbia.edu"},
|
||||
{Type: "text", Value: "Sidon, Lebanon"},
|
||||
{Type: "status", Value: "VIP", StatusColor: "bg-blue"},
|
||||
{Type: "date", Value: "2025-02-23"},
|
||||
{Type: "tags", Tags: []string{"No Refunds", "Loyal"}},
|
||||
{Type: "badge", Value: "Services", BadgeColor: "bg-purple-lt"},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// SampleTableHeaders returns headers for the advanced table
|
||||
func SampleTableHeaders() []TableHeader {
|
||||
return []TableHeader{
|
||||
{Name: "Name", Sort: "sort-name"},
|
||||
{Name: "City", Sort: "sort-city"},
|
||||
{Name: "Status", Sort: "sort-status"},
|
||||
{Name: "Start date", Sort: "sort-date"},
|
||||
{Name: "Tags", Sort: "sort-tags"},
|
||||
{Name: "Category", Sort: "sort-category"},
|
||||
table2 := TableComponent{
|
||||
ID: "projects-table",
|
||||
Title: "Projects",
|
||||
Striped: true,
|
||||
Hover: true,
|
||||
Headers: []TableComponentHeader{
|
||||
{Name: "Project", Sort: "sort-project"},
|
||||
{Name: "Progress", Sort: "sort-progress"},
|
||||
{Name: "Priority"},
|
||||
{Name: "Assignee", Sort: "sort-assignee"},
|
||||
{Name: "Deadline", Sort: "sort-deadline"},
|
||||
{Name: "", Width: "w-1"},
|
||||
},
|
||||
Rows: []TableComponentRow{
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "text", Value: "Tabler UI Kit"},
|
||||
{Type: "text", Value: "75%"},
|
||||
{Type: "badge", Value: "High", BadgeColor: "bg-red-lt"},
|
||||
{Type: "avatar", Value: "Paweł Kuna", AvatarID: "000m", Subtext: "Lead Designer"},
|
||||
{Type: "date", Value: "2025-06-30"},
|
||||
{Type: "actions"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "text", Value: "Mobile App v2"},
|
||||
{Type: "text", Value: "45%"},
|
||||
{Type: "badge", Value: "Medium", BadgeColor: "bg-yellow-lt"},
|
||||
{Type: "avatar", Value: "Jeffie Lewzey", AvatarID: "052f", Subtext: "Developer"},
|
||||
{Type: "date", Value: "2025-07-15"},
|
||||
{Type: "actions"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "text", Value: "API Gateway"},
|
||||
{Type: "text", Value: "90%"},
|
||||
{Type: "badge", Value: "Low", BadgeColor: "bg-green-lt"},
|
||||
{Type: "avatar", Value: "Mallory Hulme", AvatarID: "002m", Subtext: "Backend Engineer"},
|
||||
{Type: "date", Value: "2025-05-01"},
|
||||
{Type: "actions"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "text", Value: "Admin Dashboard"},
|
||||
{Type: "text", Value: "30%"},
|
||||
{Type: "badge", Value: "Critical", BadgeColor: "bg-red-lt"},
|
||||
{Type: "avatar", Value: "Dunn Slane", AvatarID: "003m", Subtext: "Frontend Dev"},
|
||||
{Type: "date", Value: "2025-08-20"},
|
||||
{Type: "actions"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Cells: []TableCell{
|
||||
{Type: "text", Value: "Data Pipeline"},
|
||||
{Type: "text", Value: "60%"},
|
||||
{Type: "badge", Value: "Medium", BadgeColor: "bg-yellow-lt"},
|
||||
{Type: "avatar", Value: "Emmy Levet", AvatarID: "000f", Subtext: "Data Engineer"},
|
||||
{Type: "date", Value: "2025-06-15"},
|
||||
{Type: "actions"},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return []TableComponent{table1, table2}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,30 +17,60 @@ type TablerMenuItem struct {
|
|||
// TablerMenu is a map of menu sections keyed by identifier
|
||||
type TablerMenu map[string]*TablerMenuItem
|
||||
|
||||
// TableHeader represents a column header
|
||||
type TableHeader struct {
|
||||
// TableComponent represents a reusable table component with headers and rows.
|
||||
type TableComponent struct {
|
||||
ID string
|
||||
Title string
|
||||
Headers []TableComponentHeader
|
||||
Rows []TableComponentRow
|
||||
EmptyMessage string
|
||||
PerPageOptions []string
|
||||
Striped bool
|
||||
Hover bool
|
||||
CardClass string
|
||||
TableClass string
|
||||
}
|
||||
|
||||
// TableComponentHeader defines a single column header.
|
||||
type TableComponentHeader struct {
|
||||
Name string
|
||||
Sort string
|
||||
Width string
|
||||
Align string
|
||||
}
|
||||
|
||||
// TableRow represents a single row of mock data
|
||||
type TableRow struct {
|
||||
ID string
|
||||
Name string
|
||||
AvatarID string
|
||||
Email string
|
||||
City string
|
||||
Country string
|
||||
Status string
|
||||
JobTitle string
|
||||
Department string
|
||||
Date string
|
||||
Tags []string
|
||||
Category string
|
||||
// TableComponentRow represents a single row as a slice of cells.
|
||||
type TableComponentRow struct {
|
||||
Cells []TableCell
|
||||
}
|
||||
|
||||
// TablerPageData holds the common data for all tabler pages
|
||||
// TableCell represents a single cell in a table row.
|
||||
// Type controls how the cell is rendered in the template:
|
||||
// "text" - plain text
|
||||
// "avatar" - avatar with name/email
|
||||
// "status" - status dot + text
|
||||
// "badge" - colored badge
|
||||
// "tags" - list of tag badges
|
||||
// "actions" - dropdown action button
|
||||
// "date" - date display
|
||||
type TableCell struct {
|
||||
Type string
|
||||
Value string
|
||||
// Used by "avatar" type
|
||||
AvatarID string
|
||||
Subtext string
|
||||
// Used by "status" type
|
||||
StatusColor string
|
||||
// Used by "badge" type
|
||||
BadgeColor string
|
||||
// Used by "tags" type
|
||||
Tags []string
|
||||
}
|
||||
|
||||
// TablerPageData holds the common data for all tabler pages.
|
||||
// It should NOT contain component-specific fields like tables or forms.
|
||||
// Add those by creating a page-specific struct that embeds TablerPageData
|
||||
// and defines the component fields, then use hasField in the template.
|
||||
type TablerPageData struct {
|
||||
PageTitle string
|
||||
PageDescription string
|
||||
|
|
@ -60,8 +90,4 @@ type TablerPageData struct {
|
|||
UserRole string
|
||||
NavbarMenu TablerMenu
|
||||
CurrentPage string
|
||||
// Table data
|
||||
TableHeaders []TableHeader
|
||||
TableRows []TableRow
|
||||
PerPageOptions []string
|
||||
}
|
||||
|
|
|
|||
46
go.mod
46
go.mod
|
|
@ -1,63 +1,65 @@
|
|||
module git.smarteching.com/jacs/goffeetabler
|
||||
|
||||
replace (
|
||||
git.smarteching.com/goffee/core => ../core
|
||||
git.smarteching.com/jacs/goffeetabler/config => ./config
|
||||
git.smarteching.com/jacs/goffeetabler/handlers => ./handlers
|
||||
git.smarteching.com/jacs/goffeetabler/middlewares => ./middlewares
|
||||
git.smarteching.com/jacs/goffeetabler/models => ./models
|
||||
)
|
||||
|
||||
go 1.24.1
|
||||
go 1.25.0
|
||||
|
||||
require (
|
||||
git.smarteching.com/goffee/core v1.9.5
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/hibiken/asynq v0.25.1
|
||||
github.com/hibiken/asynq v0.26.0
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/julienschmidt/httprouter v1.3.0
|
||||
gorm.io/gorm v1.30.0
|
||||
gorm.io/gorm v1.31.1
|
||||
)
|
||||
|
||||
require (
|
||||
filippo.io/edwards25519 v1.1.0 // indirect
|
||||
filippo.io/edwards25519 v1.2.0 // indirect
|
||||
git.smarteching.com/zeni/go-chart/v2 v2.1.4 // indirect
|
||||
git.smarteching.com/zeni/go-charts/v2 v2.6.11 // indirect
|
||||
github.com/SparkPost/gosparkpost v0.2.0 // indirect
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/go-chi/chi/v5 v5.2.2 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/go-chi/chi/v5 v5.2.5 // indirect
|
||||
github.com/go-ozzo/ozzo-validation v3.6.0+incompatible // indirect
|
||||
github.com/go-sql-driver/mysql v1.9.3 // indirect
|
||||
github.com/golang-jwt/jwt/v5 v5.2.3 // indirect
|
||||
github.com/go-sql-driver/mysql v1.10.0 // indirect
|
||||
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||
github.com/harranali/mailing v1.2.0 // indirect
|
||||
github.com/jackc/pgpassfile v1.0.0 // indirect
|
||||
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
||||
github.com/jackc/pgx/v5 v5.7.5 // indirect
|
||||
github.com/jackc/pgx/v5 v5.9.2 // indirect
|
||||
github.com/jackc/puddle/v2 v2.2.2 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/jinzhu/now v1.1.5 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/mailgun/errors v0.4.0 // indirect
|
||||
github.com/mailgun/errors v0.5.0 // indirect
|
||||
github.com/mailgun/mailgun-go/v4 v4.23.0 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.28 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.44 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/redis/go-redis/v9 v9.11.0 // indirect
|
||||
github.com/redis/go-redis/v9 v9.19.0 // indirect
|
||||
github.com/robfig/cron/v3 v3.0.1 // indirect
|
||||
github.com/sendgrid/rest v2.6.9+incompatible // indirect
|
||||
github.com/sendgrid/sendgrid-go v3.16.1+incompatible // indirect
|
||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||
github.com/spf13/cast v1.9.2 // indirect
|
||||
golang.org/x/crypto v0.40.0 // indirect
|
||||
golang.org/x/image v0.29.0 // indirect
|
||||
golang.org/x/net v0.42.0 // indirect
|
||||
golang.org/x/sync v0.16.0 // indirect
|
||||
golang.org/x/sys v0.34.0 // indirect
|
||||
golang.org/x/text v0.27.0 // indirect
|
||||
golang.org/x/time v0.12.0 // indirect
|
||||
google.golang.org/protobuf v1.36.6 // indirect
|
||||
github.com/spf13/cast v1.10.0 // indirect
|
||||
go.uber.org/atomic v1.11.0 // indirect
|
||||
golang.org/x/crypto v0.50.0 // indirect
|
||||
golang.org/x/image v0.39.0 // indirect
|
||||
golang.org/x/net v0.53.0 // indirect
|
||||
golang.org/x/sync v0.20.0 // indirect
|
||||
golang.org/x/sys v0.43.0 // indirect
|
||||
golang.org/x/text v0.36.0 // indirect
|
||||
golang.org/x/time v0.15.0 // indirect
|
||||
google.golang.org/protobuf v1.36.11 // indirect
|
||||
gorm.io/driver/mysql v1.6.0 // indirect
|
||||
gorm.io/driver/postgres v1.6.0 // indirect
|
||||
gorm.io/driver/sqlite v1.6.0 // indirect
|
||||
|
|
|
|||
99
go.sum
99
go.sum
|
|
@ -1,9 +1,9 @@
|
|||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||
git.smarteching.com/goffee/core v1.9.5 h1:rq6vI4WSUMGQNzJvhNWmtY2ycC7UszEvXpQ7uUR8sZY=
|
||||
git.smarteching.com/goffee/core v1.9.5/go.mod h1:ifiBgTOR4zCMzdGsabNrEO792EHny2o149NGe3TSlms=
|
||||
filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo=
|
||||
filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc=
|
||||
git.smarteching.com/zeni/go-chart/v2 v2.1.4 h1:pF06+F6eqJLIG8uMiTVPR5TygPGMjM/FHMzTxmu5V/Q=
|
||||
git.smarteching.com/zeni/go-chart/v2 v2.1.4/go.mod h1:b3ueW9h3pGGXyhkormZAvilHaG4+mQti+bMNPdQBeOQ=
|
||||
git.smarteching.com/zeni/go-charts/v2 v2.6.11 h1:9udzlv3uxGXszpplfkL5IaTUrgkNj++KwhbaN1vVEqI=
|
||||
git.smarteching.com/zeni/go-charts/v2 v2.6.11/go.mod h1:3OpRPSXg7Qx4zcgsmwsC9ZFB9/wAkGSbnXf1wIbHYCg=
|
||||
github.com/SparkPost/gosparkpost v0.2.0 h1:yzhHQT7cE+rqzd5tANNC74j+2x3lrPznqPJrxC1yR8s=
|
||||
github.com/SparkPost/gosparkpost v0.2.0/go.mod h1:S9WKcGeou7cbPpx0kTIgo8Q69WZvUmVeVzbD+djalJ4=
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
|
||||
|
|
@ -21,37 +21,37 @@ github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
|
|||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
||||
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||
github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618=
|
||||
github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops=
|
||||
github.com/go-chi/chi/v5 v5.2.5 h1:Eg4myHZBjyvJmAFjFvWgrqDTXFyOzjj7YIm3L3mu6Ug=
|
||||
github.com/go-chi/chi/v5 v5.2.5/go.mod h1:X7Gx4mteadT3eDOMTsXzmI4/rwUpOwBHLpAfupzFJP0=
|
||||
github.com/go-ozzo/ozzo-validation v3.6.0+incompatible h1:msy24VGS42fKO9K1vLz82/GeYW1cILu7Nuuj1N3BBkE=
|
||||
github.com/go-ozzo/ozzo-validation v3.6.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU=
|
||||
github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
|
||||
github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
|
||||
github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw=
|
||||
github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk=
|
||||
github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
||||
github.com/gogs/chardet v0.0.0-20150115103509-2404f7772561/go.mod h1:Pcatq5tYkCW2Q6yrR2VRHlbHpZ/R4/7qyL1TCF7vl14=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.3 h1:kkGXqQOBSDDWRhWNXTFpqGSCMyh/PLnqUvMGJPDJDs0=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.3/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||
github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
|
||||
github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/harranali/mailing v1.2.0 h1:ihIyJwB8hyRVcdk+v465wk1PHMrSrgJqo/kMd+gZClY=
|
||||
github.com/harranali/mailing v1.2.0/go.mod h1:4a5N3yG98pZKluMpmcYlTtll7bisvOfGQEMIng3VQk4=
|
||||
github.com/hibiken/asynq v0.25.1 h1:phj028N0nm15n8O2ims+IvJ2gz4k2auvermngh9JhTw=
|
||||
github.com/hibiken/asynq v0.25.1/go.mod h1:pazWNOLBu0FEynQRBvHA26qdIKRSmfdIfUm4HdsLmXg=
|
||||
github.com/hibiken/asynq v0.26.0 h1:1Zxr92MlDnb1Zt/QR5g2vSCqUS03i95lUfqx5X7/wrw=
|
||||
github.com/hibiken/asynq v0.26.0/go.mod h1:Qk4e57bTnWDoyJ67VkchuV6VzSM9IQW2nPvAGuDyw58=
|
||||
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
|
||||
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
|
||||
github.com/jackc/pgx/v5 v5.7.5 h1:JHGfMnQY+IEtGM63d+NGMjoRpysB2JBwDr5fsngwmJs=
|
||||
github.com/jackc/pgx/v5 v5.7.5/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M=
|
||||
github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw=
|
||||
github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4=
|
||||
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
|
||||
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
|
||||
github.com/jaytaylor/html2text v0.0.0-20190408195923-01ec452cbe43/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk=
|
||||
|
|
@ -66,19 +66,21 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
|
|||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
|
||||
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
|
||||
github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
|
||||
github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/mailgun/errors v0.4.0 h1:6LFBvod6VIW83CMIOT9sYNp28TCX0NejFPP4dSX++i8=
|
||||
github.com/mailgun/errors v0.4.0/go.mod h1:xGBaaKdEdQT0/FhwvoXv4oBaqqmVZz9P1XEnvD/onc0=
|
||||
github.com/mailgun/errors v0.5.0 h1:pLQo8uhAdORsjN69mGixSr0pGs46z/BW/FQXd8HG1VM=
|
||||
github.com/mailgun/errors v0.5.0/go.mod h1:+2nrgY77E0vDkG4ErehpcpbSkMLkseJzKbrva89WeSs=
|
||||
github.com/mailgun/mailgun-go/v4 v4.23.0 h1:jPEMJzzin2s7lvehcfv/0UkyBu18GvcURPr2+xtZRbk=
|
||||
github.com/mailgun/mailgun-go/v4 v4.23.0/go.mod h1:imTtizoFtpfZqPqGP8vltVBB6q9yWcv6llBhfFeElZU=
|
||||
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||
github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A=
|
||||
github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||
github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8=
|
||||
github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
|
|
@ -90,8 +92,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
|||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/redis/go-redis/v9 v9.11.0 h1:E3S08Gl/nJNn5vkxd2i78wZxWAPNZgUNTp8WIJUAiIs=
|
||||
github.com/redis/go-redis/v9 v9.11.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
|
||||
github.com/redis/go-redis/v9 v9.19.0 h1:XPVaaPSnG6RhYf7p+rmSa9zZfeVAnWsH5h3lxthOm/k=
|
||||
github.com/redis/go-redis/v9 v9.19.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA=
|
||||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
|
||||
|
|
@ -103,39 +105,42 @@ github.com/sendgrid/sendgrid-go v3.16.1+incompatible h1:zWhTmB0Y8XCDzeWIm2/BIt1G
|
|||
github.com/sendgrid/sendgrid-go v3.16.1+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE=
|
||||
github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
|
||||
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
|
||||
github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
|
||||
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs=
|
||||
github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s=
|
||||
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
||||
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
|
||||
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
|
||||
golang.org/x/image v0.29.0 h1:HcdsyR4Gsuys/Axh0rDEmlBmB68rW1U9BUdB3UVHsas=
|
||||
golang.org/x/image v0.29.0/go.mod h1:RVJROnf3SLK8d26OW91j4FrIHGbsJ8QnbEocVTOWQDA=
|
||||
golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
|
||||
golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
|
||||
golang.org/x/image v0.39.0 h1:skVYidAEVKgn8lZ602XO75asgXBgLj9G/FE3RbuPFww=
|
||||
golang.org/x/image v0.39.0/go.mod h1:sIbmppfU+xFLPIG0FoVUTvyBMmgng1/XAMhQ2ft0hpA=
|
||||
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
|
||||
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
|
||||
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
|
||||
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
|
||||
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
|
||||
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
|
||||
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
|
||||
golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
|
||||
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
|
||||
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
|
||||
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
|
||||
golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
|
||||
golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
|
||||
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
|
||||
golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
|
||||
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
|
|
@ -146,5 +151,5 @@ gorm.io/driver/postgres v1.6.0 h1:2dxzU8xJ+ivvqTRph34QX+WrRaJlmfyPqXmoGVjMBa4=
|
|||
gorm.io/driver/postgres v1.6.0/go.mod h1:vUw0mrGgrTK+uPHEhAdV4sfFELrByKVGnaVRkXDhtWo=
|
||||
gorm.io/driver/sqlite v1.6.0 h1:WHRRrIiulaPiPFmDcod6prc4l2VGVWHz80KspNsxSfQ=
|
||||
gorm.io/driver/sqlite v1.6.0/go.mod h1:AO9V1qIQddBESngQUKWL9yoH93HIeA1X6V633rBwyT8=
|
||||
gorm.io/gorm v1.30.0 h1:qbT5aPv1UH8gI99OsRlvDToLxW5zR7FzS9acZDOZcgs=
|
||||
gorm.io/gorm v1.30.0/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE=
|
||||
gorm.io/gorm v1.31.1 h1:7CA8FTFz/gRfgqgpeKIBcervUn3xSyPUmr6B2WXJ7kg=
|
||||
gorm.io/gorm v1.31.1/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs=
|
||||
|
|
|
|||
|
|
@ -1,36 +1,38 @@
|
|||
{{define "tabler_table"}}
|
||||
{{$table := .}}
|
||||
{{if $table.Title}}
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">{{$table.Title}}</h3>
|
||||
</div>
|
||||
{{end}}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-vcenter card-table">
|
||||
<table class="table table-vcenter card-table{{if $table.Striped}} table-striped{{end}}{{if $table.Hover}} table-hover{{end}}">
|
||||
<thead>
|
||||
<tr>
|
||||
{{range .TableHeaders}}
|
||||
<th{{if .Sort}} data-sort="{{.Sort}}"{{end}}>{{.Name}}</th>
|
||||
{{range $table.Headers}}
|
||||
<th{{if .Sort}} data-sort="{{.Sort}}"{{end}}{{if .Width}} class="{{.Width}}"{{end}}{{if .Align}} style="text-align:{{.Align}}"{{end}}>{{.Name}}</th>
|
||||
{{end}}
|
||||
<th class="w-1"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .TableRows}}
|
||||
{{range $table.Rows}}
|
||||
<tr>
|
||||
{{range .Cells}}
|
||||
<td>
|
||||
{{if eq .Type "avatar"}}
|
||||
<div class="d-flex py-1 align-items-center">
|
||||
<span class="avatar me-2" style="background-image: url(/static/avatars/{{.AvatarID}}.jpg)"></span>
|
||||
<div class="flex-fill">
|
||||
<div class="font-weight-medium">{{.Name}}</div>
|
||||
<div class="text-secondary"><a href="#" class="text-reset">{{.Email}}</a></div>
|
||||
<div class="font-weight-medium">{{.Value}}</div>
|
||||
{{if .Subtext}}<div class="text-secondary"><a href="#" class="text-reset">{{.Subtext}}</a></div>{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>{{.City}}</div>
|
||||
<div class="text-secondary">{{.Country}}</div>
|
||||
</td>
|
||||
<td>
|
||||
<span class="status-dot {{if eq .Status "active"}}status-dot-animated bg-green{{else if eq .Status "inactive"}}bg-muted{{else}}bg-blue{{end}}"></span>
|
||||
{{.Status}}
|
||||
</td>
|
||||
<td>{{.Date}}</td>
|
||||
<td>
|
||||
{{else if eq .Type "status"}}
|
||||
<span class="status-dot {{.StatusColor}}"></span>
|
||||
{{.Value}}
|
||||
{{else if eq .Type "badge"}}
|
||||
<span class="badge {{.BadgeColor}} text-uppercase">{{.Value}}</span>
|
||||
{{else if eq .Type "tags"}}
|
||||
<div class="row g-1">
|
||||
{{range .Tags}}
|
||||
<div class="col-auto">
|
||||
|
|
@ -38,15 +40,15 @@
|
|||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge {{if eq .Category "Design"}}bg-purple-lt{{else if eq .Category "Engineering"}}bg-blue-lt{{else if eq .Category "Sales"}}bg-green-lt{{else if eq .Category "Marketing"}}bg-orange-lt{{else if eq .Category "Finance"}}bg-yellow-lt{{else}}bg-muted-lt{{end}}">{{.Category}}</span>
|
||||
</td>
|
||||
<td>
|
||||
{{else if eq .Type "actions"}}
|
||||
<a href="#" class="btn btn-ghost btn-icon btn-sm" data-bs-toggle="dropdown">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon"><path d="M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M12 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M12 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /></svg>
|
||||
</a>
|
||||
{{else}}
|
||||
{{.Value}}
|
||||
{{end}}
|
||||
</td>
|
||||
{{end}}
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
|
|
|
|||
|
|
@ -24,10 +24,12 @@
|
|||
{{.Content}}
|
||||
{{else}}
|
||||
<div class="container-xl{{if .ContainerCentered}} my-auto{{end}}{{if .ContainerClass}} {{.ContainerClass}}{{end}}">
|
||||
{{if .TableRows}}
|
||||
<div class="card">
|
||||
{{template "tabler_table" .}}
|
||||
</div>
|
||||
{{if hasField . "Tables"}}
|
||||
{{range .Tables}}
|
||||
<div class="card{{if .CardClass}} {{.CardClass}}{{end}}">
|
||||
{{template "tabler_table" .}}
|
||||
</div>
|
||||
{{end}}
|
||||
{{else}}
|
||||
{{.Content}}
|
||||
{{end}}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue