Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Ui Bundle Laravel Package

cisse/ui-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps to First Use

  1. Installation

    composer require cisse/ui-bundle symfonycasts/tailwind-bundle gehrisandro/tailwind-merge-php
    

    Add to config/bundles.php:

    Cisse\Bundle\UiBundle\UiBundleBundle::class => ['all' => true],
    
  2. Configure Tailwind Update assets/app.css:

    @import "tailwindcss";
    @source "../../vendor/cisse/ui-bundle";  /* Critical */
    @tailwind base;
    @tailwind components;
    @tailwind utilities;
    
  3. First Component Usage In a Twig template:

    {{ ui_button('Click Me', { type: 'primary' }) }}
    

    Verify the bundle is registered by checking the generated HTML output.

First Use Case: Rapid Form Creation

{{ ui_form({
    action: path('submit'),
    method: 'POST',
    fields: [
        ui_input('username', { label: 'Username', required: true }),
        ui_select('role', { label: 'Role', options: ['admin', 'user'] }),
        ui_button('Submit', { type: 'submit' })
    ]
}) }}

Implementation Patterns

Component Integration Workflows

  1. Twig Component Usage

    • Basic Components: ui_button, ui_card, ui_modal
      {{ ui_button('Action', { icon: 'edit', variant: 'outline' }) }}
      
    • Nested Components: Forms, tabs, and modals support nested structures:
      {{ ui_modal('Confirm', {
          content: ui_card('Are you sure?', { class: 'p-4' })
      }) }}
      
  2. Dynamic Data Binding Use Twig variables for dynamic content:

    {% for item in items %}
        {{ ui_table_row(item, {
            cells: [
                ui_table_cell(item.name),
                ui_table_cell(item.price, { class: 'font-bold' })
            ]
        }) }}
    {% endfor %}
    
  3. Configuration via PHP Pass complex configurations from controllers:

    return $this->render('template.html.twig', [
        'formConfig' => [
            'fields' => [
                ['type' => 'input', 'name' => 'email', 'label' => 'Email'],
                ['type' => 'checkbox', 'name' => 'subscribe', 'label' => 'Subscribe']
            ]
        ]
    ]);
    
  4. Reusable Component Blocks Create partials for complex UI sections:

    {# _partials/user_card.html.twig #}
    {{ ui_card(user, {
        header: ui_card_header(user.name, { avatar: user.avatar }),
        body: ui_card_body(user.bio)
    }) }}
    

Integration Tips

  • Tailwind Customization: Override default styles by extending the @source directive in your CSS:
    @source "../../vendor/cisse/ui-bundle" {
        @apply 'bg-custom-blue' => 'bg-blue-600';
    }
    
  • Dark Mode: Enable via Tailwind config (tailwind.config.js):
    module.exports = {
        darkMode: 'class',
        // ...
    }
    
    Toggle classes in Twig:
    <div class="{{ ui_dark_mode_toggle() }}">
        {{ ui_button('Toggle Dark Mode', { class: 'dark:bg-gray-800' }) }}
    </div>
    

Gotchas and Tips

Common Pitfalls

  1. Missing @source Directive

    • Symptom: Components render without styles or with incorrect Tailwind classes.
    • Fix: Ensure @source "../../vendor/cisse/ui-bundle" is included before @tailwind directives in your CSS.
  2. Class Merging Conflicts

    • Symptom: Tailwind classes are duplicated or overridden unexpectedly.
    • Fix: Use gehrisandro/tailwind-merge-php for intelligent merging. Configure in config/packages/tailwind.yaml:
      merge_php: true
      
  3. Component Not Found Errors

    • Symptom: Twig throws Unknown "ui_button" function or similar.
    • Fix: Verify the bundle is registered in config/bundles.php and Twig is auto-reloaded (php bin/console cache:clear).
  4. Dark Mode Not Working

    • Symptom: Dark mode classes (dark:...) are ignored.
    • Fix: Ensure darkMode: 'class' is set in tailwind.config.js and the dark class is toggled on the <html> or <body> tag.

Debugging Tips

  • Inspect Generated HTML: Use browser dev tools to verify Tailwind classes are applied correctly.
  • Check Tailwind Build: Run npm run dev or npm run build to ensure Tailwind is processing the @source directive.
  • Component Validation: Use the ui_validate function to check component configurations:
    {{ dump(ui_validate(ui_button('Test', { invalid: 'option' }))) }}
    

Extension Points

  1. Custom Components Extend the bundle by creating new Twig functions in a custom bundle:

    // src/Twig/Extension/CustomUiExtension.php
    public function getFunctions()
    {
        return [
            new \Twig\TwigFunction('ui_custom_component', [$this, 'renderCustomComponent']),
        ];
    }
    
  2. Override Default Styles Use Tailwind’s @layer directive to override component styles:

    @layer components {
        .ui-button {
            @apply bg-red-500 hover:bg-red-700;
        }
    }
    
  3. Add New Component Types Contribute new components by extending the bundle’s Component classes (located in src/Component/). Example:

    // src/Component/CustomComponent.php
    class CustomComponent extends AbstractComponent
    {
        public function render(): string
        {
            return $this->renderHtml('custom_component.html.twig', [
                'data' => $this->data,
            ]);
        }
    }
    

Performance Considerations

  • Lazy-Load Components: For large pages, dynamically load components via JavaScript to reduce initial load time.
  • Purge Unused CSS: Configure Tailwind to purge unused classes in production (tailwind.config.js):
    module.exports = {
        purge: [
            './templates/**/*.html.twig',
            './assets/**/*.js',
        ],
    }
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours