Skip to content

Mario mark - #15

Draft
methodofaction wants to merge 21 commits into
mainfrom
mario-mark
Draft

Mario mark#15
methodofaction wants to merge 21 commits into
mainfrom
mario-mark

Conversation

@methodofaction

Copy link
Copy Markdown
Contributor

No description provided.

@netlify

netlify Bot commented Feb 19, 2026

Copy link
Copy Markdown

Deploy Preview for popui-go ready!

Name Link
🔨 Latest commit 93bf4f2
🔍 Latest deploy log https://app.netlify.com/projects/popui-go/deploys/69a05a7cf822150008ca2078
😎 Deploy Preview https://deploy-preview-15--popui-go.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Comment thread tailwind/typography/utils.js Fixed
…tion

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
@methodofaction

Copy link
Copy Markdown
Contributor Author

There's two main points I'm unsure about:

  1. Claude likes to include npm to compile tailwind. I asked it to use my local installed version, then it complained about some plugins and yadda yadda, so it did some magic which I think is unneeded but I didn't know how to resolve.

  2. When Mario vibecoded the toast messages Claude included significant amount of code into popui.js I think this could be refactored into something more simple, but the question arises: should we make it a rule so that components are self contained and the javascript is contained within them (through alpine or htmx), or should we rely on popui.js?

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates PopUI’s component set and documentation site, adding new Toast and Loading components, reworking Popover to function as a context-menu pattern, and switching the Tailwind setup to use vendored plugins + updated source scanning.

Changes:

  • Add Toast + ToastContainer components (and docs/examples) plus a docs HTMX demo endpoint for toast rendering.
  • Add Loading component (skeleton + spinner variants) and new docs/examples.
  • Vendor Tailwind plugins locally and adjust styling/docs layout (including an Icons gallery page).

Reviewed changes

Copilot reviewed 179 out of 183 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
tsconfig.json Removes TypeScript config (repo appears to be Go/templ-focused).
toast.templ Adds Toast and ToastContainer templ components.
tailwind/typography/utils.js Adds vendored typography plugin utility helpers.
tailwind/typography/index.js Adds vendored typography Tailwind plugin entry.
tailwind.theme.css Updates design tokens and removes mono feature utility.
table.templ Removes horizontal scroll behavior and simplifies table classes.
svg.templ Updates PopuiLogo SVG paths to use currentColor.
styles.css Switches Tailwind import/plugin wiring to vendored local paths and expands @source scanning/safelist.
sidebar.templ Adds mobile sidebar toggle behavior (Alpine event-driven) + overlay/close affordance.
props/toast.go Introduces Toast/ToastContainer prop structs.
props/table.go Removes ScrollHorizontal from Table props.
props/popover.go Reworks Popover props shape (context-menu style).
props/loading.go Introduces Loading props + constants.
props/layout.go Removes Body props struct (Body now fixed styling).
props/context_menu.go Switches ID generation to UUID-based short IDs and updates docstrings.
props/checkbox.go Removes description support and simplifies prop ordering/docs.
props/button.go Removes ButtonGroup alignment + button popover-target fields.
props/app.go Adds Portal slot and refines Data comment.
popover.templ Replaces modal-popover behavior with context-menu Popover + PopoverItem.
page_state_templ.go Updates Subtitle usage to include a bold class.
page_state.templ Updates Subtitle usage to include a bold class.
layout.templ Simplifies Body() to a fixed <body class="bg-background text-foreground">.
internal/docs/ui.go Adds Design System group + new Loading/Toast docs pages; removes Context Menu docs entry.
internal/docs/modules/preview_box_templ.go Updates preview box container styling.
internal/docs/modules/preview_box.templ Updates preview box container styling.
internal/docs/modules/example.templ Adds stacked/side-by-side layout option and iframe dark-mode sync.
internal/docs/modules/code_block.templ Adds copy-to-clipboard UI and updates code block styling.
internal/docs/modules/api_table.templ Rebuilds APITable to use PopUI Table component.
internal/docs/examples/typography_paragraphs_templ.go Regenerates example output after template changes.
internal/docs/examples/typography_paragraphs.templ Simplifies markup (removes wrapper div).
internal/docs/examples/typography_headings_templ.go Regenerates example output after template changes.
internal/docs/examples/typography_headings.templ Simplifies markup (removes wrapper div).
internal/docs/examples/typography_alerts_templ.go Regenerates example output after template changes.
internal/docs/examples/typography_alerts.templ Simplifies markup (removes wrapper div).
internal/docs/examples/toast_with_icon_templ.go Adds generated toast example (with icon).
internal/docs/examples/toast_with_icon.templ Adds toast example (with icon).
internal/docs/examples/toast_variants_templ.go Adds generated toast variants example.
internal/docs/examples/toast_variants.templ Adds toast variants example.
internal/docs/examples/toast_trigger.templ Adds toast trigger example using popui.showToast() JS API.
internal/docs/examples/toast_templ.go Adds generated base toast example.
internal/docs/examples/toast_positions_templ.go Adds generated toast positioning demo example.
internal/docs/examples/toast_positions.templ Adds toast positioning demo example (HTMX-driven).
internal/docs/examples/toast_dismissible_templ.go Adds generated dismissible toast example.
internal/docs/examples/toast_dismissible.templ Adds dismissible toast example.
internal/docs/examples/toast_container_templ.go Converts old checkbox example into toast container example (generated file update).
internal/docs/examples/toast_container.templ Adds toast container example.
internal/docs/examples/toast.templ Adds base toast example source.
internal/docs/examples/textarea_contenteditable_templ.go Regenerates example output after template changes.
internal/docs/examples/textarea_contenteditable.templ Simplifies markup (removes wrapper div).
internal/docs/examples/tabs_variants.templ Simplifies markup (removes wrapper div).
internal/docs/examples/table_scroll_horizontal.templ Removes the horizontal scroll table example.
internal/docs/examples/skeleton_templ.go Adds generated skeleton example.
internal/docs/examples/skeleton_sizes_templ.go Replaces old checkbox example with skeleton sizes example (generated file update).
internal/docs/examples/skeleton_sizes.templ Adds skeleton sizes example source.
internal/docs/examples/skeleton_paragraph_templ.go Adds generated skeleton paragraph example.
internal/docs/examples/skeleton_paragraph.templ Adds skeleton paragraph example source.
internal/docs/examples/skeleton_in_table_templ.go Replaces old table scroll example with skeleton-in-table example (generated file update).
internal/docs/examples/skeleton_in_table.templ Adds skeleton-in-table example source.
internal/docs/examples/skeleton.templ Adds skeleton example source.
internal/docs/examples/select_custom_label_templ.go Regenerates example output after template changes.
internal/docs/examples/select_custom_label.templ Simplifies markup (removes wrapper div).
internal/docs/examples/radio_disabled_templ.go Regenerates example output after template changes.
internal/docs/examples/radio_disabled.templ Simplifies markup (removes wrapper div).
internal/docs/examples/radio_checked_templ.go Regenerates example output after template changes.
internal/docs/examples/radio_checked.templ Simplifies markup (removes wrapper div).
internal/docs/examples/radio_card_templ.go Regenerates example output after template changes.
internal/docs/examples/radio_card.templ Simplifies markup (removes wrapper div).
internal/docs/examples/popover_right_aligned_templ.go Converts generated “context menu” example usage to Popover usage.
internal/docs/examples/popover_right_aligned.templ Adds popover right-aligned example source.
internal/docs/examples/popover.templ Updates popover example to new context-menu style Popover usage.
internal/docs/examples/loading_with_label_templ.go Adds generated loading spinner-with-label example.
internal/docs/examples/loading_with_label.templ Adds loading spinner-with-label example source.
internal/docs/examples/loading_templ.go Adds generated loading spinner example.
internal/docs/examples/loading.templ Adds loading spinner example source.
internal/docs/examples/input_custom_label_templ.go Regenerates example output after template changes.
internal/docs/examples/input_custom_label.templ Simplifies markup (removes wrapper div).
internal/docs/examples/file_accept_types_templ.go Regenerates example output after template changes.
internal/docs/examples/file_accept_types.templ Simplifies markup (removes wrapper div).
internal/docs/examples/examples.go Trims trailing newline from embedded example sources.
internal/docs/examples/context_menu_right_aligned.templ Removes legacy context menu example.
internal/docs/examples/context_menu.templ Removes legacy context menu example.
internal/docs/examples/checkbox_switch_templ.go Regenerates example output after template changes.
internal/docs/examples/checkbox_switch.templ Simplifies markup (removes wrapper div).
internal/docs/examples/checkbox_switch_description.templ Removes checkbox switch description example.
internal/docs/examples/checkbox_disabled_templ.go Regenerates example output after template changes.
internal/docs/examples/checkbox_disabled.templ Simplifies markup (removes wrapper div).
internal/docs/examples/checkbox_description.templ Removes checkbox description example.
internal/docs/examples/card_with_header_templ.go Updates example styling (adds dimmed text color).
internal/docs/examples/card_with_header.templ Updates example styling (adds dimmed text color).
internal/docs/examples/card_templ.go Updates example styling (adds dimmed text color).
internal/docs/examples/card_disabled_templ.go Updates example styling (adds dimmed text color).
internal/docs/examples/card_disabled.templ Updates example styling (adds dimmed text color).
internal/docs/examples/card_as_link_templ.go Updates example styling (adds dimmed text color).
internal/docs/examples/card_as_link.templ Updates example styling (adds dimmed text color).
internal/docs/examples/card.templ Updates example styling (adds dimmed text color).
internal/docs/examples/button_variants.templ Adjusts example grouping/layout.
internal/docs/examples/button_group_align.templ Removes ButtonGroup alignment example (alignment prop removed).
internal/docs/examples/button_copy_variants.templ Wraps ButtonCopy examples in ButtonGroup containers.
internal/docs/examples/button_copy_truncated_templ.go Wraps ButtonCopy truncated examples in ButtonGroup containers (generated file update).
internal/docs/examples/button_copy_truncated.templ Wraps ButtonCopy truncated examples in ButtonGroup containers.
internal/docs/examples/button_copy_templ.go Wraps ButtonCopy example in ButtonGroup (generated file update).
internal/docs/examples/button_copy_sizes_templ.go Wraps ButtonCopy size examples in ButtonGroup (generated file update).
internal/docs/examples/button_copy_sizes.templ Wraps ButtonCopy size examples in ButtonGroup containers.
internal/docs/examples/button_copy.templ Wraps ButtonCopy example in ButtonGroup.
internal/docs/examples/app_with_sidebar_templ.go Updates footer year logic and example layout/styling.
internal/docs/examples/app_with_sidebar.templ Updates footer year logic and example layout/styling.
internal/docs/examples/app_templ.go Updates footer year logic and example layout/styling.
internal/docs/examples/app_popup_templ.go Updates app popup example styling.
internal/docs/examples/app_popup.templ Updates app popup example styling.
internal/docs/examples/app.templ Updates footer year logic and example layout/styling.
internal/docs/examples/accordion_templ.go Regenerates example output after template changes.
internal/docs/examples/accordion.templ Simplifies markup (removes wrapper div).
internal/docs/components/toast.templ Adds Toast documentation page.
internal/docs/components/table_templ.go Removes scroll-horizontal docs and updates API table description.
internal/docs/components/table.templ Removes scroll-horizontal docs and updates API table description.
internal/docs/components/popover_templ.go Adds right-aligned Popover example + updates API reference for new Popover/PopoverItem.
internal/docs/components/popover.templ Adds right-aligned Popover example + updates API reference for new Popover/PopoverItem.
internal/docs/components/loading.templ Adds Loading documentation page.
internal/docs/components/label_templ.go Updates link styling in label docs (removes accent class).
internal/docs/components/label.templ Updates link styling in label docs (removes accent class).
internal/docs/components/icons_templ.go Adds generated helper for icon cards in docs.
internal/docs/components/icons_list.templ Adds generated Icons docs page listing all icons.
internal/docs/components/icons.templ Adds icon card template with copy-to-clipboard behavior.
internal/docs/components/context_menu.templ Removes legacy ContextMenu documentation page.
internal/docs/components/checkbox.templ Removes checkbox description examples/API field from docs.
internal/docs/components/button_templ.go Removes ButtonGroup alignment docs and updates size description.
internal/docs/components/button.templ Removes ButtonGroup alignment docs and updates size description.
internal/docs/components/app_templ.go Uses stacked layout for app-with-sidebar iframe example.
internal/docs/components/app.templ Uses stacked layout for app-with-sidebar iframe example.
internal/docs/assets/scripts/docs.js Adds HTMX debug logging + re-processes HTMX after Alpine init/page changes.
internal/docs/assets/prism-popui.css Adds PopUI Prism theme stylesheet for syntax highlighting.
internal/docs/assets/assets.go Embeds prism CSS alongside scripts.
icons/generate.go Refactors icon generator and adds generation of docs icon list template.
htmx/htmx.go Removes HX-Location relocation helpers/types (keeps redirect support).
go.mod Updates Go version/deps and adds tool entry for air.
examples/page_templ.go Updates example from ContextMenu to Popover.
examples/page.templ Updates example from ContextMenu to Popover.
components.css Reworks popover styling; adjusts code/pre styling; adds dark-mode forms overrides + spin animation.
cmd/popui/serve.go Adds /docs/toast/demo endpoint returning rendered toast fragments.
cmd/popui/build.go Copies additional docs assets (Prism CSS) into build output.
checkbox.templ Removes checkbox description rendering and simplifies switch/layout classes.
button.templ Removes popover-target attributes and ButtonGroup alignment behavior; adds whitespace-nowrap.
assets.go Removes outdated comment about Tailwind CLI usage.
app.templ Adds Portal support and sidebar toggle button; refactors body/grid container handling.
README.md Updates build instructions for vendored Tailwind setup and parent popui dependency.
Loading.templ Adds Loading component (skeleton + spinner).
.cursor/rules/project-build.mdc Documents build pipeline and repo architecture/workflow.
.air.toml Stops running go generate ./... on every rebuild (templ+build only).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +46 to +61
x-data="{
renderIframe() {
const iframe = this.$refs.iframe;
const doc = iframe.contentDocument || iframe.contentWindow.document;
doc.open();
doc.write(this.$refs.content.innerHTML);
doc.close();
this.syncDark();
new MutationObserver(() => this.syncDark()).observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
},
syncDark() {
const iframe = this.$refs.iframe;
const doc = iframe.contentDocument || iframe.contentWindow.document;
if (doc.documentElement) {
doc.documentElement.classList.toggle('dark', document.documentElement.classList.contains('dark'));
}

Copilot AI Feb 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

renderIframe() creates a new MutationObserver for every Example instance and never disconnects it. On pages with many examples this can add unnecessary observers on document.documentElement; consider storing the observer on the component and disconnecting it on cleanup (Alpine x-init can return a teardown function) or using a single global observer.

Copilot uses AI. Check for mistakes.
Comment thread loading.templ
Comment on lines +1 to +5
package popui

import (
"fmt"

Copilot AI Feb 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This new component file is named Loading.templ with a capital letter, while the rest of the root components use lowercase filenames (e.g., button.templ, checkbox.templ, toast.templ). Mixing case can cause friction on case-insensitive filesystems and makes the repo less consistent; consider renaming it to loading.templ (and regenerating the _templ.go).

Copilot uses AI. Check for mistakes.
Comment thread components.css
Comment on lines +47 to 63
/* Popover */
[popover] {
inset: unset;
overflow: visible;
top: anchor(bottom);
left: anchor(left);
width: fit-content;
height: fit-content;
}
[popover].context-menu:not(:popover-open) {
display: none;
}
[popover].context-menu.context-menu-right-align {
left: unset;
right: anchor(right);
width: auto;
height: auto;
padding: 0;
background: transparent;
border: none;
position: fixed;
top: 0px;
right: 0px;
pointer-events: none;
overlay: none;
}

/* Fallback for browsers without anchor positioning support */
@supports not (anchor-name: --test) {
[popover].context-menu {
position: absolute;
top: auto;
left: auto;
margin: 0.5rem;
}
[popover]:popover-open + .popover-menu {
display: block !important;
}

Copilot AI Feb 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new global [popover] rule sets pointer-events: none, position: fixed, top/right: 0, etc. This will apply to all popovers, including the existing ContextMenu component’s <div popover class="context-menu">…</div> (which contains interactive menu items). With pointer-events: none and fixed positioning, the context menu popover will become non-interactive and likely appear in the wrong place. Consider scoping these styles to the new popover sentinel element (e.g., [popover].popover-sentinel) and/or updating/removing the legacy ContextMenu component/CSS together.

Copilot uses AI. Check for mistakes.
Comment on lines 9 to +20
type CodeBlockProps struct {
Code string
Language string
Side bool
}

templ CodeBlock(props CodeBlockProps) {
if props.Code != "" {
<pre class="w-full !bg-background-default-negative !border !border-t-0 !border-border-default !rounded-b-xl !rounded-t-none overflow-hidden flex gap-[12px] !p-[12px] !font-mono !text-[13px] !tracking-[-0.039px] !m-0 !leading-[1.4]">
<div class="flex flex-col text-right w-[16px] text-[rgba(255,255,255,0.7)] shrink-0 select-none !leading-[1.4]">
<pre
class={
"w-full bg-background-default-secondary overflow-hidden flex gap-[12px] p-[12px] font-mono text-[13px] tracking-[-0.039px] m-0 leading-[1.6] relative",
}

Copilot AI Feb 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CodeBlockProps adds a Side boolean and callers now set it, but CodeBlock never reads props.Side. If side-by-side styling is still needed, wire this flag into the rendered classes; otherwise remove the prop (and stop passing it) to avoid dead API surface.

Copilot uses AI. Check for mistakes.
Comment thread tailwind.theme.css
Comment on lines +1 to 14
// Debug HTMX events
document.addEventListener('htmx:beforeRequest', (e) => {
console.log('HTMX beforeRequest:', e.detail);
});
document.addEventListener('htmx:afterRequest', (e) => {
console.log('HTMX afterRequest:', e.detail);
});
document.addEventListener('htmx:beforeSwap', (e) => {
console.log('HTMX beforeSwap:', e.detail);
});
document.addEventListener('htmx:afterSwap', (e) => {
console.log('HTMX afterSwap:', e.detail);
});

Copilot AI Feb 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The added HTMX event listeners log every request/swap to the console. This will be noisy in normal use and can leak details of user actions in production builds; consider removing these logs or guarding them behind an explicit debug flag (e.g., a query param or process.env.NODE_ENV !== 'production').

Suggested change
// Debug HTMX events
document.addEventListener('htmx:beforeRequest', (e) => {
console.log('HTMX beforeRequest:', e.detail);
});
document.addEventListener('htmx:afterRequest', (e) => {
console.log('HTMX afterRequest:', e.detail);
});
document.addEventListener('htmx:beforeSwap', (e) => {
console.log('HTMX beforeSwap:', e.detail);
});
document.addEventListener('htmx:afterSwap', (e) => {
console.log('HTMX afterSwap:', e.detail);
});
// Debug HTMX events (guarded by explicit debug flag)
const isHtmxDebugEnabled =
typeof window !== "undefined" &&
(
(window.HTMX_DEBUG === true) ||
(typeof window.location === "object" &&
typeof window.location.search === "string" &&
/(?:^|[?&])htmx-debug=1(?:&|$)/.test(window.location.search))
);
if (isHtmxDebugEnabled) {
document.addEventListener('htmx:beforeRequest', (e) => {
console.log('HTMX beforeRequest:', e.detail);
});
document.addEventListener('htmx:afterRequest', (e) => {
console.log('HTMX afterRequest:', e.detail);
});
document.addEventListener('htmx:beforeSwap', (e) => {
console.log('HTMX beforeSwap:', e.detail);
});
document.addEventListener('htmx:afterSwap', (e) => {
console.log('HTMX afterSwap:', e.detail);
});
}

Copilot uses AI. Check for mistakes.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Totally agree with Copilot here!

Comment thread toast.templ
Comment on lines +85 to +141
// Toast provides a toast notification for user feedback.
// Use with popui.showToast() JavaScript function to trigger toasts dynamically.
// Valid variants are: default, success, error, warning, info
templ Toast(opts ...props.Toast) {
{{ p := props.First(opts) }}
{{ duration := p.Duration }}
{{ if duration == 0 { duration = 3000 } }}
<div
if p.ID != "" {
id={ p.ID }
}
if p.Animated {
data-popui-toast
data-popui-toast-duration={ fmt.Sprintf("%d", duration) }
}
class={
tailwind.Merge(
// rounded-lg (8px), gap-2 (8px), py-2.5 (10px), px-3 (12px)
"pointer-events-auto flex gap-2 rounded-lg shadow-lg max-w-sm w-full transition-all duration-300 bg-background-default-negative py-2.5 px-3",
// Center icon with title when no description, align to top when there is description
classes.Join(map[string]bool{
"items-center": p.Description == "",
"items-start": p.Description != "",
}),
p.Class,
),
}
if p.Animated {
style="opacity: 0; transform: translateY(10px);"
}
{ p.Attributes... }
>
if p.Icon {
<div class={ tailwind.Merge("flex-shrink-0", toastIconClass(p.Variant)) }>
if p.Variant == "success" {
@icons.Success()
} else if p.Variant == "error" {
@icons.Failure()
} else if p.Variant == "warning" {
@icons.Warning()
} else if p.Variant == "info" {
@icons.Info()
} else {
@icons.Notification()
}
</div>
}
<div class="flex-1 min-w-0">
if p.Title != "" {
<p class="text-base font-medium text-foreground-inverse">{ p.Title }</p>
}
if p.Description != "" {
<p class="text-base text-foreground-inverse-secondary">{ p.Description }</p>
}
{ children... }
</div>
</div>

Copilot AI Feb 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

props.Toast includes a Dismissible flag, but the Toast component markup never uses it (there is no close button / dismissal control). Either wire Dismissible into the rendered output (e.g., render a close button when true) or remove the prop to avoid a misleading API.

Copilot uses AI. Check for mistakes.
Comment thread popover.templ
Comment on lines +12 to +33
{{ p := props.First(opts) }}
<div
popover
id={ p.ID }
role="menu"
class={
tailwind.Merge(
"popover-modal",
"border border-border rounded-xl p-6 bg-background w-fit h-fit",
"relative inline-block",
classes.Join(map[string]bool{"flex justify-end": p.RightAlign}),
),
}
>
@Button(props.Button{
Attributes: templ.Attributes{"popovertarget": p.ID},
Size: "icon",
Variant: p.ButtonVariant,
}) {
{ p.ButtonLabel }
}
<div popover id={ p.ID }></div>
<div
class={
tailwind.Merge(
"hidden absolute left-0 top-8 border border-border rounded-xl p-1 w-fit min-w-48 bg-background z-[9999] shadow-lg popover-menu",

Copilot AI Feb 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Popover relies on p.ID for both the popovertarget attribute and the id of the popover element, but there’s no fallback/generation when ID is empty anymore. If a caller omits ID, this will render invalid HTML (id="") and the trigger won’t work; consider restoring ID generation or enforcing/validating that ID is required (and documenting it).

Copilot uses AI. Check for mistakes.
Comment thread loading.templ
Comment on lines +70 to +76
style={ loadingStyles(loading.Size, loading.Width) }
>
<style>@keyframes shimmer{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}</style>
<div
class="absolute inset-0 bg-background-default-secondary"
style="mask-image: linear-gradient(90deg, transparent 0%, black 50%, transparent 100%); -webkit-mask-image: linear-gradient(90deg, transparent 0%, black 50%, transparent 100%); animation: shimmer 1.5s ease-in-out infinite;"
></div>

Copilot AI Feb 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

loadingSkeleton inlines a <style> tag defining @keyframes shimmer inside every rendered skeleton. This duplicates CSS in the DOM and can bloat output if many skeletons are shown; consider moving the keyframes to components.css/Tailwind (or a single global style) and only render the shimmer divs here.

Copilot uses AI. Check for mistakes.
Comment thread toast.templ
Comment on lines +89 to +92
{{ p := props.First(opts) }}
{{ duration := p.Duration }}
{{ if duration == 0 { duration = 3000 } }}
<div

Copilot AI Feb 20, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

props.Toast.Duration is documented as “0 for no auto-dismiss”, but the component currently treats Duration == 0 as “use default 3000ms”. This makes it impossible to disable auto-dismiss as the API claims; consider changing the defaulting logic (e.g., only default when Duration is unset via a pointer/optional field, or use a sentinel like -1), or update the comment/API to match the behavior.

Copilot uses AI. Check for mistakes.
Comment thread .cursor/rules/project-build.mdc

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where did my context menu go?

@beliolfa
beliolfa marked this pull request as draft February 26, 2026 12:41
@beliolfa
beliolfa marked this pull request as draft February 26, 2026 12:41
@beliolfa
beliolfa requested review from beliolfa and removed request for beliolfa June 2, 2026 09:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants