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

Ux Quill Laravel Package

ehyiah/ux-quill

Symfony UX bundle integrating the Quill.js WYSIWYG editor. Add QuillType to your forms (works well with EasyAdmin), supports AssetMapper or Webpack Encore builds, and includes simple Twig patterns to render saved HTML with Quill styling.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Symfony UX Alignment: The package is a Symfony UX Bundle, designed to integrate seamlessly with Symfony’s UX ecosystem (Stimulus, Turbo, Live Components). This ensures compatibility with Symfony’s modern frontend architecture, reducing friction in adoption.
  • Form System Integration: Built as a FormType (QuillType), it integrates natively with Symfony’s form system, enabling WYSIWYG fields in forms, EasyAdmin CRUD interfaces, or custom form builders without architectural disruption.
  • Modular Design: Supports custom fields/modules via PHP interfaces (QuillInlineFieldInterface, QuillFieldModuleInterface), allowing TPMs to extend functionality (e.g., adding a custom toolbar button or module) without forking the package. This modularity aligns with Symfony’s component-based philosophy.
  • Event-Driven Architecture: Exposes Stimulus events (e.g., quill:connect, hydrate:before) for JavaScript customization, enabling granular control over Quill’s lifecycle (e.g., dynamic toolbar updates, content sanitization).
  • Twig Component Support: Provides a <twig:QuillContent> component for rendering HTML output, reducing template complexity and ensuring consistency across views.

Integration Feasibility

  • Minimal Setup: Requires only composer require ehyiah/ux-quill and asset configuration (AssetMapper or Webpack Encore). No database migrations or major refactoring needed.
  • Asset Compatibility:
    • AssetMapper: Works out-of-the-box for static assets (CSS/JS). For EasyAdmin, requires explicit asset mapping (documented in the usage guide).
    • Webpack Encore: Requires yarn install/npm install and recompilation (standard for Symfony UX bundles). May need adjustments for custom modules (e.g., Katex, Highlight.js).
  • Twig Rendering: Requires explicit HTML wrapping (<div class="ql-snow">) for class-based styling or inline styling for CSS-free rendering. This adds minor template complexity but ensures flexibility.
  • EasyAdmin Integration: Designed for EasyAdmin compatibility, enabling WYSIWYG fields in CRUD interfaces with minimal configuration (e.g., QuillAdminField::new()).

Technical Risk

  • Asset Management Quirks:
    • EasyAdmin Asset Mapping: Known issues with addAssetMapperEntries() may require manual workarounds (e.g., overriding EasyAdmin’s asset configuration). Documented in the changelog.
    • Webpack Encore: Dynamic imports were reverted in v2.1.1 due to compatibility issues, which may affect custom module loading. Requires explicit asset configuration.
  • HTML Sanitization:
    • Deprecation of symfony/html-sanitizer: The bundle now relies on Symfony’s built-in sanitizer (introduced in v3.0.0). TPMs must ensure their forms use Symfony’s Censor filter or DOMPurify for additional security if raw HTML is accepted.
    • Table Module: Initial content is now set via JavaScript (v3.0.0+) to support tables, which may require adjustments to existing templates.
  • Stimulus/Turbo Compatibility:
    • Live Components: Tested for compatibility (v3.0.0+), but complex interactions (e.g., nested Live Components) may need custom Stimulus controllers.
    • Turbo Context: Race conditions with dynamic imports (e.g., Katex, Highlight.js) were fixed in v3.4.2, but custom modules may still require testing.
  • Deprecations:
    • Breaking Changes: v2.1.0 renamed path to upload_endpoint in upload_handler options, and v3.0.0 moved modules to the top level. Upgrades may require form/type updates.
    • Sanitizer Options: Removed in v3.0.0; TPMs must migrate to Symfony’s default sanitizer or custom solutions.

Key Questions for TPM

  1. Asset Strategy:
    • Are you using AssetMapper or Webpack Encore? AssetMapper simplifies integration but may require EasyAdmin overrides.
    • Do you need custom modules (e.g., Katex, Highlight.js)? These may require additional asset configuration or Webpack adjustments.
  2. HTML Sanitization:
    • How will you handle raw HTML output? Will Symfony’s built-in sanitizer suffice, or do you need DOMPurify or a custom filter?
    • Are you using the table module? This requires JavaScript-based initial content loading (v3.0.0+).
  3. EasyAdmin Integration:
    • Will you use EasyAdmin CRUD? The bundle provides QuillAdminField, but complex forms may need custom field types.
    • Do you need inline styling (CSS-free rendering)? This requires template adjustments (style="inline").
  4. Customization Needs:
    • Do you need custom toolbars or modules? The bundle supports PHP/JS extensions, but complex customizations may require Stimulus controller overrides.
    • Will you use Stimulus/Turbo? Test interactions like Live Components or Turbo-driven updates for edge cases.
  5. Upgrade Path:
    • Are you on Symfony 6/7/8? The bundle supports Symfony 8 (v3.3.0+), but older versions may need compatibility checks.
    • Do you have legacy forms using the old sanitizer? These will need updates to Symfony’s default sanitizer.
  6. Performance:
    • Is the ~100KB JS/CSS footprint acceptable? Compare against alternatives like tiptap (~50KB) if performance is critical.
    • Will you use inline styling to reduce CSS dependencies? This trades Quill’s default styles for manual styling.

Integration Approach

Stack Fit

  • Symfony Ecosystem:
    • Symfony UX: The bundle is a first-class citizen in Symfony’s UX stack, integrating with Stimulus, Turbo, and Live Components. Ideal for projects already using these tools.
    • EasyAdmin: Designed for EasyAdmin compatibility, enabling WYSIWYG fields in CRUD interfaces with minimal configuration (e.g., QuillAdminField::new()).
    • Form System: Works seamlessly with Symfony’s form system, allowing WYSIWYG fields alongside other form types (e.g., TextType, EntityType).
  • Frontend Tools:
    • AssetMapper: Preferred for static asset management (CSS/JS). Requires explicit mapping for EasyAdmin.
    • Webpack Encore: Supported but requires yarn install/npm install and recompilation. May need adjustments for custom modules.
    • Twig: Provides a <twig:QuillContent> component for rendering HTML, reducing template complexity.
  • Database/Backend:
    • No Schema Changes: Stores rich-text content as HTML strings (e.g., text or longtext columns). No ORM-specific requirements.
    • Sanitization: Relies on Symfony’s built-in sanitizer (v3.0.0+). TPMs must ensure forms use Censor or DOMPurify for additional security.

Migration Path

  1. Assessment Phase:
    • Audit existing forms for textarea fields that could benefit from WYSIWYG (e.g., description, content, bio).
    • Check asset management (AssetMapper vs. Webpack Encore) and plan for configuration updates.
    • Review HTML sanitization requirements and test Symfony’s built-in sanitizer or DOMPurify.
  2. Pilot Integration:
    • Start with a non-critical form (e.g., a blog post editor) to test integration.
    • Replace a TextType field with QuillType:
      $builder->add('content', QuillType::class, [
          'quill_options' => [
              'modules' => ['history', 'toolbar'],
              'toolbar' => ['bold', 'italic', 'link'],
          ],
      ]);
      
    • Test asset loading (CSS/JS) and Twig rendering (<twig:QuillContent>).
  3. EasyAdmin Integration (if applicable):
    • Extend EasyAdmin’s CRUD with QuillAdminField:
      $crud->addField('description', QuillAdminField::new()->setQuillOptions([
          'modules' => ['history'],
      ]));
      
    • Verify asset mapping in EasyAdmin’s configureAssets().
  4. Customization Phase:
    • Add custom modules (e.g., MentionModule, TableModule) via PHP interfaces.
    • Extend Stimulus controllers for dynamic behavior (e.g., toolbar updates, content sanitization).
    • Override default assets (e.g., Katex, Highlight.js) if needed.
  5. Sanitization & Security:
    • Configure Symfony’s Censor filter or `
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