package controllers // SampleNavbarMenu returns the sample menu data for the navbar // Migrated from liquid/data/menu.json (layout, dashboards, help sections) func SampleNavbarMenu() TablerMenu { return TablerMenu{ "dashboards": { Title: "Dashboards", Icon: "home", Children: []*TablerMenuItem{ {Title: "Default", URL: "index.html", Icon: "dashboard"}, {Title: "Crypto", URL: "dashboard-crypto.html", Icon: "currency-bitcoin"}, }, }, "layout": { Title: "Layout", Icon: "layout-2", Columns: 2, Children: []*TablerMenuItem{ {Title: "Boxed", URL: "layout-boxed.html", Icon: "layout-navbar"}, {Title: "Combined", URL: "layout-combo.html", Icon: "layout-navbar"}, {Title: "Condensed", URL: "layout-condensed.html", Icon: "layout-navbar"}, {Title: "Fluid", URL: "layout-fluid.html", Icon: "layout-navbar"}, {Title: "Fluid vertical", URL: "layout-fluid-vertical.html", Icon: "layout-navbar"}, {Title: "Horizontal", URL: "layout-horizontal.html", Icon: "layout-navbar"}, {Title: "Navbar dark", URL: "layout-navbar-dark.html", Icon: "layout-navbar"}, {Title: "Navbar overlap", URL: "layout-navbar-overlap.html", Icon: "layout-navbar"}, {Title: "Navbar sticky", URL: "layout-navbar-sticky.html", Icon: "layout-navbar"}, {Title: "Right vertical", URL: "layout-vertical-right.html", Icon: "layout-navbar"}, {Title: "Vertical", URL: "layout-vertical.html", Icon: "layout-navbar"}, {Title: "Vertical transparent", URL: "layout-vertical-transparent.html", Icon: "layout-navbar"}, }, }, "help": { Title: "Help", Icon: "lifebuoy", Children: []*TablerMenuItem{ {Title: "Documentation", URL: "https://tabler.io/docs", Icon: "book"}, {Title: "Changelog", URL: "changelog.html", Icon: "list"}, {Title: "Source code", URL: "https://github.com/tabler/tabler", Icon: "brand-github"}, {Title: "Sponsor project!", URL: "https://github.com/sponsors/codecalm", Color: "pink", Icon: "heart"}, }, }, } } // SampleUserSettings returns sample data for the user settings page. func SampleUserSettings() FormtablerUserSettingsPage { return FormtablerUserSettingsPage{ ActiveTab: "My Account", SidebarSections: []FormtablerUserSettingsSection{ { Title: "Business settings", SubItems: []FormtablerUserSettingsNavItem{ {Title: "My Account", Link: "/user/settings", Active: true}, {Title: "My Notifications", Link: "#"}, {Title: "Connected Apps", Link: "#"}, {Title: "Plans", Link: "#"}, {Title: "Billing & Invoices", Link: "#"}, }, }, { Title: "Experience", SubItems: []FormtablerUserSettingsNavItem{ {Title: "Give Feedback", Link: "#"}, }, }, }, } } // SampleComponents returns sample data for alerts, breadcrumbs, and toasts. func SampleComponents() FormtablerComponentsPage { return FormtablerComponentsPage{ Alerts: []FormtablerAlert{ { Type: "success", Title: "Success alert!", ShowClose: true, }, { Type: "warning", Title: "Warning alert with description", Description: "This is a warning alert with additional description text to provide more context to the user.", List: []string{"Item one is important", "Item two requires attention", "Item three is optional"}, }, { Type: "danger", Title: "Danger alert", Action: "Undo", Buttons: true, }, { Type: "info", Title: "Info alert with link", Link: "Learn more", ShowClose: true, }, { Type: "success", Title: "Important alert", Important: true, ShowClose: true, }, { Type: "warning", Title: "Minor alert variant", Minor: true, }, }, Breadcrumbs: []FormtablerBreadcrumb{ { Items: []FormtablerBreadcrumbItem{ {Title: "Home", Link: "/", HomeIcon: true}, {Title: "Library", Link: "/library"}, {Title: "Data"}, }, }, { Separator: "arrows", Items: []FormtablerBreadcrumbItem{ {Title: "Dashboard", Link: "/"}, {Title: "Components", Link: "/components"}, {Title: "Alerts"}, }, }, { Separator: "dots", Items: []FormtablerBreadcrumbItem{ {Title: "Home", Link: "/", HomeIcon: true}, {Title: "Settings", Link: "/settings"}, {Title: "Profile"}, }, }, }, Toasts: []FormtablerToast{ { ID: "simple", Show: true, PersonName: "Paweł Kuna", PersonSrc: "/static/avatars/000m.jpg", Date: "2 mins ago", Text: "Hello, world! This is a toast message.", }, { ID: "avatar-toast", Show: true, PersonName: "Jeffie Lewzey", PersonSrc: "/static/avatars/052f.jpg", Date: "5 mins ago", Text: "Your report has been generated successfully.", }, { ID: "cookies", Show: true, Date: "just now", Cookies: true, }, { ID: "no-header", Show: true, HideHeader: true, Text: "This toast has no header — just a plain message body.", }, }, } } // SampleCards returns 6 sample cards showing different variants. func SampleCards() []FormtablerCard { defaultBody := &FormtablerCardBody{ Text: "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam deleniti fugit incidunt, iste, itaque minima neque pariatur perferendis sed suscipit velit vitae voluptatem.", } return []FormtablerCard{ // 1. Card with header, body text, and footer { Header: &FormtablerCardHeader{Title: "Card with header and footer"}, Body: defaultBody, Footer: &FormtablerCardFooter{Text: "This is standard card footer"}, }, // 2. Card with image top, status bar, and action button in body { Image: &FormtablerCardImage{Position: "top", Src: "/public/static/photos/coffee-on-a-table-with-other-items.jpg"}, Status: &FormtablerCardStatus{Position: "top", Color: "red"}, Body: &FormtablerCardBody{ Title: "Card with image & status", Subtitle: "Featured card", Text: "This card has an image at the top, a red status bar, and a call-to-action button.", HasButton: true, ButtonText: "View details", }, }, // 3. Card with image bottom, progress bar, and footer with elements { Image: &FormtablerCardImage{Position: "bottom", Src: "/public/static/photos/coffee-on-a-table-with-other-items.jpg"}, Body: defaultBody, Footer: &FormtablerCardFooter{ HasSwitch: true, HasMore: true, }, Progress: &FormtablerCardProgress{Percent: 60, Color: "green"}, }, // 4. Card with header tabs, alert, and footer buttons { Header: &FormtablerCardHeader{ UseTabs: true, Tabs: []FormtablerCardTab{ {Title: "Active", Active: true, Link: "#"}, {Title: "Second", Link: "#"}, {Title: "Disabled", Disabled: true, Link: "#"}, }, }, Alert: &FormtablerCardAlert{Text: "This is an alert message inside the card.", Type: "info"}, Body: defaultBody, Footer: &FormtablerCardFooter{ ButtonsCancel: "Cancel", ButtonsAction: "Continue", }, }, // 5. Card with inactive state, no footer { Inactive: true, Header: &FormtablerCardHeader{Title: "Inactive card"}, Body: &FormtablerCardBody{ Title: "This card is inactive", Text: "Inactive cards have reduced opacity. They are useful for showing disabled or expired content.", }, }, // 6. Card with header pills, footer with avatars, and active state { Active: true, Header: &FormtablerCardHeader{ UsePills: true, Pills: []FormtablerCardTab{ {Title: "All", Active: true, Link: "#"}, {Title: "Active", Link: "#"}, {Title: "Completed", Link: "#"}, }, }, Body: defaultBody, Footer: &FormtablerCardFooter{ HasCheck: true, HasAvatars: true, }, }, } } // SampleFormElements returns sample data for all 25 formtabler components. func SampleFormElements() FormtablerFormElementsPage { return FormtablerFormElementsPage{ TextInputs: []FormtablerTextInput{ {Label: "Static", Type: "static", Value: "Input value"}, {Label: "Password", Type: "password", Placeholder: "Input placeholder"}, {Label: "Text", Type: "text", Placeholder: "Input placeholder"}, {Label: "Textarea", Type: "textarea", Placeholder: "Textarea placeholder"}, }, IconInputs: []FormtablerIconInput{ {Label: "Icon input", Placeholder: "Search for…", Prepend: false}, {Label: "Icon input", Placeholder: "Username", Icon: "user", Prepend: true}, {Label: "Loader input", Placeholder: "Loading…", Loader: true}, {Label: "Loader input", Placeholder: "Loading…", Icon: "user", Loader: true, Prepend: true}, }, IconSeparated: FormtablerIconSeparated{Label: "Separated inputs", Placeholder: "Search for…", ButtonIcon: "search"}, InputSizing: FormtablerInputSizing{}, FileInput: FormtablerFileInput{Label: "Custom File Input"}, ColorInput: FormtablerColorInput{ Label: "Color Input", Name: "color", Type: "radio", Rounded: false, Colors: []FormtablerSwatch{ {Color: "dark"}, {Color: "white", Checked: true}, {Color: "blue"}, {Color: "azure"}, {Color: "indigo"}, {Color: "purple"}, {Color: "pink"}, {Color: "red"}, {Color: "orange"}, {Color: "yellow"}, }, }, ColorPicker: FormtablerColorPicker{Label: "Color picker", Color: "#206bc4"}, RangeInput: FormtablerRangeInput{Label: "Range input"}, Datalist: FormtablerDatalist{ Label: "Datalist example", Placeholder: "Type to search...", Options: []string{ "Afghanistan", "Albania", "Algeria", "Andorra", "Angola", "Antarctica", "Argentina", "Armenia", "Australia", "Austria", }, }, ImageCheck: FormtablerImageCheck{ Label: "Image Check", Images: []FormtablerImageItem{ {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 1", Checked: true}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 2"}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 3", Checked: true}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 4"}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 5"}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 6", Checked: true}, }, }, ImageRadio: FormtablerImageRadio{ Label: "Image Check Radio", Images: []FormtablerImageItem{ {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 1", Checked: true}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 2"}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 3", Checked: true}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 4"}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 5"}, {Src: "/public/static/photos/0246c91f-47c2-4f6e-b85d-d7a4806b30c9.jpg", Alt: "Image 6", Checked: true}, }, }, ImagePerson: FormtablerImagePerson{ Label: "Person Check", AvatarSize: "md", People: []FormtablerPersonItem{ {Name: "Paweł Kuna", Src: "/public/static/avatars/000m.jpg", Checked: true}, {Name: "Jeffie Lewzey", Src: "/public/static/avatars/052f.jpg"}, {Name: "Mallory Hulme", Src: "/public/static/avatars/002m.jpg", Checked: true}, {Name: "Dunn Slane", Src: "/public/static/avatars/003m.jpg"}, {Name: "Emmy Levet", Src: "/public/static/avatars/000f.jpg"}, {Name: "Maryjo Lebarree", Src: "/public/static/avatars/001f.jpg", Checked: true}, {Name: "Egan Poetz", Src: "/public/static/avatars/004m.jpg"}, {Name: "Kellie Skingley", Src: "/public/static/avatars/002f.jpg"}, {Name: "Christy Maciak", Src: "/public/static/avatars/003f.jpg"}, }, }, Checkboxes: FormtablerCheckboxes{ Label: "Checkboxes", Checkboxes: []FormtablerCheckItem{ {Title: "Option 1", Checked: false, Disabled: false}, {Title: "Option 2", Checked: false, Disabled: true}, {Title: "Option 3", Checked: true, Disabled: false}, }, }, CheckboxesInline: FormtablerCheckboxesInline{ Label: "Inline Checkboxes", Checkboxes: []FormtablerCheckItem{ {Title: "Option 1", Checked: false, Disabled: false}, {Title: "Option 2", Checked: false, Disabled: true}, {Title: "Option 3", Checked: true, Disabled: false}, }, }, Radios: FormtablerRadios{ Label: "Radios", Name: "radios", Radios: []FormtablerCheckItem{ {Title: "Option 1", Checked: true, Disabled: false}, {Title: "Option 2", Checked: false, Disabled: false}, {Title: "Option 3", Checked: false, Disabled: true}, {Title: "Option 4", Checked: true, Disabled: true}, }, }, RadiosInline: FormtablerRadiosInline{ Label: "Inline Radios", Name: "radios-inline", Radios: []FormtablerCheckItem{ {Title: "Option 1", Checked: true, Disabled: false}, {Title: "Option 2", Checked: false, Disabled: false}, {Title: "Option 3", Checked: false, Disabled: true}, }, }, Toggles: FormtablerToggle{ Label: "Toggle switches", Toggles: []FormtablerCheckItem{ {Title: "Option 1", Checked: true}, {Title: "Option 2"}, {Title: "Option 3"}, }, }, ToggleSingle: FormtablerToggleSingle{Label: "Single switch", Title: "I agree with terms and conditions"}, Select: FormtablerSelect{ Label: "Select", Options: []string{"One", "Two", "Three"}, Multiple: false, }, Selectgroups: []FormtablerSelectGroup{ { Title: "Simple selectgroup", Values: []FormtablerSelectGroupValue{ {Label: "HTML", Value: "html", Checked: true}, {Label: "CSS", Value: "css"}, {Label: "PHP", Value: "php"}, {Label: "JavaScript", Value: "js"}, }, }, { Title: "Icon input", Values: []FormtablerSelectGroupValue{ {Label: "Sun", Value: "sun", Icon: "sun", Checked: true}, {Label: "Moon", Value: "moon", Icon: "moon"}, {Label: "Cloud Rain", Value: "cloud-rain", Icon: "cloud-rain"}, {Label: "Cloud", Value: "cloud", Icon: "cloud"}, {Label: "Other", Value: "other"}, }, }, { Title: "Selectgroup with icons and text", Name: "icons", Type: "radio", WithText: true, Values: []FormtablerSelectGroupValue{ {Label: "Home", Value: "home", Icon: "home", WithText: true, Checked: true}, {Label: "User", Value: "user", Icon: "user", WithText: true}, {Label: "Circle", Value: "circle", Icon: "circle", WithText: true}, {Label: "Square", Value: "square", Icon: "square", WithText: true}, }, }, { Title: "Different style", Pills: true, Values: []FormtablerSelectGroupValue{ {Label: "HTML", Value: "html", Checked: true}, {Label: "CSS", Value: "css"}, {Label: "PHP", Value: "php"}, {Label: "JavaScript", Value: "js"}, }, }, }, SelectgroupPayments: FormtablerSelectgroupPayments{ Label: "Payment method", Items: []FormtablerPaymentItem{ {Provider: "visa", Ending: "4532", Checked: true}, {Provider: "mastercard", Ending: "8721"}, {Provider: "paypal"}, }, }, SelectgroupProjectManager: FormtablerSelectgroupProjectManager{ Label: "Project Manager", Managers: []FormtablerPersonItemWithJob{ {Name: "Paweł Kuna", Src: "/public/static/avatars/000m.jpg", JobTitle: "UI Designer", Checked: true}, {Name: "Jeffie Lewzey", Src: "/public/static/avatars/052f.jpg", JobTitle: "Chemical Engineer"}, {Name: "Mallory Hulme", Src: "/public/static/avatars/002m.jpg", JobTitle: "Geologist IV"}, {Name: "Dunn Slane", Src: "/public/static/avatars/003m.jpg", JobTitle: "Research Nurse"}, {Name: "Emmy Levet", Src: "/public/static/avatars/000f.jpg", JobTitle: "VP Product Management"}, }, }, Fieldset: FormtablerFieldset{ Label: "Fieldset", Inputs: []FormtablerFieldsetInput{ {Label: "Full name", Type: "text", Required: true}, {Label: "Company", Type: "text", Required: true}, {Label: "Email", Type: "email", Required: true}, {Label: "Phone number", Type: "tel"}, }, }, CheckboxesList: FormtablerCheckboxesList{ Label: "Checkboxes list", Items: []FormtablerCheckListItem{ {Title: "Push Notifications", Checked: true}, {Title: "SMS Notifications"}, {Title: "Email Notifications", Checked: true}, }, }, ValidationStates: FormtablerValidationStates{Label: "Validation States"}, } } // 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"}, }, 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"}, }, }, }, } 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} }