agentsclimarketplace

Flux ui patterns

Skill kwhorne/elyra-skills/skills/flux-ui-patterns

51 production-grade Agent Skills for AI coding agents — full software lifecycle (idea → spec → build → review → ship → operate → maintain) plus Laravel/TALL/VILT/Filament stack workflows. Works with Elyra, Claude Code, Cursor, and more.

Install
npx -y skills add kwhorne/elyra-skills --skill flux-ui-patterns

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Build TALL stack UIs with Flux UI the intended way - pick the right component, compose forms and tables, theme with CSS variables, and avoid fighting the library with custom CSS. Use when building or reviewing Blade views in a project using Flux, converting custom Tailwind markup to Flux components, or deciding between Flux and hand-rolled UI.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.2 KB, as published. Nobody here has run it

Flux UI Patterns

Flux earns its keep when you use components as designed — accessibility, dark mode, and keyboard handling come free. Fight it with overrides and you inherit all that work back.

When to use

  • Building Blade/Livewire views in a project that uses Flux UI
  • Reviewing UI code for consistency ("half Flux, half hand-rolled divs")
  • Converting custom Tailwind markup to Flux components
  • "Does Flux have something for this, or do we build it?"

Principles

  • Check Flux first, build second. Before hand-rolling any control, check whether a Flux component (or composition of two) covers it. Hand-rolled means hand-rolled a11y, dark mode, and focus management.
  • Props before classes. Use variant, size, icon props for supported variations. Utility classes on Flux components are for layout (margin, width, grid placement) — not for restyling internals.
  • The accessibility is in the composition. flux:field + flux:label + flux:error wire up for/aria automatically. Skip the wrapper and you silently lose it.
  • Consistency beats preference. One project, one way to render a form row, a table, an action button.

Process

1. Map the design to components

  • Inventory what the page needs: forms, tables, modals, dropdowns, toasts, badges
  • For each, find the Flux equivalent; in elyra, verify against the live index with flux_component_index rather than memory — APIs move
  • No match? Compose primitives (flux:dropdown + flux:navlist, flux:modal + form) before writing custom markup

2. Forms — the standard recipe

<flux:field>
    <flux:label>Email</flux:label>
    <flux:input wire:model.blur="form.email" type="email" />
    <flux:error name="form.email" />
</flux:field>
  • Every input gets the field/label/error wrapper — that's where the a11y wiring lives
  • wire:model granularity per livewire-component-design (deferred by default, .blur for validate-on-blur)
  • Shorthand props (e.g. label="Email" directly on input) are fine — pick one style per project and stick to it

3. Actions and feedback

  • Buttons: variant prop (primary, danger, ghost, …) — one primary action per view region
  • Destructive flows: flux:modal confirmation, danger variant on the confirming button
  • After Livewire actions: toast via Flux's toast component, triggered from the component — not inline status divs

4. Tables and lists

  • Use Flux's table for sortable/paginated data wired to Livewire; keep row actions in a trailing dropdown
  • Empty states: design them explicitly — a bare "No results." row is a design hole

5. Theming — variables, not overrides

  • Customize via the documented CSS variables / Tailwind config (accent color, radius) so all components shift together
  • Dark mode: Flux handles it per component — your job is to not break it with hard-coded bg-white/text-black in surrounding layout
  • If a component must look genuinely different from what props allow, that's a design-system decision: wrap it in your own Blade component once (<x-app.stat-card>), don't sprinkle the same six utilities across twelve views

6. Review pass

# Smell: raw form controls in a Flux project
grep -rn "<input\|<select\|<button" resources/views --include="*.blade.php" | grep -v "flux:"
  • Mixed Flux/hand-rolled controls in the same view → converge
  • Repeated identical class-soup on Flux components → extract a wrapper component
  • In elyra: blade_to_flux suggests conversions; design_system_check catches consistency drift

Output format

## Flux review: <view/feature>

### Component mapping
| UI need | Used | Should be |
|---------|------|-----------|
| date input | raw `<input type="date">` | `flux:input type="date"` |

### Consistency findings
1. <view:line> — <issue> → <fix>

### Extracted wrappers
- `<x-app.…>` for <repeated pattern> (used N places)

### Theming
Variables touched: … | hard-coded colors found: …

Anti-patterns

  • ❌ Hand-rolling a dropdown/modal/toast that Flux ships — and losing keyboard + a11y behavior
  • ❌ Restyling component internals with utility classes instead of variants/props/variables
  • ❌ Inputs without the field/label/error composition — looks fine, fails screen readers
  • bg-white dark:bg-zinc-900 hand-managed on every container while Flux handles its own — drift guaranteed
  • ❌ Three different button styles for the same action across views
  • ❌ Writing Flux component code from memory instead of checking the current component API
  • ❌ One-off wrapper divs with the same 8 classes pasted in 12 views — extract the Blade component

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.