From d7c3252c5253d107cca3f75f8ac3a2929cad939f Mon Sep 17 00:00:00 2001 From: Gleb Tv Date: Tue, 23 Sep 2025 21:14:49 +0300 Subject: [PATCH] feat: Add ActiveAdmin 4 and Propshaft support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Switch to ActiveAdmin 4 beta with Tailwind CSS - Replace Sprockets with Propshaft for Rails 8 - Migrate from jQuery to vanilla JavaScript - Implement proper module initialization without setTimeout hacks - Add esbuild for JavaScript bundling with clean import aliases - Configure Tailwind CSS build process with ActiveAdmin plugin - Update engine configuration for both Propshaft and Sprockets - Add comprehensive documentation for AA4 gem updates - Maintain backward compatibility with legacy AA versions 🤖 Generated with Claude Code Co-Authored-By: Claude --- .github/workflows/specs.yml | 155 + .github/workflows/specs_rails80.yml | 32 +- Gemfile | 21 +- activeadmin_quill_editor.gemspec | 11 +- docs/activeadmin-4-detailed-reference.md | 932 + docs/activeadmin-4-gem-update-guide.md | 417 + docs/activeadmin-4-propshaft-update.md | 473 + docs/propshaft-readme.md | 320 + docs/propshaft-upgrade.md | 484 + docs/session-summary.md | 97 + docs/tailwind-4/active_admin.rake | 55 + docs/tailwind-4/active_admin.tailwind.css | 16 + .../tailwind-active_admin.config.js | 18 + docs/update-quill.md | 308 + docs/update-tom-select.md | 184 + lib/activeadmin/quill_editor/engine.rb | 26 +- spec/dummy/app/assets/builds/active_admin.css | 16 + .../app/assets/builds/active_admin.css.map | 1 + spec/dummy/app/assets/builds/active_admin.js | 17142 ++++++++++++++++ .../app/assets/builds/active_admin.js.map | 7 + spec/dummy/app/assets/config/manifest.js | 6 +- ...ve_admin.js => active_admin_legacy.js.bak} | 0 .../javascripts/activeadmin_quill_editor.js | 1 + .../app/assets/javascripts/application.js | 2 + .../app/assets/stylesheets/active_admin.css | 73 + ...dmin.scss => active_admin_legacy.scss.bak} | 0 spec/dummy/app/javascript/active_admin.js | 26 + .../app/views/layouts/application.html.erb | 1 + spec/dummy/build_activeadmin_css.js | 191 + .../dummy/config/initializers/active_admin.rb | 3 + spec/dummy/esbuild.config.js | 50 + spec/dummy/lib/tasks/active_admin.rake | 34 + spec/dummy/package-lock.json | 2041 ++ spec/dummy/package.json | 21 + spec/dummy/tailwind.config.js | 117 + spec/support/javascript_helper.rb | 118 + spec/system/css_loading_spec.rb | 161 + .../javascripts/activeadmin_quill_editor.js | 220 + 38 files changed, 23764 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/specs.yml create mode 100644 docs/activeadmin-4-detailed-reference.md create mode 100644 docs/activeadmin-4-gem-update-guide.md create mode 100644 docs/activeadmin-4-propshaft-update.md create mode 100644 docs/propshaft-readme.md create mode 100644 docs/propshaft-upgrade.md create mode 100644 docs/session-summary.md create mode 100644 docs/tailwind-4/active_admin.rake create mode 100644 docs/tailwind-4/active_admin.tailwind.css create mode 100644 docs/tailwind-4/tailwind-active_admin.config.js create mode 100644 docs/update-quill.md create mode 100644 docs/update-tom-select.md create mode 100644 spec/dummy/app/assets/builds/active_admin.css create mode 100644 spec/dummy/app/assets/builds/active_admin.css.map create mode 100644 spec/dummy/app/assets/builds/active_admin.js create mode 100644 spec/dummy/app/assets/builds/active_admin.js.map rename spec/dummy/app/assets/javascripts/{active_admin.js => active_admin_legacy.js.bak} (100%) create mode 120000 spec/dummy/app/assets/javascripts/activeadmin_quill_editor.js create mode 100644 spec/dummy/app/assets/javascripts/application.js create mode 100644 spec/dummy/app/assets/stylesheets/active_admin.css rename spec/dummy/app/assets/stylesheets/{active_admin.scss => active_admin_legacy.scss.bak} (100%) create mode 100644 spec/dummy/app/javascript/active_admin.js create mode 100644 spec/dummy/build_activeadmin_css.js create mode 100644 spec/dummy/esbuild.config.js create mode 100644 spec/dummy/lib/tasks/active_admin.rake create mode 100644 spec/dummy/package-lock.json create mode 100644 spec/dummy/package.json create mode 100644 spec/dummy/tailwind.config.js create mode 100644 spec/support/javascript_helper.rb create mode 100644 spec/system/css_loading_spec.rb create mode 100644 vendor/assets/javascripts/activeadmin_quill_editor.js diff --git a/.github/workflows/specs.yml b/.github/workflows/specs.yml new file mode 100644 index 0000000..a03aeed --- /dev/null +++ b/.github/workflows/specs.yml @@ -0,0 +1,155 @@ +--- +name: Specs + +on: + pull_request: + branches: [main, master] + push: + branches: [main, master] + +jobs: + test_legacy: + runs-on: ubuntu-latest + name: Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} / AA ${{ matrix.activeadmin }} + + strategy: + fail-fast: false + matrix: + include: + # Legacy ActiveAdmin 2.x/3.x support + - ruby: '3.0' + rails: '7.0' + activeadmin: '~> 2.9' + - ruby: '3.1' + rails: '7.1' + activeadmin: '~> 3.0' + - ruby: '3.2' + rails: '7.2' + activeadmin: '~> 3.0' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: false + + - name: Install dependencies + run: | + gem install bundler + bundle config set --local without 'development' + bundle install --jobs 4 --retry 3 + env: + RAILS_VERSION: ${{ matrix.rails }} + ACTIVEADMIN_VERSION: ${{ matrix.activeadmin }} + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install NPM dependencies + run: | + cd spec/dummy + npm install + + - name: Build assets + run: | + cd spec/dummy + npm run build + + - name: Run tests + run: bundle exec rspec --profile + env: + RAILS_VERSION: ${{ matrix.rails }} + ACTIVEADMIN_VERSION: ${{ matrix.activeadmin }} + + - name: Archive screenshots on failure + uses: actions/upload-artifact@v4 + if: failure() + with: + name: test-screenshots-legacy-${{ matrix.ruby }}-${{ matrix.rails }} + path: spec/dummy/tmp/capybara + + test_activeadmin_4: + runs-on: ubuntu-latest + name: Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} / AA 4.x + + strategy: + fail-fast: false + matrix: + ruby: ['3.2', '3.3'] + rails: ['7.2', '8.0'] + exclude: + # Rails 8 requires Ruby 3.2+ + - ruby: '3.1' + rails: '8.0' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: false + + - name: Install dependencies for AA4 + run: | + gem install bundler + bundle config set --local without 'development' + bundle add activeadmin --version '~> 4.0.0.beta' --skip-install + bundle add importmap-rails --skip-install + bundle add propshaft --skip-install if [ "${{ matrix.rails }}" = "7.2" ] + bundle install --jobs 4 --retry 3 + env: + RAILS_VERSION: ${{ matrix.rails }} + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install NPM dependencies + run: | + cd spec/dummy + npm install + npm install @activeadmin/activeadmin@^4.0.0-beta + + - name: Build assets + run: | + cd spec/dummy + npm run build + + - name: Run tests + run: bundle exec rspec --profile + env: + RAILS_VERSION: ${{ matrix.rails }} + ACTIVEADMIN_VERSION: '4.0' + + - name: Archive screenshots on failure + uses: actions/upload-artifact@v4 + if: failure() + with: + name: test-screenshots-aa4-${{ matrix.ruby }}-${{ matrix.rails }} + path: spec/dummy/tmp/capybara + + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2' + bundler-cache: true + + - name: Run RuboCop + run: bundle exec rubocop --parallel \ No newline at end of file diff --git a/.github/workflows/specs_rails80.yml b/.github/workflows/specs_rails80.yml index a40312a..1c00379 100644 --- a/.github/workflows/specs_rails80.yml +++ b/.github/workflows/specs_rails80.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: - ruby: ['3.2', '3.4'] + ruby: ['3.2', '3.3'] env: RAILS_VERSION: 8.0 @@ -26,10 +26,32 @@ jobs: uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} - bundler-cache: true + bundler-cache: false + + - name: Install dependencies + run: | + gem install bundler + bundle install --jobs 4 --retry 3 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install NPM dependencies + run: | + cd spec/dummy + npm install + + - name: Build assets + run: | + cd spec/dummy + npm run build - name: Database setup - run: bin/rails db:create db:migrate db:test:prepare + run: | + cd spec/dummy + bundle exec rails db:create db:migrate db:test:prepare - name: Run tests run: bundle exec rspec --profile @@ -38,5 +60,5 @@ jobs: uses: actions/upload-artifact@v4 if: failure() with: - name: test-failed-screenshots - path: spec/dummy/tmp/screenshots + name: test-failed-screenshots-rails8-${{ matrix.ruby }} + path: spec/dummy/tmp/capybara diff --git a/Gemfile b/Gemfile index fe70c7d..54f99f7 100644 --- a/Gemfile +++ b/Gemfile @@ -21,8 +21,13 @@ rails = eval_version('rails', rails_ver) gem(*rails) active_admin_ver = ENV.fetch('ACTIVEADMIN_VERSION', '') -active_admin = eval_version('activeadmin', active_admin_ver) -gem(*active_admin) +if active_admin_ver.empty? + # Use ActiveAdmin 4 beta by default for development + gem 'activeadmin', '~> 4.0.0.beta' +else + active_admin = eval_version('activeadmin', active_admin_ver) + gem(*active_admin) +end ruby32 = ruby_ver.empty? || Gem::Version.new(ruby_ver) >= Gem::Version.new('3.2') rails72 = rails_ver.empty? || Gem::Version.new(rails_ver) >= Gem::Version.new('7.2') @@ -39,8 +44,16 @@ gem 'bigdecimal' gem 'csv' gem 'mutex_m' gem 'puma' -gem 'sassc' -gem 'sprockets-rails' + +# Asset pipeline - use Propshaft for Rails 8, Sprockets for older versions +rails80 = rails_ver.empty? || Gem::Version.new(rails_ver) >= Gem::Version.new('8.0') +if rails80 + gem 'propshaft' + gem 'importmap-rails' # Required for ActiveAdmin 4 +else + gem 'sassc' + gem 'sprockets-rails' +end # Testing gem 'capybara' diff --git a/activeadmin_quill_editor.gemspec b/activeadmin_quill_editor.gemspec index 0bfe77f..7f504c1 100644 --- a/activeadmin_quill_editor.gemspec +++ b/activeadmin_quill_editor.gemspec @@ -12,18 +12,19 @@ Gem::Specification.new do |spec| spec.license = 'MIT' spec.authors = ['Mattia Roccoberton'] spec.email = 'mat@blocknot.es' - spec.homepage = 'https://github.com/blocknotes/activeadmin_quill_editor' + spec.homepage = 'https://github.com/rs-pro/activeadmin-quill_editor' - spec.required_ruby_version = '>= 3.0' + spec.required_ruby_version = '>= 3.2' spec.metadata['homepage_uri'] = spec.homepage - spec.metadata['changelog_uri'] = 'https://github.com/blocknotes/activeadmin_quill_editor/blob/main/CHANGELOG.md' + spec.metadata['changelog_uri'] = 'https://github.com/rs-pro/activeadmin-quill_editor/blob/main/CHANGELOG.md' spec.metadata['source_code_uri'] = spec.homepage spec.metadata['rubygems_mfa_required'] = 'true' - spec.files = Dir['{app,lib}/**/*', 'LICENSE.txt', 'Rakefile', 'README.md'] + spec.files = Dir['{app,lib,vendor}/**/*', 'LICENSE.txt', 'Rakefile', 'README.md'] spec.require_paths = ['lib'] - spec.add_runtime_dependency 'activeadmin', '>= 2.9', '< 4' # rubocop:disable Gemspec/AddRuntimeDependency + spec.add_runtime_dependency 'activeadmin', '>= 2.9', '< 5' # rubocop:disable Gemspec/AddRuntimeDependency + spec.add_runtime_dependency 'rails', '>= 7.0' end diff --git a/docs/activeadmin-4-detailed-reference.md b/docs/activeadmin-4-detailed-reference.md new file mode 100644 index 0000000..0d2eb78 --- /dev/null +++ b/docs/activeadmin-4-detailed-reference.md @@ -0,0 +1,932 @@ +# ActiveAdmin 4 Migration Guide for Gem Maintainers + +## Overview + +This document provides a comprehensive guide for gem maintainers on how to update their gems to support ActiveAdmin 4, based on the changes made to the `activeadmin-searchable_select` gem. The migration involved addressing significant changes in asset handling, JavaScript module systems, dependency management, and CSS selectors. + +## Key Migration Steps + +### 1. Update Dependency Constraints + +#### Ruby Version Requirements +- **Minimum Ruby version**: 3.2 (Ruby 3.0 and 3.1 are dropped in ActiveAdmin 4) +- Update your gemspec: `spec.required_ruby_version = '>= 3.2'` + +#### Rails Version Requirements +- **Minimum Rails version**: 7.0 (Rails 6.1 support dropped) +- ActiveAdmin 4 supports Rails 7.x and 8.x + +#### ActiveAdmin Version +```ruby +# In gemspec +spec.add_runtime_dependency 'activeadmin', ['>= 1.x', '< 5'] +``` + +### 2. Asset Pipeline Migration + +ActiveAdmin 4 moved away from the traditional Rails asset pipeline to modern JavaScript bundlers. + +#### Key Changes: +- ActiveAdmin 4 assumes `cssbundling-rails` and `importmap-rails` are installed +- No longer uses `register_stylesheet` or `register_javascript` methods +- Requires explicit JavaScript module initialization + +#### CSS bundling pattern (Rails 7 cssbundling + Tailwind) + +- Build CSS to `app/assets/builds/active_admin.css` and expose it via `app/assets/config/manifest.js`: + - `//= link_tree ../builds` + - `//= link active_admin.css` + - `//= link active_admin.js` + - `//= link trumbowyg/icons.svg` (when using Trumbowyg) +- Keep a single Tailwind config at the Rails app root (avoid duplicates). Using ESM works well: + - `tailwind.config.mjs` with `import activeAdminPlugin from '@activeadmin/activeadmin/plugin'` +- Source file `app/assets/stylesheets/active_admin_source.css` contains Tailwind directives, gem overrides and imports. +- If Tailwind CLI does not inline vendor `@import` from `node_modules`, concatenate vendor CSS before building. Example build script: + +```json +// spec/internal/package.json +{ + "scripts": { + "build:css": "node ./build_css.js" + } +} +``` + +```js +// spec/internal/build_css.js +const fs = require('fs'); +const path = require('path'); +const { spawnSync } = require('child_process'); +const root = __dirname; +const inputPath = path.join(root, 'app/assets/stylesheets/active_admin_source.css'); +const vendorCssPath = path.join(root, 'node_modules/trumbowyg/dist/ui/trumbowyg.css'); +const tmpPath = path.join(root, 'app/assets/stylesheets/__aa_tmp.css'); +const outPath = path.join(root, 'app/assets/builds/active_admin.css'); +const src = fs.readFileSync(inputPath, 'utf8').split(/\r?\n/); +const vendorCss = fs.readFileSync(vendorCssPath, 'utf8'); +const tailwind = ['@tailwind base;','@tailwind components;','@tailwind utilities;'].join('\n'); +const body = src.slice(3).filter(l => !l.includes('trumbowyg.css')).join('\n'); +fs.writeFileSync(tmpPath, `${tailwind}\n\n${vendorCss}\n\n${body}`); +spawnSync('npx', ['tailwindcss','-c', path.join(root,'tailwind.config.mjs'),'-i', tmpPath,'-o', outPath], { stdio: 'inherit', cwd: root }); +fs.unlinkSync(tmpPath); +``` + +This ensures vendor CSS (e.g., Trumbowyg) ships inside the built `active_admin.css` while keeping Tailwind at the top of the cascade so overrides behave as expected. + +#### JavaScript Module Support + +Create multiple module formats to support different bundlers: + +1. **ESM Module** (`your_gem.esm.js`): +```javascript +import $ from 'jquery'; +import select2 from 'select2'; // Or your jQuery plugin + +// Critical: Initialize jQuery plugins on the jQuery object for production builds +// This ensures the plugin methods are available on jQuery selections +select2($); + +// Ensure jQuery is globally available for other scripts +window.$ = window.jQuery = $; + +// Your initialization code wrapped in a DOM ready handler +$(() => { + // Initialize your plugin on specific selectors + $('.your-selector').yourPlugin({ + // plugin options + }); + + // Listen for Turbo/Turbolinks events for dynamic content + $(document).on('turbo:load turbolinks:load', () => { + $('.your-selector').yourPlugin(); + }); + + // For ActiveAdmin's dynamic content (filters, forms) + $(document).on('has_many_add:after', '.has_many_container', () => { + $('.your-selector').yourPlugin(); + }); +}); + +// Export for use as a module +export default function initializeYourGem() { + // Initialization logic +} +``` + +2. **Traditional Module** (`your_gem.js` for backward compatibility): +```javascript +//= require jquery +//= require select2 + +(function($) { + 'use strict'; + + $(document).ready(function() { + $('.your-selector').yourPlugin(); + }); + + // Turbolinks/Turbo support + $(document).on('turbo:load turbolinks:load', function() { + $('.your-selector').yourPlugin(); + }); +})(jQuery); +``` + +3. **CDN-compatible version** (for importmap users): +```javascript +// Assumes jQuery and plugins are loaded via CDN +(() => { + 'use strict'; + + const $ = window.jQuery || window.$; + + if (!$) { + console.error('jQuery is required for YourGem'); + return; + } + + // Wait for DOM ready + $(() => { + $('.your-selector').yourPlugin(); + }); +})(); +``` + +### 3. Installation Generator + +Create a generator to help users set up your gem with different bundlers: + +```ruby +module YourGem + module Generators + class InstallGenerator < Rails::Generators::Base + class_option :bundler, + type: :string, + default: 'esbuild', + enum: %w[esbuild importmap webpack] + + def setup_javascript + case options[:bundler] + when 'esbuild' + setup_esbuild + when 'importmap' + setup_importmap + when 'webpack' + setup_webpack + end + end + + private + + def setup_esbuild + # Add imports to app/javascript/active_admin.js + append_to_file 'app/javascript/active_admin.js' do + <<~JS + import $ from 'jquery'; + import yourPlugin from 'your-plugin'; + + // Initialize plugin on jQuery + yourPlugin($); + window.$ = window.jQuery = $; + + import '@your-scope/your-gem'; + JS + end + end + + def setup_importmap + # Add pins to config/importmap.rb + append_to_file 'config/importmap.rb' do + <<~RUBY + pin "jquery", to: "https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js" + pin "your-plugin", to: "https://cdn.jsdelivr.net/npm/your-plugin/dist/plugin.min.js" + pin "your-gem", to: "your-gem.js" + RUBY + end + end + end + end +end +``` + +### 4. NPM Package Publishing + +If your gem includes JavaScript, consider publishing an NPM package: + +#### Package.json Configuration +```json +{ + "name": "@activeadmin/your-gem", + "version": "1.0.0", + "description": "Your gem description for ActiveAdmin", + "main": "src/index.js", + "module": "src/index.js", + "exports": { + ".": { + "import": "./src/index.js", + "require": "./src/index.js", + "default": "./src/index.js" + }, + "./css": "./src/styles.scss" + }, + "peerDependencies": { + "jquery": ">= 3.0, < 5", + "select2": "^4.0.13" // Add your dependencies here + }, + "files": [ + "src/**/*", + "app/assets/**/*", + "vendor/assets/**/*" + ], + "scripts": { + "prepare_sources": "mkdir -p src && cp -r app/assets/javascripts/active_admin/* src/ && cp -r app/assets/stylesheets/active_admin/* src/", + "prepublishOnly": "npm run prepare_sources" + }, + "repository": { + "type": "git", + "url": "https://github.com/your-org/your-gem.git" + }, + "keywords": ["activeadmin", "rails", "your-feature"], + "author": "Your Name", + "license": "MIT" +} +``` + +#### Preparing JavaScript Assets for NPM + +Create a script to copy your assets to the NPM package structure: + +```bash +#!/bin/bash +# scripts/prepare_npm_package.sh + +# Create src directory for NPM +mkdir -p src + +# Copy JavaScript files +cp -r app/assets/javascripts/active_admin/* src/ + +# Copy SCSS files if needed +cp -r app/assets/stylesheets/active_admin/* src/ + +# Ensure ESM module is included +cp app/assets/javascripts/active_admin/your_gem.esm.js src/index.js +``` + +### 5. CSS Selector Updates + +ActiveAdmin 4 introduced several CSS class changes: + +| ActiveAdmin 3.x | ActiveAdmin 4.x | +|----------------|-----------------| +| `.filter_form` | `.filters-form` | +| `.tabs` component | Removed - use divs with Tailwind | +| `.columns` component | Replaced with Tailwind grid | + +Update your JavaScript and CSS accordingly: +```javascript +// Old +$('.filter_form select').select2(); + +// New +$('.filters-form select').select2(); +``` + +### 6. Testing Updates with Combustion + +#### Complete Combustion Workflow for ActiveAdmin 4 Gems + +**CRITICAL**: This workflow is specifically for testing ActiveAdmin extension gems with Combustion. + +##### Step 1: Add Dependencies to Gemfile + +```ruby +# Gemfile (for development/testing) +gem 'combustion' +gem 'importmap-rails', '~> 2.0' # Required for ActiveAdmin 4 +``` + +##### Step 2: Run Combustion Generator (MANDATORY!) + +```bash +# NEVER manually create spec/internal structure! +bundle exec combust +``` + +This creates: +- `spec/internal/` - minimal Rails app structure +- `config.ru` - in gem root for `bundle exec rackup` +- Basic Rails directories and config files + +##### Step 3: Set Up Test App Structure + +After generator, create these files: + +```bash +# Create necessary directories +mkdir -p spec/internal/app/models +mkdir -p spec/internal/app/admin +mkdir -p spec/internal/app/assets/stylesheets +mkdir -p spec/internal/app/javascript +mkdir -p spec/internal/config/initializers +``` + +##### Basic Combustion Configuration +```ruby +# spec/rails_helper.rb +ENV['RAILS_ENV'] ||= 'test' + +require 'combustion' + +# Initialize Combustion with only needed components +Combustion.path = 'spec/internal' +Combustion.initialize!(:active_record, :action_controller, :action_view) do + config.load_defaults Rails::VERSION::STRING.to_f if Rails::VERSION::MAJOR >= 7 +end + +require 'rspec/rails' +require 'capybara/rails' +``` + +##### Step 4: Configure config.ru (CRITICAL Loading Order!) + +```ruby +# config.ru - MUST control loading order for ActiveAdmin! +require "rubygems" +require "bundler" + +# DON'T use Bundler.require - it loads gems too early! +Bundler.setup(:default, :development) + +# Load Rails and combustion first +require 'combustion' + +# Initialize Combustion with Rails components +Combustion.initialize! :active_record, :action_controller, :action_view do + config.load_defaults Rails::VERSION::STRING.to_f if Rails::VERSION::MAJOR >= 7 +end + +# NOW we can load ActiveAdmin and its dependencies after Rails is initialized +require 'importmap-rails' +require 'active_admin' +require 'your_activeadmin_gem' + +run Combustion::Application +``` + +##### Step 5: Configure ActiveAdmin Assets + +```ruby +# spec/internal/app/assets/stylesheets/active_admin.css +@tailwind base; +@tailwind components; +@tailwind utilities; +``` + +```ruby +# spec/internal/config/importmap.rb +pin "@activeadmin/activeadmin", to: "active_admin.js", preload: true +``` + +```javascript +// spec/internal/app/javascript/active_admin.js +// Placeholder for ActiveAdmin JS +console.log("ActiveAdmin loaded"); +``` + +##### Step 6: Set Up Test Models and Admin Resources + +```ruby +# spec/internal/db/schema.rb +ActiveRecord::Schema.define do + create_table :active_admin_comments, force: true do |t| + t.string :namespace + t.text :body + t.references :resource, polymorphic: true + t.references :author, polymorphic: true + t.timestamps + end + + create_table :posts, force: true do |t| + t.string :title + t.text :body + t.text :description + t.timestamps + end +end +``` + +```ruby +# spec/internal/config/routes.rb +Rails.application.routes.draw do + ActiveAdmin.routes(self) + root to: 'admin/dashboard#index' +end +``` + +```ruby +# spec/internal/config/initializers/active_admin.rb +ActiveAdmin.setup do |config| + config.site_title = "Test App" + config.authentication_method = false + config.current_user_method = false + config.batch_actions = true +end +``` + +##### Step 7: Configure rails_helper.rb + +```ruby +# spec/rails_helper.rb +ENV['RAILS_ENV'] ||= 'test' + +require 'combustion' + +Combustion.path = 'spec/internal' +Combustion.initialize!(:active_record, :action_controller, :action_view) do + config.load_defaults Rails::VERSION::STRING.to_f if Rails::VERSION::MAJOR >= 7 +end + +require 'rspec/rails' +require 'capybara/rails' +``` + +##### Step 8: Running the Test App + +```bash +# Start the test app server +bundle exec rackup +# Visit http://localhost:9292/admin +``` + +#### Critical Testing Pitfall: Model Registration Conflicts + +**Problem**: Dynamic ActiveAdmin registrations in tests conflict with static admin files. + +**Solution**: Choose ONE approach per model: + +1. **Static Registration** (for consistent configs): +```ruby +# spec/internal/app/admin/users.rb +ActiveAdmin.register User do + permit_params :name, :email + # Fixed configuration +end +``` + +2. **Dynamic Registration** (for varying configs): +```ruby +# spec/support/active_admin_helpers.rb +module ActiveAdminHelpers + module_function + + def setup + ActiveAdmin.application = nil + yield # Dynamic registration block + reload_routes! + end + + def reload_routes! + Rails.application.reload_routes! + end +end + +# In test - NO static admin file for Post model +ActiveAdminHelpers.setup do + ActiveAdmin.register(Post) do + # Test-specific configuration + end +end +``` + +**Important**: Never mix static and dynamic registration for the same model! + +#### Capybara Configuration with Playwright +```ruby +# spec/support/capybara.rb +require 'capybara-playwright-driver' + +Capybara.register_driver :playwright do |app| + Capybara::Playwright::Driver.new( + app, + browser_type: :chromium, + headless: true, + viewport: { width: 1920, height: 1080 } + ) +end + +Capybara.default_driver = :rack_test +Capybara.javascript_driver = :playwright + +# Important: Set server for JS tests +Capybara.server = :puma, { Silent: true } +``` + +#### Waiting for JavaScript/AJAX in Tests +```ruby +# spec/support/wait_helpers.rb +module WaitHelpers + def wait_for_ajax + Timeout.timeout(Capybara.default_max_wait_time) do + sleep 0.1 + loop until finished_all_ajax_requests? + end + end + + def finished_all_ajax_requests? + page.evaluate_script('jQuery.active').zero? + end + + # For Select2 or similar plugins + def wait_for_select2 + expect(page).to have_css('.select2-container', wait: 5) + end +end + +RSpec.configure do |config| + config.include WaitHelpers, type: :feature +end +``` + +### 7. Production Build Issues + +Common production issues and solutions: + +#### Issue: JavaScript plugin not initialized +**Solution**: Explicitly initialize jQuery plugins +```javascript +import select2 from 'select2'; +import $ from 'jquery'; + +// This is critical for production builds +select2($); +``` + +#### Issue: jQuery not globally available +**Solution**: Ensure global assignment +```javascript +window.$ = window.jQuery = $; +``` + +#### Issue: Assets not loading in production +**Solution**: Use CDN fallbacks or vendor assets +```ruby +# In your gem's engine.rb +class Engine < ::Rails::Engine + initializer 'your_gem.assets' do |app| + if Rails.env.production? + # Add fallback assets + end + end +end +``` + +### 8. CI/CD Updates + +Update your GitHub Actions workflow: + +```yaml +name: CI +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + ruby: ['3.2', '3.3'] + rails: ['7.0', '7.1', '7.2', '8.0'] + activeadmin: ['4.0.0.beta16'] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: true + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install npm dependencies + run: npm install + + - name: Install Playwright browsers + run: npx playwright install chromium + + - name: Run tests + run: bundle exec rspec +``` + +### 9. Appraisals Configuration + +Use Appraisal gem to test against multiple versions: + +```ruby +# Appraisals file +appraise 'rails-7.x-active-admin-4.x' do + gem 'rails', '~> 7.0' + gem 'activeadmin', '~> 4.0.0.beta16' + gem 'propshaft' # Required - Sprockets not supported +end + +appraise 'rails-8.x-active-admin-4.x' do + gem 'rails', '~> 8.0' + gem 'activeadmin', '~> 4.0.0.beta16' + # Rails 8 includes Propshaft by default +end +``` + +### 10. Common Pitfalls and Solutions + +#### Pitfall 1: Select2 or similar jQuery plugins not working +**Root Cause**: Plugin not attached to jQuery object in production +**Solution**: Explicitly call `plugin($)` after importing +```javascript +import select2 from 'select2'; +import $ from 'jquery'; +select2($); // Critical - attaches plugin to jQuery +``` + +#### Pitfall 2: CSS classes not found +**Root Cause**: ActiveAdmin 4 changed many CSS selectors +**Solution**: Search and replace old selectors with new ones +- `.filter_form` → `.filters-form` +- `.select2-container` needs explicit initialization in tests + +#### Pitfall 3: Tests passing locally but failing in CI +**Root Cause**: Missing JavaScript dependencies or browser drivers +**Solution**: +```yaml +# .github/workflows/ci.yml +- name: Install Playwright browsers + run: npx playwright install chromium +``` + +#### Pitfall 4: Assets not compiling in production +**Root Cause**: Missing bundler configuration +**Solution**: Provide clear setup instructions for each bundler type in your README + +#### Pitfall 5: Model registration conflicts in tests +**Root Cause**: Static admin files override dynamic test registrations +**Solution**: +- Delete static admin files for models that need dynamic config +- Keep static files only for models with consistent config +- Never mix both approaches for the same model + +#### Pitfall 6: Input HTML options not passing through +**Root Cause**: Options can be lost during form DSL processing +**Solution**: Test with clean models not affected by other registrations +```ruby +# Test with a model that has no static admin file +ActiveAdmin.register(TestModel) do + form do |f| + f.input :field, as: :searchable_select, + input_html: { class: 'custom-class' } + end +end +``` + +#### Pitfall 7: Flaky JavaScript tests +**Root Cause**: Not waiting for AJAX/DOM updates +**Solution**: Add proper wait helpers +```ruby +def wait_for_select2 + expect(page).to have_css('.select2-container', wait: 5) +end +``` + +#### Pitfall 8: Rails 8 compatibility issues +**Root Cause**: Formtastic 5.0 changes, Ransack updates +**Solution**: +- Test against multiple Rails versions using Appraisal +- Ensure Ransack methods are defined in models +```ruby +def self.ransackable_attributes(_auth_object = nil) + %w[name title] +end +``` + +#### Pitfall 9: Combustion and ActiveAdmin Loading Order Issues +**Root Cause**: ActiveAdmin requires Rails components at load time, conflicts with Combustion's initialization +**Critical Issue**: ActiveAdmin's `Bundler.require` loads before Rails is initialized by Combustion +**Symptoms**: +- `uninitialized constant Formtastic::ActionView` +- `uninitialized constant ActiveSupport::Autoload` +- `uninitialized constant #::Importmap` +- Rackup fails with various Rails component loading errors +**Solution**: +- Use `Bundler.setup` instead of `Bundler.require` in config.ru +- Load ActiveAdmin AFTER Combustion initializes Rails +- Include importmap-rails for ActiveAdmin 4 +- Don't require ActiveAdmin components in gem's main file +```ruby +# Bad: In lib/your_gem.rb +require 'active_admin' # This loads too early! +require 'formtastic/inputs/your_input' + +# Good: In engine.rb +initializer 'your_gem.setup', after: :load_config_initializers do + require 'active_admin' if defined?(Rails.application) + ActiveSupport.on_load(:active_admin) do + require 'formtastic/inputs/your_input' + end +end +``` + +#### Pitfall 10: ActiveAdmin 4 Asset Pipeline Requirements (CRITICAL FOR COMBUSTION GEMS) +**Root Cause**: ActiveAdmin 4 uses Tailwind CSS v3 with custom plugin, requires compilation +**Critical Issue**: CSS must be compiled through Tailwind with ActiveAdmin plugin +**Symptoms**: +- Unstyled admin pages (no proper layout, just basic HTML) +- CSS file exists but has 0 bytes or wrong content +- `The asset "active_admin.css" is not present in the asset pipeline` + +**Complete Solution for Combustion-based Gems**: + +1. **Add Dependencies** (Gemfile): +```ruby +gem 'importmap-rails', '~> 2.0' +gem 'tailwindcss-rails' # For bundled tailwindcss executable +``` + +2. **Install NPM packages** (in spec/internal): +```bash +cd spec/internal +npm init -y +npm install --save-dev tailwindcss@^3 # Use v3, not v4! +npm install --save-dev @activeadmin/activeadmin # For plugin (optional) +``` + +3. **Copy ActiveAdmin Plugin** (from Ruby gem): +```bash +cp $(bundle show activeadmin)/plugin.js spec/internal/activeadmin-plugin.js +``` + +4. **Create Tailwind Config** (spec/internal/tailwind.config.mjs): +```javascript +import activeAdminPlugin from './activeadmin-plugin.js'; +import { execSync } from 'child_process'; + +const activeAdminPath = execSync('bundle show activeadmin', { encoding: 'utf-8' }).trim(); + +export default { + content: [ + `${activeAdminPath}/app/views/**/*.{arb,erb,html,rb}`, + './app/admin/**/*.{arb,erb,html,rb}', + './app/views/**/*.{arb,erb,html}', + './app/javascript/**/*.js' + ], + darkMode: 'selector', + plugins: [activeAdminPlugin] +} +``` + +5. **Create Source CSS** (spec/internal/app/assets/stylesheets/active_admin_source.css): +```css +@tailwind base; +@tailwind components; +@tailwind utilities; +``` + +6. **Build CSS**: +```bash +cd spec/internal +npx tailwindcss -c tailwind.config.mjs \ + -i app/assets/stylesheets/active_admin_source.css \ + -o app/assets/stylesheets/active_admin_compiled.css \ + --minify +``` + +7. **Configure Sprockets** (spec/internal/app/assets/stylesheets/active_admin.css): +```css +/* + * This imports the compiled Tailwind CSS with ActiveAdmin styles + *= require ./active_admin_compiled + */ +``` + +8. **Update Manifest** (spec/internal/app/assets/config/manifest.js): +```javascript +//= link_tree ../builds +//= link active_admin.css +``` + +9. **Create Build Task** (lib/tasks/active_admin.rake): +```ruby +namespace :active_admin do + desc 'Build Active Admin Tailwind stylesheets' + task :build do + require 'fileutils' + + input = File.expand_path('../../spec/internal/app/assets/stylesheets/active_admin_source.css', __dir__) + output = File.expand_path('../../spec/internal/app/assets/stylesheets/active_admin_compiled.css', __dir__) + config = File.expand_path('../../spec/internal/tailwind.config.mjs', __dir__) + + FileUtils.mkdir_p(File.dirname(output)) + + command = ['npx', 'tailwindcss', '-c', config, '-i', input, '-o', output, '--minify'] + puts "Building Tailwind CSS: #{command.join(' ')}" + system(*command, exception: true) + puts "Tailwind CSS build complete: #{output}" + end +end +``` + +#### Pitfall 11: Formtastic Custom Inputs Not Loading in Combustion +**Root Cause**: Loading order issues with ActiveAdmin, Formtastic, and custom inputs +**Symptoms**: +- `Formtastic::UnknownInputError: Unable to find input class YourInput` +- Input works in production but not in Combustion test environment + +**Solutions**: + +1. **Immediate Fix in config.ru** (for Combustion): +```ruby +# config.ru +require 'combustion' +Combustion.initialize! :active_record, :action_controller, :action_view + +require 'importmap-rails' +require 'active_admin' +require 'your_gem' + +# Critical: Explicitly require custom inputs after everything else +require 'formtastic/inputs/your_input' + +run Combustion::Application +``` + +2. **Engine Initialization Fix**: +```ruby +# lib/your_gem/engine.rb +initializer 'your_gem.setup', after: :load_config_initializers do + require 'active_admin' if defined?(Rails.application) + + # Load immediately AND hook into ActiveAdmin + require 'formtastic/inputs/your_input' + + ActiveSupport.on_load(:active_admin) do + require 'formtastic/inputs/your_input' + end +end +``` + +3. **Workaround Using Standard Inputs**: +```ruby +# If custom input isn't loading, use standard input with same attributes +f.input :field, as: :text, input_html: { + class: 'your-input-class', + 'data-your-attribute': true +} +``` + +**Note**: After making these changes, restart the server for them to take effect. + +## Migration Checklist + +- [ ] Update Ruby version requirement to >= 3.2 +- [ ] Update Rails version requirement to >= 7.0 +- [ ] Update ActiveAdmin dependency to support 4.x +- [ ] Create ESM JavaScript modules +- [ ] Add installation generator for different bundlers +- [ ] Publish NPM package (if applicable) +- [ ] Update CSS selectors (`.filter_form` → `.filters-form`) +- [ ] Fix jQuery plugin initialization for production +- [ ] Update test suite for new asset handling +- [ ] Configure CI for multiple version testing +- [ ] Update documentation with setup instructions +- [ ] Test with esbuild, webpack, and importmap +- [ ] Add CDN fallbacks for JavaScript dependencies +- [ ] Handle both Sprockets and Propshaft + +## Example Implementation + +See the full implementation in the `activeadmin-searchable_select` gem: +- [Installation Generator](../lib/generators/active_admin/searchable_select/install/install_generator.rb) +- [ESM Module](../app/assets/javascripts/active_admin/searchable_select.esm.js) +- [Package.json](../package.json) +- [CI Configuration](../.github/workflows/ci.yml) + +## Resources + +- [ActiveAdmin 4.0 Breaking Changes](./activeadmin-4-changes.md) +- [ActiveAdmin 4.0 Release Notes](https://github.com/activeadmin/activeadmin/releases) +- [Rails 7+ Asset Pipeline Guide](https://guides.rubyonrails.org/asset_pipeline.html) +- [esbuild Rails Documentation](https://github.com/rails/jsbundling-rails) +- [Importmap Rails Documentation](https://github.com/rails/importmap-rails) + +## Conclusion + +Migrating a gem to support ActiveAdmin 4 requires careful attention to: +1. Modern JavaScript module systems +2. Flexible asset pipeline support +3. Updated CSS selectors and components +4. Proper jQuery plugin initialization +5. Comprehensive testing across different setups + +The key to success is providing multiple paths for users with different asset pipeline configurations while maintaining backward compatibility where possible. diff --git a/docs/activeadmin-4-gem-update-guide.md b/docs/activeadmin-4-gem-update-guide.md new file mode 100644 index 0000000..caa6108 --- /dev/null +++ b/docs/activeadmin-4-gem-update-guide.md @@ -0,0 +1,417 @@ +# ActiveAdmin 4 Gem Update Guide + +This guide documents the process of updating a gem to support ActiveAdmin 4 with Propshaft, Tailwind CSS, and modern Rails 8 asset pipeline. + +## Overview + +ActiveAdmin 4 represents a significant architectural shift from previous versions: +- **CSS**: From Sprockets/SCSS to Tailwind CSS with custom build process +- **JavaScript**: From jQuery to vanilla JavaScript with ES modules +- **Asset Pipeline**: From Sprockets to Propshaft (Rails 8 default) +- **Styling**: From pre-built CSS to user-built Tailwind CSS + +## Key Changes Required + +### 1. Gem Structure Changes + +#### Remove CSS Assets +ActiveAdmin 4 gems should NOT ship CSS files. Users build their own CSS with Tailwind. + +``` +# Remove these directories/files: +vendor/assets/stylesheets/ +app/assets/stylesheets/*.scss +``` + +#### JavaScript Assets +Keep only initialization JavaScript in vendor/assets: +``` +vendor/assets/javascripts/your_gem_name.js # Vanilla JS, no jQuery +``` + +### 2. Engine Configuration + +Update `lib/your_gem/engine.rb`: + +```ruby +module YourGem + class Engine < ::Rails::Engine + # Propshaft automatically includes vendor/assets and app/assets paths + + initializer 'your_gem.assets' do |app| + # For Propshaft (Rails 8 default) + if defined?(Propshaft) + app.config.assets.precompile += %w[ + your_gem_name.js + ] + # For Sprockets (legacy support) + elsif app.config.respond_to?(:assets) + app.config.assets.precompile += %w[ + your_gem_name.js + ] + end + end + end +end +``` + +### 3. JavaScript Migration + +#### Remove jQuery Dependencies +Convert all jQuery code to vanilla JavaScript: + +```javascript +// Old (jQuery) +$(document).ready(function() { + $('.quill-editor').each(function() { + // initialization + }); +}); + +// New (Vanilla JS) +document.addEventListener('DOMContentLoaded', function() { + document.querySelectorAll('.quill-editor').forEach(function(element) { + // initialization + }); +}); +``` + +#### Event Handling +Use modern event delegation: + +```javascript +// Support both Turbo and non-Turbo apps +['DOMContentLoaded', 'turbo:load', 'turbolinks:load'].forEach(function(eventName) { + document.addEventListener(eventName, initializeEditors); +}); +``` + +### 4. Test/Dummy App Setup + +#### Package.json +Create a proper `package.json` for the test app: + +```json +{ + "name": "your-gem-test-app", + "private": true, + "scripts": { + "build:js": "node esbuild.config.js", + "build:css": "bundle exec rake active_admin:build", + "build": "npm run build:js && npm run build:css" + }, + "dependencies": { + "@activeadmin/activeadmin": "^4.0.0-beta16", + "@rails/ujs": "^7.1.3", + "your-required-npm-package": "^x.x.x" + }, + "devDependencies": { + "esbuild": "^0.19.0", + "tailwindcss": "^3.4.17" + } +} +``` + +#### Tailwind Configuration +Create `tailwind.config.js`: + +```javascript +const execSync = require('child_process').execSync; +const activeAdminPath = execSync('bundle show activeadmin', { encoding: 'utf-8' }).trim(); + +module.exports = { + content: [ + `${activeAdminPath}/vendor/javascript/flowbite.js`, + `${activeAdminPath}/plugin.js`, + `${activeAdminPath}/app/views/**/*.{arb,erb,html,rb}`, + './app/admin/**/*.{arb,erb,html,rb}', + './app/views/active_admin/**/*.{arb,erb,html,rb}', + './app/views/admin/**/*.{arb,erb,html,rb}', + './app/javascript/**/*.js' + ], + darkMode: "class", + plugins: [ + require('@activeadmin/activeadmin/plugin') + ] +}; +``` + +#### CSS Source File Structure +Place source CSS OUTSIDE of Rails asset paths to avoid Propshaft conflicts: + +``` +spec/dummy/ + app/ + css/ # NOT in assets/ + active_admin_source.css # Source file for Tailwind + assets/ + builds/ + active_admin.css # Built output + config/ + manifest.js # Propshaft manifest +``` + +#### Active Admin CSS Source +Create `app/css/active_admin_source.css` (or `app/assets/stylesheets/active_admin.css` per the gist): + +```css +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +/* Import vendor styles if needed */ +@import "../../../node_modules/your-package/dist/styles.css"; + +/* Custom component styles */ +@layer components { + .your-component { + @apply border border-gray-300 rounded-md; + } +} +``` + +#### Build Task +Create `lib/tasks/active_admin.rake`: + +```ruby +namespace :active_admin do + desc "Build Active Admin Tailwind stylesheets" + task build: :environment do + command = [ + "npx", "tailwindcss", + "-i", Rails.root.join("app/assets/stylesheets/active_admin.css").to_s, + "-o", Rails.root.join("app/assets/builds/active_admin.css").to_s, + "-c", Rails.root.join("tailwind.config.js").to_s, + "-m" + ] + + system(*command, exception: true) + end + + desc "Watch Active Admin Tailwind stylesheets" + task watch: :environment do + command = [ + "npx", "tailwindcss", + "--watch", + "-i", Rails.root.join("app/assets/stylesheets/active_admin.css").to_s, + "-o", Rails.root.join("app/assets/builds/active_admin.css").to_s, + "-c", Rails.root.join("tailwind.config.js").to_s, + "-m" + ] + + system(*command) + end +end + +Rake::Task["assets:precompile"].enhance(["active_admin:build"]) +``` + +#### ESBuild Configuration +Create `esbuild.config.js`: + +```javascript +const esbuild = require('esbuild'); +const railsEnv = process.env.RAILS_ENV || 'development'; + +const config = { + entryPoints: ['app/javascript/active_admin.js'], + bundle: true, + sourcemap: railsEnv !== 'production', + format: 'esm', + outdir: 'app/assets/builds', + publicPath: '/assets', + loader: { + '.js': 'js', + }, + minify: railsEnv === 'production', + plugins: [], +}; + +if (process.argv.includes('--watch')) { + esbuild.context(config).then((ctx) => { + ctx.watch(); + console.log('Watching for changes...'); + }); +} else { + esbuild.build(config).then(() => { + console.log('Build completed'); + }).catch(() => process.exit(1)); +} +``` + +### 5. ActiveAdmin Initializer + +Update `config/initializers/active_admin.rb`: + +```ruby +ActiveAdmin.setup do |config| + # Register CSS (required for AA4 + Propshaft) + config.register_stylesheet 'active_admin.css' + + # Register JavaScript files + config.register_javascript 'active_admin.js' + config.register_javascript 'your_gem_name.js' + + # ... other configuration +end +``` + +### 6. Propshaft Manifest + +Update `app/assets/config/manifest.js`: + +```javascript +//= link_tree ../images +//= link_tree ../builds +//= link active_admin.css +//= link active_admin.js +//= link your_gem_name.js +``` + +### 7. Common Pitfalls & Solutions + +#### Issue: CSS not loading / Only Tailwind directives visible +**Cause**: Propshaft serving source file instead of built file +**Solution**: +- Ensure source CSS is outside `app/assets/` or named differently +- Check that build process outputs to `app/assets/builds/` +- Verify `config.register_stylesheet 'active_admin.css'` in initializer + +#### Issue: Missing ActiveAdmin layout styles +**Cause**: ActiveAdmin plugin not loaded or content paths missing +**Solution**: +- Ensure `@activeadmin/activeadmin` npm package is installed +- Add ActiveAdmin gem paths to Tailwind content configuration +- Use `require('@activeadmin/activeadmin/plugin')` in Tailwind config + +#### Issue: JavaScript not initializing +**Cause**: Turbo/Turbolinks events not handled +**Solution**: Listen for multiple initialization events: +```javascript +['DOMContentLoaded', 'turbo:load', 'turbolinks:load'].forEach(function(eventName) { + document.addEventListener(eventName, initializeComponents); +}); +``` + +#### Issue: Double asset compilation +**Cause**: Both Sprockets and Propshaft trying to handle same files +**Solution**: +- Remove/rename conflicting files in `app/assets/stylesheets/` +- Use specific file names in manifest instead of `link_tree` + +### 8. Testing Setup + +#### GitHub Actions Workflow + +Create separate workflows for different ActiveAdmin versions: + +```yaml +name: Tests +on: [push, pull_request] + +jobs: + test-aa4: + runs-on: ubuntu-latest + strategy: + matrix: + ruby: ['3.2', '3.3'] + rails: ['7.1', '8.0'] + + steps: + - uses: actions/checkout@v4 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: true + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install npm dependencies + run: | + cd spec/dummy + npm install + + - name: Build assets + run: | + cd spec/dummy + npm run build + + - name: Run tests + run: bundle exec rspec + + test-legacy: + runs-on: ubuntu-latest + strategy: + matrix: + ruby: ['3.0', '3.1'] + activeadmin: ['2.14', '3.2'] + # ... legacy test configuration +``` + +### 9. Migration Checklist + +- [ ] Remove all SCSS/CSS assets from gem +- [ ] Convert JavaScript from jQuery to vanilla JS +- [ ] Create test app package.json with dependencies +- [ ] Set up Tailwind configuration +- [ ] Create CSS build process (rake task) +- [ ] Set up JavaScript build (esbuild) +- [ ] Update engine.rb for Propshaft +- [ ] Configure ActiveAdmin initializer +- [ ] Update Propshaft manifest +- [ ] Test with both Turbo and non-Turbo apps +- [ ] Update CI/CD for asset building +- [ ] Document upgrade path for gem users + +### 10. User Migration Guide + +Provide clear instructions for gem users: + +```markdown +## Upgrading to v2.0 (ActiveAdmin 4 Support) + +### Installation + +1. Update your Gemfile: + ```ruby + gem 'activeadmin', '~> 4.0.0.beta' + gem 'your_gem', '~> 2.0' + ``` + +2. Install npm package: + ```bash + npm install your-required-package + ``` + +3. Update your Tailwind config to include gem styles: + ```javascript + // In your tailwind.config.js + module.exports = { + content: [ + // ... your existing content + './vendor/bundle/ruby/*/gems/your_gem-*/app/**/*.rb', + ] + } + ``` + +4. Import required styles in your CSS: + ```css + /* In app/assets/stylesheets/active_admin.css */ + @import "your-package/dist/styles.css"; + ``` + +5. Build your assets: + ```bash + rails assets:precompile + ``` +``` + +## References + +- [ActiveAdmin 4.0 Beta Documentation](https://github.com/activeadmin/activeadmin/tree/master/docs) +- [Propshaft Documentation](https://github.com/rails/propshaft) +- [Tailwind CSS Rails Integration](https://tailwindcss.com/docs/guides/rails) +- [Working Example Gist](https://gist.github.com/amkisko/c704c1a6462d573dfa4820ae07d807a6) \ No newline at end of file diff --git a/docs/activeadmin-4-propshaft-update.md b/docs/activeadmin-4-propshaft-update.md new file mode 100644 index 0000000..3bcc4c9 --- /dev/null +++ b/docs/activeadmin-4-propshaft-update.md @@ -0,0 +1,473 @@ +# ActiveAdmin Quill Editor - Rails 8 & Propshaft Migration Guide + +## Executive Summary + +This document outlines the necessary changes to modernize the `activeadmin_quill_editor` gem for compatibility with: +- **Rails 8.x** with Propshaft asset pipeline +- **ActiveAdmin 4.x** +- **Ruby 3.3+** +- Modern JavaScript without jQuery dependencies + +**Note**: This gem already has a full test application at `spec/dummy/` and comprehensive system tests. We'll update these existing resources rather than creating new ones from scratch. + +## Key Changes Overview + +### 1. Asset Pipeline Migration (Propshaft) + +Propshaft automatically serves assets from `vendor/assets` and `app/assets` directories in gems. The key changes: + +1. **Remove Sprockets directives** - No more `//= require` statements +2. **Place precompiled assets in vendor/assets** - Propshaft serves them directly +3. **Use ES6 modules** for JavaScript initialization +4. **No asset compilation** - Serve Quill.js directly as minified files + +### 2. File Structure Changes + +``` +activeadmin_quill_editor/ +├── vendor/assets/ # Static assets served by Propshaft +│ ├── javascripts/ +│ │ └── quill.min.js # Quill 2.x minified (no jQuery) +│ └── stylesheets/ +│ ├── quill.snow.css # Theme CSS +│ └── quill.bubble.css # Alternative theme +├── app/assets/ # Gem-specific code +│ ├── javascripts/ +│ │ └── activeadmin_quill_editor.js # ES6 initializer +│ └── stylesheets/ +│ └── activeadmin_quill_editor.css # Custom styles +└── lib/ + ├── activeadmin/ + │ └── quill_editor/ + │ └── engine.rb # Rails engine configuration + └── formtastic/ + └── inputs/ + └── quill_editor_input.rb # Form input class +``` + +## Detailed Implementation + +### 3. JavaScript Modernization + +Replace jQuery-dependent code with vanilla JavaScript: + +```javascript +// app/assets/javascripts/activeadmin_quill_editor.js +(function() { + 'use strict'; + + const defaultToolbar = [ + ['bold', 'italic', 'underline'], + ['link', 'blockquote', 'code-block'], + [{ 'script': 'sub' }, { 'script': 'super' }], + [{ 'align': [] }, { list: 'ordered' }, { list: 'bullet' }], + [{ 'color': [] }, { 'background': [] }], + ['image'], + ['clean'] + ]; + + function initQuillEditor(container) { + if (!container || container.classList.contains('quill-editor--active')) { + return; + } + + const content = container.querySelector('[data-aa-quill-content]'); + if (!content) return; + + // Parse options from data attributes + const options = JSON.parse(container.dataset.options || '{}'); + const theme = options.theme || 'snow'; + const modules = options.modules || { toolbar: defaultToolbar }; + + // Initialize Quill + const editor = new Quill(content, { + theme: theme, + modules: modules + }); + + // Store reference and mark as active + container._quillEditor = editor; + container.classList.add('quill-editor--active'); + + // Handle form submission + const form = container.closest('form.formtastic'); + if (form && !form._quillSubmitHandler) { + form._quillSubmitHandler = true; + form.addEventListener('submit', function(e) { + updateQuillInputs(form); + }); + } + } + + function updateQuillInputs(form) { + form.querySelectorAll('[data-aa-quill-editor]').forEach(container => { + const editor = container._quillEditor; + const input = container.querySelector('input[type="hidden"]'); + + if (editor && input) { + input.value = editor.root.innerHTML; + } + }); + } + + function initAllEditors() { + document.querySelectorAll('[data-aa-quill-editor]').forEach(initQuillEditor); + } + + // Initialize on various events + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initAllEditors); + } else { + initAllEditors(); + } + + // Support for Turbo/Turbolinks + document.addEventListener('turbo:load', initAllEditors); + document.addEventListener('turbolinks:load', initAllEditors); + + // Support for ActiveAdmin has_many fields + document.addEventListener('has_many_add:after', function(e) { + e.detail?.container?.querySelectorAll('[data-aa-quill-editor]').forEach(initQuillEditor); + }); + + // Public API + window.QuillEditorHelpers = { + initEditor: initQuillEditor, + initAll: initAllEditors, + getEditor: (elementOrId) => { + const element = typeof elementOrId === 'string' + ? document.getElementById(elementOrId) + : elementOrId; + return element?._quillEditor; + } + }; +})(); +``` + +### 4. Updated Formtastic Input Class + +```ruby +# lib/formtastic/inputs/quill_editor_input.rb +module Formtastic + module Inputs + class QuillEditorInput < Formtastic::Inputs::TextInput + def to_html + input_wrapping do + label_html << + template.content_tag(:div, input_html_options) do + builder.hidden_field(input_name) << + template.content_tag(:div, 'data-aa-quill-content': '1') do + object.send(method).try(:html_safe) + end + end + end + end + + def input_html_options + super.tap do |options| + options['data-aa-quill-editor'] = '1' + # Merge any custom options + if options[:data] && options[:data][:options] + options['data-options'] = options[:data][:options].to_json + end + end + end + end + end +end +``` + +### 5. Engine Configuration for Propshaft + +```ruby +# lib/activeadmin/quill_editor/engine.rb +require 'active_admin' + +module ActiveAdmin + module QuillEditor + class Engine < ::Rails::Engine + engine_name 'activeadmin_quill_editor' + + # Propshaft automatically includes these paths + # vendor/assets and app/assets are included by default + + initializer 'activeadmin_quill_editor.assets' do |app| + # Ensure our assets are in the precompile list + if defined?(Propshaft) + app.config.assets.precompile += %w[ + activeadmin_quill_editor.js + activeadmin_quill_editor.css + quill.min.js + quill.snow.css + quill.bubble.css + ] + end + end + end + end +end +``` + +## Test Application Setup (Using Existing spec/dummy) + +### 6. Update Existing Test App + +The gem already has a full Rails test application at `spec/dummy/`. We need to update it for Rails 8 and Propshaft: + +```ruby +# spec/dummy/config/application.rb +require_relative 'boot' +require 'rails/all' + +Bundler.require(*Rails.groups) + +module Dummy + class Application < Rails::Application + config.load_defaults Rails::VERSION::STRING.to_f + + # Add Propshaft configuration for Rails 8 + if Rails.version.to_f >= 8.0 + # Propshaft is default in Rails 8 + config.assets.paths << Rails.root.join("../../vendor/assets/javascripts") + config.assets.paths << Rails.root.join("../../vendor/assets/stylesheets") + else + # For Rails 7.x, explicitly use Propshaft + config.assets = Propshaft::Railtie.config.assets + end + end +end +``` + +### 7. Update Test App Asset Configuration + +```ruby +# spec/dummy/config/initializers/assets.rb +# Add Quill editor assets to precompile list +Rails.application.config.assets.precompile += %w[ + quill.min.js + quill.snow.css + quill.bubble.css + activeadmin_quill_editor.js + activeadmin_quill_editor.css +] +``` + +```javascript +// spec/dummy/app/assets/javascripts/active_admin.js +// For test app, import the gem's assets +//= require activeadmin_quill_editor +``` + +## CI/CD Configuration + +### 8. GitHub Actions Workflow + +```yaml +# .github/workflows/tests.yml +name: Tests + +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 15 + + strategy: + fail-fast: false + matrix: + ruby: ['3.3', '3.4'] + gemfile: + - rails_7.x_active_admin_4.x + - rails_8.x_active_admin_4.x + + env: + BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile + RAILS_ENV: test + + steps: + - uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: true + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + cache-dependency-path: spec/dummy/package-lock.json + + - name: Install npm dependencies + working-directory: spec/dummy + run: npm ci + + - name: Build assets + working-directory: spec/dummy + run: npm run build + + - name: Setup test database + run: bundle exec rake db:setup + + - name: Run tests + run: bundle exec rspec + + - name: Upload coverage + uses: codecov/codecov-action@v3 + with: + file: ./coverage/coverage.json +``` + +### 9. Appraisals Configuration + +```ruby +# Appraisals +appraise 'rails-7.x-active-admin-4.x' do + gem 'rails', '~> 7.0' + gem 'activeadmin', '~> 4.0.0.beta' + gem 'sqlite3', '~> 2.0' + gem 'propshaft', '~> 1.0' +end + +appraise 'rails-8.x-active-admin-4.x' do + gem 'rails', '~> 8.0' + gem 'activeadmin', '~> 4.0.0.beta' + gem 'sqlite3', '~> 2.0' + # Propshaft is default in Rails 8 +end +``` + +## Migration Steps + +### 10. Step-by-Step Migration Process + +1. **Update gemspec dependencies** + ```ruby + spec.required_ruby_version = '>= 3.3' + spec.add_dependency 'activeadmin', '~> 4.0.0.beta' + spec.add_dependency 'rails', '>= 7.0' + ``` + +2. **Download and place Quill assets** + ```bash + # Download Quill 2.x from CDN or npm + curl -o vendor/assets/javascripts/quill.min.js \ + https://cdn.jsdelivr.net/npm/quill@2/dist/quill.min.js + curl -o vendor/assets/stylesheets/quill.snow.css \ + https://cdn.jsdelivr.net/npm/quill@2/dist/quill.snow.css + ``` + +3. **Update JavaScript initialization** + - Remove jQuery dependencies + - Implement vanilla JS initialization + - Add Turbo/Turbolinks support + +4. **Update test suite** + - Migrate to Combustion + - Add modern browser tests + - Configure CI matrix testing + +5. **Update documentation** + - Installation instructions for Propshaft + - Usage examples without jQuery + - Migration guide from old versions + +## Usage in Rails 8 Application + +### Installation + +```ruby +# Gemfile +gem 'activeadmin_quill_editor', '~> 2.0' +``` + +```scss +// app/assets/stylesheets/active_admin.scss +@import 'quill.snow'; +@import 'activeadmin_quill_editor'; +``` + +```javascript +// app/javascript/active_admin.js (or equivalent) +import 'activeadmin_quill_editor'; +``` + +### Form Usage + +```ruby +form do |f| + f.inputs do + f.input :title + f.input :content, as: :quill_editor, input_html: { + data: { + options: { + theme: 'snow', + modules: { + toolbar: [ + ['bold', 'italic'], + ['link', 'image'] + ] + } + } + } + } + end + f.actions +end +``` + +## Benefits of This Approach + +1. **No NPM package needed** - Assets served directly from vendor directory +2. **Propshaft compatible** - Works with Rails 8 default asset pipeline +3. **No jQuery dependency** - Modern vanilla JavaScript +4. **Smaller bundle size** - Only ~200KB for Quill vs 450KB+ for alternatives +5. **Simple integration** - Drop-in replacement for text areas +6. **Maintained compatibility** - Works with Rails 7.x and 8.x + +## Testing Locally + +```bash +# Clone and setup +git clone https://github.com/yourusername/activeadmin_quill_editor.git +cd activeadmin_quill_editor +bundle install + +# Run tests for specific Rails version +RAILS_VERSION=8.0 bundle exec rspec + +# Or use appraisals +bundle exec appraisal rails-8.x-active-admin-4.x rspec + +# Start test app server +cd spec/dummy +bundle install +bundle exec rails server +``` + +## Existing Test Coverage + +The gem already includes comprehensive system tests at `spec/system/`: +- `quill_editor_spec.rb` - Editor functionality tests (formatting, links, etc.) +- `quill_js_spec.rb` - JavaScript API tests + +Additional test cases from activeadmin_trumbowyg to consider adding: +- CSS loading verification tests +- Dark mode support tests +- Multiple editors on same page +- Has-many nested forms +- Turbo/Turbolinks compatibility tests + +## Notes + +- Quill.js file size: ~200KB minified (vs SunEditor's 450KB) +- No compilation step needed with Propshaft +- Assets are fingerprinted automatically by Propshaft +- Compatible with both importmap-rails and jsbundling-rails setups \ No newline at end of file diff --git a/docs/propshaft-readme.md b/docs/propshaft-readme.md new file mode 100644 index 0000000..5057aa3 --- /dev/null +++ b/docs/propshaft-readme.md @@ -0,0 +1,320 @@ +# Propshaft: A Modern Asset Pipeline for Rails + +Propshaft is an asset pipeline library for Rails. It's built for an era where bundling assets to save on HTTP connections is no longer urgent, where JavaScript and CSS are either compiled by dedicated Node.js bundlers or served directly to the browsers, and where increases in bandwidth have made the need for minification less pressing. These factors allow for a dramatically simpler and faster asset pipeline compared to previous options, like [Sprockets](https://github.com/rails/sprockets-rails). + +## Table of Contents + +1. [Overview](#overview) +2. [Architecture](#architecture) +3. [Asset Serving in Development/Test Mode](#asset-serving-in-developmenttest-mode) +4. [Configuration and Asset Paths](#configuration-and-asset-paths) +5. [Test Environment Specifics](#test-environment-specifics) +6. [JavaScript and CSS Bundling Integration](#javascript-and-css-bundling-integration) +7. [Common Patterns and Best Practices](#common-patterns-and-best-practices) + +## Overview + +So that's what Propshaft doesn't do. Here's what it does provide: + +1. **Configurable load path**: You can register directories from multiple places in your app and gems, and reference assets from all of these paths as though they were one. +1. **Digest stamping**: All assets in the load path will be copied (or compiled) in a precompilation step for production that also stamps all of them with a digest hash, so you can use long-expiry cache headers for better performance. The digested assets can be referred to through their logical path because the processing leaves a manifest file that provides a way to translate. +1. **Development server**: There's no need to precompile the assets in development. You can refer to them via the same asset_path helpers and they'll be served by a development server. +1. **Basic compilers**: Propshaft was explicitly not designed to provide full transpiler capabilities. You can get that better elsewhere. But it does offer a simple input->output compiler setup that by default is used to translate `url(asset)` function calls in CSS to `url(digested-asset)` instead and source mapping comments likewise. + +## Architecture + +### Core Components + +``` +Propshaft::Assembly +├── LoadPath # Asset discovery and caching +├── Resolver # Path resolution (Dynamic/Static) +│ ├── Dynamic # Development/test mode +│ └── Static # Production with manifest +├── Server # Rack middleware for asset serving +├── Processor # Precompilation and digesting +├── Compilers # Asset transformation +└── Manifest # Asset mapping and integrity hashes +``` + +### Key Classes + +#### `Propshaft::Assembly` +Central coordinator that manages all components. Created during Rails initialization and accessible via `Rails.application.assets`. + +```ruby +# Core assembly configuration +Rails.application.configure do + app.assets = Propshaft::Assembly.new(app.config.assets) +end +``` + +#### `Propshaft::LoadPath` +Manages asset discovery across multiple directories. Automatically includes: +- `app/assets/**/*` (application assets) +- `lib/assets/**/*` (library assets) +- `vendor/assets/**/*` (third-party assets) +- Engine assets from all loaded gems + +#### `Propshaft::Resolver::Dynamic` +Used in development and test environments. Resolves assets on-demand without requiring precompilation. + +#### `Propshaft::Resolver::Static` +Used in production. Relies on `.manifest.json` for fast asset resolution. + +## Asset Serving in Development/Test Mode + +### Dynamic Resolution Process + +1. **Request Interception**: `Propshaft::Server` middleware catches requests to `/assets/*` +2. **Asset Discovery**: `LoadPath#find` searches configured paths for matching assets +3. **Compilation**: Assets pass through registered compilers +4. **Cache Headers**: Aggressive caching with ETags and immutable cache-control +5. **Response**: Compiled content served with appropriate MIME type + +```ruby +# Server middleware in action (simplified) +def call(env) + if path.start_with?(@assembly.prefix) && (asset = @assembly.load_path.find(path)) + [200, { + 'Content-Type' => asset.content_type, + 'ETag' => "\"#{asset.digest}\"", + 'Cache-Control' => 'public, max-age=31536000, immutable' + }, [asset.compiled_content]] + end +end +``` + +### Cache Sweeping + +In development/test, Propshaft monitors file changes: + +```ruby +config.assets.sweep_cache = Rails.env.development? +``` + +When enabled, before each request: +1. File watcher checks for modifications +2. Asset cache cleared if changes detected +3. New assets discovered and cached + +## Configuration and Asset Paths + +### Default Configuration (from Railtie) + +```ruby +config.assets.paths = [] # Auto-populated +config.assets.excluded_paths = [] # Paths to exclude +config.assets.version = "1" # Cache invalidation +config.assets.prefix = "/assets" # URL prefix +config.assets.server = Rails.env.development? || Rails.env.test? +config.assets.sweep_cache = Rails.env.development? +``` + +### Path Resolution Order + +1. **Application paths**: `app/assets/**/*` +2. **Library paths**: `lib/assets/**/*` +3. **Vendor paths**: `vendor/assets/**/*` +4. **Engine paths**: From all loaded Rails engines/gems + +Paths are automatically prioritized: +- Application assets take precedence over engine assets +- Later additions to load path have lower priority + + +## Installation + +With Rails 8, Propshaft is the default asset pipeline for new applications. With Rails 7, you can start a new application with propshaft using `rails new myapp -a propshaft`. For existing applications, check the [upgrade guide](https://github.com/rails/propshaft/blob/main/UPGRADING.md) which contains step-by-step instructions. + +## Usage + +Propshaft makes all the assets from all the paths it's been configured with through `config.assets.paths` available for serving and will copy all of them into `public/assets` when precompiling. This is unlike Sprockets, which did not copy over assets that hadn't been explicitly included in one of the bundled assets. + +You can however exempt directories that have been added through the `config.assets.excluded_paths`. This is useful if you're for example using `app/assets/stylesheets` exclusively as a set of inputs to a compiler like Dart Sass for Rails, and you don't want these input files to be part of the load path. (Remember you need to add full paths, like `Rails.root.join("app/assets/stylesheets")`). + +These assets can be referenced through their logical path using the normal helpers like `asset_path`, `image_tag`, `javascript_include_tag`, and all the other asset helper tags. These logical references are automatically converted into digest-aware paths in production when `assets:precompile` has been run (through a JSON mapping file found in `public/assets/.manifest.json`). + +## Referencing digested assets in CSS and JavaScript + +Propshaft will automatically convert asset references in CSS to use the digested file names. So `background: url("/bg/pattern.svg")` is converted to `background: url("/assets/bg/pattern-2169cbef.svg")` before the stylesheet is served. + +For JavaScript, you'll have to manually trigger this transformation by using the `RAILS_ASSET_URL` pseudo-method. It's used like this: + +```javascript +export default class extends Controller { + init() { + this.img = RAILS_ASSET_URL("/icons/trash.svg") + } +} +``` + +That'll turn into: + +```javascript +export default class extends Controller { + init() { + this.img = "/assets/icons/trash-54g9cbef.svg" + } +} +``` + +## Bypassing the digest step + +If you need to put multiple files that refer to each other through Propshaft, like a JavaScript file and its source map, you have to digest these files in advance to retain stable file names. Propshaft looks for the specific pattern of `-[digest].digested.js` as the postfix to any asset file as an indication that the file has already been digested. + +## Subresource Integrity (SRI) + +Propshaft supports Subresource Integrity (SRI) to help protect against malicious modifications of assets. SRI allows browsers to verify that resources fetched from CDNs or other sources haven't been tampered with by checking cryptographic hashes. + +### Enabling SRI + +To enable SRI support, configure the hash algorithm in your Rails application: + +```ruby +config.assets.integrity_hash_algorithm = "sha384" +``` + +Valid hash algorithms include: +- `"sha256"` - SHA-256 (most common) +- `"sha384"` - SHA-384 (recommended for enhanced security) +- `"sha512"` - SHA-512 (strongest) + +### Using SRI in your views + +Once configured, you can enable SRI by passing the `integrity: true` option to asset helpers: + +```erb +<%= stylesheet_link_tag "application", integrity: true %> +<%= javascript_include_tag "application", integrity: true %> +``` + +This generates HTML with integrity hashes: + +```html + + +``` + +**Important**: SRI only works in secure contexts (HTTPS) or during local development. The integrity hashes are automatically omitted when serving over HTTP in production for security reasons. + +### Bulk stylesheet inclusion with SRI + +Propshaft extends `stylesheet_link_tag` with special symbols for bulk inclusion: + +```erb +<%= stylesheet_link_tag :all, integrity: true %> +<%= stylesheet_link_tag :app, integrity: true %> +``` + +## Improving performance in development + +Before every request Propshaft checks if any asset was updated to decide if a cache sweep is needed. This verification is done using the application's configured file watcher which, by default, is `ActiveSupport::FileUpdateChecker`. + +If you have a lot of assets in your project, you can improve performance by adding the `listen` gem to the development group in your Gemfile, and this line to the `development.rb` environment file: + +```ruby +config.file_watcher = ActiveSupport::EventedFileUpdateChecker +``` + + +## Migrating from Sprockets + +Propshaft does a lot less than Sprockets, by design, so it might well be a fair bit of work to migrate if it's even desirable. This is particularly true if you rely on Sprockets to provide any form of transpiling, like CoffeeScript or Sass, or if you rely on any gems that do. You'll need to either stop transpiling or use a Node-based transpiler, like those in [`jsbundling-rails`](https://github.com/rails/jsbundling-rails) and [`cssbundling-rails`](https://github.com/rails/cssbundling-rails). + +On the other hand, if you're already bundling JavaScript and CSS through a Node-based setup, then Propshaft is going to slot in easily. Since you don't need another tool to bundle or transpile. Just to digest and serve. + +But for greenfield apps using the default import-map approach, Propshaft can also work well, if you're able to deal with vanilla CSS. + + +## License + +Propshaft is released under the [MIT License](https://opensource.org/licenses/MIT). + +## Compilation and Digesting + +### Asset Processing Pipeline + +1. **Discovery**: `LoadPath` finds all assets matching patterns +2. **Compilation**: Each asset processed through registered compilers +3. **Digesting**: Content hash generated using SHA1 + version string +4. **Output**: Files written to `config.assets.output_path` (default: `public/assets/`) + +### Built-in Compilers + +#### CSS Asset URL Compiler +Transforms relative URLs to digested versions: + +```css +/* Input */ +background: url('./hero.jpg'); + +/* Output */ +background: url('/assets/hero-abc123.jpg'); +``` + +#### JavaScript Asset URL Compiler +Processes `RAILS_ASSET_URL()` pseudo-functions: + +```javascript +// Input +const icon = RAILS_ASSET_URL('./icon.svg'); + +// Output +const icon = '/assets/icon-def456.svg'; +``` + +#### Source Map Compiler +Updates source map references to match digested filenames. + +### Manifest Generation + +The manifest file (`.manifest.json`) maps logical paths to digested paths: + +```json +{ + "application.js": { + "digested_path": "application-abc123.js", + "integrity": "sha384-xyz789..." + } +} +``` + +## Asset Organization + +``` +app/assets/ +├── builds/ # jsbundling-rails/cssbundling-rails output +│ ├── application.js +│ └── application.css +├── images/ # Static assets +│ └── logo.svg +├── stylesheets/ # SCSS source (often excluded) +│ └── application.scss +└── javascripts/ # JS source (often excluded) + └── application.js +``` + +## Error Handling + +### Missing Asset Handling +```ruby +# Propshaft raises MissingAssetError for missing assets +begin + asset_path('nonexistent.js') +rescue Propshaft::MissingAssetError => e + Rails.logger.error "Missing asset: #{e.message}" + # Fallback logic +end +``` + +### Development Debugging +```ruby +# Show all available assets +rake assets:reveal + +# Show asset full paths +rake assets:reveal:full +``` diff --git a/docs/propshaft-upgrade.md b/docs/propshaft-upgrade.md new file mode 100644 index 0000000..aff5eef --- /dev/null +++ b/docs/propshaft-upgrade.md @@ -0,0 +1,484 @@ +# Upgrading from Sprockets to Propshaft + +Propshaft has a smaller scope than Sprockets, therefore migrating to it will also require you to adopt the [jsbundling-rails](https://github.com/rails/jsbundling-rails) and [cssbundling-rails](https://github.com/rails/cssbundling-rails) gems. This guide will assume your project follows Rails 6.1 conventions of using [webpacker](https://github.com/rails/webpacker) to bundle javascript, [sass-rails](https://github.com/rails/sass-rails) to bundle css and [sprockets](https://github.com/rails/sprockets) to digest assets. Finally, you will also need [npx](https://docs.npmjs.com/cli/v7/commands/npx) version 7.1.0 or later installed. + +Propshaft depends on Rails 7, so you will need to upgrade to Rails 7+ before starting the migration. + +## 1. Migrate from Webpacker to jsbundling-rails + +Start by following these steps: + +1. Replace `webpacker` with `jsbundling-rails` in your Gemfile; +2. Run `./bin/bundle install`; +3. Run `./bin/rails javascript:install:webpack`; +4. Remove the file `config/initializers/assets.rb`; +5. Remove the file `bin/webpack`; +6. Remove the file `bin/webpack-dev-server`; +7. Remove the folder `config/webpack` (note: any custom configuration should be migrated to the new `webpack.config.js` file); +8. Remove the file `config/webpacker.yml`; +9. Replace all instances of `javascript_pack_tag` with `javascript_include_tag` and add `defer: true` to them. + +After you are done you will notice that the install step added various files to your project and updated some of the existing ones. + +**The new 'bin/dev' and 'Procfile.dev' files** + +The `./bin/dev` file is a shell script that uses [foreman](https://github.com/ddollar/foreman) and `Procfile.dev` to start two processes in a single terminal: `rails s` and `yarn build`. The latter replaces `webpack-dev-server` for bundling and watching for changes in javascript files. + +**The 'build' attribute added to package.json** + +This is the command that `yarn build` will use to bundle javascript files. + +**The new 'webpack.config.js' file** + +In `webpacker` this file was hidden inside the gem, but now you can edit it directly. If you had custom configuration in `config/webpack` you can move them to here. Projects with multiple entrypoints will need to adjust the `entry` attribute: + +```js +module.exports = { + entry: { + application: "./app/javascript/application.js", + admin: "./app/javascript/admin.js" + } +} +``` + +**The 'link_tree' directive added to 'app/assets/manifest.js'** + +This tells Sprockets to include the files in `app/assets/builds` during `assets:precompile`. This is the folder where `yarn build` will place the bundled files, so make sure you commit it to the repository and don't delete it when cleaning assets. + +**What about babel?** + +If you would like to continue using babel for transpiling, you will need to configure it manually. First, open `webpack.config.js` and add this: + +```js +module.exports = { + module: { + rules: [ + { + test: /\.(js)$/, + exclude: /node_modules/, + use: ['babel-loader'] + } + ] + } +} +``` + +Then open `package.json` and add this: +```json +"babel": { + "presets": [ + "./webpack.babel.js" + ] +} +``` + +Finally, download [webpackers babel preset](https://github.com/rails/webpacker/blob/master/package/babel/preset.js) file and place it in the same directory as `package.json` with the name `webpack.babel.js`. + +**Module resolution** + +Webpacker included the `source_path` (default: `app/javascript/`) into module resolution, so a statement like `import 'channels'` imported `app/javascript/channels/`. After migrating to `jsbundling-rails` this is no longer the case. You will need to update your `webpack.config.js` to include the following if you wish to maintain that behavior: + +```javascript +module.exports = { + // ... + resolve: { + modules: ["app/javascript", "node_modules"], + }, + //... +} +``` + +Alternatively, you can change modules to use relative imports, for example: +```diff +- import 'channels' ++ import './channels' +``` + +### Extracting Sass/SCSS from JavaScript + +In webpacker it is possible to extract Sass/SCSS from JavaScript by enabling `extract_css` in `webpacker.yml`. This allows for including those source files in JavaScript, e.g. `import '../scss/application.scss` + +If you wish to keep this functionality follow these steps: + +1. Run `yarn add mini-css-extract-plugin sass sass-loader css-loader`; +2. Update your `webpack.config.js` to require `mini-css-extract-plugin` and configure the loaders (see example below). + +Example `webpack.config.js`: + +```javascript +const path = require("path") +const webpack = require("webpack") +const MiniCssExtractPlugin = require("mini-css-extract-plugin") + +module.exports = { + mode: "production", + devtool: "source-map", + entry: { + application: "./app/javascript/application.js" + }, + resolve: { + modules: ["app/javascript", "node_modules"], + }, + output: { + filename: "[name].js", + sourceMapFilename: "[file].map", + path: path.resolve(__dirname, "app/assets/builds"), + }, + plugins: [ + new MiniCssExtractPlugin(), + new webpack.optimize.LimitChunkCountPlugin({ + maxChunks: 1 + }) + ], + module: { + rules: [ + { + test: /\.s[ac]ss$/i, + use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"], + }, + ], + }, +} +``` + +## 2. Migrate from sass-rails to cssbundling-rails + +Note: if your application used Webpacker's `extract_css` to build your CSS and did not require `sass-rails`, you can skip this section. + +Start by following these steps: + +1. Add `cssbundling-rails` to your Gemfile; +2. Run `./bin/bundle install`; +3. Run `./bin/rails css:install:sass`. + +After you are done you will notice that the install step updated some files. + +**The new process in 'Procfile.dev'** + +Just like the javascript process, this one will bundle and watch for changes in css files. + +**The 'build:css' attribute added to package.json** + +This is the command `yarn build` will use to bundle css files. + +**The 'link_tree' directive removed from 'app/assets/manifest.js'** + +Now that the CSS files will be placed into `app/assets/build`, Sprockets no longer needs to worry about the `app/assets/stylesheets` folder. If you have any other `link_tree` for css files, remove them too. + +### Configuring multiple entrypoints + +Sprockets will only compile files in the root directories listed in `manifest.js`, but the sass package that `yarn build` uses will also check subfolders, which might cause compilation errors if your scss files are using features like `@import` and variables. This means that if you have multiple entry points in your app, you have some extra work ahead of you. + +Let's assume you have the following structure in your `app/asset/stylesheets` folder: + +``` +stylesheets/admin.scss +stylesheets/admin/source_1.scss +stylesheets/admin/source_2.scss +stylesheets/application.scss +stylesheets/application/source_1.scss +stylesheets/application/source_2.scss +``` + +Start by your separating your entrypoints from your other files, and adjusting all `@import` for the new structure: + +``` +stylesheets/entrypoints/admin.scss +stylesheets/entrypoints/application.scss +stylesheets/sources/admin/source_1.scss +stylesheets/sources/admin/source_2.scss +stylesheets/sources/application/source_1.scss +stylesheets/sources/application/source_2.scss +``` + +Then adjust the `build` attribute in `package.json`: +``` +"build:css": "sass ./app/assets/stylesheets/entrypoints:./app/assets/builds --no-source-map --load-path=node_modules" +``` + +### Deprecation warnings + +Sass might raise deprecation warnings depending on what features you are using (such as division), but the messages will explain how to fix them. If you are not sure, see more details in the [official documentation](https://sass-lang.com/documentation/breaking-changes). + +## 3. Migrate from Sprockets to Propshaft + +Start by following these steps: + +1. Remove `sprockets`, `sprockets-rails`, and `sass-rails` from the Gemfile and add `propshaft`; +2. Run `./bin/bundle install`; +3. Check your `Gemfile.lock`, repeat steps 1 and 2 for gems that list `sprockets` or `sprockets-rails` as a dependency; +4. Open `config/application.rb` and remove `config.assets.paths << Rails.root.join('app','assets')`; +5. Remove `app/assets/config/manifest.js`. +6. Replace all asset_helpers (`image_url`, `font_url`) in css files with standard `urls`. +7. If you are importing only the frameworks you need (instead of `rails/all`), remove `require "sprockets/railtie"`; + +### Asset paths + +Propshaft will automatically include in its search paths the folders `vendor/assets`, `lib/assets` and `app/assets` of your project and of all the gems in your Gemfile. You can see all included files by using the `reveal` rake task: +``` + rake assets:reveal +``` + +### Asset helpers + +Propshaft does not rely on asset_helpers (`asset_path`, `asset_url`, `image_url`, etc.) like Sprockets did. Instead, it will search for every `url` function in your css files, and adjust them to include the digest of the assets they reference. + +Go through your css files, and make the necessary adjustments: +```diff +- background: image_url('hero.jpg'); ++ background: url('/hero.jpg'); +``` + +Notice that Propshaft's version starts with an `/` and Sprockets' version does not? That's because the latter uses **absolute paths**, and the former uses **relative paths**. To better illustrate that difference, let's assume you have the following structure: + +``` +assets/stylesheets/theme/main.scss +assets/images/hero.jpg +``` + +In Sprockets, `main.scss` can reference `hero.jpg` like this: +```css +background: image_url('hero.jpg') +``` + +Using the same path with `url` in Propshaft will cause it to raise an error, saying it cannot locate `theme/hero.jpg`. That's because Propshaft assumes all paths are relative to the path of the file it's processing. Since it was processing a css file inside the `theme` folder, it will also look for `hero.jpg` in the same folder. + +By adding a `/` at the start of the path we are telling Propshaft to consider this path as an absolute path. While this change in behavior increases the work a bit when upgrading, it makes **external libraries like FontAwesome and Bootstrap themes work out-of-the-box**. + +### Asset content + +It's a common pattern in apps to inline small SVG files and low resolution versions of images that need to be displayed as quickly as possible. In Propshaft, the same line of code works for all environments: +```ruby +Rails.application.assets.load_path.find('logo.svg').content +``` + +As Rails escapes html tags in views by default, in order to output a rendered svg you will need to specify rails not to escape the string using [html_safe](https://api.rubyonrails.org/classes/String.html#method-i-html_safe) or [raw](https://api.rubyonrails.org/classes/ActionView/Helpers/OutputSafetyHelper.html#method-i-raw). +```ruby +Rails.application.assets.load_path.find('logo.svg').content.html_safe +raw Rails.application.assets.load_path.find('logo.svg').content +``` + +### Precompilation in development + +Propshaft uses a dynamic assets resolver in development mode. However, when you run `assets:precompile` locally Propshaft will then switch to a static assets resolver. Therefore, changes to assets will not be observed anymore and you will have to precompile the assets each time changes are made. This is different to Sprockets. + +If you wish to have dynamic assets resolver enabled again, you need to clean your target folder (usually `public/assets`) and propshaft will start serving dynamic content from source. One way to do this is to run `rails assets:clobber`. + +Another way to watch changes in your CSS & JS assets is by running `bin/dev` command instead of `rails server` that not only runs the server but also keeps looking for any changes in the assets and once it detects any changes, it compiles them while the server is running. This is possible because of the `Procfile.dev`. + +## 4. Specific Configuration for Test Environments + +### Understanding Propshaft's Test Mode + +Propshaft automatically configures itself for test environments with these defaults: + +```ruby +# Automatically enabled in test environment +config.assets.server = Rails.env.test? # true for test environment +config.assets.sweep_cache = false # Disabled for faster tests +``` + +### Test Environment Configuration + +```ruby +# config/environments/test.rb +Rails.application.configure do + # Asset server is automatically enabled - no precompilation needed + config.assets.server = true + + # Optional: Add test-specific asset paths + config.assets.paths << Rails.root.join('spec/fixtures/assets') + + # Optional: Disable SRI for faster test execution + config.assets.integrity_hash_algorithm = nil + + # Optional: Customize asset prefix for isolated testing + # config.assets.prefix = '/test-assets' + + # Performance: Use faster file watcher (if using listen gem) + config.file_watcher = ActiveSupport::EventedFileUpdateChecker +end +``` + +### Testing Asset Integration + +#### RSpec Configuration + +```ruby +# spec/rails_helper.rb +RSpec.configure do |config| + # Ensure assets are available in feature specs + config.before(:suite) do + # Warm up asset cache for faster test execution + Rails.application.assets.load_path.assets + end + + # Clean up assets between tests if needed + config.after(:each) do + # Only if you modify asset paths during tests + # Rails.application.assets.load_path.clear_cache + end +end +``` + +#### Testing Asset Helpers + +```ruby +# spec/helpers/application_helper_spec.rb +RSpec.describe ApplicationHelper, type: :helper do + describe "asset helpers" do + it "resolves asset paths correctly" do + expect(helper.asset_path('application.js')).to match(%r{^/assets/application-\w+\.js$}) + end + + it "includes integrity hashes when configured" do + allow(Rails.application.config.assets).to receive(:integrity_hash_algorithm).and_return('sha384') + result = helper.javascript_include_tag('application', integrity: true) + expect(result).to include('integrity="sha384-') + end + end +end +``` + +#### Feature Spec Asset Testing + +```ruby +# spec/features/assets_spec.rb +RSpec.describe "Asset loading", type: :feature do + it "serves JavaScript assets correctly" do + visit root_path + expect(page).to have_css('script[src*="/assets/application-"]') + end + + it "serves CSS assets correctly" do + visit root_path + expect(page).to have_css('link[href*="/assets/application-"][rel="stylesheet"]') + end +end +``` + +### Common Test Environment Issues and Solutions + +#### Issue 1: Assets Not Found in Tests +**Symptom**: `Propshaft::MissingAssetError` in test environment +**Solution**: +```ruby +# Ensure asset server is enabled in test.rb +config.assets.server = true + +# Check that build artifacts exist +# For jsbundling-rails/cssbundling-rails: +bundle exec rake assets:precompile # If assets need building +``` + +#### Issue 2: Slow Test Startup +**Symptom**: Tests take long to start due to asset discovery +**Solution**: +```ruby +# config/environments/test.rb +# Disable sweep_cache (should be default) +config.assets.sweep_cache = false + +# Exclude unnecessary paths +config.assets.excluded_paths += [ + Rails.root.join("app/assets/stylesheets"), # If using cssbundling + Rails.root.join("app/javascript") # If using jsbundling +] +``` + +#### Issue 3: Inconsistent Asset Paths Between Environments +**Symptom**: Tests pass but development/production fails with asset references +**Solution**: +```ruby +# Use consistent asset path helpers across environments +# In views, always use: +<%= asset_path('image.png') %> # Good +# Instead of: +"/assets/image.png" # Bad - won't work with digests +``` + +### Performance Optimization for Tests + +#### Precompile Once Strategy +For CI/CD environments where you can precompile once: + +```bash +# In CI setup +bundle exec rake assets:precompile +RAILS_ENV=test bundle exec rspec +``` + +#### Asset Path Caching +```ruby +# config/initializers/assets.rb (test environment) +if Rails.env.test? + # Warm asset cache on initialization to avoid repeated discovery + Rails.application.config.after_initialize do + Rails.application.assets.load_path.assets + end +end +``` + +### Integration with Test Coverage Tools + +#### SimpleCov Configuration +```ruby +# spec/spec_helper.rb +require 'simplecov' +SimpleCov.start 'rails' do + # Exclude built assets from coverage + add_filter 'app/assets/builds/' + add_filter 'vendor/assets/' +end +``` + +### Docker and Containerized Testing + +#### Dockerfile Considerations +```dockerfile +# Dockerfile +FROM ruby:3.2 + +# Install Node.js for asset building +RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - +RUN apt-get install -y nodejs + +# Install dependencies +COPY Gemfile Gemfile.lock package.json package-lock.json ./ +RUN bundle install && npm install + +# Copy source +COPY . . + +# Build assets once for all test runs +RUN bundle exec rake assets:precompile + +# Run tests +CMD ["bundle", "exec", "rspec"] +``` + +### Migration Testing Strategy + +#### Before/After Asset Comparison +```ruby +# spec/migration/sprockets_to_propshaft_spec.rb +RSpec.describe "Sprockets to Propshaft migration" do + let(:expected_assets) do + %w[application.js application.css logo.png favicon.ico] + end + + it "serves all expected assets" do + expected_assets.each do |asset| + expect(Rails.application.assets.resolver.resolve(asset)).to be_present + end + end + + it "maintains asset content integrity" do + # Test that specific assets contain expected content + asset = Rails.application.assets.load_path.find('application.js') + expect(asset.content).to include('expected_javascript_content') + end +end +``` + +This comprehensive guide covers the complete migration from Sprockets to Propshaft with special attention to test environment configuration and common pitfalls. diff --git a/docs/session-summary.md b/docs/session-summary.md new file mode 100644 index 0000000..1bad9dc --- /dev/null +++ b/docs/session-summary.md @@ -0,0 +1,97 @@ +# Session Summary - ActiveAdmin Quill Editor Modernization + +## Context +We analyzed replacing Trumbowyg with Quill for ActiveAdmin 4.x and Rails 8 compatibility. After evaluating SunEditor (too large at 450KB after removing source maps) and Quill.js (~200KB), we chose to modernize the existing `activeadmin_quill_editor` gem. + +## Important Discoveries +1. **Existing Test App**: The gem already has a full Rails test application at `spec/dummy/` (not using Combustion) +2. **Existing Tests**: Comprehensive system tests already exist in `spec/system/` +3. **Existing Formtastic Input**: `QuillEditorInput` class already exists, just needs jQuery removal + +## Key Decisions Made + +1. **Use Quill.js** instead of SunEditor + - Quill: ~200KB minified + - Clean delta-based architecture + - No jQuery dependency for the core library + - Existing gem foundation to build upon + +2. **Serve assets directly from vendor/assets** + - No NPM package needed initially + - Propshaft automatically serves from vendor/assets and app/assets + - Simple drop-in integration + +3. **Follow activeadmin_trumbowyg patterns** + - Combustion-based test app + - Modern CI with matrix testing (Ruby 3.3/3.4, Rails 7.x/8.x) + - Comprehensive GitHub Actions setup with caching + - ESBuild for test app assets + +## Files Created +- `/data/activeadmin-quill_editor/docs/activeadmin-4-propshaft-update.md` - Complete migration guide +- `/data/activeadmin-quill_editor/docs/session-summary.md` - This summary + +## Next Steps + +### Immediate Tasks +1. Download Quill 2.x assets and place in vendor/assets +2. Create new JavaScript initializer without jQuery +3. Update Formtastic input class (already exists, just needs updates) +4. Update existing spec/dummy test app for Propshaft/Rails 8 +5. Configure GitHub Actions CI/CD + +### Implementation Order +1. **Asset Setup** (vendor/assets structure) +2. **JavaScript Modernization** (remove jQuery) +3. **Test App Updates** (spec/dummy with Propshaft) +4. **CI/CD Setup** (GitHub Actions with matrix) +5. **Documentation Update** (README, examples) + +### Testing Strategy +- Use existing spec/dummy Rails app (no Combustion needed) +- Update existing system tests, add missing cases from trumbowyg +- Matrix test against Ruby 3.3/3.4 +- Test Rails 7.x and 8.x with ActiveAdmin 4.x beta +- Consider adding Playwright for modern browser tests +- SimpleCov for coverage with SonarQube integration + +## Technical Notes + +### Propshaft Asset Serving +- Gems can provide assets in `vendor/assets` and `app/assets` +- Propshaft automatically includes these paths in load path +- No compilation needed for vendored assets +- Digest stamping handled automatically + +### JavaScript API Changes +Replace jQuery-based initialization: +```javascript +// Old (jQuery) +$(document).ready(initQuillEditors); + +// New (Vanilla) +document.addEventListener('DOMContentLoaded', initQuillEditors); +document.addEventListener('turbo:load', initQuillEditors); +``` + +### Form Input Usage +```ruby +f.input :content, as: :quill_editor, input_html: { + data: { + options: { + theme: 'snow', + modules: { toolbar: [...] } + } + } +} +``` + +## Resources +- Quill.js 2.x: https://quilljs.com/ +- Propshaft docs: https://github.com/rails/propshaft +- Reference gems: + - /data/activeadmin_trumbowyg (modern CI/test setup) + - /data/activeadmin-searchable_select (alternative patterns) + +## Contact for Questions +Review the comprehensive guide at `activeadmin-4-propshaft-update.md` for complete implementation details. \ No newline at end of file diff --git a/docs/tailwind-4/active_admin.rake b/docs/tailwind-4/active_admin.rake new file mode 100644 index 0000000..cba0731 --- /dev/null +++ b/docs/tailwind-4/active_admin.rake @@ -0,0 +1,55 @@ +namespace :active_admin do + desc 'Build Active Admin Tailwind stylesheets' + task :build do + require 'fileutils' + + root = File.expand_path('../../', __dir__) + + # Ensure builds directory exists + FileUtils.mkdir_p(File.join(root, 'app/assets/builds')) + + # Build with Tailwind CLI + command = [ + 'npx', 'tailwindcss', + '-i', File.join(root, 'app/assets/stylesheets/active_admin.tailwind.css'), + '-o', File.join(root, 'app/assets/builds/active_admin.css'), + '-c', File.join(root, 'tailwind.config.js'), + '-m' + ] + + system(*command, exception: true) + + puts 'Built Active Admin CSS with Tailwind' + end + + desc 'Watch Active Admin Tailwind stylesheets' + task :watch do + root = File.expand_path('../../', __dir__) + + # Watch for changes + command = [ + 'npx', 'tailwindcss', + '--watch', + '-i', File.join(root, 'app/assets/stylesheets/active_admin.tailwind.css'), + '-o', File.join(root, 'app/assets/builds/active_admin.css'), + '-c', File.join(root, 'tailwind.config.js'), + '-m' + ] + + system(*command) + end +end + +# Enhance existing rake tasks +if Rake::Task.task_defined?('assets:precompile') + Rake::Task['assets:precompile'].enhance(['active_admin:build']) +end +if Rake::Task.task_defined?('test:prepare') + Rake::Task['test:prepare'].enhance(['active_admin:build']) +end +if Rake::Task.task_defined?('spec:prepare') + Rake::Task['spec:prepare'].enhance(['active_admin:build']) +end +if Rake::Task.task_defined?('db:test:prepare') + Rake::Task['db:test:prepare'].enhance(['active_admin:build']) +end diff --git a/docs/tailwind-4/active_admin.tailwind.css b/docs/tailwind-4/active_admin.tailwind.css new file mode 100644 index 0000000..06dc899 --- /dev/null +++ b/docs/tailwind-4/active_admin.tailwind.css @@ -0,0 +1,16 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +@import "activeadmin-tom_select/src/tom-select-tailwind.css"; + +/* Additional batch actions dropdown styles that aren't in the ActiveAdmin plugin */ +@layer components { + .batch-actions-dropdown-toggle:disabled { + @apply opacity-50 cursor-not-allowed; + } + + .batch-actions-dropdown-arrow { + @apply w-2.5 h-2.5; + } +} \ No newline at end of file diff --git a/docs/tailwind-4/tailwind-active_admin.config.js b/docs/tailwind-4/tailwind-active_admin.config.js new file mode 100644 index 0000000..e2fb44e --- /dev/null +++ b/docs/tailwind-4/tailwind-active_admin.config.js @@ -0,0 +1,18 @@ +const execSync = require("node:child_process").execSync; +const activeAdminPath = execSync("bundle show activeadmin", { + encoding: "utf-8", +}).trim(); + +module.exports = { + content: [ + `${activeAdminPath}/vendor/javascript/flowbite.js`, + `${activeAdminPath}/plugin.js`, + `${activeAdminPath}/app/views/**/*.{arb,erb,html,rb}`, + "./app/admin/**/*.{arb,erb,html,rb}", + "./app/views/active_admin/**/*.{arb,erb,html,rb}", + "./app/views/admin/**/*.{arb,erb,html,rb}", + "./app/views/layouts/active_admin*.{erb,html}", + "./app/assets/controllers/active_admin/**/*.js", + ], + darkMode: "selector" +}; diff --git a/docs/update-quill.md b/docs/update-quill.md new file mode 100644 index 0000000..5b07f47 --- /dev/null +++ b/docs/update-quill.md @@ -0,0 +1,308 @@ +# Quill Editor Migration Guide for ActiveAdmin 4 + +## Overview +This guide helps you migrate the activeadmin-quill_editor gem to support ActiveAdmin 4 with modern Rails 8+ and Propshaft asset pipeline. + +## Key Changes Made + +### 1. Removed jQuery Dependency +**Before**: JavaScript relied on jQuery for initialization and DOM manipulation +**After**: Pure vanilla JavaScript with modern event listeners + +### 2. Asset Pipeline Updates +**Before**: Sprockets-based asset compilation with CDN dependencies +**After**: Propshaft-compatible with NPM-based Quill installation + +### 3. Ruby and Rails Version Requirements +- **Minimum Ruby**: 3.2+ (previously 3.0+) +- **Rails Support**: 7.0+ with ActiveAdmin 2.9-4.x +- **ActiveAdmin 4**: Full support with Propshaft + +## Installation & Setup + +### Step 1: Update Your Gemfile +```ruby +gem 'activeadmin_quill_editor', '~> 2.0' +``` + +### Step 2: Install Quill via NPM +```bash +# In your Rails app root +npm install quill@^2.0.2 +``` + +Or add to `package.json`: +```json +{ + "dependencies": { + "quill": "^2.0.2" + } +} +``` + +### Step 3: Configure JavaScript (Rails 8 with esbuild) + +Create or update `app/javascript/active_admin.js`: +```javascript +// Import ActiveAdmin (if using AA4) +import '@activeadmin/activeadmin'; + +// Import Quill +import Quill from 'quill'; +window.Quill = Quill; + +// The gem's initialization will auto-load when included +``` + +### Step 4: Configure CSS + +#### With Tailwind CSS (ActiveAdmin 4) +In `app/assets/stylesheets/active_admin.tailwind.css`: +```css +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +/* Quill styles */ +@import "quill/dist/quill.snow.css"; +@import "quill/dist/quill.bubble.css"; +``` + +#### With Sass/SCSS (Legacy) +In `app/assets/stylesheets/active_admin.scss`: +```scss +@import "active_admin/base"; +@import "quill/dist/quill.snow"; +// Optional bubble theme +@import "quill/dist/quill.bubble"; +``` + +### Step 5: Build Configuration + +#### esbuild.config.js +```javascript +const esbuild = require('esbuild'); +const path = require('path'); + +const config = { + entryPoints: ['app/javascript/active_admin.js'], + bundle: true, + sourcemap: true, + format: 'iife', + outdir: 'app/assets/builds', + publicPath: '/assets', +}; + +// Build or watch +if (process.argv.includes('--watch')) { + esbuild.context(config).then(ctx => { + ctx.watch(); + }); +} else { + esbuild.build(config); +} +``` + +#### package.json scripts +```json +{ + "scripts": { + "build:js": "node esbuild.config.js", + "build:css": "tailwindcss -i app/assets/stylesheets/active_admin.tailwind.css -o app/assets/builds/active_admin.css -m", + "build": "npm run build:js && npm run build:css" + } +} +``` + +## Usage + +### Basic Usage +```ruby +# app/admin/posts.rb +ActiveAdmin.register Post do + permit_params :title, :content, :description + + form do |f| + f.inputs do + f.input :title + f.input :content, as: :quill_editor + f.input :description, as: :quill_editor, input_html: { + data: { + options: { + theme: 'snow', + modules: { + toolbar: [ + ['bold', 'italic', 'underline'], + ['link', 'image'], + [{ list: 'ordered' }, { list: 'bullet' }] + ] + } + } + } + } + end + f.actions + end +end +``` + +### Custom Toolbar Configuration +```ruby +f.input :content, as: :quill_editor, input_html: { + data: { + options: { + theme: 'snow', # or 'bubble' + modules: { + toolbar: [ + [{ 'header': [1, 2, 3, false] }], + ['bold', 'italic', 'underline', 'strike'], + [{ 'color': [] }, { 'background': [] }], + [{ 'script': 'sub' }, { 'script': 'super' }], + ['blockquote', 'code-block'], + [{ 'list': 'ordered' }, { 'list': 'bullet' }], + [{ 'align': [] }], + ['link', 'image', 'video'], + ['clean'] + ] + } + } + } +} +``` + +### Image Upload Support (Optional) +```bash +npm install quill-image-uploader +``` + +Configure in your form: +```ruby +f.input :content, as: :quill_editor, input_html: { + data: { + plugins: { + image_uploader: { + server_url: '/admin/upload', + field_name: 'file' + } + } + } +} +``` + +## JavaScript API + +The gem exposes these global functions: + +```javascript +// Get all Quill editor instances +const editors = getQuillEditors(); + +// Get editor by index (0-based) +const firstEditor = getQuillEditorByIndex(0); + +// Get editor by element ID +const editor = getQuillEditorByElementId('post_content'); + +// Access Quill API directly +editor.getContents(); +editor.setText('New content'); +editor.format('bold', true); +``` + +## Migration from Legacy Versions + +### Removing jQuery Dependencies + +**Old initialization (jQuery)**: +```javascript +$(document).ready(function() { + // Initialization code +}); +``` + +**New initialization (Vanilla JS)**: +```javascript +// Automatically handled by the gem +// Or manually initialize: +document.addEventListener('DOMContentLoaded', function() { + // Custom initialization if needed +}); +``` + +### Asset Pipeline Changes + +**Old (Sprockets)**: +```javascript +//= require activeadmin/quill_editor/quill +//= require activeadmin/quill_editor_input +``` + +**New (Propshaft/esbuild)**: +```javascript +import Quill from 'quill'; +// Gem's initialization auto-loads +``` + +## Troubleshooting + +### Issue: Quill not initializing +**Solution**: Ensure JavaScript is properly included: +- Check that `window.Quill` is defined +- Verify the gem's JS is loaded after Quill +- Check browser console for errors + +### Issue: Styles not loading +**Solution**: Verify CSS imports: +- Ensure Quill CSS is imported +- Check that Tailwind processes the styles +- Verify no CSS conflicts with ActiveAdmin + +### Issue: Form submission not saving content +**Solution**: The gem automatically handles form submission. Check: +- Hidden input field is present in HTML +- No JavaScript errors preventing update +- Strong parameters permit the field + +## Testing Your Implementation + +### RSpec System Tests +```ruby +# spec/system/admin_posts_spec.rb +require 'rails_helper' + +RSpec.describe 'Admin Posts', type: :system do + it 'creates a post with Quill editor' do + visit '/admin/posts/new' + + # Fill in Quill editor + within '[data-aa-quill-editor]' do + find('.ql-editor').set('Test content') + end + + click_button 'Create Post' + + expect(page).to have_content('Post was successfully created') + expect(Post.last.content).to include('Test content') + end +end +``` + +## Version Compatibility Matrix + +| Gem Version | ActiveAdmin | Rails | Ruby | Quill | +|-------------|-------------|-------|------|-------| +| 2.0.x | 2.9-4.x | 7.0-8.x | 3.2+ | 2.x | +| 1.x | 2.x-3.x | 6.1-7.x | 3.0+ | 1.x | + +## Additional Resources + +- [Quill Documentation](https://quilljs.com/) +- [ActiveAdmin 4 Migration Guide](https://github.com/activeadmin/activeadmin/wiki) +- [Propshaft Documentation](https://github.com/rails/propshaft) +- [Rails 8 Asset Pipeline Guide](https://guides.rubyonrails.org/asset_pipeline.html) + +## Support + +For issues or questions: +- GitHub Issues: https://github.com/rs-pro/activeadmin-quill_editor/issues +- ActiveAdmin Community: https://github.com/activeadmin/activeadmin/discussions \ No newline at end of file diff --git a/docs/update-tom-select.md b/docs/update-tom-select.md new file mode 100644 index 0000000..ea70343 --- /dev/null +++ b/docs/update-tom-select.md @@ -0,0 +1,184 @@ +# Tom Select Migration Summary + +## Overview +We successfully migrated ActiveAdmin Searchable Select from Select2 (jQuery-based) to Tom Select (vanilla JS, TypeScript-ready) with Tailwind CSS 4 support. + +## Key Changes Made + +### 1. Package Dependencies +**Removed:** +- `jquery` peer dependency +- `select2` peer dependency + +**Added:** +- `tom-select: ^2.4.3` peer dependency + +### 2. JavaScript Changes + +#### `/src/index.js` +- Complete rewrite without jQuery dependency +- Uses native `fetch()` for AJAX requests +- Tom Select initialization with proper option mapping +- Handles Select2 → Tom Select option conversion (id/text → valueField/labelField) + +#### Removed Legacy Files: +- `/src/searchable_select/init.js` - Legacy compatibility file removed +- `/spec/internal/inject-jquery.js` - jQuery injection hack removed +- `/spec/internal/build_activeadmin_css.js` - Old CSS build hack removed + +### 3. CSS/Styling Changes + +#### New Files Created: +- `/src/tom-select-tailwind.css` - Complete Tom Select styles with Tailwind classes (consolidated single file) + +#### Package Exports Updated: +```json +"exports": { + "./tom-select-tailwind": "./src/tom-select-tailwind.css" +} +``` + +#### Removed Files: +- `/src/searchable_select.css` - Consolidated into tom-select-tailwind.css +- All legacy Select2 CSS imports + +### 4. Build Process (Tailwind 3) + +#### New Test App Structure: +``` +/spec/internal/ +├── tailwind.config.js # Tailwind 3 config +├── app/assets/stylesheets/ +│ └── active_admin.tailwind.css # Main CSS entry with Tom Select styles +├── build-css.js # Node script for CSS build +├── esbuild.config.js # JavaScript build config +└── package.json # Simplified scripts +``` + +#### Build Commands: +- `npm run build:css` → Runs Tailwind CSS via `build-css.js` +- `npm run build:js` → Runs esbuild for JavaScript bundling +- `npm run build` → Builds both JS and CSS + +#### CSS Build Process Fix: +- Integrated comprehensive ActiveAdmin styles from docs/tailwind-4 setup +- Included all ActiveAdmin component styles (panels, data tables, filters, forms, etc.) +- Tom Select styles are imported at the end of the CSS file +- All styles are properly processed by Tailwind CSS and included in the final build +- Fixed styling issues that were breaking ActiveAdmin UI components + +### 5. Test Updates + +#### CSS Class Changes: +| Select2 | Tom Select | +|---------|------------| +| `.select2-container` | `.ts-wrapper` or `.ts-control` | +| `.select2-dropdown` | `.ts-dropdown` | +| `.select2-results__option` | `.ts-dropdown .option` | +| `.select2-selection` | `.ts-control .item` | +| `.select2-search__field` | `.ts-control input` | + +#### Helper Method Updates in Tests: +- `expand_select_box`: Now clicks `.ts-control` +- `enter_search_term`: Targets `.ts-control input` +- `select_box_items`: Finds `.ts-dropdown .option` +- `finished_all_ajax_requests`: No longer uses jQuery.active + +### 6. Documentation Structure + +#### Example Files (with credits): +`/docs/tailwind-4/` - Example Tailwind 4 setup files +- Credit: https://gist.github.com/amkisko/af1b2f7dc4f0f941437ea16400277864 + +### 7. Migration Path for Users + +Users will need to: +1. Update their `Gemfile` to use the new version +2. Remove jQuery and Select2 dependencies +3. Add Tom Select dependency: `npm install tom-select@^2.4.3` +4. Update their CSS imports to use Tom Select styles +5. If using Tailwind, import our tom-select-tailwind styles +6. Update any custom JavaScript that referenced Select2 APIs + +### 8. Breaking Changes + +1. **No jQuery Required**: Apps no longer need jQuery for searchable selects +2. **CSS Classes Changed**: All Select2 classes replaced with Tom Select equivalents +3. **JavaScript API Different**: Tom Select has different initialization and options +4. **Legacy init.js Removed**: No backward compatibility layer + +### 9. Benefits of Migration + +1. **No jQuery Dependency**: Reduces bundle size significantly +2. **Modern JavaScript**: ES6+ modules, TypeScript support +3. **Better Performance**: Tom Select is lighter and faster +4. **Tailwind 4 Ready**: Native Tailwind utility classes +5. **Future-Proof**: Active development, modern architecture + +### 10. Files to Commit + +**Modified:** +- `/package.json` - Updated dependencies and exports +- `/src/index.js` - Rewritten for Tom Select +- `/spec/features/*.rb` - Updated test selectors +- `/spec/internal/package.json` - Removed jQuery, added Tom Select +- `/spec/internal/app/js/active_admin.js` - Tom Select import + +**Created:** +- `/src/tom-select-tailwind.css` +- `/src/searchable_select.css` +- `/spec/internal/config/tailwind-active_admin.config.js` +- `/spec/internal/app/assets/stylesheets/active_admin.tailwind.css` +- `/spec/internal/lib/tasks/active_admin.rake` + +**Deleted:** +- `/src/searchable_select/` directory +- `/spec/internal/inject-jquery.js` +- `/spec/internal/build_activeadmin_css.js` +- `/spec/internal/tailwind-active_admin.config.js` (old location) + +### 11. Testing Status + +✅ **Tests Fixed and Working:** +- All JavaScript initialization tests passing +- Tom Select properly initializes in test environment +- Clear button functionality working for all searchable selects +- Assets properly served in test environment + +**Test Environment Setup:** +- Assets must be built: `npm run build:js` and `bundle exec rake active_admin:build` +- Assets copied to public directory for test environment: + ```bash + mkdir -p public/javascripts public/stylesheets + cp app/assets/builds/active_admin.js public/javascripts/ + cp app/assets/builds/active_admin.css public/stylesheets/ + ``` +- Tests use Playwright driver for modern JavaScript support + +**Remaining Test Issues (4 failures):** +- AJAX options not loading properly in some integration tests +- Dropdown visibility detection needs adjustment for Tom Select +- Search input focus/activation needs refinement + +### 12. Key Implementation Details + +#### Clear Button Feature: +- All searchable selects are clearable by default +- Implemented via `data-clearable="true"` attribute +- Tom Select's `clear_button` plugin automatically added +- Clear button positioned at `right: 2rem` for better UX +- Can be disabled by setting `clearable: false` in Ruby options + +#### JavaScript Module Export: +- Main module exports both `setupAutoInit` and `initSearchableSelects` +- Functions made globally available in test environment via `window` object +- Auto-initialization on DOMContentLoaded, Turbo load, and has_many_add events + +### 13. Next Steps + +1. ✅ Complete test fixes for remaining failures (mostly done) +2. Update README.md with new installation instructions +3. Create migration guide at `/docs/guide-update-your-app.md` +4. Version bump to 5.0.0 (major version due to breaking changes) +5. Test with real ActiveAdmin applications +6. Consider adding TypeScript definitions for better IDE support \ No newline at end of file diff --git a/lib/activeadmin/quill_editor/engine.rb b/lib/activeadmin/quill_editor/engine.rb index 79bc31e..5010455 100644 --- a/lib/activeadmin/quill_editor/engine.rb +++ b/lib/activeadmin/quill_editor/engine.rb @@ -6,6 +6,30 @@ module ActiveAdmin module QuillEditor class Engine < ::Rails::Engine engine_name 'activeadmin_quill_editor' + + # Propshaft automatically includes vendor/assets and app/assets paths + # No need for explicit asset path configuration with Propshaft + + initializer 'activeadmin_quill_editor.assets' do |app| + # For Propshaft (Rails 8 default) + if defined?(Propshaft) + app.config.assets.precompile += %w[ + activeadmin_quill_editor.js + ] + # For Sprockets (legacy support) + elsif app.config.respond_to?(:assets) + app.config.assets.precompile += %w[ + activeadmin/quill_editor_input.js + activeadmin_quill_editor.js + ] + end + end + + initializer 'activeadmin_quill_editor.formtastic' do + ActiveSupport.on_load :active_admin do + require 'formtastic/inputs/quill_editor_input' + end + end end end -end +end \ No newline at end of file diff --git a/spec/dummy/app/assets/builds/active_admin.css b/spec/dummy/app/assets/builds/active_admin.css new file mode 100644 index 0000000..be84f66 --- /dev/null +++ b/spec/dummy/app/assets/builds/active_admin.css @@ -0,0 +1,16 @@ +*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;--tw-shadow:0 0 #0000}[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,select:focus,textarea:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' aria-hidden='true' viewBox='0 0 10 6'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m1 1 4 4 4-4'/%3E%3C/svg%3E");background-position:right .75rem center;background-repeat:no-repeat;background-size:.75em .75em;padding-inline-end:2rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}:is(:where([dir=rtl]) select){background-position:left .75rem center}[multiple]{background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-inline-end:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow:0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark [type=checkbox]:checked,.dark [type=checkbox]:indeterminate,.dark [type=radio]:checked,[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:.65rem .65rem;background-position:50%;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' aria-hidden='true' viewBox='0 0 16 12'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M1 5.917 5.724 10.5 15 1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:.65rem .65rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.dark [type=radio]:checked,[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");background-size:1rem 1rem}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' d='M2 8h12'/%3E%3C/svg%3E");background-color:currentColor;border-color:transparent;background-position:50%;background-repeat:no-repeat;background-size:.65rem .65rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px auto inherit}input[type=file]::file-selector-button{color:#fff;background:#1f2937;border:0;font-weight:500;font-size:.875rem;cursor:pointer;padding-top:.625rem;padding-bottom:.625rem;padding-inline-start:2rem;padding-inline-end:1rem;margin-inline-start:-1rem;margin-inline-end:1rem}input[type=file]::file-selector-button:hover{background:#374151}.dark input[type=file]::file-selector-button{color:#fff;background:#4b5563}.dark input[type=file]::file-selector-button:hover{background:#6b7280}.tooltip-arrow,.tooltip-arrow:before{position:absolute;width:8px;height:8px;background:inherit}.tooltip-arrow{visibility:hidden}.tooltip-arrow:before{content:"";visibility:visible;transform:rotate(45deg)}.tooltip[data-popper-placement^=top]>.tooltip-arrow{bottom:-4px}.tooltip[data-popper-placement^=bottom]>.tooltip-arrow{top:-4px}.tooltip[data-popper-placement^=left]>.tooltip-arrow{right:-4px}.tooltip[data-popper-placement^=right]>.tooltip-arrow{left:-4px}.tooltip.invisible>.tooltip-arrow:before{visibility:hidden}[data-popper-arrow],[data-popper-arrow]:before{position:absolute;width:8px;height:8px;background:inherit}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{content:"";visibility:visible;transform:rotate(45deg)}[data-popover][role=tooltip][data-popper-placement^=top]>[data-popper-arrow]{bottom:-5px}[data-popover][role=tooltip][data-popper-placement^=bottom]>[data-popper-arrow]{top:-5px}[data-popover][role=tooltip][data-popper-placement^=left]>[data-popper-arrow]{right:-5px}[data-popover][role=tooltip][data-popper-placement^=right]>[data-popper-arrow]{left:-5px}[role=tooltip].invisible>[data-popper-arrow]:before{visibility:hidden}[type=checkbox]{height:1rem;width:1rem;border-radius:.25rem;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}[type=checkbox]:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}[type=checkbox]:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1));--tw-ring-offset-color:#1f2937}[type=checkbox]:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity,1))}[type=radio]{height:1rem;width:1rem;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}[type=radio]:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}[type=radio]:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}[type=radio]:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1));--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity,1))}[type=date],[type=email],[type=number],[type=password],[type=tel],[type=text],[type=time],[type=url],select,textarea{width:100%;border-radius:.375rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}[type=date]:focus,[type=email]:focus,[type=number]:focus,[type=password]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,select:focus,textarea:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}[type=date]:is(.dark *),[type=email]:is(.dark *),[type=number]:is(.dark *),[type=password]:is(.dark *),[type=tel]:is(.dark *),[type=text]:is(.dark *),[type=time]:is(.dark *),[type=url]:is(.dark *),select:is(.dark *),textarea:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}[type=date]:is(.dark *)::-moz-placeholder,[type=email]:is(.dark *)::-moz-placeholder,[type=number]:is(.dark *)::-moz-placeholder,[type=password]:is(.dark *)::-moz-placeholder,[type=tel]:is(.dark *)::-moz-placeholder,[type=text]:is(.dark *)::-moz-placeholder,[type=time]:is(.dark *)::-moz-placeholder,[type=url]:is(.dark *)::-moz-placeholder,select:is(.dark *)::-moz-placeholder,textarea:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}[type=date]:is(.dark *)::placeholder,[type=email]:is(.dark *)::placeholder,[type=number]:is(.dark *)::placeholder,[type=password]:is(.dark *)::placeholder,[type=tel]:is(.dark *)::placeholder,[type=text]:is(.dark *)::placeholder,[type=time]:is(.dark *)::placeholder,[type=url]:is(.dark *)::placeholder,select:is(.dark *)::placeholder,textarea:is(.dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}[type=date]:focus:is(.dark *),[type=email]:focus:is(.dark *),[type=number]:focus:is(.dark *),[type=password]:focus:is(.dark *),[type=tel]:focus:is(.dark *),[type=text]:focus:is(.dark *),[type=time]:focus:is(.dark *),[type=url]:focus:is(.dark *),select:focus:is(.dark *),textarea:focus:is(.dark *){--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}a{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1));text-decoration-line:underline;text-underline-offset:.2rem}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.action-item-button{border-radius:.375rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1));text-decoration-line:none}.action-item-button:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.action-item-button:focus{z-index:10;outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity,1))}.action-item-button:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.action-item-button:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.action-item-button:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.index-data-table-toolbar{margin-bottom:1rem;display:flex;flex-direction:column;gap:1rem}@media (min-width:1024px){.index-data-table-toolbar{flex-direction:row}}.scopes{display:flex;flex-wrap:wrap;gap:.375rem}.index-button-group{display:inline-flex;flex-wrap:wrap;align-items:stretch;border-radius:.375rem}.index-button-group>:where(:not(:first-child)){margin-top:0;margin-bottom:0;margin-inline-start:-1px}.index-button{display:inline-flex;align-items:center;justify-content:center;border-width:1px;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1));text-decoration-line:none}.index-button:first-child{border-start-start-radius:.375rem;border-end-start-radius:.375rem}.index-button:last-child{border-start-end-radius:.375rem;border-end-end-radius:.375rem}.index-button:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.index-button:focus{z-index:10;--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1));--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity,1))}.index-button:is(.dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.index-button:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.index-button:focus:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.index-button-selected,.index-button-selected:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.index-button-selected:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.index-button-selected:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.scopes-count{margin-inline-start:.5rem;display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;background-color:rgba(199,210,254,.8);padding:.25rem .375rem;font-size:.75rem;line-height:1rem;font-weight:400;line-height:1;--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.scopes-count:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity,1))}.paginated-collection{overflow:hidden;border-radius:.375rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1));--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.paginated-collection:is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.paginated-collection-contents{overflow-x:auto}.paginated-collection-pagination{display:flex;flex-direction:column-reverse;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem}@media (min-width:1024px){.paginated-collection-pagination{flex-direction:row;padding:.75rem}}.paginated-collection-footer{display:flex;align-items:center;justify-content:space-between;gap:.5rem;border-top-width:1px;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1));padding:.75rem;font-size:.875rem;line-height:1.25rem}.paginated-collection-footer:is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.pagination-per-page{width:auto;width:-moz-min-content;width:min-content;padding-top:.25rem;padding-bottom:.25rem;padding-inline-end:1.75rem;font-size:.875rem;line-height:1.25rem}.index-as-table{position:relative;overflow-x:auto}.data-table{width:100%;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.data-table:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.data-table :where(thead>tr>th){white-space:nowrap;border-bottom-width:1px;--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1));padding:.875rem .75rem;text-align:start;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.data-table :where(thead>tr>th):is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1));background-color:rgba(3,7,18,.5);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.data-table :where(thead>tr>th>a){display:inline-flex;align-items:center;gap:.5rem;color:inherit;text-decoration-line:none}.tooltip.data-table-sorted-icon>.tooltip-arrow:before,[role=tooltip].data-table-sorted-icon>[data-popper-arrow]:before{visibility:hidden}.data-table-sorted-icon{visibility:hidden;height:5px;width:8px}:where(th[data-sort-direction]) .data-table-sorted-icon{visibility:visible}:where(th[data-sort-direction=asc]) .data-table-sorted-icon{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-table :where(tbody>tr){border-bottom-width:1px}.data-table :where(tbody>tr):is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.data-table :where(td){padding:1rem .75rem}.data-table-resource-actions{display:flex;gap:.5rem}.filters-form{margin-bottom:1.5rem;font-size:.875rem;line-height:1.25rem}.filters-form-title{margin-bottom:1rem;font-size:1.125rem;line-height:1.75rem;font-weight:700;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.filters-form-title:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.filters-form :where(.label){margin-bottom:.375rem;display:block;font-size:.875rem;line-height:1.25rem}.filters-form-input-group{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem}.filters-form-field{margin-bottom:1rem}.filters-form-field :where(.choices>label){margin-bottom:.25rem;display:flex;align-items:center;gap:.5rem}.filters-form-buttons{display:flex;align-items:center;gap:.5rem}.filters-form-submit{min-width:6rem;cursor:pointer;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1));padding:.5rem .75rem;text-align:center;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.filters-form-submit:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.filters-form-submit:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}.filters-form-submit:is(.dark *){--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.filters-form-submit:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.filters-form-submit:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity,1))}.filters-form-clear{border-radius:.375rem;padding:.5rem .75rem;font-weight:600;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1));text-decoration-line:none}.filters-form-clear:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.filters-form-clear:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.filters-form-clear:hover:is(.dark *){background-color:inherit;--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.filters-form-clear:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity,1))}.active-filters-title{margin-bottom:1rem;font-size:1.125rem;line-height:1.75rem;font-weight:700;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.active-filters-title:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.active-filters-list{list-style-type:disc}.active-filters-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.active-filters-list{padding-inline-start:1.25rem;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.active-filters-list:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.batch-actions-dropdown{position:relative}.batch-actions-dropdown-toggle{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:.375rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1));transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.batch-actions-dropdown-toggle:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.batch-actions-dropdown-toggle:focus{z-index:10;--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1));--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity,1))}.batch-actions-dropdown-toggle:disabled{pointer-events:none;border-color:rgba(229,231,235,.7);--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.batch-actions-dropdown-toggle:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.batch-actions-dropdown-toggle:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.batch-actions-dropdown-toggle:focus:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.batch-actions-dropdown-toggle:disabled:is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.batch-actions-dropdown-arrow{height:.625rem;width:.625rem}.batch-actions-dropdown-menu{z-index:10;display:none;min-width:7rem;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));padding-top:.25rem;padding-bottom:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1));--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1));--tw-ring-opacity:0.05}.batch-actions-dropdown-menu:focus{outline:2px solid transparent;outline-offset:2px}.batch-actions-dropdown-menu:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.batch-actions-dropdown-menu :where(li>a){display:block;padding:.5rem .625rem;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1));text-decoration-line:none}.batch-actions-dropdown-menu :where(li>a):hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.batch-actions-dropdown-menu :where(li>a):is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.batch-actions-dropdown-menu :where(li>a):hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.panel{margin-bottom:1.5rem;border-radius:.375rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1));--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.panel:is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.panel-title{border-top-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1));padding:.75rem;font-weight:700}.panel-title:is(.dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.panel-body{padding:1.25rem .75rem}.attributes-table{margin-bottom:1.5rem;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1));--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.attributes-table:is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.attributes-table>:where(table){width:100%;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.attributes-table>:where(table):is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.attributes-table :where(tbody>tr){border-bottom-width:1px}.attributes-table :where(tbody>tr):is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.attributes-table :where(tbody>tr>th){width:8rem;--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1));text-align:start;font-size:.75rem;line-height:1rem;text-transform:uppercase;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.attributes-table :where(tbody>tr>th):is(.dark *){background-color:rgba(31,41,55,.6);--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}@media (min-width:640px){.attributes-table :where(tbody>tr>th){width:10rem}}.attributes-table :where(tbody>tr>th,tbody>tr>td){padding:.75rem}.attributes-table-empty-value{font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;color:rgba(156,163,175,.5)}.attributes-table-empty-value:is(.dark *){color:rgba(55,65,81,.6)}.status-tag{display:inline-flex;align-items:center;white-space:nowrap;border-radius:9999px;--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1));padding:.125rem .625rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.status-tag:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.status-tag:where([data-status=yes]){--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.status-tag:where([data-status=yes]):is(.dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.formtastic{font-size:.875rem;line-height:1.25rem}.formtastic :where(.fieldset-title,.has-many-fields-title){margin-bottom:.75rem;display:block;width:100%;border-bottom-width:1px;font-size:1.125rem;line-height:1.75rem;font-weight:700}.formtastic :where(.label){margin-bottom:.375rem;display:block}.formtastic :where(.label abbr){margin-inline-start:.25rem;text-decoration-line:none}.formtastic :where(.input){padding-top:.75rem;padding-bottom:.75rem}.formtastic :where(.choice){margin-bottom:.25rem}.formtastic :where(.boolean label,.choice label){display:flex;align-items:center;gap:.5rem}.formtastic :where(.fragments-group){display:inline-flex;flex-wrap:wrap;gap:.25rem}.formtastic :where(.fragment label){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.formtastic :where(.inline-hints){margin-top:.5rem;--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.formtastic :where(.errors){margin-bottom:1.5rem}.formtastic :where(.errors)>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.formtastic :where(.errors){border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1));padding:1rem;--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.formtastic :where(.errors):is(.dark *){--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.formtastic :where(.errors>li){margin-inline-start:1rem;list-style-type:disc}.formtastic :where(.inline-errors){margin-top:.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.formtastic :where(.inline-errors):is(.dark *){--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.formtastic :where(.error [type=email],.error [type=number],.error [type=password],.error [type=tel],.error [type=text],.error [type=url],.error textarea){--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.formtastic :where(.buttons,.actions){margin-top:.75rem}.formtastic :where(.actions>ol){display:flex;align-items:center;gap:1.5rem}.formtastic :where([type=submit],[type=button],button){cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1));padding:.5rem 1rem;text-align:center;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.formtastic :where([type=submit],[type=button],button):hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.formtastic :where([type=submit],[type=button],button):focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}.formtastic :where([type=submit],[type=button],button):is(.dark *){--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.formtastic :where([type=submit],[type=button],button):hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.formtastic :where([type=submit],[type=button],button):focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity,1))}.formtastic :where(.actions .cancel-link){font-weight:600;line-height:1.5rem;--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1));text-decoration-line:none}.formtastic :where(.actions .cancel-link):is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.formtastic :where(.has-many-add){display:inline-block;padding-top:.75rem;padding-bottom:.75rem}.formtastic :where(.has-many-container)>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.formtastic :where(.has-many-fields){border-inline-start-width:4px;--tw-border-opacity:1;border-inline-start-color:rgb(229 231 235/var(--tw-border-opacity,1));padding-inline-start:.75rem}.formtastic :where(.has-many-fields):is(.dark *){--tw-border-opacity:1;border-inline-start-color:rgb(55 65 81/var(--tw-border-opacity,1))}.quill-editor{border-radius:.375rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.ql-toolbar{border-top-left-radius:.375rem;border-top-right-radius:.375rem;border-bottom-width:0}.ql-container{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.ql-editor{min-height:200px}.dark .quill-editor{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark .ql-toolbar{background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark .ql-container,.dark .ql-toolbar{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1));--tw-bg-opacity:1}.dark .ql-container{background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark .ql-editor{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.ql-toolbar button:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.ql-toolbar button:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark .ql-toolbar button svg{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark .ql-toolbar button:hover svg{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark .ql-toolbar .ql-stroke{stroke:#9ca3af!important}.dark .ql-toolbar .ql-fill{fill:#9ca3af!important}.dark .ql-toolbar button:hover .ql-stroke{stroke:#fff!important}.dark .ql-toolbar button:hover .ql-fill{fill:#fff!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.bottom-\[60px\]{bottom:60px}.left-0{left:0}.right-0{right:0}.start-0{inset-inline-start:0}.top-0{top:0}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.m-4{margin:1rem}.m-5{margin:1.25rem}.m-6{margin:1.5rem}.m-8{margin:2rem}.mx-0{margin-left:0;margin-right:0}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-8{margin-left:2rem;margin-right:2rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-5{margin-top:1.25rem;margin-bottom:1.25rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.my-auto{margin-top:auto;margin-bottom:auto}.-ms-px{margin-inline-start:-1px}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.me-1{margin-inline-end:.25rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-6{margin-left:1.5rem}.ml-8{margin-left:2rem}.ml-auto{margin-left:auto}.mr-0{margin-right:0}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mr-6{margin-right:1.5rem}.mr-8{margin-right:2rem}.mr-auto{margin-right:auto}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.ms-4{margin-inline-start:1rem}.ms-auto{margin-inline-start:auto}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.hidden{display:none}.h-12{height:3rem}.h-16{height:4rem}.h-2\.5{height:.625rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[5px\]{height:5px}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.min-h-20{min-height:5rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-1\/4{width:25%}.w-12{width:3rem}.w-16{width:4rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[8px\]{width:8px}.w-auto{width:auto}.w-full{width:100%}.w-min{width:-moz-min-content;width:min-content}.min-w-\[6rem\]{min-width:6rem}.min-w-\[7rem\]{min-width:7rem}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-7xl{max-width:80rem}.max-w-\[700px\]{max-width:700px}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-full{--tw-translate-y:-100%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-full{--tw-translate-y:100%}.rotate-180,.translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.scale-105{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.resize{resize:both}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.-space-x-px>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-1px*var(--tw-space-x-reverse));margin-left:calc(-1px*(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.break-keep{word-break:keep-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-4{border-width:4px}.border-8{border-width:8px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-l-0{border-left-width:0}.border-r{border-right-width:1px}.border-r-0{border-right-width:0}.border-s-4{border-inline-start-width:4px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0}.border-dashed{border-style:dashed}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity,1))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-s-gray-200{--tw-border-opacity:1;border-inline-start-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-s-gray-700{--tw-border-opacity:1;border-inline-start-color:rgb(55 65 81/var(--tw-border-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-gray-900\/50{background-color:rgba(17,24,39,.5)}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-indigo-200\/80{background-color:rgba(199,210,254,.8)}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/50{background-color:hsla(0,0%,100%,.5)}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-12{padding-bottom:3rem}.pe-3{padding-inline-end:.75rem}.pe-7{padding-inline-end:1.75rem}.ps-3{padding-inline-start:.75rem}.ps-5{padding-inline-start:1.25rem}.pt-1{padding-top:.25rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-9{padding-top:2.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-start{text-align:start}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.not-italic{font-style:normal}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-loose{line-height:2}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-400\/50{color:rgba(156,163,175,.5)}.text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.text-inherit{color:inherit}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.underline-offset-\[\.2rem\]{text-underline-offset:.2rem}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-none,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.ring-blue-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity,1))}.ring-opacity-5{--tw-ring-opacity:0.05}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)} +/*! + * Quill Editor v2.0.3 + * https://quilljs.com + * Copyright (c) 2017-2024, Slab + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */.ql-snow .ql-toolbar:after,.ql-snow.ql-toolbar:after{clear:both;content:"";display:table}.ql-snow .ql-toolbar button,.ql-snow.ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-snow .ql-toolbar button svg,.ql-snow.ql-toolbar button svg{float:left;height:100%}.ql-snow .ql-toolbar button:active:hover,.ql-snow.ql-toolbar button:active:hover{outline:none}.ql-snow .ql-toolbar input.ql-image[type=file],.ql-snow.ql-toolbar input.ql-image[type=file]{display:none}.ql-snow .ql-toolbar .ql-picker-item.ql-selected,.ql-snow .ql-toolbar .ql-picker-item:hover,.ql-snow .ql-toolbar .ql-picker-label.ql-active,.ql-snow .ql-toolbar .ql-picker-label:hover,.ql-snow .ql-toolbar button.ql-active,.ql-snow .ql-toolbar button:focus,.ql-snow .ql-toolbar button:hover,.ql-snow.ql-toolbar .ql-picker-item.ql-selected,.ql-snow.ql-toolbar .ql-picker-item:hover,.ql-snow.ql-toolbar .ql-picker-label.ql-active,.ql-snow.ql-toolbar .ql-picker-label:hover,.ql-snow.ql-toolbar button.ql-active,.ql-snow.ql-toolbar button:focus,.ql-snow.ql-toolbar button:hover{color:#06c}.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:focus .ql-fill,.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover .ql-fill,.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:focus .ql-fill,.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:hover .ql-fill,.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill{fill:#06c}.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow .ql-toolbar button.ql-active .ql-stroke,.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar button:focus .ql-stroke,.ql-snow .ql-toolbar button:focus .ql-stroke-miter,.ql-snow .ql-toolbar button:hover .ql-stroke,.ql-snow .ql-toolbar button:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow.ql-toolbar button.ql-active .ql-stroke,.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar button:focus .ql-stroke,.ql-snow.ql-toolbar button:focus .ql-stroke-miter,.ql-snow.ql-toolbar button:hover .ql-stroke,.ql-snow.ql-toolbar button:hover .ql-stroke-miter{stroke:#06c}@media (pointer:coarse){.ql-snow .ql-toolbar button:hover:not(.ql-active),.ql-snow.ql-toolbar button:hover:not(.ql-active){color:#444}.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#444}}.ql-snow,.ql-snow *{box-sizing:border-box}.ql-snow .ql-hidden{display:none}.ql-snow .ql-out-bottom,.ql-snow .ql-out-top{visibility:hidden}.ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-snow .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-snow .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-snow .ql-formats{display:inline-block;vertical-align:middle}.ql-snow .ql-formats:after{clear:both;content:"";display:table}.ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-snow .ql-stroke-miter{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2}.ql-snow .ql-fill,.ql-snow .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-empty{fill:none}.ql-snow .ql-even{fill-rule:evenodd}.ql-snow .ql-stroke.ql-thin,.ql-snow .ql-thin{stroke-width:1}.ql-snow .ql-transparent{opacity:.4}.ql-snow .ql-direction svg:last-child{display:none}.ql-snow .ql-direction.ql-active svg:last-child{display:inline}.ql-snow .ql-direction.ql-active svg:first-child{display:none}.ql-snow .ql-editor h1{font-size:2em}.ql-snow .ql-editor h2{font-size:1.5em}.ql-snow .ql-editor h3{font-size:1.17em}.ql-snow .ql-editor h4{font-size:1em}.ql-snow .ql-editor h5{font-size:.83em}.ql-snow .ql-editor h6{font-size:.67em}.ql-snow .ql-editor a{text-decoration:underline}.ql-snow .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-snow .ql-editor .ql-code-block-container,.ql-snow .ql-editor code{background-color:#f0f0f0;border-radius:3px}.ql-snow .ql-editor .ql-code-block-container{margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-snow .ql-editor code{font-size:85%;padding:2px 4px}.ql-snow .ql-editor .ql-code-block-container{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-snow .ql-editor img{max-width:100%}.ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-snow .ql-picker-label:before{display:inline-block;line-height:22px}.ql-snow .ql-picker-options{background-color:#fff;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-snow .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-snow .ql-picker.ql-expanded .ql-picker-label{color:#ccc;z-index:2}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-snow .ql-color-picker,.ql-snow .ql-icon-picker{width:28px}.ql-snow .ql-color-picker .ql-picker-label,.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-label svg,.ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}.ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-snow .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-snow .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=""]):before{content:attr(data-label)}.ql-snow .ql-picker.ql-header{width:98px}.ql-snow .ql-picker.ql-header .ql-picker-item:before,.ql-snow .ql-picker.ql-header .ql-picker-label:before{content:"Normal"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]:before{content:"Heading 1"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]:before{content:"Heading 2"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]:before{content:"Heading 3"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]:before{content:"Heading 4"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]:before{content:"Heading 5"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]:before{content:"Heading 6"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{font-size:2em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{font-size:1.5em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{font-size:1.17em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{font-size:1em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{font-size:.83em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{font-size:.67em}.ql-snow .ql-picker.ql-font{width:108px}.ql-snow .ql-picker.ql-font .ql-picker-item:before,.ql-snow .ql-picker.ql-font .ql-picker-label:before{content:"Sans Serif"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]:before{content:"Serif"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before{content:"Monospace"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{font-family:Georgia,Times New Roman,serif}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{font-family:Monaco,Courier New,monospace}.ql-snow .ql-picker.ql-size{width:98px}.ql-snow .ql-picker.ql-size .ql-picker-item:before,.ql-snow .ql-picker.ql-size .ql-picker-label:before{content:"Normal"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]:before{content:"Small"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]:before{content:"Large"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]:before{content:"Huge"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{font-size:10px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{font-size:18px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{font-size:32px}.ql-snow .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-snow .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-toolbar.ql-snow{border:1px solid #ccc;box-sizing:border-box;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:8px}.ql-toolbar.ql-snow .ql-formats{margin-right:15px}.ql-toolbar.ql-snow .ql-picker-label{border:1px solid transparent}.ql-toolbar.ql-snow .ql-picker-options{border:1px solid transparent;box-shadow:0 2px 8px rgba(0,0,0,.2)}.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label,.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options{border-color:#ccc}.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}.ql-toolbar.ql-snow+.ql-container.ql-snow{border-top:0}.ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}.ql-snow .ql-tooltip:before{content:"Visit URL:";line-height:26px;margin-right:8px}.ql-snow .ql-tooltip input[type=text]{display:none;border:1px solid #ccc;font-size:13px;height:26px;margin:0;padding:3px 5px;width:170px}.ql-snow .ql-tooltip a.ql-preview{display:inline-block;max-width:200px;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top}.ql-snow .ql-tooltip a.ql-action:after{border-right:1px solid #ccc;content:"Edit";margin-left:16px;padding-right:8px}.ql-snow .ql-tooltip a.ql-remove:before{content:"Remove";margin-left:8px}.ql-snow .ql-tooltip a{line-height:26px}.ql-snow .ql-tooltip.ql-editing a.ql-preview,.ql-snow .ql-tooltip.ql-editing a.ql-remove{display:none}.ql-snow .ql-tooltip.ql-editing input[type=text]{display:inline-block}.ql-snow .ql-tooltip.ql-editing a.ql-action:after{border-right:0;content:"Save";padding-right:0}.ql-snow .ql-tooltip[data-mode=link]:before{content:"Enter link:"}.ql-snow .ql-tooltip[data-mode=formula]:before{content:"Enter formula:"}.ql-snow .ql-tooltip[data-mode=video]:before{content:"Enter video:"}.ql-snow a{color:#06c}.ql-container.ql-snow{border:1px solid #ccc} +/*! + * Quill Editor v2.0.3 + * https://quilljs.com + * Copyright (c) 2017-2024, Slab + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container:not(.ql-disabled) li[data-list=checked]>.ql-ui,.ql-container:not(.ql-disabled) li[data-list=unchecked]>.ql-ui{cursor:pointer}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;-o-tab-size:4;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor>*{cursor:text}.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6,.ql-editor ol,.ql-editor p,.ql-editor pre{margin:0;padding:0}@supports (counter-set:none){.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6,.ql-editor p{counter-set:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6,.ql-editor p{counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor table{border-collapse:collapse}.ql-editor td{border:1px solid #000;padding:2px 5px}.ql-editor li,.ql-editor ol{padding-left:1.5em}.ql-editor li{list-style-type:none;position:relative}.ql-editor li>.ql-ui:before{display:inline-block;margin-left:-1.5em;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}.ql-editor li[data-list=checked]>.ql-ui,.ql-editor li[data-list=unchecked]>.ql-ui{color:#777}.ql-editor li[data-list=bullet]>.ql-ui:before{content:"\2022"}.ql-editor li[data-list=checked]>.ql-ui:before{content:"\2611"}.ql-editor li[data-list=unchecked]>.ql-ui:before{content:"\2610"}@supports (counter-set:none){.ql-editor li[data-list]{counter-set:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list]{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered]{counter-increment:list-0}.ql-editor li[data-list=ordered]>.ql-ui:before{content:counter(list-0,decimal) ". "}.ql-editor li[data-list=ordered].ql-indent-1{counter-increment:list-1}.ql-editor li[data-list=ordered].ql-indent-1>.ql-ui:before{content:counter(list-1,lower-alpha) ". "}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-1{counter-set:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-2{counter-increment:list-2}.ql-editor li[data-list=ordered].ql-indent-2>.ql-ui:before{content:counter(list-2,lower-roman) ". "}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-2{counter-set:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-3{counter-increment:list-3}.ql-editor li[data-list=ordered].ql-indent-3>.ql-ui:before{content:counter(list-3,decimal) ". "}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-3{counter-set:list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-4{counter-increment:list-4}.ql-editor li[data-list=ordered].ql-indent-4>.ql-ui:before{content:counter(list-4,lower-alpha) ". "}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-4{counter-set:list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-5{counter-increment:list-5}.ql-editor li[data-list=ordered].ql-indent-5>.ql-ui:before{content:counter(list-5,lower-roman) ". "}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-5{counter-set:list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-6{counter-increment:list-6}.ql-editor li[data-list=ordered].ql-indent-6>.ql-ui:before{content:counter(list-6,decimal) ". "}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-6{counter-set:list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-6{counter-reset:list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-7{counter-increment:list-7}.ql-editor li[data-list=ordered].ql-indent-7>.ql-ui:before{content:counter(list-7,lower-alpha) ". "}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-7{counter-set:list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-7{counter-reset:list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-8{counter-increment:list-8}.ql-editor li[data-list=ordered].ql-indent-8>.ql-ui:before{content:counter(list-8,lower-roman) ". "}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-8{counter-set:list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-8{counter-reset:list-9}}.ql-editor li[data-list=ordered].ql-indent-9{counter-increment:list-9}.ql-editor li[data-list=ordered].ql-indent-9>.ql-ui:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor li.ql-direction-rtl{padding-right:1.5em}.ql-editor li.ql-direction-rtl>.ql-ui:before{margin-left:.3em;margin-right:-1.5em;text-align:left}.ql-editor table{table-layout:fixed;width:100%}.ql-editor table td{outline:none}.ql-editor .ql-code-block-container{font-family:monospace}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor .ql-ui{position:absolute}.ql-editor.ql-blank:before{color:rgba(0,0,0,.6);content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-bubble .ql-toolbar:after,.ql-bubble.ql-toolbar:after{clear:both;content:"";display:table}.ql-bubble .ql-toolbar button,.ql-bubble.ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-bubble .ql-toolbar button svg,.ql-bubble.ql-toolbar button svg{float:left;height:100%}.ql-bubble .ql-toolbar button:active:hover,.ql-bubble.ql-toolbar button:active:hover{outline:none}.ql-bubble .ql-toolbar input.ql-image[type=file],.ql-bubble.ql-toolbar input.ql-image[type=file]{display:none}.ql-bubble .ql-toolbar .ql-picker-item.ql-selected,.ql-bubble .ql-toolbar .ql-picker-item:hover,.ql-bubble .ql-toolbar .ql-picker-label.ql-active,.ql-bubble .ql-toolbar .ql-picker-label:hover,.ql-bubble .ql-toolbar button.ql-active,.ql-bubble .ql-toolbar button:focus,.ql-bubble .ql-toolbar button:hover,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected,.ql-bubble.ql-toolbar .ql-picker-item:hover,.ql-bubble.ql-toolbar .ql-picker-label.ql-active,.ql-bubble.ql-toolbar .ql-picker-label:hover,.ql-bubble.ql-toolbar button.ql-active,.ql-bubble.ql-toolbar button:focus,.ql-bubble.ql-toolbar button:hover{color:#fff}.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button.ql-active .ql-fill,.ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:focus .ql-fill,.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:hover .ql-fill,.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar button.ql-active .ql-fill,.ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-bubble.ql-toolbar button:focus .ql-fill,.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-bubble.ql-toolbar button:hover .ql-fill,.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill{fill:#fff}.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-bubble .ql-toolbar button.ql-active .ql-stroke,.ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter,.ql-bubble .ql-toolbar button:focus .ql-stroke,.ql-bubble .ql-toolbar button:focus .ql-stroke-miter,.ql-bubble .ql-toolbar button:hover .ql-stroke,.ql-bubble .ql-toolbar button:hover .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-bubble.ql-toolbar button.ql-active .ql-stroke,.ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter,.ql-bubble.ql-toolbar button:focus .ql-stroke,.ql-bubble.ql-toolbar button:focus .ql-stroke-miter,.ql-bubble.ql-toolbar button:hover .ql-stroke,.ql-bubble.ql-toolbar button:hover .ql-stroke-miter{stroke:#fff}@media (pointer:coarse){.ql-bubble .ql-toolbar button:hover:not(.ql-active),.ql-bubble.ql-toolbar button:hover:not(.ql-active){color:#ccc}.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#ccc}.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#ccc}}.ql-bubble,.ql-bubble *{box-sizing:border-box}.ql-bubble .ql-hidden{display:none}.ql-bubble .ql-out-bottom,.ql-bubble .ql-out-top{visibility:hidden}.ql-bubble .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-bubble .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-bubble .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-bubble .ql-formats{display:inline-block;vertical-align:middle}.ql-bubble .ql-formats:after{clear:both;content:"";display:table}.ql-bubble .ql-stroke{fill:none;stroke:#ccc;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-bubble .ql-stroke-miter{fill:none;stroke:#ccc;stroke-miterlimit:10;stroke-width:2}.ql-bubble .ql-fill,.ql-bubble .ql-stroke.ql-fill{fill:#ccc}.ql-bubble .ql-empty{fill:none}.ql-bubble .ql-even{fill-rule:evenodd}.ql-bubble .ql-stroke.ql-thin,.ql-bubble .ql-thin{stroke-width:1}.ql-bubble .ql-transparent{opacity:.4}.ql-bubble .ql-direction svg:last-child{display:none}.ql-bubble .ql-direction.ql-active svg:last-child{display:inline}.ql-bubble .ql-direction.ql-active svg:first-child{display:none}.ql-bubble .ql-editor h1{font-size:2em}.ql-bubble .ql-editor h2{font-size:1.5em}.ql-bubble .ql-editor h3{font-size:1.17em}.ql-bubble .ql-editor h4{font-size:1em}.ql-bubble .ql-editor h5{font-size:.83em}.ql-bubble .ql-editor h6{font-size:.67em}.ql-bubble .ql-editor a{text-decoration:underline}.ql-bubble .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-bubble .ql-editor .ql-code-block-container,.ql-bubble .ql-editor code{background-color:#f0f0f0;border-radius:3px}.ql-bubble .ql-editor .ql-code-block-container{margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-bubble .ql-editor code{font-size:85%;padding:2px 4px}.ql-bubble .ql-editor .ql-code-block-container{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-bubble .ql-editor img{max-width:100%}.ql-bubble .ql-picker{color:#ccc;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-bubble .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-bubble .ql-picker-label:before{display:inline-block;line-height:22px}.ql-bubble .ql-picker-options{background-color:#444;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-bubble .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-bubble .ql-picker.ql-expanded .ql-picker-label{color:#777;z-index:2}.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#777}.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#777}.ql-bubble .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-bubble .ql-color-picker,.ql-bubble .ql-icon-picker{width:28px}.ql-bubble .ql-color-picker .ql-picker-label,.ql-bubble .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-bubble .ql-color-picker .ql-picker-label svg,.ql-bubble .ql-icon-picker .ql-picker-label svg{right:4px}.ql-bubble .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-bubble .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}.ql-bubble .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-bubble .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=""]):before{content:attr(data-label)}.ql-bubble .ql-picker.ql-header{width:98px}.ql-bubble .ql-picker.ql-header .ql-picker-item:before,.ql-bubble .ql-picker.ql-header .ql-picker-label:before{content:"Normal"}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="1"]:before{content:"Heading 1"}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="2"]:before{content:"Heading 2"}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="3"]:before{content:"Heading 3"}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="4"]:before{content:"Heading 4"}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="5"]:before{content:"Heading 5"}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="6"]:before{content:"Heading 6"}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{font-size:2em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{font-size:1.5em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{font-size:1.17em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{font-size:1em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{font-size:.83em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{font-size:.67em}.ql-bubble .ql-picker.ql-font{width:108px}.ql-bubble .ql-picker.ql-font .ql-picker-item:before,.ql-bubble .ql-picker.ql-font .ql-picker-label:before{content:"Sans Serif"}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]:before,.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]:before{content:"Serif"}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before,.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before{content:"Monospace"}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{font-family:Georgia,Times New Roman,serif}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{font-family:Monaco,Courier New,monospace}.ql-bubble .ql-picker.ql-size{width:98px}.ql-bubble .ql-picker.ql-size .ql-picker-item:before,.ql-bubble .ql-picker.ql-size .ql-picker-label:before{content:"Normal"}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]:before,.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]:before{content:"Small"}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]:before,.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]:before{content:"Large"}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]:before,.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]:before{content:"Huge"}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]:before{font-size:10px}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]:before{font-size:18px}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{font-size:32px}.ql-bubble .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-bubble .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-code-block-container{position:relative}.ql-code-block-container .ql-ui{right:5px;top:5px}.ql-bubble .ql-toolbar .ql-formats{margin:8px 12px 8px 0}.ql-bubble .ql-toolbar .ql-formats:first-child{margin-left:12px}.ql-bubble .ql-color-picker svg{margin:1px}.ql-bubble .ql-color-picker .ql-picker-item.ql-selected,.ql-bubble .ql-color-picker .ql-picker-item:hover{border-color:#fff}.ql-bubble .ql-tooltip{background-color:#444;border-radius:25px;color:#fff}.ql-bubble .ql-tooltip-arrow{border-left:6px solid transparent;border-right:6px solid transparent;content:" ";display:block;left:50%;margin-left:-6px;position:absolute}.ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow{border-bottom:6px solid #444;top:-6px}.ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow{border-top:6px solid #444;bottom:-6px}.ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor{display:block}.ql-bubble .ql-tooltip.ql-editing .ql-formats{visibility:hidden}.ql-bubble .ql-tooltip-editor{display:none}.ql-bubble .ql-tooltip-editor input[type=text]{background:transparent;border:none;color:#fff;font-size:13px;height:100%;outline:none;padding:10px 20px;position:absolute;width:100%}.ql-bubble .ql-tooltip-editor a{top:10px;position:absolute;right:20px}.ql-bubble .ql-tooltip-editor a:before{color:#ccc;content:"\00D7";font-size:16px;font-weight:700}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close){position:relative;white-space:nowrap}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):before{background-color:#444;border-radius:15px;top:-5px;font-size:12px;color:#fff;content:attr(href);font-weight:400;overflow:hidden;padding:5px 15px;text-decoration:none;z-index:1}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):after{border-top:6px solid #444;border-left:6px solid transparent;border-right:6px solid transparent;top:0;content:" ";height:0;width:0}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):after,.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):before{left:0;margin-left:50%;position:absolute;transform:translate(-50%,-100%);transition:visibility 0s ease .2s;visibility:hidden}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):hover:after,.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):hover:before{visibility:visible}.first\:rounded-s-md:first-child{border-start-start-radius:.375rem;border-end-start-radius:.375rem}.last\:rounded-e-md:last-child{border-start-end-radius:.375rem;border-end-end-radius:.375rem}.last\:border-b-0:last-child{border-bottom-width:0}.only\:mb-0:only-child{margin-bottom:0}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.focus\:text-blue-700:focus{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-2:focus,.focus\:ring-4:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-blue-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\:ring-blue-700:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity,1))}.focus\:ring-gray-200:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity,1))}.focus-visible\:bg-transparent:focus-visible{background-color:transparent}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:border-gray-200\/70:disabled{border-color:rgba(229,231,235,.7)}.disabled\:text-gray-400:disabled{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.group[data-open] .group-data-\[open\]\:block{display:block}.group[data-open] .group-data-\[open\]\:rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border:is(.dark *){border-width:1px}.dark\:border-blue-500:is(.dark *){--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:border-gray-800:is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.dark\:border-gray-800\/50:is(.dark *){border-color:rgba(31,41,55,.5)}.dark\:border-transparent:is(.dark *){border-color:transparent}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-s-gray-700:is(.dark *){--tw-border-opacity:1;border-inline-start-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:bg-blue-600:is(.dark *){--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:bg-gray-800\/50:is(.dark *){background-color:rgba(31,41,55,.5)}.dark\:bg-gray-800\/60:is(.dark *){background-color:rgba(31,41,55,.6)}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:bg-gray-900\/80:is(.dark *){background-color:rgba(17,24,39,.8)}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:bg-gray-950\/50:is(.dark *){background-color:rgba(3,7,18,.5)}.dark\:bg-gray-950\/75:is(.dark *){background-color:rgba(3,7,18,.75)}.dark\:bg-gray-950\/95:is(.dark *){background-color:rgba(3,7,18,.95)}.dark\:bg-green-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.dark\:bg-green-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.dark\:bg-indigo-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity,1))}.dark\:bg-inherit:is(.dark *){background-color:inherit}.dark\:bg-red-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.dark\:bg-white\/5:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:bg-yellow-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity,1))}.dark\:text-blue-500:is(.dark *){--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:text-gray-50:is(.dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:text-gray-700:is(.dark *){--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.dark\:text-gray-700\/60:is(.dark *){color:rgba(55,65,81,.6)}.dark\:text-green-300:is(.dark *){--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:text-indigo-200:is(.dark *){--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity,1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:text-yellow-300:is(.dark *){--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity,1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.dark\:ring-offset-gray-800:is(.dark *){--tw-ring-offset-color:#1f2937}.dark\:hover\:border-gray-600:hover:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:hover\:bg-blue-600:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.dark\:hover\:bg-blue-700:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-800:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:hover\:bg-inherit:hover:is(.dark *){background-color:inherit}.dark\:hover\:text-blue-500:hover:is(.dark *){--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.dark\:hover\:text-gray-100:hover:is(.dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:hover\:text-gray-300:hover:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:focus\:border-blue-500:focus:is(.dark *){--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.dark\:focus\:bg-blue-600:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.dark\:focus\:text-white:focus:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:focus\:ring-blue-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.dark\:focus\:ring-blue-600:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity,1))}.dark\:focus\:ring-blue-800:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity,1))}.dark\:focus\:ring-gray-700:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.dark\:disabled\:border-gray-800:disabled:is(.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.dark\:disabled\:bg-gray-900:disabled:is(.dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:disabled\:text-gray-700:disabled:is(.dark *){--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-40{width:10rem}.sm\:max-w-md{max-width:28rem}.sm\:rounded-md{border-radius:.375rem}.sm\:p-8{padding:2rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}}@media (min-width:768px){.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.md\:text-2xl{font-size:1.5rem;line-height:2rem}}@media (min-width:1024px){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:auto-cols-\[minmax\(0\2c 250px\)\]{grid-auto-columns:minmax(0,250px)}.lg\:grid-flow-col{grid-auto-flow:column}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:justify-end{justify-content:flex-end}.lg\:gap-6{gap:1.5rem}.lg\:p-3{padding:.75rem}.lg\:p-4{padding:1rem}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}}@media (min-width:1280px){.xl\:top-16{top:4rem}.xl\:ms-60{margin-inline-start:15rem}.xl\:hidden{display:none}.xl\:w-60{width:15rem}.xl\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:border-e{border-inline-end-width:1px}.xl\:border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.xl\:dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}}.rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-scale-x-100:where([dir=rtl],[dir=rtl] *){--tw-scale-x:-1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:space-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-space-x-reverse:1}.group[data-open] .group-data-\[open\]\:rtl\:-rotate-90:where([dir=rtl],[dir=rtl] *){--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))} +/*# sourceMappingURL=active_admin.css.map */ \ No newline at end of file diff --git a/spec/dummy/app/assets/builds/active_admin.css.map b/spec/dummy/app/assets/builds/active_admin.css.map new file mode 100644 index 0000000..356489e --- /dev/null +++ b/spec/dummy/app/assets/builds/active_admin.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["","%3Cinput%20css%203lb4tu%3E","../stylesheets/active_admin.css","../../../node_modules/quill/dist/quill.snow.css","webpack://Quill/src/assets/base.styl","webpack://Quill/src/assets/snow/toolbar.styl","webpack://Quill/src/assets/snow/tooltip.styl","webpack://Quill/src/assets/snow.styl","../../../node_modules/quill/dist/quill.bubble.css","webpack://Quill/src/assets/core.styl","webpack://Quill/src/assets/bubble/toolbar.styl","webpack://Quill/src/assets/bubble/tooltip.styl","webpack://Quill/src/assets/bubble.styl"],"names":[],"mappings":"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","file":"active_admin.css","sourcesContent":[null,"/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: theme('borderColor.DEFAULT', currentColor); /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n tab-size: 4; /* 3 */\n font-family: theme('fontFamily.sans', ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"); /* 4 */\n font-feature-settings: theme('fontFamily.sans[1].fontFeatureSettings', normal); /* 5 */\n font-variation-settings: theme('fontFamily.sans[1].fontVariationSettings', normal); /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: theme('fontFamily.mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace); /* 1 */\n font-feature-settings: theme('fontFamily.mono[1].fontFeatureSettings', normal); /* 2 */\n font-variation-settings: theme('fontFamily.mono[1].fontVariationSettings', normal); /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: theme('colors.gray.400', #9ca3af); /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n","@import \"tailwindcss/base\";\n@import \"tailwindcss/components\";\n@import \"tailwindcss/utilities\";\n\n/* Import Quill styles */\n@import \"../../../node_modules/quill/dist/quill.snow.css\";\n@import \"../../../node_modules/quill/dist/quill.bubble.css\";\n\n/* Custom Quill integration styles for ActiveAdmin */\n@layer components {\n .quill-editor {\n @apply border border-gray-300 rounded-md;\n }\n\n .ql-toolbar {\n @apply border-b-0 rounded-t-md;\n }\n\n .ql-container {\n @apply rounded-b-md;\n }\n\n .ql-editor {\n @apply min-h-[200px];\n }\n\n /* Dark mode support */\n .dark .quill-editor {\n @apply border-gray-600;\n }\n\n .dark .ql-toolbar {\n @apply bg-gray-800 border-gray-600;\n }\n\n .dark .ql-container {\n @apply bg-gray-900 border-gray-600;\n }\n\n .dark .ql-editor {\n @apply text-gray-100;\n }\n\n /* Fix toolbar button styles */\n .ql-toolbar button:hover {\n @apply bg-gray-100 dark:bg-gray-700;\n }\n\n /* Ensure icons are visible in dark mode */\n .dark .ql-toolbar button svg {\n @apply text-gray-300;\n }\n\n .dark .ql-toolbar button:hover svg {\n @apply text-white;\n }\n\n .dark .ql-toolbar .ql-stroke {\n stroke: #9ca3af !important;\n }\n\n .dark .ql-toolbar .ql-fill {\n fill: #9ca3af !important;\n }\n\n .dark .ql-toolbar button:hover .ql-stroke {\n stroke: white !important;\n }\n\n .dark .ql-toolbar button:hover .ql-fill {\n fill: white !important;\n }\n}","/*!\n * Quill Editor v2.0.3\n * https://quilljs.com\n * Copyright (c) 2017-2024, Slab\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */\n.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container:not(.ql-disabled) li[data-list=checked] > .ql-ui,.ql-container:not(.ql-disabled) li[data-list=unchecked] > .ql-ui{cursor:pointer}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor > *{cursor:text}.ql-editor p,.ql-editor ol,.ql-editor pre,.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{margin:0;padding:0}@supports (counter-set:none){.ql-editor p,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{counter-set:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor p,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor table{border-collapse:collapse}.ql-editor td{border:1px solid #000;padding:2px 5px}.ql-editor ol{padding-left:1.5em}.ql-editor li{list-style-type:none;padding-left:1.5em;position:relative}.ql-editor li > .ql-ui:before{display:inline-block;margin-left:-1.5em;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}.ql-editor li[data-list=checked] > .ql-ui,.ql-editor li[data-list=unchecked] > .ql-ui{color:#777}.ql-editor li[data-list=bullet] > .ql-ui:before{content:'\\2022'}.ql-editor li[data-list=checked] > .ql-ui:before{content:'\\2611'}.ql-editor li[data-list=unchecked] > .ql-ui:before{content:'\\2610'}@supports (counter-set:none){.ql-editor li[data-list]{counter-set:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list]{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered]{counter-increment:list-0}.ql-editor li[data-list=ordered] > .ql-ui:before{content:counter(list-0, decimal) '. '}.ql-editor li[data-list=ordered].ql-indent-1{counter-increment:list-1}.ql-editor li[data-list=ordered].ql-indent-1 > .ql-ui:before{content:counter(list-1, lower-alpha) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-1{counter-set:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-2{counter-increment:list-2}.ql-editor li[data-list=ordered].ql-indent-2 > .ql-ui:before{content:counter(list-2, lower-roman) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-2{counter-set:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-3{counter-increment:list-3}.ql-editor li[data-list=ordered].ql-indent-3 > .ql-ui:before{content:counter(list-3, decimal) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-3{counter-set:list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-4{counter-increment:list-4}.ql-editor li[data-list=ordered].ql-indent-4 > .ql-ui:before{content:counter(list-4, lower-alpha) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-4{counter-set:list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-5{counter-increment:list-5}.ql-editor li[data-list=ordered].ql-indent-5 > .ql-ui:before{content:counter(list-5, lower-roman) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-5{counter-set:list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-6{counter-increment:list-6}.ql-editor li[data-list=ordered].ql-indent-6 > .ql-ui:before{content:counter(list-6, decimal) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-6{counter-set:list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-6{counter-reset:list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-7{counter-increment:list-7}.ql-editor li[data-list=ordered].ql-indent-7 > .ql-ui:before{content:counter(list-7, lower-alpha) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-7{counter-set:list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-7{counter-reset:list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-8{counter-increment:list-8}.ql-editor li[data-list=ordered].ql-indent-8 > .ql-ui:before{content:counter(list-8, lower-roman) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-8{counter-set:list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-8{counter-reset:list-9}}.ql-editor li[data-list=ordered].ql-indent-9{counter-increment:list-9}.ql-editor li[data-list=ordered].ql-indent-9 > .ql-ui:before{content:counter(list-9, decimal) '. '}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor li.ql-direction-rtl{padding-right:1.5em}.ql-editor li.ql-direction-rtl > .ql-ui:before{margin-left:.3em;margin-right:-1.5em;text-align:left}.ql-editor table{table-layout:fixed;width:100%}.ql-editor table td{outline:none}.ql-editor .ql-code-block-container{font-family:monospace}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor .ql-ui{position:absolute}.ql-editor.ql-blank::before{color:rgba(0,0,0,0.6);content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-snow.ql-toolbar:after,.ql-snow .ql-toolbar:after{clear:both;content:'';display:table}.ql-snow.ql-toolbar button,.ql-snow .ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-snow.ql-toolbar button svg,.ql-snow .ql-toolbar button svg{float:left;height:100%}.ql-snow.ql-toolbar button:active:hover,.ql-snow .ql-toolbar button:active:hover{outline:none}.ql-snow.ql-toolbar input.ql-image[type=file],.ql-snow .ql-toolbar input.ql-image[type=file]{display:none}.ql-snow.ql-toolbar button:hover,.ql-snow .ql-toolbar button:hover,.ql-snow.ql-toolbar button:focus,.ql-snow .ql-toolbar button:focus,.ql-snow.ql-toolbar button.ql-active,.ql-snow .ql-toolbar button.ql-active,.ql-snow.ql-toolbar .ql-picker-label:hover,.ql-snow .ql-toolbar .ql-picker-label:hover,.ql-snow.ql-toolbar .ql-picker-label.ql-active,.ql-snow .ql-toolbar .ql-picker-label.ql-active,.ql-snow.ql-toolbar .ql-picker-item:hover,.ql-snow .ql-toolbar .ql-picker-item:hover,.ql-snow.ql-toolbar .ql-picker-item.ql-selected,.ql-snow .ql-toolbar .ql-picker-item.ql-selected{color:#06c}.ql-snow.ql-toolbar button:hover .ql-fill,.ql-snow .ql-toolbar button:hover .ql-fill,.ql-snow.ql-toolbar button:focus .ql-fill,.ql-snow .ql-toolbar button:focus .ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill{fill:#06c}.ql-snow.ql-toolbar button:hover .ql-stroke,.ql-snow .ql-toolbar button:hover .ql-stroke,.ql-snow.ql-toolbar button:focus .ql-stroke,.ql-snow .ql-toolbar button:focus .ql-stroke,.ql-snow.ql-toolbar button.ql-active .ql-stroke,.ql-snow .ql-toolbar button.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow.ql-toolbar button:hover .ql-stroke-miter,.ql-snow .ql-toolbar button:hover .ql-stroke-miter,.ql-snow.ql-toolbar button:focus .ql-stroke-miter,.ql-snow .ql-toolbar button:focus .ql-stroke-miter,.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter{stroke:#06c}@media (pointer:coarse){.ql-snow.ql-toolbar button:hover:not(.ql-active),.ql-snow .ql-toolbar button:hover:not(.ql-active){color:#444}.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#444}.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#444}}.ql-snow{box-sizing:border-box}.ql-snow *{box-sizing:border-box}.ql-snow .ql-hidden{display:none}.ql-snow .ql-out-bottom,.ql-snow .ql-out-top{visibility:hidden}.ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-snow .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-snow .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-snow .ql-formats{display:inline-block;vertical-align:middle}.ql-snow .ql-formats:after{clear:both;content:'';display:table}.ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-snow .ql-stroke-miter{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2}.ql-snow .ql-fill,.ql-snow .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-empty{fill:none}.ql-snow .ql-even{fill-rule:evenodd}.ql-snow .ql-thin,.ql-snow .ql-stroke.ql-thin{stroke-width:1}.ql-snow .ql-transparent{opacity:.4}.ql-snow .ql-direction svg:last-child{display:none}.ql-snow .ql-direction.ql-active svg:last-child{display:inline}.ql-snow .ql-direction.ql-active svg:first-child{display:none}.ql-snow .ql-editor h1{font-size:2em}.ql-snow .ql-editor h2{font-size:1.5em}.ql-snow .ql-editor h3{font-size:1.17em}.ql-snow .ql-editor h4{font-size:1em}.ql-snow .ql-editor h5{font-size:.83em}.ql-snow .ql-editor h6{font-size:.67em}.ql-snow .ql-editor a{text-decoration:underline}.ql-snow .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-snow .ql-editor code,.ql-snow .ql-editor .ql-code-block-container{background-color:#f0f0f0;border-radius:3px}.ql-snow .ql-editor .ql-code-block-container{margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-snow .ql-editor code{font-size:85%;padding:2px 4px}.ql-snow .ql-editor .ql-code-block-container{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-snow .ql-editor img{max-width:100%}.ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-snow .ql-picker-label::before{display:inline-block;line-height:22px}.ql-snow .ql-picker-options{background-color:#fff;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-snow .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-snow .ql-picker.ql-expanded .ql-picker-label{color:#ccc;z-index:2}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-snow .ql-color-picker,.ql-snow .ql-icon-picker{width:28px}.ql-snow .ql-color-picker .ql-picker-label,.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-label svg,.ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}.ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-snow .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-snow .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before{content:attr(data-label)}.ql-snow .ql-picker.ql-header{width:98px}.ql-snow .ql-picker.ql-header .ql-picker-label::before,.ql-snow .ql-picker.ql-header .ql-picker-item::before{content:'Normal'}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"1\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before{content:'Heading 1'}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"2\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before{content:'Heading 2'}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"3\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before{content:'Heading 3'}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"4\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before{content:'Heading 4'}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"5\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before{content:'Heading 5'}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"6\"]::before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before{content:'Heading 6'}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before{font-size:2em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before{font-size:1.5em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before{font-size:1.17em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before{font-size:1em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before{font-size:.83em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before{font-size:.67em}.ql-snow .ql-picker.ql-font{width:108px}.ql-snow .ql-picker.ql-font .ql-picker-label::before,.ql-snow .ql-picker.ql-font .ql-picker-item::before{content:'Sans Serif'}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before{content:'Serif'}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before{content:'Monospace'}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before{font-family:Georgia,Times New Roman,serif}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before{font-family:Monaco,Courier New,monospace}.ql-snow .ql-picker.ql-size{width:98px}.ql-snow .ql-picker.ql-size .ql-picker-label::before,.ql-snow .ql-picker.ql-size .ql-picker-item::before{content:'Normal'}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before{content:'Small'}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before{content:'Large'}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before{content:'Huge'}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before{font-size:10px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before{font-size:18px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before{font-size:32px}.ql-snow .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-snow .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-code-block-container{position:relative}.ql-code-block-container .ql-ui{right:5px;top:5px}.ql-toolbar.ql-snow{border:1px solid #ccc;box-sizing:border-box;font-family:'Helvetica Neue','Helvetica','Arial',sans-serif;padding:8px}.ql-toolbar.ql-snow .ql-formats{margin-right:15px}.ql-toolbar.ql-snow .ql-picker-label{border:1px solid transparent}.ql-toolbar.ql-snow .ql-picker-options{border:1px solid transparent;box-shadow:rgba(0,0,0,0.2) 0 2px 8px}.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label{border-color:#ccc}.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options{border-color:#ccc}.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}.ql-toolbar.ql-snow + .ql-container.ql-snow{border-top:0}.ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}.ql-snow .ql-tooltip::before{content:\"Visit URL:\";line-height:26px;margin-right:8px}.ql-snow .ql-tooltip input[type=text]{display:none;border:1px solid #ccc;font-size:13px;height:26px;margin:0;padding:3px 5px;width:170px}.ql-snow .ql-tooltip a.ql-preview{display:inline-block;max-width:200px;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top}.ql-snow .ql-tooltip a.ql-action::after{border-right:1px solid #ccc;content:'Edit';margin-left:16px;padding-right:8px}.ql-snow .ql-tooltip a.ql-remove::before{content:'Remove';margin-left:8px}.ql-snow .ql-tooltip a{line-height:26px}.ql-snow .ql-tooltip.ql-editing a.ql-preview,.ql-snow .ql-tooltip.ql-editing a.ql-remove{display:none}.ql-snow .ql-tooltip.ql-editing input[type=text]{display:inline-block}.ql-snow .ql-tooltip.ql-editing a.ql-action::after{border-right:0;content:'Save';padding-right:0}.ql-snow .ql-tooltip[data-mode=link]::before{content:\"Enter link:\"}.ql-snow .ql-tooltip[data-mode=formula]::before{content:\"Enter formula:\"}.ql-snow .ql-tooltip[data-mode=video]::before{content:\"Enter video:\"}.ql-snow a{color:#06c}.ql-container.ql-snow{border:1px solid #ccc}\n\n/*# sourceMappingURL=quill.snow.css.map*/","// Styles shared between snow and bubble\n\ncontrolHeight = 24px\ninputPaddingWidth = 5px\ninputPaddingHeight = 3px\n\ncolorItemMargin = 2px\ncolorItemSize = 16px\ncolorItemsPerRow = 7\n\n\n.ql-{themeName}.ql-toolbar, .ql-{themeName} .ql-toolbar\n &:after\n clear: both\n content: ''\n display: table\n\n button\n background: none\n border: none\n cursor: pointer\n display: inline-block\n float: left\n height: controlHeight\n padding: inputPaddingHeight inputPaddingWidth\n width: controlHeight + (inputPaddingWidth - inputPaddingHeight)*2\n\n svg\n float: left\n height: 100%\n\n &:active:hover\n outline: none\n\n input.ql-image[type=file]\n display: none\n\n button:hover, button:focus, button.ql-active,\n .ql-picker-label:hover, .ql-picker-label.ql-active,\n .ql-picker-item:hover, .ql-picker-item.ql-selected\n color: activeColor\n .ql-fill, .ql-stroke.ql-fill\n fill: activeColor\n .ql-stroke, .ql-stroke-miter\n stroke: activeColor\n\n// Fix for iOS not losing hover on touch\n@media (pointer: coarse)\n .ql-{themeName}.ql-toolbar, .ql-{themeName} .ql-toolbar\n button:hover:not(.ql-active)\n color: inactiveColor\n .ql-fill, .ql-stroke.ql-fill\n fill: inactiveColor\n .ql-stroke, .ql-stroke-miter\n stroke: inactiveColor\n\n.ql-{themeName}\n box-sizing: border-box\n *\n box-sizing: border-box\n\n .ql-hidden\n display: none\n .ql-out-bottom, .ql-out-top\n visibility: hidden\n\n .ql-tooltip\n position: absolute\n transform: translateY(10px)\n a\n cursor: pointer\n text-decoration: none\n .ql-tooltip.ql-flip\n transform: translateY(-10px)\n\n .ql-formats\n &:after\n clear: both\n content: ''\n display: table\n display: inline-block\n vertical-align: middle\n\n .ql-stroke\n fill: none\n stroke: inactiveColor\n stroke-linecap: round\n stroke-linejoin: round\n stroke-width: 2\n .ql-stroke-miter\n fill: none\n stroke: inactiveColor\n stroke-miterlimit: 10\n stroke-width: 2\n\n .ql-fill, .ql-stroke.ql-fill\n fill: inactiveColor\n\n .ql-empty\n fill: none\n .ql-even\n fill-rule: evenodd\n .ql-thin, .ql-stroke.ql-thin\n stroke-width: 1\n .ql-transparent\n opacity: 0.4\n\n .ql-direction\n svg:last-child\n display: none\n .ql-direction.ql-active\n svg:last-child\n display: inline\n svg:first-child\n display: none\n\n .ql-editor\n h1\n font-size: 2em\n h2\n font-size: 1.5em\n h3\n font-size: 1.17em\n h4\n font-size: 1em\n h5\n font-size: 0.83em\n h6\n font-size: 0.67em\n a\n text-decoration: underline\n blockquote\n border-left: 4px solid #ccc\n margin-bottom: 5px\n margin-top: 5px\n padding-left: 16px\n code, .ql-code-block-container\n background-color: #f0f0f0\n border-radius: 3px\n .ql-code-block-container\n margin-bottom: 5px\n margin-top: 5px\n padding: 5px 10px\n code\n font-size: 85%\n padding: 2px 4px\n .ql-code-block-container\n background-color: #23241f\n color: #f8f8f2\n overflow: visible\n img\n max-width: 100%\n\n .ql-picker\n color: inactiveColor\n display: inline-block\n float: left\n font-size: 14px\n font-weight: 500\n height: controlHeight\n position: relative\n vertical-align: middle\n .ql-picker-label\n cursor: pointer\n display: inline-block\n height: 100%\n padding-left: 8px\n padding-right: 2px\n position: relative\n width: 100%\n &::before\n display: inline-block\n line-height: 22px\n .ql-picker-options\n background-color: backgroundColor\n display: none\n min-width: 100%\n padding: 4px 8px\n position: absolute\n white-space: nowrap\n .ql-picker-item\n cursor: pointer\n display: block\n padding-bottom: 5px\n padding-top: 5px\n .ql-picker.ql-expanded\n .ql-picker-label\n color: borderColor\n z-index: 2\n .ql-fill\n fill: borderColor\n .ql-stroke\n stroke: borderColor\n .ql-picker-options\n display: block\n margin-top: -1px\n top: 100%\n z-index: 1\n\n .ql-color-picker, .ql-icon-picker\n width: controlHeight + 4\n .ql-picker-label\n padding: 2px 4px\n svg\n right: 4px\n .ql-icon-picker\n .ql-picker-options\n padding: 4px 0px\n .ql-picker-item\n height: controlHeight\n width: controlHeight\n padding: 2px 4px\n .ql-color-picker\n .ql-picker-options\n padding: inputPaddingHeight inputPaddingWidth\n width: (colorItemSize + 2*colorItemMargin) * colorItemsPerRow + 2*inputPaddingWidth + 2 // +2 for the border\n .ql-picker-item\n border: 1px solid transparent\n float: left\n height: colorItemSize\n margin: colorItemMargin\n padding: 0px\n width: colorItemSize\n\n .ql-picker:not(.ql-color-picker):not(.ql-icon-picker)\n svg\n position: absolute\n margin-top: -9px\n right: 0\n top: 50%\n width: 18px\n\n .ql-picker.ql-header, .ql-picker.ql-font, .ql-picker.ql-size\n .ql-picker-label[data-label]:not([data-label='']),\n .ql-picker-item[data-label]:not([data-label=''])\n &::before\n content: attr(data-label)\n\n .ql-picker.ql-header\n width: 98px\n .ql-picker-label::before,\n .ql-picker-item::before\n content: 'Normal'\n for num in (1..6)\n .ql-picker-label[data-value=\\\"{num}\\\"]::before,\n .ql-picker-item[data-value=\\\"{num}\\\"]::before\n content: 'Heading ' + num\n .ql-picker-item[data-value=\"1\"]::before\n font-size: 2em\n .ql-picker-item[data-value=\"2\"]::before\n font-size: 1.5em\n .ql-picker-item[data-value=\"3\"]::before\n font-size: 1.17em\n .ql-picker-item[data-value=\"4\"]::before\n font-size: 1em\n .ql-picker-item[data-value=\"5\"]::before\n font-size: 0.83em\n .ql-picker-item[data-value=\"6\"]::before\n font-size: 0.67em\n\n .ql-picker.ql-font\n width: 108px\n .ql-picker-label::before,\n .ql-picker-item::before\n content: 'Sans Serif'\n .ql-picker-label[data-value=serif]::before,\n .ql-picker-item[data-value=serif]::before\n content: 'Serif'\n .ql-picker-label[data-value=monospace]::before,\n .ql-picker-item[data-value=monospace]::before\n content: 'Monospace'\n .ql-picker-item[data-value=serif]::before\n font-family: Georgia, Times New Roman, serif\n .ql-picker-item[data-value=monospace]::before\n font-family: Monaco, Courier New, monospace\n\n .ql-picker.ql-size\n width: 98px\n .ql-picker-label::before,\n .ql-picker-item::before\n content: 'Normal'\n .ql-picker-label[data-value=small]::before,\n .ql-picker-item[data-value=small]::before\n content: 'Small'\n .ql-picker-label[data-value=large]::before,\n .ql-picker-item[data-value=large]::before\n content: 'Large'\n .ql-picker-label[data-value=huge]::before,\n .ql-picker-item[data-value=huge]::before\n content: 'Huge'\n .ql-picker-item[data-value=small]::before\n font-size: 10px\n .ql-picker-item[data-value=large]::before\n font-size: 18px\n .ql-picker-item[data-value=huge]::before\n font-size: 32px\n\n .ql-color-picker.ql-background\n .ql-picker-item\n background-color: #fff\n .ql-color-picker.ql-color\n .ql-picker-item\n background-color: #000\n\n.ql-code-block-container\n position: relative\n .ql-ui\n right: 5px\n top: 5px\n",".ql-toolbar.ql-snow\n border: 1px solid borderColor\n box-sizing: border-box\n font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\n padding: 8px\n\n .ql-formats\n margin-right: 15px\n\n .ql-picker-label\n border: 1px solid transparent\n .ql-picker-options\n border: 1px solid transparent\n box-shadow: rgba(0,0,0,0.2) 0 2px 8px\n .ql-picker.ql-expanded\n .ql-picker-label\n border-color: borderColor\n .ql-picker-options\n border-color: borderColor\n\n .ql-color-picker\n .ql-picker-item.ql-selected, .ql-picker-item:hover\n border-color: #000\n\n.ql-toolbar.ql-snow + .ql-container.ql-snow\n border-top: 0px;\n","tooltipMargin = 8px\n\n.ql-snow\n .ql-tooltip\n background-color: #fff\n border: 1px solid borderColor\n box-shadow: 0px 0px 5px shadowColor\n color: textColor\n padding: 5px 12px\n white-space: nowrap\n &::before\n content: \"Visit URL:\"\n line-height: 26px\n margin-right: tooltipMargin\n input[type=text]\n display: none\n border: 1px solid borderColor\n font-size: 13px\n height: 26px\n margin: 0px\n padding: 3px 5px\n width: 170px\n a.ql-preview\n display: inline-block\n max-width: 200px\n overflow-x: hidden\n text-overflow: ellipsis\n vertical-align: top\n a.ql-action::after\n border-right: 1px solid borderColor\n content: 'Edit'\n margin-left: tooltipMargin*2\n padding-right: tooltipMargin\n a.ql-remove::before\n content: 'Remove'\n margin-left: tooltipMargin\n a\n line-height: 26px\n .ql-tooltip.ql-editing\n a.ql-preview, a.ql-remove\n display: none\n input[type=text]\n display: inline-block\n a.ql-action::after\n border-right: 0px\n content: 'Save'\n padding-right: 0px\n .ql-tooltip[data-mode=link]::before\n content: \"Enter link:\"\n .ql-tooltip[data-mode=formula]::before\n content: \"Enter formula:\"\n .ql-tooltip[data-mode=video]::before\n content: \"Enter video:\"\n","themeName = 'snow'\nactiveColor = #06c\nborderColor = #ccc\nbackgroundColor = #fff\ninactiveColor = #444\nshadowColor = #ddd\ntextColor = #444\n\n@import './core'\n@import './base'\n@import './snow/*'\n\n.ql-snow\n a\n color: activeColor\n\n.ql-container.ql-snow\n border: 1px solid borderColor\n","/*!\n * Quill Editor v2.0.3\n * https://quilljs.com\n * Copyright (c) 2017-2024, Slab\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */\n.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container:not(.ql-disabled) li[data-list=checked] > .ql-ui,.ql-container:not(.ql-disabled) li[data-list=unchecked] > .ql-ui{cursor:pointer}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor > *{cursor:text}.ql-editor p,.ql-editor ol,.ql-editor pre,.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{margin:0;padding:0}@supports (counter-set:none){.ql-editor p,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{counter-set:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor p,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor table{border-collapse:collapse}.ql-editor td{border:1px solid #000;padding:2px 5px}.ql-editor ol{padding-left:1.5em}.ql-editor li{list-style-type:none;padding-left:1.5em;position:relative}.ql-editor li > .ql-ui:before{display:inline-block;margin-left:-1.5em;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}.ql-editor li[data-list=checked] > .ql-ui,.ql-editor li[data-list=unchecked] > .ql-ui{color:#777}.ql-editor li[data-list=bullet] > .ql-ui:before{content:'\\2022'}.ql-editor li[data-list=checked] > .ql-ui:before{content:'\\2611'}.ql-editor li[data-list=unchecked] > .ql-ui:before{content:'\\2610'}@supports (counter-set:none){.ql-editor li[data-list]{counter-set:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list]{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered]{counter-increment:list-0}.ql-editor li[data-list=ordered] > .ql-ui:before{content:counter(list-0, decimal) '. '}.ql-editor li[data-list=ordered].ql-indent-1{counter-increment:list-1}.ql-editor li[data-list=ordered].ql-indent-1 > .ql-ui:before{content:counter(list-1, lower-alpha) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-1{counter-set:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-2{counter-increment:list-2}.ql-editor li[data-list=ordered].ql-indent-2 > .ql-ui:before{content:counter(list-2, lower-roman) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-2{counter-set:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-3{counter-increment:list-3}.ql-editor li[data-list=ordered].ql-indent-3 > .ql-ui:before{content:counter(list-3, decimal) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-3{counter-set:list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-4{counter-increment:list-4}.ql-editor li[data-list=ordered].ql-indent-4 > .ql-ui:before{content:counter(list-4, lower-alpha) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-4{counter-set:list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-5{counter-increment:list-5}.ql-editor li[data-list=ordered].ql-indent-5 > .ql-ui:before{content:counter(list-5, lower-roman) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-5{counter-set:list-6 list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-6{counter-increment:list-6}.ql-editor li[data-list=ordered].ql-indent-6 > .ql-ui:before{content:counter(list-6, decimal) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-6{counter-set:list-7 list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-6{counter-reset:list-7 list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-7{counter-increment:list-7}.ql-editor li[data-list=ordered].ql-indent-7 > .ql-ui:before{content:counter(list-7, lower-alpha) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-7{counter-set:list-8 list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-7{counter-reset:list-8 list-9}}.ql-editor li[data-list=ordered].ql-indent-8{counter-increment:list-8}.ql-editor li[data-list=ordered].ql-indent-8 > .ql-ui:before{content:counter(list-8, lower-roman) '. '}@supports (counter-set:none){.ql-editor li[data-list].ql-indent-8{counter-set:list-9}}@supports not (counter-set:none){.ql-editor li[data-list].ql-indent-8{counter-reset:list-9}}.ql-editor li[data-list=ordered].ql-indent-9{counter-increment:list-9}.ql-editor li[data-list=ordered].ql-indent-9 > .ql-ui:before{content:counter(list-9, decimal) '. '}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor li.ql-direction-rtl{padding-right:1.5em}.ql-editor li.ql-direction-rtl > .ql-ui:before{margin-left:.3em;margin-right:-1.5em;text-align:left}.ql-editor table{table-layout:fixed;width:100%}.ql-editor table td{outline:none}.ql-editor .ql-code-block-container{font-family:monospace}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor .ql-ui{position:absolute}.ql-editor.ql-blank::before{color:rgba(0,0,0,0.6);content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-bubble.ql-toolbar:after,.ql-bubble .ql-toolbar:after{clear:both;content:'';display:table}.ql-bubble.ql-toolbar button,.ql-bubble .ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-bubble.ql-toolbar button svg,.ql-bubble .ql-toolbar button svg{float:left;height:100%}.ql-bubble.ql-toolbar button:active:hover,.ql-bubble .ql-toolbar button:active:hover{outline:none}.ql-bubble.ql-toolbar input.ql-image[type=file],.ql-bubble .ql-toolbar input.ql-image[type=file]{display:none}.ql-bubble.ql-toolbar button:hover,.ql-bubble .ql-toolbar button:hover,.ql-bubble.ql-toolbar button:focus,.ql-bubble .ql-toolbar button:focus,.ql-bubble.ql-toolbar button.ql-active,.ql-bubble .ql-toolbar button.ql-active,.ql-bubble.ql-toolbar .ql-picker-label:hover,.ql-bubble .ql-toolbar .ql-picker-label:hover,.ql-bubble.ql-toolbar .ql-picker-label.ql-active,.ql-bubble .ql-toolbar .ql-picker-label.ql-active,.ql-bubble.ql-toolbar .ql-picker-item:hover,.ql-bubble .ql-toolbar .ql-picker-item:hover,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected{color:#fff}.ql-bubble.ql-toolbar button:hover .ql-fill,.ql-bubble .ql-toolbar button:hover .ql-fill,.ql-bubble.ql-toolbar button:focus .ql-fill,.ql-bubble .ql-toolbar button:focus .ql-fill,.ql-bubble.ql-toolbar button.ql-active .ql-fill,.ql-bubble .ql-toolbar button.ql-active .ql-fill,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill{fill:#fff}.ql-bubble.ql-toolbar button:hover .ql-stroke,.ql-bubble .ql-toolbar button:hover .ql-stroke,.ql-bubble.ql-toolbar button:focus .ql-stroke,.ql-bubble .ql-toolbar button:focus .ql-stroke,.ql-bubble.ql-toolbar button.ql-active .ql-stroke,.ql-bubble .ql-toolbar button.ql-active .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-bubble.ql-toolbar button:hover .ql-stroke-miter,.ql-bubble .ql-toolbar button:hover .ql-stroke-miter,.ql-bubble.ql-toolbar button:focus .ql-stroke-miter,.ql-bubble .ql-toolbar button:focus .ql-stroke-miter,.ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter,.ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter{stroke:#fff}@media (pointer:coarse){.ql-bubble.ql-toolbar button:hover:not(.ql-active),.ql-bubble .ql-toolbar button:hover:not(.ql-active){color:#ccc}.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#ccc}.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#ccc}}.ql-bubble{box-sizing:border-box}.ql-bubble *{box-sizing:border-box}.ql-bubble .ql-hidden{display:none}.ql-bubble .ql-out-bottom,.ql-bubble .ql-out-top{visibility:hidden}.ql-bubble .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-bubble .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-bubble .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-bubble .ql-formats{display:inline-block;vertical-align:middle}.ql-bubble .ql-formats:after{clear:both;content:'';display:table}.ql-bubble .ql-stroke{fill:none;stroke:#ccc;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-bubble .ql-stroke-miter{fill:none;stroke:#ccc;stroke-miterlimit:10;stroke-width:2}.ql-bubble .ql-fill,.ql-bubble .ql-stroke.ql-fill{fill:#ccc}.ql-bubble .ql-empty{fill:none}.ql-bubble .ql-even{fill-rule:evenodd}.ql-bubble .ql-thin,.ql-bubble .ql-stroke.ql-thin{stroke-width:1}.ql-bubble .ql-transparent{opacity:.4}.ql-bubble .ql-direction svg:last-child{display:none}.ql-bubble .ql-direction.ql-active svg:last-child{display:inline}.ql-bubble .ql-direction.ql-active svg:first-child{display:none}.ql-bubble .ql-editor h1{font-size:2em}.ql-bubble .ql-editor h2{font-size:1.5em}.ql-bubble .ql-editor h3{font-size:1.17em}.ql-bubble .ql-editor h4{font-size:1em}.ql-bubble .ql-editor h5{font-size:.83em}.ql-bubble .ql-editor h6{font-size:.67em}.ql-bubble .ql-editor a{text-decoration:underline}.ql-bubble .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-bubble .ql-editor code,.ql-bubble .ql-editor .ql-code-block-container{background-color:#f0f0f0;border-radius:3px}.ql-bubble .ql-editor .ql-code-block-container{margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-bubble .ql-editor code{font-size:85%;padding:2px 4px}.ql-bubble .ql-editor .ql-code-block-container{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-bubble .ql-editor img{max-width:100%}.ql-bubble .ql-picker{color:#ccc;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-bubble .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-bubble .ql-picker-label::before{display:inline-block;line-height:22px}.ql-bubble .ql-picker-options{background-color:#444;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-bubble .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-bubble .ql-picker.ql-expanded .ql-picker-label{color:#777;z-index:2}.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#777}.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#777}.ql-bubble .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-bubble .ql-color-picker,.ql-bubble .ql-icon-picker{width:28px}.ql-bubble .ql-color-picker .ql-picker-label,.ql-bubble .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-bubble .ql-color-picker .ql-picker-label svg,.ql-bubble .ql-icon-picker .ql-picker-label svg{right:4px}.ql-bubble .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-bubble .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}.ql-bubble .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-bubble .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before{content:attr(data-label)}.ql-bubble .ql-picker.ql-header{width:98px}.ql-bubble .ql-picker.ql-header .ql-picker-label::before,.ql-bubble .ql-picker.ql-header .ql-picker-item::before{content:'Normal'}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"1\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before{content:'Heading 1'}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"2\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before{content:'Heading 2'}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"3\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before{content:'Heading 3'}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"4\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before{content:'Heading 4'}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"5\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before{content:'Heading 5'}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value=\"6\"]::before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before{content:'Heading 6'}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before{font-size:2em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before{font-size:1.5em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before{font-size:1.17em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before{font-size:1em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before{font-size:.83em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before{font-size:.67em}.ql-bubble .ql-picker.ql-font{width:108px}.ql-bubble .ql-picker.ql-font .ql-picker-label::before,.ql-bubble .ql-picker.ql-font .ql-picker-item::before{content:'Sans Serif'}.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before{content:'Serif'}.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before{content:'Monospace'}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before{font-family:Georgia,Times New Roman,serif}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before{font-family:Monaco,Courier New,monospace}.ql-bubble .ql-picker.ql-size{width:98px}.ql-bubble .ql-picker.ql-size .ql-picker-label::before,.ql-bubble .ql-picker.ql-size .ql-picker-item::before{content:'Normal'}.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]::before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before{content:'Small'}.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]::before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before{content:'Large'}.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before{content:'Huge'}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before{font-size:10px}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before{font-size:18px}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before{font-size:32px}.ql-bubble .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-bubble .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-code-block-container{position:relative}.ql-code-block-container .ql-ui{right:5px;top:5px}.ql-bubble .ql-toolbar .ql-formats{margin:8px 12px 8px 0}.ql-bubble .ql-toolbar .ql-formats:first-child{margin-left:12px}.ql-bubble .ql-color-picker svg{margin:1px}.ql-bubble .ql-color-picker .ql-picker-item.ql-selected,.ql-bubble .ql-color-picker .ql-picker-item:hover{border-color:#fff}.ql-bubble .ql-tooltip{background-color:#444;border-radius:25px;color:#fff}.ql-bubble .ql-tooltip-arrow{border-left:6px solid transparent;border-right:6px solid transparent;content:\" \";display:block;left:50%;margin-left:-6px;position:absolute}.ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow{border-bottom:6px solid #444;top:-6px}.ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow{border-top:6px solid #444;bottom:-6px}.ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor{display:block}.ql-bubble .ql-tooltip.ql-editing .ql-formats{visibility:hidden}.ql-bubble .ql-tooltip-editor{display:none}.ql-bubble .ql-tooltip-editor input[type=text]{background:transparent;border:none;color:#fff;font-size:13px;height:100%;outline:none;padding:10px 20px;position:absolute;width:100%}.ql-bubble .ql-tooltip-editor a{top:10px;position:absolute;right:20px}.ql-bubble .ql-tooltip-editor a:before{color:#ccc;content:\"\\00D7\";font-size:16px;font-weight:bold}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close){position:relative;white-space:nowrap}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close)::before{background-color:#444;border-radius:15px;top:-5px;font-size:12px;color:#fff;content:attr(href);font-weight:normal;overflow:hidden;padding:5px 15px;text-decoration:none;z-index:1}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close)::after{border-top:6px solid #444;border-left:6px solid transparent;border-right:6px solid transparent;top:0;content:\" \";height:0;width:0}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close)::before,.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close)::after{left:0;margin-left:50%;position:absolute;transform:translate(-50%,-100%);transition:visibility 0s ease 200ms;visibility:hidden}.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):hover::before,.ql-container.ql-bubble:not(.ql-disabled) a:not(.ql-close):hover::after{visibility:visible}\n\n/*# sourceMappingURL=quill.bubble.css.map*/","// Styles necessary for Quill\n\nLIST_STYLE = decimal lower-alpha lower-roman\nLIST_STYLE_WIDTH = 1.2em\nLIST_STYLE_MARGIN = 0.3em\nLIST_STYLE_OUTER_WIDTH = LIST_STYLE_MARGIN + LIST_STYLE_WIDTH\nMAX_INDENT = 9\n\nresets(arr)\n unquote('list-' + join(' list-', arr))\n\n.ql-container\n box-sizing: border-box\n font-family: Helvetica, Arial, sans-serif\n font-size: 13px\n height: 100%\n margin: 0px\n position: relative\n\n.ql-container.ql-disabled\n .ql-tooltip\n visibility: hidden\n\n.ql-container:not(.ql-disabled)\n li[data-list=checked],\n li[data-list=unchecked]\n > .ql-ui\n cursor: pointer\n\n.ql-clipboard\n left: -100000px\n height: 1px\n overflow-y: hidden\n position: absolute\n top: 50%\n p\n margin: 0\n padding: 0\n\n.ql-editor\n box-sizing: border-box\n counter-reset: resets(0..MAX_INDENT)\n line-height: 1.42\n height: 100%\n outline: none\n overflow-y: auto\n padding: 12px 15px\n tab-size: 4\n -moz-tab-size: 4\n text-align: left\n white-space: pre-wrap\n word-wrap: break-word\n > *\n cursor: text\n\n p, ol, pre, blockquote, h1, h2, h3, h4, h5, h6\n margin: 0\n padding: 0\n p, h1, h2, h3, h4, h5, h6\n @supports (counter-set: none)\n counter-set: resets(0..MAX_INDENT)\n @supports not (counter-set: none)\n counter-reset: resets(0..MAX_INDENT)\n table\n border-collapse: collapse\n td\n border: 1px solid #000\n padding: 2px 5px\n ol\n padding-left: 1.5em\n li\n list-style-type: none\n padding-left: LIST_STYLE_OUTER_WIDTH\n position: relative\n\n > .ql-ui:before\n display: inline-block\n margin-left: -1*LIST_STYLE_OUTER_WIDTH\n margin-right: LIST_STYLE_MARGIN\n text-align: right\n white-space: nowrap\n width: LIST_STYLE_WIDTH\n\n li[data-list=checked],\n li[data-list=unchecked]\n > .ql-ui\n color: #777\n\n li[data-list=bullet] > .ql-ui:before\n content: '\\2022'\n li[data-list=checked] > .ql-ui:before\n content: '\\2611'\n li[data-list=unchecked] > .ql-ui:before\n content: '\\2610'\n\n li[data-list]\n @supports (counter-set: none)\n counter-set: resets(1..MAX_INDENT)\n @supports not (counter-set: none)\n counter-reset: resets(1..MAX_INDENT)\n\n li[data-list=ordered]\n counter-increment: list-0\n > .ql-ui:before\n content: unquote('counter(list-0, ' + LIST_STYLE[0] + ')') '. '\n for num in (1..MAX_INDENT)\n li[data-list=ordered].ql-indent-{num}\n counter-increment: unquote('list-' + num)\n > .ql-ui:before\n content: unquote('counter(list-' + num + ', ' + LIST_STYLE[num%3] + ')') '. '\n if (num < MAX_INDENT)\n li[data-list].ql-indent-{num}\n @supports (counter-set: none)\n counter-set: resets((num+1)..MAX_INDENT)\n @supports not (counter-set: none)\n counter-reset: resets((num+1)..MAX_INDENT)\n\n for num in (1..MAX_INDENT)\n .ql-indent-{num}:not(.ql-direction-rtl)\n padding-left: (3*num)em\n li.ql-indent-{num}:not(.ql-direction-rtl)\n padding-left: (3*num + LIST_STYLE_OUTER_WIDTH)em\n .ql-indent-{num}.ql-direction-rtl.ql-align-right\n padding-right: (3*num)em\n li.ql-indent-{num}.ql-direction-rtl.ql-align-right\n padding-right: (3*num + LIST_STYLE_OUTER_WIDTH)em\n\n li.ql-direction-rtl\n padding-right: LIST_STYLE_OUTER_WIDTH\n > .ql-ui:before\n margin-left: LIST_STYLE_MARGIN\n margin-right: -1*LIST_STYLE_OUTER_WIDTH\n text-align: left\n\n table\n table-layout: fixed\n width: 100%\n td\n outline: none\n\n .ql-code-block-container\n font-family: monospace\n\n .ql-video\n display: block\n max-width: 100%\n .ql-video.ql-align-center\n margin: 0 auto\n .ql-video.ql-align-right\n margin: 0 0 0 auto\n\n .ql-bg-black\n background-color: rgb(0,0,0)\n .ql-bg-red\n background-color: rgb(230,0,0)\n .ql-bg-orange\n background-color: rgb(255,153,0)\n .ql-bg-yellow\n background-color: rgb(255,255,0)\n .ql-bg-green\n background-color: rgb(0,138,0)\n .ql-bg-blue\n background-color: rgb(0,102,204)\n .ql-bg-purple\n background-color: rgb(153,51,255)\n\n .ql-color-white\n color: rgb(255,255,255)\n .ql-color-red\n color: rgb(230,0,0)\n .ql-color-orange\n color: rgb(255,153,0)\n .ql-color-yellow\n color: rgb(255,255,0)\n .ql-color-green\n color: rgb(0,138,0)\n .ql-color-blue\n color: rgb(0,102,204)\n .ql-color-purple\n color: rgb(153,51,255)\n\n .ql-font-serif\n font-family: Georgia, Times New Roman, serif\n .ql-font-monospace\n font-family: Monaco, Courier New, monospace\n\n .ql-size-small\n font-size: 0.75em\n .ql-size-large\n font-size: 1.5em\n .ql-size-huge\n font-size: 2.5em\n\n .ql-direction-rtl\n direction: rtl\n text-align: inherit\n\n .ql-align-center\n text-align: center\n .ql-align-justify\n text-align: justify\n .ql-align-right\n text-align: right\n\n .ql-ui\n position: absolute\n\n.ql-editor.ql-blank::before\n color: rgba(0,0,0,0.6)\n content: attr(data-placeholder)\n font-style: italic\n left: 15px\n pointer-events: none\n position: absolute\n right: 15px\n","arrowWidth = 6px\n\n.ql-bubble\n .ql-toolbar\n .ql-formats\n margin: 8px 12px 8px 0px\n .ql-formats:first-child\n margin-left: 12px\n\n .ql-color-picker\n svg\n margin: 1px\n .ql-picker-item.ql-selected, .ql-picker-item:hover\n border-color: activeColor\n","arrowWidth = 6px\n\n.ql-bubble\n .ql-tooltip\n background-color: backgroundColor\n border-radius: 25px\n color: textColor\n .ql-tooltip-arrow\n border-left: arrowWidth solid transparent\n border-right: arrowWidth solid transparent\n content: \" \"\n display: block\n left: 50%\n margin-left: -1 * arrowWidth\n position: absolute\n .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow\n border-bottom: arrowWidth solid backgroundColor\n top: -1 * arrowWidth\n .ql-tooltip.ql-flip .ql-tooltip-arrow\n border-top: arrowWidth solid backgroundColor\n bottom: -1 * arrowWidth\n\n .ql-tooltip.ql-editing\n .ql-tooltip-editor\n display: block\n .ql-formats\n visibility: hidden\n\n .ql-tooltip-editor\n display: none\n input[type=text]\n background: transparent\n border: none\n color: textColor\n font-size: 13px\n height: 100%\n outline: none\n padding: 10px 20px\n position: absolute\n width: 100%\n a\n &:before\n color: inactiveColor\n content: \"\\00D7\"\n font-size: 16px\n font-weight: bold\n top: 10px\n position: absolute\n right: 20px\n","themeName = 'bubble'\nactiveColor = #fff\nborderColor = #777\nbackgroundColor = #444\ninactiveColor = #ccc\nshadowColor = #ddd\ntextColor = #fff\n\n@import './core'\n@import './base'\n@import './bubble/*'\n\n.ql-container.ql-bubble:not(.ql-disabled)\n a:not(.ql-close)\n position: relative\n white-space: nowrap\n a:not(.ql-close)::before\n background-color: #444\n border-radius: 15px\n top: -5px\n font-size: 12px\n color: #fff\n content: attr(href)\n font-weight: normal\n overflow: hidden\n padding: 5px 15px\n text-decoration: none\n z-index: 1\n a:not(.ql-close)::after\n border-top: 6px solid #444\n border-left: 6px solid transparent\n border-right: 6px solid transparent\n top: 0\n content: \" \"\n height: 0\n width: 0\n a:not(.ql-close)::before, a:not(.ql-close)::after\n left: 0\n margin-left: 50%\n position: absolute\n transform: translate(-50%, -100%)\n transition: visibility 0s ease 200ms\n visibility: hidden\n a:not(.ql-close):hover::before, a:not(.ql-close):hover::after\n visibility: visible\n"]} \ No newline at end of file diff --git a/spec/dummy/app/assets/builds/active_admin.js b/spec/dummy/app/assets/builds/active_admin.js new file mode 100644 index 0000000..5651e9b --- /dev/null +++ b/spec/dummy/app/assets/builds/active_admin.js @@ -0,0 +1,17142 @@ +(() => { + var __create = Object.create; + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __getProtoOf = Object.getPrototypeOf; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { + get: (a, b) => (typeof require !== "undefined" ? require : a)[b] + }) : x)(function(x) { + if (typeof require !== "undefined") + return require.apply(this, arguments); + throw Error('Dynamic require of "' + x + '" is not supported'); + }); + var __commonJS = (cb, mod) => function __require2() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; + var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; + }; + var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod + )); + + // node_modules/fast-diff/diff.js + var require_diff = __commonJS({ + "node_modules/fast-diff/diff.js"(exports2, module2) { + var DIFF_DELETE = -1; + var DIFF_INSERT = 1; + var DIFF_EQUAL = 0; + function diff_main(text1, text2, cursor_pos, cleanup, _fix_unicode) { + if (text1 === text2) { + if (text1) { + return [[DIFF_EQUAL, text1]]; + } + return []; + } + if (cursor_pos != null) { + var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos); + if (editdiff) { + return editdiff; + } + } + var commonlength = diff_commonPrefix(text1, text2); + var commonprefix = text1.substring(0, commonlength); + text1 = text1.substring(commonlength); + text2 = text2.substring(commonlength); + commonlength = diff_commonSuffix(text1, text2); + var commonsuffix = text1.substring(text1.length - commonlength); + text1 = text1.substring(0, text1.length - commonlength); + text2 = text2.substring(0, text2.length - commonlength); + var diffs = diff_compute_(text1, text2); + if (commonprefix) { + diffs.unshift([DIFF_EQUAL, commonprefix]); + } + if (commonsuffix) { + diffs.push([DIFF_EQUAL, commonsuffix]); + } + diff_cleanupMerge(diffs, _fix_unicode); + if (cleanup) { + diff_cleanupSemantic(diffs); + } + return diffs; + } + function diff_compute_(text1, text2) { + var diffs; + if (!text1) { + return [[DIFF_INSERT, text2]]; + } + if (!text2) { + return [[DIFF_DELETE, text1]]; + } + var longtext = text1.length > text2.length ? text1 : text2; + var shorttext = text1.length > text2.length ? text2 : text1; + var i = longtext.indexOf(shorttext); + if (i !== -1) { + diffs = [ + [DIFF_INSERT, longtext.substring(0, i)], + [DIFF_EQUAL, shorttext], + [DIFF_INSERT, longtext.substring(i + shorttext.length)] + ]; + if (text1.length > text2.length) { + diffs[0][0] = diffs[2][0] = DIFF_DELETE; + } + return diffs; + } + if (shorttext.length === 1) { + return [ + [DIFF_DELETE, text1], + [DIFF_INSERT, text2] + ]; + } + var hm = diff_halfMatch_(text1, text2); + if (hm) { + var text1_a = hm[0]; + var text1_b = hm[1]; + var text2_a = hm[2]; + var text2_b = hm[3]; + var mid_common = hm[4]; + var diffs_a = diff_main(text1_a, text2_a); + var diffs_b = diff_main(text1_b, text2_b); + return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b); + } + return diff_bisect_(text1, text2); + } + function diff_bisect_(text1, text2) { + var text1_length = text1.length; + var text2_length = text2.length; + var max_d = Math.ceil((text1_length + text2_length) / 2); + var v_offset = max_d; + var v_length = 2 * max_d; + var v1 = new Array(v_length); + var v2 = new Array(v_length); + for (var x = 0; x < v_length; x++) { + v1[x] = -1; + v2[x] = -1; + } + v1[v_offset + 1] = 0; + v2[v_offset + 1] = 0; + var delta = text1_length - text2_length; + var front = delta % 2 !== 0; + var k1start = 0; + var k1end = 0; + var k2start = 0; + var k2end = 0; + for (var d = 0; d < max_d; d++) { + for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) { + var k1_offset = v_offset + k1; + var x1; + if (k1 === -d || k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1]) { + x1 = v1[k1_offset + 1]; + } else { + x1 = v1[k1_offset - 1] + 1; + } + var y1 = x1 - k1; + while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) === text2.charAt(y1)) { + x1++; + y1++; + } + v1[k1_offset] = x1; + if (x1 > text1_length) { + k1end += 2; + } else if (y1 > text2_length) { + k1start += 2; + } else if (front) { + var k2_offset = v_offset + delta - k1; + if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) { + var x2 = text1_length - v2[k2_offset]; + if (x1 >= x2) { + return diff_bisectSplit_(text1, text2, x1, y1); + } + } + } + } + for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) { + var k2_offset = v_offset + k2; + var x2; + if (k2 === -d || k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1]) { + x2 = v2[k2_offset + 1]; + } else { + x2 = v2[k2_offset - 1] + 1; + } + var y2 = x2 - k2; + while (x2 < text1_length && y2 < text2_length && text1.charAt(text1_length - x2 - 1) === text2.charAt(text2_length - y2 - 1)) { + x2++; + y2++; + } + v2[k2_offset] = x2; + if (x2 > text1_length) { + k2end += 2; + } else if (y2 > text2_length) { + k2start += 2; + } else if (!front) { + var k1_offset = v_offset + delta - k2; + if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) { + var x1 = v1[k1_offset]; + var y1 = v_offset + x1 - k1_offset; + x2 = text1_length - x2; + if (x1 >= x2) { + return diff_bisectSplit_(text1, text2, x1, y1); + } + } + } + } + } + return [ + [DIFF_DELETE, text1], + [DIFF_INSERT, text2] + ]; + } + function diff_bisectSplit_(text1, text2, x, y) { + var text1a = text1.substring(0, x); + var text2a = text2.substring(0, y); + var text1b = text1.substring(x); + var text2b = text2.substring(y); + var diffs = diff_main(text1a, text2a); + var diffsb = diff_main(text1b, text2b); + return diffs.concat(diffsb); + } + function diff_commonPrefix(text1, text2) { + if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) { + return 0; + } + var pointermin = 0; + var pointermax = Math.min(text1.length, text2.length); + var pointermid = pointermax; + var pointerstart = 0; + while (pointermin < pointermid) { + if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) { + pointermin = pointermid; + pointerstart = pointermin; + } else { + pointermax = pointermid; + } + pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); + } + if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) { + pointermid--; + } + return pointermid; + } + function diff_commonOverlap_(text1, text2) { + var text1_length = text1.length; + var text2_length = text2.length; + if (text1_length == 0 || text2_length == 0) { + return 0; + } + if (text1_length > text2_length) { + text1 = text1.substring(text1_length - text2_length); + } else if (text1_length < text2_length) { + text2 = text2.substring(0, text1_length); + } + var text_length = Math.min(text1_length, text2_length); + if (text1 == text2) { + return text_length; + } + var best = 0; + var length = 1; + while (true) { + var pattern = text1.substring(text_length - length); + var found = text2.indexOf(pattern); + if (found == -1) { + return best; + } + length += found; + if (found == 0 || text1.substring(text_length - length) == text2.substring(0, length)) { + best = length; + length++; + } + } + } + function diff_commonSuffix(text1, text2) { + if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) { + return 0; + } + var pointermin = 0; + var pointermax = Math.min(text1.length, text2.length); + var pointermid = pointermax; + var pointerend = 0; + while (pointermin < pointermid) { + if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) { + pointermin = pointermid; + pointerend = pointermin; + } else { + pointermax = pointermid; + } + pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); + } + if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) { + pointermid--; + } + return pointermid; + } + function diff_halfMatch_(text1, text2) { + var longtext = text1.length > text2.length ? text1 : text2; + var shorttext = text1.length > text2.length ? text2 : text1; + if (longtext.length < 4 || shorttext.length * 2 < longtext.length) { + return null; + } + function diff_halfMatchI_(longtext2, shorttext2, i) { + var seed = longtext2.substring(i, i + Math.floor(longtext2.length / 4)); + var j = -1; + var best_common = ""; + var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b; + while ((j = shorttext2.indexOf(seed, j + 1)) !== -1) { + var prefixLength = diff_commonPrefix( + longtext2.substring(i), + shorttext2.substring(j) + ); + var suffixLength = diff_commonSuffix( + longtext2.substring(0, i), + shorttext2.substring(0, j) + ); + if (best_common.length < suffixLength + prefixLength) { + best_common = shorttext2.substring(j - suffixLength, j) + shorttext2.substring(j, j + prefixLength); + best_longtext_a = longtext2.substring(0, i - suffixLength); + best_longtext_b = longtext2.substring(i + prefixLength); + best_shorttext_a = shorttext2.substring(0, j - suffixLength); + best_shorttext_b = shorttext2.substring(j + prefixLength); + } + } + if (best_common.length * 2 >= longtext2.length) { + return [ + best_longtext_a, + best_longtext_b, + best_shorttext_a, + best_shorttext_b, + best_common + ]; + } else { + return null; + } + } + var hm1 = diff_halfMatchI_( + longtext, + shorttext, + Math.ceil(longtext.length / 4) + ); + var hm2 = diff_halfMatchI_( + longtext, + shorttext, + Math.ceil(longtext.length / 2) + ); + var hm; + if (!hm1 && !hm2) { + return null; + } else if (!hm2) { + hm = hm1; + } else if (!hm1) { + hm = hm2; + } else { + hm = hm1[4].length > hm2[4].length ? hm1 : hm2; + } + var text1_a, text1_b, text2_a, text2_b; + if (text1.length > text2.length) { + text1_a = hm[0]; + text1_b = hm[1]; + text2_a = hm[2]; + text2_b = hm[3]; + } else { + text2_a = hm[0]; + text2_b = hm[1]; + text1_a = hm[2]; + text1_b = hm[3]; + } + var mid_common = hm[4]; + return [text1_a, text1_b, text2_a, text2_b, mid_common]; + } + function diff_cleanupSemantic(diffs) { + var changes = false; + var equalities = []; + var equalitiesLength = 0; + var lastequality = null; + var pointer = 0; + var length_insertions1 = 0; + var length_deletions1 = 0; + var length_insertions2 = 0; + var length_deletions2 = 0; + while (pointer < diffs.length) { + if (diffs[pointer][0] == DIFF_EQUAL) { + equalities[equalitiesLength++] = pointer; + length_insertions1 = length_insertions2; + length_deletions1 = length_deletions2; + length_insertions2 = 0; + length_deletions2 = 0; + lastequality = diffs[pointer][1]; + } else { + if (diffs[pointer][0] == DIFF_INSERT) { + length_insertions2 += diffs[pointer][1].length; + } else { + length_deletions2 += diffs[pointer][1].length; + } + if (lastequality && lastequality.length <= Math.max(length_insertions1, length_deletions1) && lastequality.length <= Math.max(length_insertions2, length_deletions2)) { + diffs.splice(equalities[equalitiesLength - 1], 0, [ + DIFF_DELETE, + lastequality + ]); + diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; + equalitiesLength--; + equalitiesLength--; + pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; + length_insertions1 = 0; + length_deletions1 = 0; + length_insertions2 = 0; + length_deletions2 = 0; + lastequality = null; + changes = true; + } + } + pointer++; + } + if (changes) { + diff_cleanupMerge(diffs); + } + diff_cleanupSemanticLossless(diffs); + pointer = 1; + while (pointer < diffs.length) { + if (diffs[pointer - 1][0] == DIFF_DELETE && diffs[pointer][0] == DIFF_INSERT) { + var deletion = diffs[pointer - 1][1]; + var insertion = diffs[pointer][1]; + var overlap_length1 = diff_commonOverlap_(deletion, insertion); + var overlap_length2 = diff_commonOverlap_(insertion, deletion); + if (overlap_length1 >= overlap_length2) { + if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) { + diffs.splice(pointer, 0, [ + DIFF_EQUAL, + insertion.substring(0, overlap_length1) + ]); + diffs[pointer - 1][1] = deletion.substring( + 0, + deletion.length - overlap_length1 + ); + diffs[pointer + 1][1] = insertion.substring(overlap_length1); + pointer++; + } + } else { + if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) { + diffs.splice(pointer, 0, [ + DIFF_EQUAL, + deletion.substring(0, overlap_length2) + ]); + diffs[pointer - 1][0] = DIFF_INSERT; + diffs[pointer - 1][1] = insertion.substring( + 0, + insertion.length - overlap_length2 + ); + diffs[pointer + 1][0] = DIFF_DELETE; + diffs[pointer + 1][1] = deletion.substring(overlap_length2); + pointer++; + } + } + pointer++; + } + pointer++; + } + } + var nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/; + var whitespaceRegex_ = /\s/; + var linebreakRegex_ = /[\r\n]/; + var blanklineEndRegex_ = /\n\r?\n$/; + var blanklineStartRegex_ = /^\r?\n\r?\n/; + function diff_cleanupSemanticLossless(diffs) { + function diff_cleanupSemanticScore_(one, two) { + if (!one || !two) { + return 6; + } + var char1 = one.charAt(one.length - 1); + var char2 = two.charAt(0); + var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_); + var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_); + var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_); + var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_); + var lineBreak1 = whitespace1 && char1.match(linebreakRegex_); + var lineBreak2 = whitespace2 && char2.match(linebreakRegex_); + var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_); + var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_); + if (blankLine1 || blankLine2) { + return 5; + } else if (lineBreak1 || lineBreak2) { + return 4; + } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) { + return 3; + } else if (whitespace1 || whitespace2) { + return 2; + } else if (nonAlphaNumeric1 || nonAlphaNumeric2) { + return 1; + } + return 0; + } + var pointer = 1; + while (pointer < diffs.length - 1) { + if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) { + var equality1 = diffs[pointer - 1][1]; + var edit = diffs[pointer][1]; + var equality2 = diffs[pointer + 1][1]; + var commonOffset = diff_commonSuffix(equality1, edit); + if (commonOffset) { + var commonString = edit.substring(edit.length - commonOffset); + equality1 = equality1.substring(0, equality1.length - commonOffset); + edit = commonString + edit.substring(0, edit.length - commonOffset); + equality2 = commonString + equality2; + } + var bestEquality1 = equality1; + var bestEdit = edit; + var bestEquality2 = equality2; + var bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); + while (edit.charAt(0) === equality2.charAt(0)) { + equality1 += edit.charAt(0); + edit = edit.substring(1) + equality2.charAt(0); + equality2 = equality2.substring(1); + var score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); + if (score >= bestScore) { + bestScore = score; + bestEquality1 = equality1; + bestEdit = edit; + bestEquality2 = equality2; + } + } + if (diffs[pointer - 1][1] != bestEquality1) { + if (bestEquality1) { + diffs[pointer - 1][1] = bestEquality1; + } else { + diffs.splice(pointer - 1, 1); + pointer--; + } + diffs[pointer][1] = bestEdit; + if (bestEquality2) { + diffs[pointer + 1][1] = bestEquality2; + } else { + diffs.splice(pointer + 1, 1); + pointer--; + } + } + } + pointer++; + } + } + function diff_cleanupMerge(diffs, fix_unicode) { + diffs.push([DIFF_EQUAL, ""]); + var pointer = 0; + var count_delete = 0; + var count_insert = 0; + var text_delete = ""; + var text_insert = ""; + var commonlength; + while (pointer < diffs.length) { + if (pointer < diffs.length - 1 && !diffs[pointer][1]) { + diffs.splice(pointer, 1); + continue; + } + switch (diffs[pointer][0]) { + case DIFF_INSERT: + count_insert++; + text_insert += diffs[pointer][1]; + pointer++; + break; + case DIFF_DELETE: + count_delete++; + text_delete += diffs[pointer][1]; + pointer++; + break; + case DIFF_EQUAL: + var previous_equality = pointer - count_insert - count_delete - 1; + if (fix_unicode) { + if (previous_equality >= 0 && ends_with_pair_start(diffs[previous_equality][1])) { + var stray = diffs[previous_equality][1].slice(-1); + diffs[previous_equality][1] = diffs[previous_equality][1].slice( + 0, + -1 + ); + text_delete = stray + text_delete; + text_insert = stray + text_insert; + if (!diffs[previous_equality][1]) { + diffs.splice(previous_equality, 1); + pointer--; + var k = previous_equality - 1; + if (diffs[k] && diffs[k][0] === DIFF_INSERT) { + count_insert++; + text_insert = diffs[k][1] + text_insert; + k--; + } + if (diffs[k] && diffs[k][0] === DIFF_DELETE) { + count_delete++; + text_delete = diffs[k][1] + text_delete; + k--; + } + previous_equality = k; + } + } + if (starts_with_pair_end(diffs[pointer][1])) { + var stray = diffs[pointer][1].charAt(0); + diffs[pointer][1] = diffs[pointer][1].slice(1); + text_delete += stray; + text_insert += stray; + } + } + if (pointer < diffs.length - 1 && !diffs[pointer][1]) { + diffs.splice(pointer, 1); + break; + } + if (text_delete.length > 0 || text_insert.length > 0) { + if (text_delete.length > 0 && text_insert.length > 0) { + commonlength = diff_commonPrefix(text_insert, text_delete); + if (commonlength !== 0) { + if (previous_equality >= 0) { + diffs[previous_equality][1] += text_insert.substring( + 0, + commonlength + ); + } else { + diffs.splice(0, 0, [ + DIFF_EQUAL, + text_insert.substring(0, commonlength) + ]); + pointer++; + } + text_insert = text_insert.substring(commonlength); + text_delete = text_delete.substring(commonlength); + } + commonlength = diff_commonSuffix(text_insert, text_delete); + if (commonlength !== 0) { + diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1]; + text_insert = text_insert.substring( + 0, + text_insert.length - commonlength + ); + text_delete = text_delete.substring( + 0, + text_delete.length - commonlength + ); + } + } + var n = count_insert + count_delete; + if (text_delete.length === 0 && text_insert.length === 0) { + diffs.splice(pointer - n, n); + pointer = pointer - n; + } else if (text_delete.length === 0) { + diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]); + pointer = pointer - n + 1; + } else if (text_insert.length === 0) { + diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]); + pointer = pointer - n + 1; + } else { + diffs.splice( + pointer - n, + n, + [DIFF_DELETE, text_delete], + [DIFF_INSERT, text_insert] + ); + pointer = pointer - n + 2; + } + } + if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) { + diffs[pointer - 1][1] += diffs[pointer][1]; + diffs.splice(pointer, 1); + } else { + pointer++; + } + count_insert = 0; + count_delete = 0; + text_delete = ""; + text_insert = ""; + break; + } + } + if (diffs[diffs.length - 1][1] === "") { + diffs.pop(); + } + var changes = false; + pointer = 1; + while (pointer < diffs.length - 1) { + if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) { + if (diffs[pointer][1].substring( + diffs[pointer][1].length - diffs[pointer - 1][1].length + ) === diffs[pointer - 1][1]) { + diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring( + 0, + diffs[pointer][1].length - diffs[pointer - 1][1].length + ); + diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1]; + diffs.splice(pointer - 1, 1); + changes = true; + } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) { + diffs[pointer - 1][1] += diffs[pointer + 1][1]; + diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1]; + diffs.splice(pointer + 1, 1); + changes = true; + } + } + pointer++; + } + if (changes) { + diff_cleanupMerge(diffs, fix_unicode); + } + } + function is_surrogate_pair_start(charCode) { + return charCode >= 55296 && charCode <= 56319; + } + function is_surrogate_pair_end(charCode) { + return charCode >= 56320 && charCode <= 57343; + } + function starts_with_pair_end(str) { + return is_surrogate_pair_end(str.charCodeAt(0)); + } + function ends_with_pair_start(str) { + return is_surrogate_pair_start(str.charCodeAt(str.length - 1)); + } + function remove_empty_tuples(tuples) { + var ret = []; + for (var i = 0; i < tuples.length; i++) { + if (tuples[i][1].length > 0) { + ret.push(tuples[i]); + } + } + return ret; + } + function make_edit_splice(before, oldMiddle, newMiddle, after) { + if (ends_with_pair_start(before) || starts_with_pair_end(after)) { + return null; + } + return remove_empty_tuples([ + [DIFF_EQUAL, before], + [DIFF_DELETE, oldMiddle], + [DIFF_INSERT, newMiddle], + [DIFF_EQUAL, after] + ]); + } + function find_cursor_edit_diff(oldText, newText, cursor_pos) { + var oldRange = typeof cursor_pos === "number" ? { index: cursor_pos, length: 0 } : cursor_pos.oldRange; + var newRange = typeof cursor_pos === "number" ? null : cursor_pos.newRange; + var oldLength = oldText.length; + var newLength = newText.length; + if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) { + var oldCursor = oldRange.index; + var oldBefore = oldText.slice(0, oldCursor); + var oldAfter = oldText.slice(oldCursor); + var maybeNewCursor = newRange ? newRange.index : null; + editBefore: { + var newCursor = oldCursor + newLength - oldLength; + if (maybeNewCursor !== null && maybeNewCursor !== newCursor) { + break editBefore; + } + if (newCursor < 0 || newCursor > newLength) { + break editBefore; + } + var newBefore = newText.slice(0, newCursor); + var newAfter = newText.slice(newCursor); + if (newAfter !== oldAfter) { + break editBefore; + } + var prefixLength = Math.min(oldCursor, newCursor); + var oldPrefix = oldBefore.slice(0, prefixLength); + var newPrefix = newBefore.slice(0, prefixLength); + if (oldPrefix !== newPrefix) { + break editBefore; + } + var oldMiddle = oldBefore.slice(prefixLength); + var newMiddle = newBefore.slice(prefixLength); + return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter); + } + editAfter: { + if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) { + break editAfter; + } + var cursor = oldCursor; + var newBefore = newText.slice(0, cursor); + var newAfter = newText.slice(cursor); + if (newBefore !== oldBefore) { + break editAfter; + } + var suffixLength = Math.min(oldLength - cursor, newLength - cursor); + var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength); + var newSuffix = newAfter.slice(newAfter.length - suffixLength); + if (oldSuffix !== newSuffix) { + break editAfter; + } + var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength); + var newMiddle = newAfter.slice(0, newAfter.length - suffixLength); + return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix); + } + } + if (oldRange.length > 0 && newRange && newRange.length === 0) { + replaceRange: { + var oldPrefix = oldText.slice(0, oldRange.index); + var oldSuffix = oldText.slice(oldRange.index + oldRange.length); + var prefixLength = oldPrefix.length; + var suffixLength = oldSuffix.length; + if (newLength < prefixLength + suffixLength) { + break replaceRange; + } + var newPrefix = newText.slice(0, prefixLength); + var newSuffix = newText.slice(newLength - suffixLength); + if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) { + break replaceRange; + } + var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength); + var newMiddle = newText.slice(prefixLength, newLength - suffixLength); + return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix); + } + } + return null; + } + function diff(text1, text2, cursor_pos, cleanup) { + return diff_main(text1, text2, cursor_pos, cleanup, true); + } + diff.INSERT = DIFF_INSERT; + diff.DELETE = DIFF_DELETE; + diff.EQUAL = DIFF_EQUAL; + module2.exports = diff; + } + }); + + // node_modules/lodash.clonedeep/index.js + var require_lodash = __commonJS({ + "node_modules/lodash.clonedeep/index.js"(exports2, module2) { + var LARGE_ARRAY_SIZE2 = 200; + var HASH_UNDEFINED4 = "__lodash_hash_undefined__"; + var MAX_SAFE_INTEGER3 = 9007199254740991; + var argsTag5 = "[object Arguments]"; + var arrayTag4 = "[object Array]"; + var boolTag5 = "[object Boolean]"; + var dateTag5 = "[object Date]"; + var errorTag4 = "[object Error]"; + var funcTag4 = "[object Function]"; + var genTag3 = "[object GeneratorFunction]"; + var mapTag7 = "[object Map]"; + var numberTag5 = "[object Number]"; + var objectTag6 = "[object Object]"; + var promiseTag2 = "[object Promise]"; + var regexpTag5 = "[object RegExp]"; + var setTag7 = "[object Set]"; + var stringTag5 = "[object String]"; + var symbolTag4 = "[object Symbol]"; + var weakMapTag4 = "[object WeakMap]"; + var arrayBufferTag5 = "[object ArrayBuffer]"; + var dataViewTag6 = "[object DataView]"; + var float32Tag4 = "[object Float32Array]"; + var float64Tag4 = "[object Float64Array]"; + var int8Tag4 = "[object Int8Array]"; + var int16Tag4 = "[object Int16Array]"; + var int32Tag4 = "[object Int32Array]"; + var uint8Tag4 = "[object Uint8Array]"; + var uint8ClampedTag4 = "[object Uint8ClampedArray]"; + var uint16Tag4 = "[object Uint16Array]"; + var uint32Tag4 = "[object Uint32Array]"; + var reRegExpChar2 = /[\\^$.*+?()[\]{}|]/g; + var reFlags2 = /\w*$/; + var reIsHostCtor2 = /^\[object .+?Constructor\]$/; + var reIsUint2 = /^(?:0|[1-9]\d*)$/; + var cloneableTags2 = {}; + cloneableTags2[argsTag5] = cloneableTags2[arrayTag4] = cloneableTags2[arrayBufferTag5] = cloneableTags2[dataViewTag6] = cloneableTags2[boolTag5] = cloneableTags2[dateTag5] = cloneableTags2[float32Tag4] = cloneableTags2[float64Tag4] = cloneableTags2[int8Tag4] = cloneableTags2[int16Tag4] = cloneableTags2[int32Tag4] = cloneableTags2[mapTag7] = cloneableTags2[numberTag5] = cloneableTags2[objectTag6] = cloneableTags2[regexpTag5] = cloneableTags2[setTag7] = cloneableTags2[stringTag5] = cloneableTags2[symbolTag4] = cloneableTags2[uint8Tag4] = cloneableTags2[uint8ClampedTag4] = cloneableTags2[uint16Tag4] = cloneableTags2[uint32Tag4] = true; + cloneableTags2[errorTag4] = cloneableTags2[funcTag4] = cloneableTags2[weakMapTag4] = false; + var freeGlobal2 = typeof window == "object" && window && window.Object === Object && window; + var freeSelf2 = typeof self == "object" && self && self.Object === Object && self; + var root2 = freeGlobal2 || freeSelf2 || Function("return this")(); + var freeExports4 = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2; + var freeModule4 = freeExports4 && typeof module2 == "object" && module2 && !module2.nodeType && module2; + var moduleExports4 = freeModule4 && freeModule4.exports === freeExports4; + function addMapEntry(map, pair) { + map.set(pair[0], pair[1]); + return map; + } + function addSetEntry(set, value) { + set.add(value); + return set; + } + function arrayEach2(array, iteratee) { + var index = -1, length = array ? array.length : 0; + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + function arrayPush2(array, values) { + var index = -1, length = values.length, offset2 = array.length; + while (++index < length) { + array[offset2 + index] = values[index]; + } + return array; + } + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, length = array ? array.length : 0; + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + function baseTimes2(n, iteratee) { + var index = -1, result = Array(n); + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + function getValue2(object, key) { + return object == null ? void 0 : object[key]; + } + function isHostObject(value) { + var result = false; + if (value != null && typeof value.toString != "function") { + try { + result = !!(value + ""); + } catch (e) { + } + } + return result; + } + function mapToArray2(map) { + var index = -1, result = Array(map.size); + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + function overArg2(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + function setToArray2(set) { + var index = -1, result = Array(set.size); + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + var arrayProto2 = Array.prototype; + var funcProto4 = Function.prototype; + var objectProto17 = Object.prototype; + var coreJsData2 = root2["__core-js_shared__"]; + var maskSrcKey2 = function() { + var uid = /[^.]+$/.exec(coreJsData2 && coreJsData2.keys && coreJsData2.keys.IE_PROTO || ""); + return uid ? "Symbol(src)_1." + uid : ""; + }(); + var funcToString4 = funcProto4.toString; + var hasOwnProperty14 = objectProto17.hasOwnProperty; + var objectToString2 = objectProto17.toString; + var reIsNative2 = RegExp( + "^" + funcToString4.call(hasOwnProperty14).replace(reRegExpChar2, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" + ); + var Buffer4 = moduleExports4 ? root2.Buffer : void 0; + var Symbol3 = root2.Symbol; + var Uint8Array3 = root2.Uint8Array; + var getPrototype2 = overArg2(Object.getPrototypeOf, Object); + var objectCreate2 = Object.create; + var propertyIsEnumerable3 = objectProto17.propertyIsEnumerable; + var splice2 = arrayProto2.splice; + var nativeGetSymbols3 = Object.getOwnPropertySymbols; + var nativeIsBuffer2 = Buffer4 ? Buffer4.isBuffer : void 0; + var nativeKeys2 = overArg2(Object.keys, Object); + var DataView2 = getNative2(root2, "DataView"); + var Map3 = getNative2(root2, "Map"); + var Promise3 = getNative2(root2, "Promise"); + var Set3 = getNative2(root2, "Set"); + var WeakMap3 = getNative2(root2, "WeakMap"); + var nativeCreate2 = getNative2(Object, "create"); + var dataViewCtorString2 = toSource2(DataView2); + var mapCtorString2 = toSource2(Map3); + var promiseCtorString2 = toSource2(Promise3); + var setCtorString2 = toSource2(Set3); + var weakMapCtorString2 = toSource2(WeakMap3); + var symbolProto3 = Symbol3 ? Symbol3.prototype : void 0; + var symbolValueOf3 = symbolProto3 ? symbolProto3.valueOf : void 0; + function Hash2(entries) { + var index = -1, length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + function hashClear2() { + this.__data__ = nativeCreate2 ? nativeCreate2(null) : {}; + } + function hashDelete2(key) { + return this.has(key) && delete this.__data__[key]; + } + function hashGet2(key) { + var data = this.__data__; + if (nativeCreate2) { + var result = data[key]; + return result === HASH_UNDEFINED4 ? void 0 : result; + } + return hasOwnProperty14.call(data, key) ? data[key] : void 0; + } + function hashHas2(key) { + var data = this.__data__; + return nativeCreate2 ? data[key] !== void 0 : hasOwnProperty14.call(data, key); + } + function hashSet2(key, value) { + var data = this.__data__; + data[key] = nativeCreate2 && value === void 0 ? HASH_UNDEFINED4 : value; + return this; + } + Hash2.prototype.clear = hashClear2; + Hash2.prototype["delete"] = hashDelete2; + Hash2.prototype.get = hashGet2; + Hash2.prototype.has = hashHas2; + Hash2.prototype.set = hashSet2; + function ListCache2(entries) { + var index = -1, length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + function listCacheClear2() { + this.__data__ = []; + } + function listCacheDelete2(key) { + var data = this.__data__, index = assocIndexOf2(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice2.call(data, index, 1); + } + return true; + } + function listCacheGet2(key) { + var data = this.__data__, index = assocIndexOf2(data, key); + return index < 0 ? void 0 : data[index][1]; + } + function listCacheHas2(key) { + return assocIndexOf2(this.__data__, key) > -1; + } + function listCacheSet2(key, value) { + var data = this.__data__, index = assocIndexOf2(data, key); + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + ListCache2.prototype.clear = listCacheClear2; + ListCache2.prototype["delete"] = listCacheDelete2; + ListCache2.prototype.get = listCacheGet2; + ListCache2.prototype.has = listCacheHas2; + ListCache2.prototype.set = listCacheSet2; + function MapCache2(entries) { + var index = -1, length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + function mapCacheClear2() { + this.__data__ = { + "hash": new Hash2(), + "map": new (Map3 || ListCache2)(), + "string": new Hash2() + }; + } + function mapCacheDelete2(key) { + return getMapData2(this, key)["delete"](key); + } + function mapCacheGet2(key) { + return getMapData2(this, key).get(key); + } + function mapCacheHas2(key) { + return getMapData2(this, key).has(key); + } + function mapCacheSet2(key, value) { + getMapData2(this, key).set(key, value); + return this; + } + MapCache2.prototype.clear = mapCacheClear2; + MapCache2.prototype["delete"] = mapCacheDelete2; + MapCache2.prototype.get = mapCacheGet2; + MapCache2.prototype.has = mapCacheHas2; + MapCache2.prototype.set = mapCacheSet2; + function Stack2(entries) { + this.__data__ = new ListCache2(entries); + } + function stackClear2() { + this.__data__ = new ListCache2(); + } + function stackDelete2(key) { + return this.__data__["delete"](key); + } + function stackGet2(key) { + return this.__data__.get(key); + } + function stackHas2(key) { + return this.__data__.has(key); + } + function stackSet2(key, value) { + var cache = this.__data__; + if (cache instanceof ListCache2) { + var pairs = cache.__data__; + if (!Map3 || pairs.length < LARGE_ARRAY_SIZE2 - 1) { + pairs.push([key, value]); + return this; + } + cache = this.__data__ = new MapCache2(pairs); + } + cache.set(key, value); + return this; + } + Stack2.prototype.clear = stackClear2; + Stack2.prototype["delete"] = stackDelete2; + Stack2.prototype.get = stackGet2; + Stack2.prototype.has = stackHas2; + Stack2.prototype.set = stackSet2; + function arrayLikeKeys2(value, inherited) { + var result = isArray2(value) || isArguments2(value) ? baseTimes2(value.length, String) : []; + var length = result.length, skipIndexes = !!length; + for (var key in value) { + if ((inherited || hasOwnProperty14.call(value, key)) && !(skipIndexes && (key == "length" || isIndex2(key, length)))) { + result.push(key); + } + } + return result; + } + function assignValue2(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty14.call(object, key) && eq2(objValue, value)) || value === void 0 && !(key in object)) { + object[key] = value; + } + } + function assocIndexOf2(array, key) { + var length = array.length; + while (length--) { + if (eq2(array[length][0], key)) { + return length; + } + } + return -1; + } + function baseAssign2(object, source) { + return object && copyObject2(source, keys2(source), object); + } + function baseClone2(value, isDeep, isFull, customizer, key, object, stack) { + var result; + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== void 0) { + return result; + } + if (!isObject2(value)) { + return value; + } + var isArr = isArray2(value); + if (isArr) { + result = initCloneArray2(value); + if (!isDeep) { + return copyArray2(value, result); + } + } else { + var tag = getTag2(value), isFunc = tag == funcTag4 || tag == genTag3; + if (isBuffer2(value)) { + return cloneBuffer2(value, isDeep); + } + if (tag == objectTag6 || tag == argsTag5 || isFunc && !object) { + if (isHostObject(value)) { + return object ? value : {}; + } + result = initCloneObject2(isFunc ? {} : value); + if (!isDeep) { + return copySymbols2(value, baseAssign2(result, value)); + } + } else { + if (!cloneableTags2[tag]) { + return object ? value : {}; + } + result = initCloneByTag2(value, tag, baseClone2, isDeep); + } + } + stack || (stack = new Stack2()); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + if (!isArr) { + var props = isFull ? getAllKeys2(value) : keys2(value); + } + arrayEach2(props || value, function(subValue, key2) { + if (props) { + key2 = subValue; + subValue = value[key2]; + } + assignValue2(result, key2, baseClone2(subValue, isDeep, isFull, customizer, key2, value, stack)); + }); + return result; + } + function baseCreate2(proto) { + return isObject2(proto) ? objectCreate2(proto) : {}; + } + function baseGetAllKeys2(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray2(object) ? result : arrayPush2(result, symbolsFunc(object)); + } + function baseGetTag2(value) { + return objectToString2.call(value); + } + function baseIsNative2(value) { + if (!isObject2(value) || isMasked2(value)) { + return false; + } + var pattern = isFunction2(value) || isHostObject(value) ? reIsNative2 : reIsHostCtor2; + return pattern.test(toSource2(value)); + } + function baseKeys2(object) { + if (!isPrototype2(object)) { + return nativeKeys2(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty14.call(object, key) && key != "constructor") { + result.push(key); + } + } + return result; + } + function cloneBuffer2(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var result = new buffer.constructor(buffer.length); + buffer.copy(result); + return result; + } + function cloneArrayBuffer2(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array3(result).set(new Uint8Array3(arrayBuffer)); + return result; + } + function cloneDataView2(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer2(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + function cloneMap(map, isDeep, cloneFunc) { + var array = isDeep ? cloneFunc(mapToArray2(map), true) : mapToArray2(map); + return arrayReduce(array, addMapEntry, new map.constructor()); + } + function cloneRegExp2(regexp) { + var result = new regexp.constructor(regexp.source, reFlags2.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + function cloneSet(set, isDeep, cloneFunc) { + var array = isDeep ? cloneFunc(setToArray2(set), true) : setToArray2(set); + return arrayReduce(array, addSetEntry, new set.constructor()); + } + function cloneSymbol2(symbol) { + return symbolValueOf3 ? Object(symbolValueOf3.call(symbol)) : {}; + } + function cloneTypedArray2(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer2(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + function copyArray2(source, array) { + var index = -1, length = source.length; + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + function copyObject2(source, props, object, customizer) { + object || (object = {}); + var index = -1, length = props.length; + while (++index < length) { + var key = props[index]; + var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0; + assignValue2(object, key, newValue === void 0 ? source[key] : newValue); + } + return object; + } + function copySymbols2(source, object) { + return copyObject2(source, getSymbols2(source), object); + } + function getAllKeys2(object) { + return baseGetAllKeys2(object, keys2, getSymbols2); + } + function getMapData2(map, key) { + var data = map.__data__; + return isKeyable2(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; + } + function getNative2(object, key) { + var value = getValue2(object, key); + return baseIsNative2(value) ? value : void 0; + } + var getSymbols2 = nativeGetSymbols3 ? overArg2(nativeGetSymbols3, Object) : stubArray2; + var getTag2 = baseGetTag2; + if (DataView2 && getTag2(new DataView2(new ArrayBuffer(1))) != dataViewTag6 || Map3 && getTag2(new Map3()) != mapTag7 || Promise3 && getTag2(Promise3.resolve()) != promiseTag2 || Set3 && getTag2(new Set3()) != setTag7 || WeakMap3 && getTag2(new WeakMap3()) != weakMapTag4) { + getTag2 = function(value) { + var result = objectToString2.call(value), Ctor = result == objectTag6 ? value.constructor : void 0, ctorString = Ctor ? toSource2(Ctor) : void 0; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString2: + return dataViewTag6; + case mapCtorString2: + return mapTag7; + case promiseCtorString2: + return promiseTag2; + case setCtorString2: + return setTag7; + case weakMapCtorString2: + return weakMapTag4; + } + } + return result; + }; + } + function initCloneArray2(array) { + var length = array.length, result = array.constructor(length); + if (length && typeof array[0] == "string" && hasOwnProperty14.call(array, "index")) { + result.index = array.index; + result.input = array.input; + } + return result; + } + function initCloneObject2(object) { + return typeof object.constructor == "function" && !isPrototype2(object) ? baseCreate2(getPrototype2(object)) : {}; + } + function initCloneByTag2(object, tag, cloneFunc, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag5: + return cloneArrayBuffer2(object); + case boolTag5: + case dateTag5: + return new Ctor(+object); + case dataViewTag6: + return cloneDataView2(object, isDeep); + case float32Tag4: + case float64Tag4: + case int8Tag4: + case int16Tag4: + case int32Tag4: + case uint8Tag4: + case uint8ClampedTag4: + case uint16Tag4: + case uint32Tag4: + return cloneTypedArray2(object, isDeep); + case mapTag7: + return cloneMap(object, isDeep, cloneFunc); + case numberTag5: + case stringTag5: + return new Ctor(object); + case regexpTag5: + return cloneRegExp2(object); + case setTag7: + return cloneSet(object, isDeep, cloneFunc); + case symbolTag4: + return cloneSymbol2(object); + } + } + function isIndex2(value, length) { + length = length == null ? MAX_SAFE_INTEGER3 : length; + return !!length && (typeof value == "number" || reIsUint2.test(value)) && (value > -1 && value % 1 == 0 && value < length); + } + function isKeyable2(value) { + var type = typeof value; + return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; + } + function isMasked2(func) { + return !!maskSrcKey2 && maskSrcKey2 in func; + } + function isPrototype2(value) { + var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto17; + return value === proto; + } + function toSource2(func) { + if (func != null) { + try { + return funcToString4.call(func); + } catch (e) { + } + try { + return func + ""; + } catch (e) { + } + } + return ""; + } + function cloneDeep2(value) { + return baseClone2(value, true, true); + } + function eq2(value, other) { + return value === other || value !== value && other !== other; + } + function isArguments2(value) { + return isArrayLikeObject2(value) && hasOwnProperty14.call(value, "callee") && (!propertyIsEnumerable3.call(value, "callee") || objectToString2.call(value) == argsTag5); + } + var isArray2 = Array.isArray; + function isArrayLike2(value) { + return value != null && isLength2(value.length) && !isFunction2(value); + } + function isArrayLikeObject2(value) { + return isObjectLike2(value) && isArrayLike2(value); + } + var isBuffer2 = nativeIsBuffer2 || stubFalse2; + function isFunction2(value) { + var tag = isObject2(value) ? objectToString2.call(value) : ""; + return tag == funcTag4 || tag == genTag3; + } + function isLength2(value) { + return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER3; + } + function isObject2(value) { + var type = typeof value; + return !!value && (type == "object" || type == "function"); + } + function isObjectLike2(value) { + return !!value && typeof value == "object"; + } + function keys2(object) { + return isArrayLike2(object) ? arrayLikeKeys2(object) : baseKeys2(object); + } + function stubArray2() { + return []; + } + function stubFalse2() { + return false; + } + module2.exports = cloneDeep2; + } + }); + + // node_modules/lodash.isequal/index.js + var require_lodash2 = __commonJS({ + "node_modules/lodash.isequal/index.js"(exports2, module2) { + var LARGE_ARRAY_SIZE2 = 200; + var HASH_UNDEFINED4 = "__lodash_hash_undefined__"; + var COMPARE_PARTIAL_FLAG5 = 1; + var COMPARE_UNORDERED_FLAG3 = 2; + var MAX_SAFE_INTEGER3 = 9007199254740991; + var argsTag5 = "[object Arguments]"; + var arrayTag4 = "[object Array]"; + var asyncTag2 = "[object AsyncFunction]"; + var boolTag5 = "[object Boolean]"; + var dateTag5 = "[object Date]"; + var errorTag4 = "[object Error]"; + var funcTag4 = "[object Function]"; + var genTag3 = "[object GeneratorFunction]"; + var mapTag7 = "[object Map]"; + var numberTag5 = "[object Number]"; + var nullTag2 = "[object Null]"; + var objectTag6 = "[object Object]"; + var promiseTag2 = "[object Promise]"; + var proxyTag2 = "[object Proxy]"; + var regexpTag5 = "[object RegExp]"; + var setTag7 = "[object Set]"; + var stringTag5 = "[object String]"; + var symbolTag4 = "[object Symbol]"; + var undefinedTag2 = "[object Undefined]"; + var weakMapTag4 = "[object WeakMap]"; + var arrayBufferTag5 = "[object ArrayBuffer]"; + var dataViewTag6 = "[object DataView]"; + var float32Tag4 = "[object Float32Array]"; + var float64Tag4 = "[object Float64Array]"; + var int8Tag4 = "[object Int8Array]"; + var int16Tag4 = "[object Int16Array]"; + var int32Tag4 = "[object Int32Array]"; + var uint8Tag4 = "[object Uint8Array]"; + var uint8ClampedTag4 = "[object Uint8ClampedArray]"; + var uint16Tag4 = "[object Uint16Array]"; + var uint32Tag4 = "[object Uint32Array]"; + var reRegExpChar2 = /[\\^$.*+?()[\]{}|]/g; + var reIsHostCtor2 = /^\[object .+?Constructor\]$/; + var reIsUint2 = /^(?:0|[1-9]\d*)$/; + var typedArrayTags2 = {}; + typedArrayTags2[float32Tag4] = typedArrayTags2[float64Tag4] = typedArrayTags2[int8Tag4] = typedArrayTags2[int16Tag4] = typedArrayTags2[int32Tag4] = typedArrayTags2[uint8Tag4] = typedArrayTags2[uint8ClampedTag4] = typedArrayTags2[uint16Tag4] = typedArrayTags2[uint32Tag4] = true; + typedArrayTags2[argsTag5] = typedArrayTags2[arrayTag4] = typedArrayTags2[arrayBufferTag5] = typedArrayTags2[boolTag5] = typedArrayTags2[dataViewTag6] = typedArrayTags2[dateTag5] = typedArrayTags2[errorTag4] = typedArrayTags2[funcTag4] = typedArrayTags2[mapTag7] = typedArrayTags2[numberTag5] = typedArrayTags2[objectTag6] = typedArrayTags2[regexpTag5] = typedArrayTags2[setTag7] = typedArrayTags2[stringTag5] = typedArrayTags2[weakMapTag4] = false; + var freeGlobal2 = typeof window == "object" && window && window.Object === Object && window; + var freeSelf2 = typeof self == "object" && self && self.Object === Object && self; + var root2 = freeGlobal2 || freeSelf2 || Function("return this")(); + var freeExports4 = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2; + var freeModule4 = freeExports4 && typeof module2 == "object" && module2 && !module2.nodeType && module2; + var moduleExports4 = freeModule4 && freeModule4.exports === freeExports4; + var freeProcess2 = moduleExports4 && freeGlobal2.process; + var nodeUtil2 = function() { + try { + return freeProcess2 && freeProcess2.binding && freeProcess2.binding("util"); + } catch (e) { + } + }(); + var nodeIsTypedArray2 = nodeUtil2 && nodeUtil2.isTypedArray; + function arrayFilter2(array, predicate) { + var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + function arrayPush2(array, values) { + var index = -1, length = values.length, offset2 = array.length; + while (++index < length) { + array[offset2 + index] = values[index]; + } + return array; + } + function arraySome2(array, predicate) { + var index = -1, length = array == null ? 0 : array.length; + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + function baseTimes2(n, iteratee) { + var index = -1, result = Array(n); + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + function baseUnary2(func) { + return function(value) { + return func(value); + }; + } + function cacheHas2(cache, key) { + return cache.has(key); + } + function getValue2(object, key) { + return object == null ? void 0 : object[key]; + } + function mapToArray2(map) { + var index = -1, result = Array(map.size); + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + function overArg2(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + function setToArray2(set) { + var index = -1, result = Array(set.size); + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + var arrayProto2 = Array.prototype; + var funcProto4 = Function.prototype; + var objectProto17 = Object.prototype; + var coreJsData2 = root2["__core-js_shared__"]; + var funcToString4 = funcProto4.toString; + var hasOwnProperty14 = objectProto17.hasOwnProperty; + var maskSrcKey2 = function() { + var uid = /[^.]+$/.exec(coreJsData2 && coreJsData2.keys && coreJsData2.keys.IE_PROTO || ""); + return uid ? "Symbol(src)_1." + uid : ""; + }(); + var nativeObjectToString3 = objectProto17.toString; + var reIsNative2 = RegExp( + "^" + funcToString4.call(hasOwnProperty14).replace(reRegExpChar2, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" + ); + var Buffer4 = moduleExports4 ? root2.Buffer : void 0; + var Symbol3 = root2.Symbol; + var Uint8Array3 = root2.Uint8Array; + var propertyIsEnumerable3 = objectProto17.propertyIsEnumerable; + var splice2 = arrayProto2.splice; + var symToStringTag3 = Symbol3 ? Symbol3.toStringTag : void 0; + var nativeGetSymbols3 = Object.getOwnPropertySymbols; + var nativeIsBuffer2 = Buffer4 ? Buffer4.isBuffer : void 0; + var nativeKeys2 = overArg2(Object.keys, Object); + var DataView2 = getNative2(root2, "DataView"); + var Map3 = getNative2(root2, "Map"); + var Promise3 = getNative2(root2, "Promise"); + var Set3 = getNative2(root2, "Set"); + var WeakMap3 = getNative2(root2, "WeakMap"); + var nativeCreate2 = getNative2(Object, "create"); + var dataViewCtorString2 = toSource2(DataView2); + var mapCtorString2 = toSource2(Map3); + var promiseCtorString2 = toSource2(Promise3); + var setCtorString2 = toSource2(Set3); + var weakMapCtorString2 = toSource2(WeakMap3); + var symbolProto3 = Symbol3 ? Symbol3.prototype : void 0; + var symbolValueOf3 = symbolProto3 ? symbolProto3.valueOf : void 0; + function Hash2(entries) { + var index = -1, length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + function hashClear2() { + this.__data__ = nativeCreate2 ? nativeCreate2(null) : {}; + this.size = 0; + } + function hashDelete2(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + function hashGet2(key) { + var data = this.__data__; + if (nativeCreate2) { + var result = data[key]; + return result === HASH_UNDEFINED4 ? void 0 : result; + } + return hasOwnProperty14.call(data, key) ? data[key] : void 0; + } + function hashHas2(key) { + var data = this.__data__; + return nativeCreate2 ? data[key] !== void 0 : hasOwnProperty14.call(data, key); + } + function hashSet2(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = nativeCreate2 && value === void 0 ? HASH_UNDEFINED4 : value; + return this; + } + Hash2.prototype.clear = hashClear2; + Hash2.prototype["delete"] = hashDelete2; + Hash2.prototype.get = hashGet2; + Hash2.prototype.has = hashHas2; + Hash2.prototype.set = hashSet2; + function ListCache2(entries) { + var index = -1, length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + function listCacheClear2() { + this.__data__ = []; + this.size = 0; + } + function listCacheDelete2(key) { + var data = this.__data__, index = assocIndexOf2(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice2.call(data, index, 1); + } + --this.size; + return true; + } + function listCacheGet2(key) { + var data = this.__data__, index = assocIndexOf2(data, key); + return index < 0 ? void 0 : data[index][1]; + } + function listCacheHas2(key) { + return assocIndexOf2(this.__data__, key) > -1; + } + function listCacheSet2(key, value) { + var data = this.__data__, index = assocIndexOf2(data, key); + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + ListCache2.prototype.clear = listCacheClear2; + ListCache2.prototype["delete"] = listCacheDelete2; + ListCache2.prototype.get = listCacheGet2; + ListCache2.prototype.has = listCacheHas2; + ListCache2.prototype.set = listCacheSet2; + function MapCache2(entries) { + var index = -1, length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + function mapCacheClear2() { + this.size = 0; + this.__data__ = { + "hash": new Hash2(), + "map": new (Map3 || ListCache2)(), + "string": new Hash2() + }; + } + function mapCacheDelete2(key) { + var result = getMapData2(this, key)["delete"](key); + this.size -= result ? 1 : 0; + return result; + } + function mapCacheGet2(key) { + return getMapData2(this, key).get(key); + } + function mapCacheHas2(key) { + return getMapData2(this, key).has(key); + } + function mapCacheSet2(key, value) { + var data = getMapData2(this, key), size = data.size; + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + MapCache2.prototype.clear = mapCacheClear2; + MapCache2.prototype["delete"] = mapCacheDelete2; + MapCache2.prototype.get = mapCacheGet2; + MapCache2.prototype.has = mapCacheHas2; + MapCache2.prototype.set = mapCacheSet2; + function SetCache2(values) { + var index = -1, length = values == null ? 0 : values.length; + this.__data__ = new MapCache2(); + while (++index < length) { + this.add(values[index]); + } + } + function setCacheAdd2(value) { + this.__data__.set(value, HASH_UNDEFINED4); + return this; + } + function setCacheHas2(value) { + return this.__data__.has(value); + } + SetCache2.prototype.add = SetCache2.prototype.push = setCacheAdd2; + SetCache2.prototype.has = setCacheHas2; + function Stack2(entries) { + var data = this.__data__ = new ListCache2(entries); + this.size = data.size; + } + function stackClear2() { + this.__data__ = new ListCache2(); + this.size = 0; + } + function stackDelete2(key) { + var data = this.__data__, result = data["delete"](key); + this.size = data.size; + return result; + } + function stackGet2(key) { + return this.__data__.get(key); + } + function stackHas2(key) { + return this.__data__.has(key); + } + function stackSet2(key, value) { + var data = this.__data__; + if (data instanceof ListCache2) { + var pairs = data.__data__; + if (!Map3 || pairs.length < LARGE_ARRAY_SIZE2 - 1) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache2(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + Stack2.prototype.clear = stackClear2; + Stack2.prototype["delete"] = stackDelete2; + Stack2.prototype.get = stackGet2; + Stack2.prototype.has = stackHas2; + Stack2.prototype.set = stackSet2; + function arrayLikeKeys2(value, inherited) { + var isArr = isArray2(value), isArg = !isArr && isArguments2(value), isBuff = !isArr && !isArg && isBuffer2(value), isType = !isArr && !isArg && !isBuff && isTypedArray2(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes2(value.length, String) : [], length = result.length; + for (var key in value) { + if ((inherited || hasOwnProperty14.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode. + (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers. + isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays. + isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties. + isIndex2(key, length)))) { + result.push(key); + } + } + return result; + } + function assocIndexOf2(array, key) { + var length = array.length; + while (length--) { + if (eq2(array[length][0], key)) { + return length; + } + } + return -1; + } + function baseGetAllKeys2(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray2(object) ? result : arrayPush2(result, symbolsFunc(object)); + } + function baseGetTag2(value) { + if (value == null) { + return value === void 0 ? undefinedTag2 : nullTag2; + } + return symToStringTag3 && symToStringTag3 in Object(value) ? getRawTag2(value) : objectToString2(value); + } + function baseIsArguments2(value) { + return isObjectLike2(value) && baseGetTag2(value) == argsTag5; + } + function baseIsEqual2(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || !isObjectLike2(value) && !isObjectLike2(other)) { + return value !== value && other !== other; + } + return baseIsEqualDeep2(value, other, bitmask, customizer, baseIsEqual2, stack); + } + function baseIsEqualDeep2(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = objIsArr ? arrayTag4 : getTag2(object), othTag = othIsArr ? arrayTag4 : getTag2(other); + objTag = objTag == argsTag5 ? objectTag6 : objTag; + othTag = othTag == argsTag5 ? objectTag6 : othTag; + var objIsObj = objTag == objectTag6, othIsObj = othTag == objectTag6, isSameTag = objTag == othTag; + if (isSameTag && isBuffer2(object)) { + if (!isBuffer2(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack2()); + return objIsArr || isTypedArray2(object) ? equalArrays2(object, other, bitmask, customizer, equalFunc, stack) : equalByTag2(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG5)) { + var objIsWrapped = objIsObj && hasOwnProperty14.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty14.call(other, "__wrapped__"); + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; + stack || (stack = new Stack2()); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack2()); + return equalObjects2(object, other, bitmask, customizer, equalFunc, stack); + } + function baseIsNative2(value) { + if (!isObject2(value) || isMasked2(value)) { + return false; + } + var pattern = isFunction2(value) ? reIsNative2 : reIsHostCtor2; + return pattern.test(toSource2(value)); + } + function baseIsTypedArray2(value) { + return isObjectLike2(value) && isLength2(value.length) && !!typedArrayTags2[baseGetTag2(value)]; + } + function baseKeys2(object) { + if (!isPrototype2(object)) { + return nativeKeys2(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty14.call(object, key) && key != "constructor") { + result.push(key); + } + } + return result; + } + function equalArrays2(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG5, arrLength = array.length, othLength = other.length; + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG3 ? new SetCache2() : void 0; + stack.set(array, other); + stack.set(other, array); + while (++index < arrLength) { + var arrValue = array[index], othValue = other[index]; + if (customizer) { + var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== void 0) { + if (compared) { + continue; + } + result = false; + break; + } + if (seen) { + if (!arraySome2(other, function(othValue2, othIndex) { + if (!cacheHas2(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + result = false; + break; + } + } + stack["delete"](array); + stack["delete"](other); + return result; + } + function equalByTag2(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag6: + if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { + return false; + } + object = object.buffer; + other = other.buffer; + case arrayBufferTag5: + if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array3(object), new Uint8Array3(other))) { + return false; + } + return true; + case boolTag5: + case dateTag5: + case numberTag5: + return eq2(+object, +other); + case errorTag4: + return object.name == other.name && object.message == other.message; + case regexpTag5: + case stringTag5: + return object == other + ""; + case mapTag7: + var convert = mapToArray2; + case setTag7: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG5; + convert || (convert = setToArray2); + if (object.size != other.size && !isPartial) { + return false; + } + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG3; + stack.set(object, other); + var result = equalArrays2(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack["delete"](object); + return result; + case symbolTag4: + if (symbolValueOf3) { + return symbolValueOf3.call(object) == symbolValueOf3.call(other); + } + } + return false; + } + function equalObjects2(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG5, objProps = getAllKeys2(object), objLength = objProps.length, othProps = getAllKeys2(other), othLength = othProps.length; + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty14.call(other, key))) { + return false; + } + } + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], othValue = other[key]; + if (customizer) { + var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); + } + if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { + result = false; + break; + } + skipCtor || (skipCtor = key == "constructor"); + } + if (result && !skipCtor) { + var objCtor = object.constructor, othCtor = other.constructor; + if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { + result = false; + } + } + stack["delete"](object); + stack["delete"](other); + return result; + } + function getAllKeys2(object) { + return baseGetAllKeys2(object, keys2, getSymbols2); + } + function getMapData2(map, key) { + var data = map.__data__; + return isKeyable2(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; + } + function getNative2(object, key) { + var value = getValue2(object, key); + return baseIsNative2(value) ? value : void 0; + } + function getRawTag2(value) { + var isOwn = hasOwnProperty14.call(value, symToStringTag3), tag = value[symToStringTag3]; + try { + value[symToStringTag3] = void 0; + var unmasked = true; + } catch (e) { + } + var result = nativeObjectToString3.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag3] = tag; + } else { + delete value[symToStringTag3]; + } + } + return result; + } + var getSymbols2 = !nativeGetSymbols3 ? stubArray2 : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter2(nativeGetSymbols3(object), function(symbol) { + return propertyIsEnumerable3.call(object, symbol); + }); + }; + var getTag2 = baseGetTag2; + if (DataView2 && getTag2(new DataView2(new ArrayBuffer(1))) != dataViewTag6 || Map3 && getTag2(new Map3()) != mapTag7 || Promise3 && getTag2(Promise3.resolve()) != promiseTag2 || Set3 && getTag2(new Set3()) != setTag7 || WeakMap3 && getTag2(new WeakMap3()) != weakMapTag4) { + getTag2 = function(value) { + var result = baseGetTag2(value), Ctor = result == objectTag6 ? value.constructor : void 0, ctorString = Ctor ? toSource2(Ctor) : ""; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString2: + return dataViewTag6; + case mapCtorString2: + return mapTag7; + case promiseCtorString2: + return promiseTag2; + case setCtorString2: + return setTag7; + case weakMapCtorString2: + return weakMapTag4; + } + } + return result; + }; + } + function isIndex2(value, length) { + length = length == null ? MAX_SAFE_INTEGER3 : length; + return !!length && (typeof value == "number" || reIsUint2.test(value)) && (value > -1 && value % 1 == 0 && value < length); + } + function isKeyable2(value) { + var type = typeof value; + return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; + } + function isMasked2(func) { + return !!maskSrcKey2 && maskSrcKey2 in func; + } + function isPrototype2(value) { + var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto17; + return value === proto; + } + function objectToString2(value) { + return nativeObjectToString3.call(value); + } + function toSource2(func) { + if (func != null) { + try { + return funcToString4.call(func); + } catch (e) { + } + try { + return func + ""; + } catch (e) { + } + } + return ""; + } + function eq2(value, other) { + return value === other || value !== value && other !== other; + } + var isArguments2 = baseIsArguments2(/* @__PURE__ */ function() { + return arguments; + }()) ? baseIsArguments2 : function(value) { + return isObjectLike2(value) && hasOwnProperty14.call(value, "callee") && !propertyIsEnumerable3.call(value, "callee"); + }; + var isArray2 = Array.isArray; + function isArrayLike2(value) { + return value != null && isLength2(value.length) && !isFunction2(value); + } + var isBuffer2 = nativeIsBuffer2 || stubFalse2; + function isEqual3(value, other) { + return baseIsEqual2(value, other); + } + function isFunction2(value) { + if (!isObject2(value)) { + return false; + } + var tag = baseGetTag2(value); + return tag == funcTag4 || tag == genTag3 || tag == asyncTag2 || tag == proxyTag2; + } + function isLength2(value) { + return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER3; + } + function isObject2(value) { + var type = typeof value; + return value != null && (type == "object" || type == "function"); + } + function isObjectLike2(value) { + return value != null && typeof value == "object"; + } + var isTypedArray2 = nodeIsTypedArray2 ? baseUnary2(nodeIsTypedArray2) : baseIsTypedArray2; + function keys2(object) { + return isArrayLike2(object) ? arrayLikeKeys2(object) : baseKeys2(object); + } + function stubArray2() { + return []; + } + function stubFalse2() { + return false; + } + module2.exports = isEqual3; + } + }); + + // node_modules/quill-delta/dist/AttributeMap.js + var require_AttributeMap = __commonJS({ + "node_modules/quill-delta/dist/AttributeMap.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var cloneDeep2 = require_lodash(); + var isEqual3 = require_lodash2(); + var AttributeMap5; + (function(AttributeMap6) { + function compose(a = {}, b = {}, keepNull = false) { + if (typeof a !== "object") { + a = {}; + } + if (typeof b !== "object") { + b = {}; + } + let attributes = cloneDeep2(b); + if (!keepNull) { + attributes = Object.keys(attributes).reduce((copy, key) => { + if (attributes[key] != null) { + copy[key] = attributes[key]; + } + return copy; + }, {}); + } + for (const key in a) { + if (a[key] !== void 0 && b[key] === void 0) { + attributes[key] = a[key]; + } + } + return Object.keys(attributes).length > 0 ? attributes : void 0; + } + AttributeMap6.compose = compose; + function diff(a = {}, b = {}) { + if (typeof a !== "object") { + a = {}; + } + if (typeof b !== "object") { + b = {}; + } + const attributes = Object.keys(a).concat(Object.keys(b)).reduce((attrs, key) => { + if (!isEqual3(a[key], b[key])) { + attrs[key] = b[key] === void 0 ? null : b[key]; + } + return attrs; + }, {}); + return Object.keys(attributes).length > 0 ? attributes : void 0; + } + AttributeMap6.diff = diff; + function invert(attr = {}, base = {}) { + attr = attr || {}; + const baseInverted = Object.keys(base).reduce((memo, key) => { + if (base[key] !== attr[key] && attr[key] !== void 0) { + memo[key] = base[key]; + } + return memo; + }, {}); + return Object.keys(attr).reduce((memo, key) => { + if (attr[key] !== base[key] && base[key] === void 0) { + memo[key] = null; + } + return memo; + }, baseInverted); + } + AttributeMap6.invert = invert; + function transform(a, b, priority = false) { + if (typeof a !== "object") { + return b; + } + if (typeof b !== "object") { + return void 0; + } + if (!priority) { + return b; + } + const attributes = Object.keys(b).reduce((attrs, key) => { + if (a[key] === void 0) { + attrs[key] = b[key]; + } + return attrs; + }, {}); + return Object.keys(attributes).length > 0 ? attributes : void 0; + } + AttributeMap6.transform = transform; + })(AttributeMap5 || (AttributeMap5 = {})); + exports2.default = AttributeMap5; + } + }); + + // node_modules/quill-delta/dist/Op.js + var require_Op = __commonJS({ + "node_modules/quill-delta/dist/Op.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var Op4; + (function(Op5) { + function length(op) { + if (typeof op.delete === "number") { + return op.delete; + } else if (typeof op.retain === "number") { + return op.retain; + } else if (typeof op.retain === "object" && op.retain !== null) { + return 1; + } else { + return typeof op.insert === "string" ? op.insert.length : 1; + } + } + Op5.length = length; + })(Op4 || (Op4 = {})); + exports2.default = Op4; + } + }); + + // node_modules/quill-delta/dist/OpIterator.js + var require_OpIterator = __commonJS({ + "node_modules/quill-delta/dist/OpIterator.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var Op_1 = require_Op(); + var Iterator = class { + constructor(ops) { + this.ops = ops; + this.index = 0; + this.offset = 0; + } + hasNext() { + return this.peekLength() < Infinity; + } + next(length) { + if (!length) { + length = Infinity; + } + const nextOp = this.ops[this.index]; + if (nextOp) { + const offset2 = this.offset; + const opLength = Op_1.default.length(nextOp); + if (length >= opLength - offset2) { + length = opLength - offset2; + this.index += 1; + this.offset = 0; + } else { + this.offset += length; + } + if (typeof nextOp.delete === "number") { + return { delete: length }; + } else { + const retOp = {}; + if (nextOp.attributes) { + retOp.attributes = nextOp.attributes; + } + if (typeof nextOp.retain === "number") { + retOp.retain = length; + } else if (typeof nextOp.retain === "object" && nextOp.retain !== null) { + retOp.retain = nextOp.retain; + } else if (typeof nextOp.insert === "string") { + retOp.insert = nextOp.insert.substr(offset2, length); + } else { + retOp.insert = nextOp.insert; + } + return retOp; + } + } else { + return { retain: Infinity }; + } + } + peek() { + return this.ops[this.index]; + } + peekLength() { + if (this.ops[this.index]) { + return Op_1.default.length(this.ops[this.index]) - this.offset; + } else { + return Infinity; + } + } + peekType() { + const op = this.ops[this.index]; + if (op) { + if (typeof op.delete === "number") { + return "delete"; + } else if (typeof op.retain === "number" || typeof op.retain === "object" && op.retain !== null) { + return "retain"; + } else { + return "insert"; + } + } + return "retain"; + } + rest() { + if (!this.hasNext()) { + return []; + } else if (this.offset === 0) { + return this.ops.slice(this.index); + } else { + const offset2 = this.offset; + const index = this.index; + const next2 = this.next(); + const rest = this.ops.slice(this.index); + this.offset = offset2; + this.index = index; + return [next2].concat(rest); + } + } + }; + exports2.default = Iterator; + } + }); + + // node_modules/quill-delta/dist/Delta.js + var require_Delta = __commonJS({ + "node_modules/quill-delta/dist/Delta.js"(exports2, module2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.AttributeMap = exports2.OpIterator = exports2.Op = void 0; + var diff = require_diff(); + var cloneDeep2 = require_lodash(); + var isEqual3 = require_lodash2(); + var AttributeMap_1 = require_AttributeMap(); + exports2.AttributeMap = AttributeMap_1.default; + var Op_1 = require_Op(); + exports2.Op = Op_1.default; + var OpIterator_1 = require_OpIterator(); + exports2.OpIterator = OpIterator_1.default; + var NULL_CHARACTER = String.fromCharCode(0); + var getEmbedTypeAndData = (a, b) => { + if (typeof a !== "object" || a === null) { + throw new Error(`cannot retain a ${typeof a}`); + } + if (typeof b !== "object" || b === null) { + throw new Error(`cannot retain a ${typeof b}`); + } + const embedType = Object.keys(a)[0]; + if (!embedType || embedType !== Object.keys(b)[0]) { + throw new Error(`embed types not matched: ${embedType} != ${Object.keys(b)[0]}`); + } + return [embedType, a[embedType], b[embedType]]; + }; + var Delta13 = class _Delta { + constructor(ops) { + if (Array.isArray(ops)) { + this.ops = ops; + } else if (ops != null && Array.isArray(ops.ops)) { + this.ops = ops.ops; + } else { + this.ops = []; + } + } + static registerEmbed(embedType, handler) { + this.handlers[embedType] = handler; + } + static unregisterEmbed(embedType) { + delete this.handlers[embedType]; + } + static getHandler(embedType) { + const handler = this.handlers[embedType]; + if (!handler) { + throw new Error(`no handlers for embed type "${embedType}"`); + } + return handler; + } + insert(arg, attributes) { + const newOp = {}; + if (typeof arg === "string" && arg.length === 0) { + return this; + } + newOp.insert = arg; + if (attributes != null && typeof attributes === "object" && Object.keys(attributes).length > 0) { + newOp.attributes = attributes; + } + return this.push(newOp); + } + delete(length) { + if (length <= 0) { + return this; + } + return this.push({ delete: length }); + } + retain(length, attributes) { + if (typeof length === "number" && length <= 0) { + return this; + } + const newOp = { retain: length }; + if (attributes != null && typeof attributes === "object" && Object.keys(attributes).length > 0) { + newOp.attributes = attributes; + } + return this.push(newOp); + } + push(newOp) { + let index = this.ops.length; + let lastOp = this.ops[index - 1]; + newOp = cloneDeep2(newOp); + if (typeof lastOp === "object") { + if (typeof newOp.delete === "number" && typeof lastOp.delete === "number") { + this.ops[index - 1] = { delete: lastOp.delete + newOp.delete }; + return this; + } + if (typeof lastOp.delete === "number" && newOp.insert != null) { + index -= 1; + lastOp = this.ops[index - 1]; + if (typeof lastOp !== "object") { + this.ops.unshift(newOp); + return this; + } + } + if (isEqual3(newOp.attributes, lastOp.attributes)) { + if (typeof newOp.insert === "string" && typeof lastOp.insert === "string") { + this.ops[index - 1] = { insert: lastOp.insert + newOp.insert }; + if (typeof newOp.attributes === "object") { + this.ops[index - 1].attributes = newOp.attributes; + } + return this; + } else if (typeof newOp.retain === "number" && typeof lastOp.retain === "number") { + this.ops[index - 1] = { retain: lastOp.retain + newOp.retain }; + if (typeof newOp.attributes === "object") { + this.ops[index - 1].attributes = newOp.attributes; + } + return this; + } + } + } + if (index === this.ops.length) { + this.ops.push(newOp); + } else { + this.ops.splice(index, 0, newOp); + } + return this; + } + chop() { + const lastOp = this.ops[this.ops.length - 1]; + if (lastOp && typeof lastOp.retain === "number" && !lastOp.attributes) { + this.ops.pop(); + } + return this; + } + filter(predicate) { + return this.ops.filter(predicate); + } + forEach(predicate) { + this.ops.forEach(predicate); + } + map(predicate) { + return this.ops.map(predicate); + } + partition(predicate) { + const passed = []; + const failed = []; + this.forEach((op) => { + const target = predicate(op) ? passed : failed; + target.push(op); + }); + return [passed, failed]; + } + reduce(predicate, initialValue) { + return this.ops.reduce(predicate, initialValue); + } + changeLength() { + return this.reduce((length, elem) => { + if (elem.insert) { + return length + Op_1.default.length(elem); + } else if (elem.delete) { + return length - elem.delete; + } + return length; + }, 0); + } + length() { + return this.reduce((length, elem) => { + return length + Op_1.default.length(elem); + }, 0); + } + slice(start3 = 0, end2 = Infinity) { + const ops = []; + const iter = new OpIterator_1.default(this.ops); + let index = 0; + while (index < end2 && iter.hasNext()) { + let nextOp; + if (index < start3) { + nextOp = iter.next(start3 - index); + } else { + nextOp = iter.next(end2 - index); + ops.push(nextOp); + } + index += Op_1.default.length(nextOp); + } + return new _Delta(ops); + } + compose(other) { + const thisIter = new OpIterator_1.default(this.ops); + const otherIter = new OpIterator_1.default(other.ops); + const ops = []; + const firstOther = otherIter.peek(); + if (firstOther != null && typeof firstOther.retain === "number" && firstOther.attributes == null) { + let firstLeft = firstOther.retain; + while (thisIter.peekType() === "insert" && thisIter.peekLength() <= firstLeft) { + firstLeft -= thisIter.peekLength(); + ops.push(thisIter.next()); + } + if (firstOther.retain - firstLeft > 0) { + otherIter.next(firstOther.retain - firstLeft); + } + } + const delta = new _Delta(ops); + while (thisIter.hasNext() || otherIter.hasNext()) { + if (otherIter.peekType() === "insert") { + delta.push(otherIter.next()); + } else if (thisIter.peekType() === "delete") { + delta.push(thisIter.next()); + } else { + const length = Math.min(thisIter.peekLength(), otherIter.peekLength()); + const thisOp = thisIter.next(length); + const otherOp = otherIter.next(length); + if (otherOp.retain) { + const newOp = {}; + if (typeof thisOp.retain === "number") { + newOp.retain = typeof otherOp.retain === "number" ? length : otherOp.retain; + } else { + if (typeof otherOp.retain === "number") { + if (thisOp.retain == null) { + newOp.insert = thisOp.insert; + } else { + newOp.retain = thisOp.retain; + } + } else { + const action = thisOp.retain == null ? "insert" : "retain"; + const [embedType, thisData, otherData] = getEmbedTypeAndData(thisOp[action], otherOp.retain); + const handler = _Delta.getHandler(embedType); + newOp[action] = { + [embedType]: handler.compose(thisData, otherData, action === "retain") + }; + } + } + const attributes = AttributeMap_1.default.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === "number"); + if (attributes) { + newOp.attributes = attributes; + } + delta.push(newOp); + if (!otherIter.hasNext() && isEqual3(delta.ops[delta.ops.length - 1], newOp)) { + const rest = new _Delta(thisIter.rest()); + return delta.concat(rest).chop(); + } + } else if (typeof otherOp.delete === "number" && (typeof thisOp.retain === "number" || typeof thisOp.retain === "object" && thisOp.retain !== null)) { + delta.push(otherOp); + } + } + } + return delta.chop(); + } + concat(other) { + const delta = new _Delta(this.ops.slice()); + if (other.ops.length > 0) { + delta.push(other.ops[0]); + delta.ops = delta.ops.concat(other.ops.slice(1)); + } + return delta; + } + diff(other, cursor) { + if (this.ops === other.ops) { + return new _Delta(); + } + const strings = [this, other].map((delta) => { + return delta.map((op) => { + if (op.insert != null) { + return typeof op.insert === "string" ? op.insert : NULL_CHARACTER; + } + const prep = delta === other ? "on" : "with"; + throw new Error("diff() called " + prep + " non-document"); + }).join(""); + }); + const retDelta = new _Delta(); + const diffResult = diff(strings[0], strings[1], cursor, true); + const thisIter = new OpIterator_1.default(this.ops); + const otherIter = new OpIterator_1.default(other.ops); + diffResult.forEach((component) => { + let length = component[1].length; + while (length > 0) { + let opLength = 0; + switch (component[0]) { + case diff.INSERT: + opLength = Math.min(otherIter.peekLength(), length); + retDelta.push(otherIter.next(opLength)); + break; + case diff.DELETE: + opLength = Math.min(length, thisIter.peekLength()); + thisIter.next(opLength); + retDelta.delete(opLength); + break; + case diff.EQUAL: + opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length); + const thisOp = thisIter.next(opLength); + const otherOp = otherIter.next(opLength); + if (isEqual3(thisOp.insert, otherOp.insert)) { + retDelta.retain(opLength, AttributeMap_1.default.diff(thisOp.attributes, otherOp.attributes)); + } else { + retDelta.push(otherOp).delete(opLength); + } + break; + } + length -= opLength; + } + }); + return retDelta.chop(); + } + eachLine(predicate, newline = "\n") { + const iter = new OpIterator_1.default(this.ops); + let line = new _Delta(); + let i = 0; + while (iter.hasNext()) { + if (iter.peekType() !== "insert") { + return; + } + const thisOp = iter.peek(); + const start3 = Op_1.default.length(thisOp) - iter.peekLength(); + const index = typeof thisOp.insert === "string" ? thisOp.insert.indexOf(newline, start3) - start3 : -1; + if (index < 0) { + line.push(iter.next()); + } else if (index > 0) { + line.push(iter.next(index)); + } else { + if (predicate(line, iter.next(1).attributes || {}, i) === false) { + return; + } + i += 1; + line = new _Delta(); + } + } + if (line.length() > 0) { + predicate(line, {}, i); + } + } + invert(base) { + const inverted = new _Delta(); + this.reduce((baseIndex, op) => { + if (op.insert) { + inverted.delete(Op_1.default.length(op)); + } else if (typeof op.retain === "number" && op.attributes == null) { + inverted.retain(op.retain); + return baseIndex + op.retain; + } else if (op.delete || typeof op.retain === "number") { + const length = op.delete || op.retain; + const slice = base.slice(baseIndex, baseIndex + length); + slice.forEach((baseOp) => { + if (op.delete) { + inverted.push(baseOp); + } else if (op.retain && op.attributes) { + inverted.retain(Op_1.default.length(baseOp), AttributeMap_1.default.invert(op.attributes, baseOp.attributes)); + } + }); + return baseIndex + length; + } else if (typeof op.retain === "object" && op.retain !== null) { + const slice = base.slice(baseIndex, baseIndex + 1); + const baseOp = new OpIterator_1.default(slice.ops).next(); + const [embedType, opData, baseOpData] = getEmbedTypeAndData(op.retain, baseOp.insert); + const handler = _Delta.getHandler(embedType); + inverted.retain({ [embedType]: handler.invert(opData, baseOpData) }, AttributeMap_1.default.invert(op.attributes, baseOp.attributes)); + return baseIndex + 1; + } + return baseIndex; + }, 0); + return inverted.chop(); + } + transform(arg, priority = false) { + priority = !!priority; + if (typeof arg === "number") { + return this.transformPosition(arg, priority); + } + const other = arg; + const thisIter = new OpIterator_1.default(this.ops); + const otherIter = new OpIterator_1.default(other.ops); + const delta = new _Delta(); + while (thisIter.hasNext() || otherIter.hasNext()) { + if (thisIter.peekType() === "insert" && (priority || otherIter.peekType() !== "insert")) { + delta.retain(Op_1.default.length(thisIter.next())); + } else if (otherIter.peekType() === "insert") { + delta.push(otherIter.next()); + } else { + const length = Math.min(thisIter.peekLength(), otherIter.peekLength()); + const thisOp = thisIter.next(length); + const otherOp = otherIter.next(length); + if (thisOp.delete) { + continue; + } else if (otherOp.delete) { + delta.push(otherOp); + } else { + const thisData = thisOp.retain; + const otherData = otherOp.retain; + let transformedData = typeof otherData === "object" && otherData !== null ? otherData : length; + if (typeof thisData === "object" && thisData !== null && typeof otherData === "object" && otherData !== null) { + const embedType = Object.keys(thisData)[0]; + if (embedType === Object.keys(otherData)[0]) { + const handler = _Delta.getHandler(embedType); + if (handler) { + transformedData = { + [embedType]: handler.transform(thisData[embedType], otherData[embedType], priority) + }; + } + } + } + delta.retain(transformedData, AttributeMap_1.default.transform(thisOp.attributes, otherOp.attributes, priority)); + } + } + } + return delta.chop(); + } + transformPosition(index, priority = false) { + priority = !!priority; + const thisIter = new OpIterator_1.default(this.ops); + let offset2 = 0; + while (thisIter.hasNext() && offset2 <= index) { + const length = thisIter.peekLength(); + const nextType = thisIter.peekType(); + thisIter.next(); + if (nextType === "delete") { + index -= Math.min(length, index - offset2); + continue; + } else if (nextType === "insert" && (offset2 < index || !priority)) { + index += length; + } + offset2 += length; + } + return index; + } + }; + Delta13.Op = Op_1.default; + Delta13.OpIterator = OpIterator_1.default; + Delta13.AttributeMap = AttributeMap_1.default; + Delta13.handlers = {}; + exports2.default = Delta13; + if (typeof module2 === "object") { + module2.exports = Delta13; + module2.exports.default = Delta13; + } + } + }); + + // node_modules/eventemitter3/index.js + var require_eventemitter3 = __commonJS({ + "node_modules/eventemitter3/index.js"(exports2, module2) { + "use strict"; + var has = Object.prototype.hasOwnProperty; + var prefix = "~"; + function Events2() { + } + if (Object.create) { + Events2.prototype = /* @__PURE__ */ Object.create(null); + if (!new Events2().__proto__) + prefix = false; + } + function EE(fn2, context, once) { + this.fn = fn2; + this.context = context; + this.once = once || false; + } + function addListener(emitter, event, fn2, context, once) { + if (typeof fn2 !== "function") { + throw new TypeError("The listener must be a function"); + } + var listener = new EE(fn2, context || emitter, once), evt = prefix ? prefix + event : event; + if (!emitter._events[evt]) + emitter._events[evt] = listener, emitter._eventsCount++; + else if (!emitter._events[evt].fn) + emitter._events[evt].push(listener); + else + emitter._events[evt] = [emitter._events[evt], listener]; + return emitter; + } + function clearEvent(emitter, evt) { + if (--emitter._eventsCount === 0) + emitter._events = new Events2(); + else + delete emitter._events[evt]; + } + function EventEmitter2() { + this._events = new Events2(); + this._eventsCount = 0; + } + EventEmitter2.prototype.eventNames = function eventNames() { + var names = [], events2, name; + if (this._eventsCount === 0) + return names; + for (name in events2 = this._events) { + if (has.call(events2, name)) + names.push(prefix ? name.slice(1) : name); + } + if (Object.getOwnPropertySymbols) { + return names.concat(Object.getOwnPropertySymbols(events2)); + } + return names; + }; + EventEmitter2.prototype.listeners = function listeners(event) { + var evt = prefix ? prefix + event : event, handlers = this._events[evt]; + if (!handlers) + return []; + if (handlers.fn) + return [handlers.fn]; + for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) { + ee[i] = handlers[i].fn; + } + return ee; + }; + EventEmitter2.prototype.listenerCount = function listenerCount(event) { + var evt = prefix ? prefix + event : event, listeners = this._events[evt]; + if (!listeners) + return 0; + if (listeners.fn) + return 1; + return listeners.length; + }; + EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { + var evt = prefix ? prefix + event : event; + if (!this._events[evt]) + return false; + var listeners = this._events[evt], len = arguments.length, args, i; + if (listeners.fn) { + if (listeners.once) + this.removeListener(event, listeners.fn, void 0, true); + switch (len) { + case 1: + return listeners.fn.call(listeners.context), true; + case 2: + return listeners.fn.call(listeners.context, a1), true; + case 3: + return listeners.fn.call(listeners.context, a1, a2), true; + case 4: + return listeners.fn.call(listeners.context, a1, a2, a3), true; + case 5: + return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; + case 6: + return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; + } + for (i = 1, args = new Array(len - 1); i < len; i++) { + args[i - 1] = arguments[i]; + } + listeners.fn.apply(listeners.context, args); + } else { + var length = listeners.length, j; + for (i = 0; i < length; i++) { + if (listeners[i].once) + this.removeListener(event, listeners[i].fn, void 0, true); + switch (len) { + case 1: + listeners[i].fn.call(listeners[i].context); + break; + case 2: + listeners[i].fn.call(listeners[i].context, a1); + break; + case 3: + listeners[i].fn.call(listeners[i].context, a1, a2); + break; + case 4: + listeners[i].fn.call(listeners[i].context, a1, a2, a3); + break; + default: + if (!args) + for (j = 1, args = new Array(len - 1); j < len; j++) { + args[j - 1] = arguments[j]; + } + listeners[i].fn.apply(listeners[i].context, args); + } + } + } + return true; + }; + EventEmitter2.prototype.on = function on(event, fn2, context) { + return addListener(this, event, fn2, context, false); + }; + EventEmitter2.prototype.once = function once(event, fn2, context) { + return addListener(this, event, fn2, context, true); + }; + EventEmitter2.prototype.removeListener = function removeListener(event, fn2, context, once) { + var evt = prefix ? prefix + event : event; + if (!this._events[evt]) + return this; + if (!fn2) { + clearEvent(this, evt); + return this; + } + var listeners = this._events[evt]; + if (listeners.fn) { + if (listeners.fn === fn2 && (!once || listeners.once) && (!context || listeners.context === context)) { + clearEvent(this, evt); + } + } else { + for (var i = 0, events2 = [], length = listeners.length; i < length; i++) { + if (listeners[i].fn !== fn2 || once && !listeners[i].once || context && listeners[i].context !== context) { + events2.push(listeners[i]); + } + } + if (events2.length) + this._events[evt] = events2.length === 1 ? events2[0] : events2; + else + clearEvent(this, evt); + } + return this; + }; + EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) { + var evt; + if (event) { + evt = prefix ? prefix + event : event; + if (this._events[evt]) + clearEvent(this, evt); + } else { + this._events = new Events2(); + this._eventsCount = 0; + } + return this; + }; + EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener; + EventEmitter2.prototype.addListener = EventEmitter2.prototype.on; + EventEmitter2.prefixed = prefix; + EventEmitter2.EventEmitter = EventEmitter2; + if ("undefined" !== typeof module2) { + module2.exports = EventEmitter2; + } + } + }); + + // ../../vendor/assets/javascripts/activeadmin_quill_editor.js + var require_activeadmin_quill_editor = __commonJS({ + "../../vendor/assets/javascripts/activeadmin_quill_editor.js"(exports2, module2) { + (function() { + "use strict"; + const defaultTheme = "snow"; + const defaultToolbar = [ + ["bold", "italic", "underline"], + ["link", "blockquote", "code-block"], + [{ "script": "sub" }, { "script": "super" }], + [{ "align": [] }, { list: "ordered" }, { list: "bullet" }], + [{ "color": [] }, { "background": [] }], + ["image"], + ["clean"] + ]; + let registeredPlugins = {}; + function initQuillEditor(container) { + if (typeof window.Quill === "undefined") { + return; + } + if (!container || container.classList.contains("quill-editor--active")) { + return; + } + const content = container.querySelector("[data-aa-quill-content]"); + if (!content) + return; + const options = container.getAttribute("data-options") ? JSON.parse(container.getAttribute("data-options")) : {}; + if (!options.theme) + options.theme = defaultTheme; + if (!options.modules) + options.modules = {}; + if (!options.modules.toolbar) + options.modules.toolbar = defaultToolbar; + const pluginOptions = container.getAttribute("data-plugins") ? JSON.parse(container.getAttribute("data-plugins")) : {}; + if (pluginOptions.image_uploader && pluginOptions.image_uploader.server_url) { + if (!registeredPlugins.image_uploader && typeof window.ImageUploader !== "undefined") { + window.Quill.register("modules/imageUploader", window.ImageUploader); + registeredPlugins.image_uploader = true; + } + const opts = pluginOptions.image_uploader; + options.modules.imageUploader = setupImageUploader(opts.server_url, opts.field_name); + } + const editor = new window.Quill(content, options); + container._quillEditor = editor; + container.classList.add("quill-editor--active"); + const input = container.querySelector('input[type="hidden"]'); + if (input) { + container._quillInput = input; + } + return editor; + } + function initQuillEditors() { + if (typeof window.Quill === "undefined") { + console.error("Quill is not available. Please ensure Quill is loaded before initializing editors."); + return; + } + const editors = document.querySelectorAll("[data-aa-quill-editor]"); + editors.forEach(initQuillEditor); + setupFormSubmission(); + } + function setupFormSubmission() { + const forms = document.querySelectorAll("form.formtastic"); + forms.forEach(function(form) { + if (form._quillSubmitHandler) + return; + form._quillSubmitHandler = true; + form.addEventListener("submit", function(e) { + updateQuillInputs(form); + }); + }); + } + function updateQuillInputs(form) { + const editors = form.querySelectorAll("[data-aa-quill-editor]"); + editors.forEach(function(container) { + const editor = container._quillEditor; + const input = container._quillInput; + if (editor && input) { + if (editor.getText().trim() === "") { + input.value = ""; + } else { + input.value = editor.root.innerHTML; + } + } + }); + } + function setupImageUploader(serverUrl, fieldName) { + return { + upload: function(file) { + return new Promise(function(resolve, reject) { + const formData = new FormData(); + formData.append(fieldName || "file_upload", file); + const csrfToken2 = document.querySelector('meta[name="csrf-token"]'); + const headers = {}; + if (csrfToken2) { + headers["X-CSRF-Token"] = csrfToken2.getAttribute("content"); + } + fetch(serverUrl, { + method: "POST", + body: formData, + headers + }).then(function(response) { + return response.json(); + }).then(function(result) { + if (!result.url) { + reject("Upload failed"); + return; + } + resolve(result.url); + }).catch(function(error) { + reject("Upload failed"); + console.error("Error:", error); + }); + }); + } + }; + } + window.getQuillEditors = function() { + const editors = document.querySelectorAll("[data-aa-quill-editor]"); + const list = []; + editors.forEach(function(editor) { + if (editor._quillEditor) { + list.push(editor._quillEditor); + } + }); + return list; + }; + window.getQuillEditorByIndex = function(index) { + const editors = document.querySelectorAll("[data-aa-quill-editor]"); + return index >= 0 && index < editors.length ? editors[index]._quillEditor : null; + }; + window.getQuillEditorByElementId = function(id) { + const editor = document.querySelector("[data-aa-quill-editor]#" + id); + return editor ? editor._quillEditor : null; + }; + function setupAutoInit() { + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", initQuillEditors); + } else { + initQuillEditors(); + } + document.addEventListener("turbo:load", initQuillEditors); + document.addEventListener("turbo:render", initQuillEditors); + document.addEventListener("turbolinks:load", initQuillEditors); + document.addEventListener("has_many_add:after", function(event) { + const newFields = event.target.querySelectorAll("[data-aa-quill-editor]"); + newFields.forEach(initQuillEditor); + setupFormSubmission(); + }); + } + const QuillEditor = { + init: setupAutoInit, + initEditor: initQuillEditor, + initEditors: initQuillEditors, + getEditors: window.getQuillEditors, + getEditorByIndex: window.getQuillEditorByIndex, + getEditorByElementId: window.getQuillEditorByElementId + }; + window.QuillEditor = QuillEditor; + if (typeof module2 !== "undefined" && module2.exports) { + module2.exports = QuillEditor; + } + })(); + } + }); + + // node_modules/flowbite/lib/esm/dom/events.js + var Events = ( + /** @class */ + function() { + function Events2(eventType, eventFunctions) { + if (eventFunctions === void 0) { + eventFunctions = []; + } + this._eventType = eventType; + this._eventFunctions = eventFunctions; + } + Events2.prototype.init = function() { + var _this = this; + this._eventFunctions.forEach(function(eventFunction) { + if (typeof window !== "undefined") { + window.addEventListener(_this._eventType, eventFunction); + } + }); + }; + return Events2; + }() + ); + var events_default = Events; + + // node_modules/flowbite/lib/esm/dom/instances.js + var Instances = ( + /** @class */ + function() { + function Instances2() { + this._instances = { + Accordion: {}, + Carousel: {}, + Collapse: {}, + Dial: {}, + Dismiss: {}, + Drawer: {}, + Dropdown: {}, + Modal: {}, + Popover: {}, + Tabs: {}, + Tooltip: {}, + InputCounter: {}, + CopyClipboard: {} + }; + } + Instances2.prototype.addInstance = function(component, instance, id, override) { + if (override === void 0) { + override = false; + } + if (!this._instances[component]) { + console.warn("Flowbite: Component ".concat(component, " does not exist.")); + return false; + } + if (this._instances[component][id] && !override) { + console.warn("Flowbite: Instance with ID ".concat(id, " already exists.")); + return; + } + if (override && this._instances[component][id]) { + this._instances[component][id].destroyAndRemoveInstance(); + } + this._instances[component][id ? id : this._generateRandomId()] = instance; + }; + Instances2.prototype.getAllInstances = function() { + return this._instances; + }; + Instances2.prototype.getInstances = function(component) { + if (!this._instances[component]) { + console.warn("Flowbite: Component ".concat(component, " does not exist.")); + return false; + } + return this._instances[component]; + }; + Instances2.prototype.getInstance = function(component, id) { + if (!this._componentAndInstanceCheck(component, id)) { + return; + } + if (!this._instances[component][id]) { + console.warn("Flowbite: Instance with ID ".concat(id, " does not exist.")); + return; + } + return this._instances[component][id]; + }; + Instances2.prototype.destroyAndRemoveInstance = function(component, id) { + if (!this._componentAndInstanceCheck(component, id)) { + return; + } + this.destroyInstanceObject(component, id); + this.removeInstance(component, id); + }; + Instances2.prototype.removeInstance = function(component, id) { + if (!this._componentAndInstanceCheck(component, id)) { + return; + } + delete this._instances[component][id]; + }; + Instances2.prototype.destroyInstanceObject = function(component, id) { + if (!this._componentAndInstanceCheck(component, id)) { + return; + } + this._instances[component][id].destroy(); + }; + Instances2.prototype.instanceExists = function(component, id) { + if (!this._instances[component]) { + return false; + } + if (!this._instances[component][id]) { + return false; + } + return true; + }; + Instances2.prototype._generateRandomId = function() { + return Math.random().toString(36).substr(2, 9); + }; + Instances2.prototype._componentAndInstanceCheck = function(component, id) { + if (!this._instances[component]) { + console.warn("Flowbite: Component ".concat(component, " does not exist.")); + return false; + } + if (!this._instances[component][id]) { + console.warn("Flowbite: Instance with ID ".concat(id, " does not exist.")); + return false; + } + return true; + }; + return Instances2; + }() + ); + var instances = new Instances(); + var instances_default = instances; + if (typeof window !== "undefined") { + window.FlowbiteInstances = instances; + } + + // node_modules/flowbite/lib/esm/components/accordion/index.js + var __assign = function() { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + var Default = { + alwaysOpen: false, + activeClasses: "bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-white", + inactiveClasses: "text-gray-500 dark:text-gray-400", + onOpen: function() { + }, + onClose: function() { + }, + onToggle: function() { + } + }; + var DefaultInstanceOptions = { + id: null, + override: true + }; + var Accordion = ( + /** @class */ + function() { + function Accordion2(accordionEl, items, options, instanceOptions) { + if (accordionEl === void 0) { + accordionEl = null; + } + if (items === void 0) { + items = []; + } + if (options === void 0) { + options = Default; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : accordionEl.id; + this._accordionEl = accordionEl; + this._items = items; + this._options = __assign(__assign({}, Default), options); + this._initialized = false; + this.init(); + instances_default.addInstance("Accordion", this, this._instanceId, instanceOptions.override); + } + Accordion2.prototype.init = function() { + var _this = this; + if (this._items.length && !this._initialized) { + this._items.forEach(function(item) { + if (item.active) { + _this.open(item.id); + } + var clickHandler = function() { + _this.toggle(item.id); + }; + item.triggerEl.addEventListener("click", clickHandler); + item.clickHandler = clickHandler; + }); + this._initialized = true; + } + }; + Accordion2.prototype.destroy = function() { + if (this._items.length && this._initialized) { + this._items.forEach(function(item) { + item.triggerEl.removeEventListener("click", item.clickHandler); + delete item.clickHandler; + }); + this._initialized = false; + } + }; + Accordion2.prototype.removeInstance = function() { + instances_default.removeInstance("Accordion", this._instanceId); + }; + Accordion2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Accordion2.prototype.getItem = function(id) { + return this._items.filter(function(item) { + return item.id === id; + })[0]; + }; + Accordion2.prototype.open = function(id) { + var _a, _b; + var _this = this; + var item = this.getItem(id); + if (!this._options.alwaysOpen) { + this._items.map(function(i) { + var _a2, _b2; + if (i !== item) { + (_a2 = i.triggerEl.classList).remove.apply(_a2, _this._options.activeClasses.split(" ")); + (_b2 = i.triggerEl.classList).add.apply(_b2, _this._options.inactiveClasses.split(" ")); + i.targetEl.classList.add("hidden"); + i.triggerEl.setAttribute("aria-expanded", "false"); + i.active = false; + if (i.iconEl) { + i.iconEl.classList.add("rotate-180"); + } + } + }); + } + (_a = item.triggerEl.classList).add.apply(_a, this._options.activeClasses.split(" ")); + (_b = item.triggerEl.classList).remove.apply(_b, this._options.inactiveClasses.split(" ")); + item.triggerEl.setAttribute("aria-expanded", "true"); + item.targetEl.classList.remove("hidden"); + item.active = true; + if (item.iconEl) { + item.iconEl.classList.remove("rotate-180"); + } + this._options.onOpen(this, item); + }; + Accordion2.prototype.toggle = function(id) { + var item = this.getItem(id); + if (item.active) { + this.close(id); + } else { + this.open(id); + } + this._options.onToggle(this, item); + }; + Accordion2.prototype.close = function(id) { + var _a, _b; + var item = this.getItem(id); + (_a = item.triggerEl.classList).remove.apply(_a, this._options.activeClasses.split(" ")); + (_b = item.triggerEl.classList).add.apply(_b, this._options.inactiveClasses.split(" ")); + item.targetEl.classList.add("hidden"); + item.triggerEl.setAttribute("aria-expanded", "false"); + item.active = false; + if (item.iconEl) { + item.iconEl.classList.add("rotate-180"); + } + this._options.onClose(this, item); + }; + Accordion2.prototype.updateOnOpen = function(callback) { + this._options.onOpen = callback; + }; + Accordion2.prototype.updateOnClose = function(callback) { + this._options.onClose = callback; + }; + Accordion2.prototype.updateOnToggle = function(callback) { + this._options.onToggle = callback; + }; + return Accordion2; + }() + ); + function initAccordions() { + document.querySelectorAll("[data-accordion]").forEach(function($accordionEl) { + var alwaysOpen = $accordionEl.getAttribute("data-accordion"); + var activeClasses = $accordionEl.getAttribute("data-active-classes"); + var inactiveClasses = $accordionEl.getAttribute("data-inactive-classes"); + var items = []; + $accordionEl.querySelectorAll("[data-accordion-target]").forEach(function($triggerEl) { + if ($triggerEl.closest("[data-accordion]") === $accordionEl) { + var item = { + id: $triggerEl.getAttribute("data-accordion-target"), + triggerEl: $triggerEl, + targetEl: document.querySelector($triggerEl.getAttribute("data-accordion-target")), + iconEl: $triggerEl.querySelector("[data-accordion-icon]"), + active: $triggerEl.getAttribute("aria-expanded") === "true" ? true : false + }; + items.push(item); + } + }); + new Accordion($accordionEl, items, { + alwaysOpen: alwaysOpen === "open" ? true : false, + activeClasses: activeClasses ? activeClasses : Default.activeClasses, + inactiveClasses: inactiveClasses ? inactiveClasses : Default.inactiveClasses + }); + }); + } + if (typeof window !== "undefined") { + window.Accordion = Accordion; + window.initAccordions = initAccordions; + } + + // node_modules/flowbite/lib/esm/components/collapse/index.js + var __assign2 = function() { + __assign2 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign2.apply(this, arguments); + }; + var Default2 = { + onCollapse: function() { + }, + onExpand: function() { + }, + onToggle: function() { + } + }; + var DefaultInstanceOptions2 = { + id: null, + override: true + }; + var Collapse = ( + /** @class */ + function() { + function Collapse2(targetEl, triggerEl, options, instanceOptions) { + if (targetEl === void 0) { + targetEl = null; + } + if (triggerEl === void 0) { + triggerEl = null; + } + if (options === void 0) { + options = Default2; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions2; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : targetEl.id; + this._targetEl = targetEl; + this._triggerEl = triggerEl; + this._options = __assign2(__assign2({}, Default2), options); + this._visible = false; + this._initialized = false; + this.init(); + instances_default.addInstance("Collapse", this, this._instanceId, instanceOptions.override); + } + Collapse2.prototype.init = function() { + var _this = this; + if (this._triggerEl && this._targetEl && !this._initialized) { + if (this._triggerEl.hasAttribute("aria-expanded")) { + this._visible = this._triggerEl.getAttribute("aria-expanded") === "true"; + } else { + this._visible = !this._targetEl.classList.contains("hidden"); + } + this._clickHandler = function() { + _this.toggle(); + }; + this._triggerEl.addEventListener("click", this._clickHandler); + this._initialized = true; + } + }; + Collapse2.prototype.destroy = function() { + if (this._triggerEl && this._initialized) { + this._triggerEl.removeEventListener("click", this._clickHandler); + this._initialized = false; + } + }; + Collapse2.prototype.removeInstance = function() { + instances_default.removeInstance("Collapse", this._instanceId); + }; + Collapse2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Collapse2.prototype.collapse = function() { + this._targetEl.classList.add("hidden"); + if (this._triggerEl) { + this._triggerEl.setAttribute("aria-expanded", "false"); + } + this._visible = false; + this._options.onCollapse(this); + }; + Collapse2.prototype.expand = function() { + this._targetEl.classList.remove("hidden"); + if (this._triggerEl) { + this._triggerEl.setAttribute("aria-expanded", "true"); + } + this._visible = true; + this._options.onExpand(this); + }; + Collapse2.prototype.toggle = function() { + if (this._visible) { + this.collapse(); + } else { + this.expand(); + } + this._options.onToggle(this); + }; + Collapse2.prototype.updateOnCollapse = function(callback) { + this._options.onCollapse = callback; + }; + Collapse2.prototype.updateOnExpand = function(callback) { + this._options.onExpand = callback; + }; + Collapse2.prototype.updateOnToggle = function(callback) { + this._options.onToggle = callback; + }; + return Collapse2; + }() + ); + function initCollapses() { + document.querySelectorAll("[data-collapse-toggle]").forEach(function($triggerEl) { + var targetId = $triggerEl.getAttribute("data-collapse-toggle"); + var $targetEl = document.getElementById(targetId); + if ($targetEl) { + if (!instances_default.instanceExists("Collapse", $targetEl.getAttribute("id"))) { + new Collapse($targetEl, $triggerEl); + } else { + new Collapse($targetEl, $triggerEl, {}, { + id: $targetEl.getAttribute("id") + "_" + instances_default._generateRandomId() + }); + } + } else { + console.error('The target element with id "'.concat(targetId, '" does not exist. Please check the data-collapse-toggle attribute.')); + } + }); + } + if (typeof window !== "undefined") { + window.Collapse = Collapse; + window.initCollapses = initCollapses; + } + + // node_modules/flowbite/lib/esm/components/carousel/index.js + var __assign3 = function() { + __assign3 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign3.apply(this, arguments); + }; + var Default3 = { + defaultPosition: 0, + indicators: { + items: [], + activeClasses: "bg-white dark:bg-gray-800", + inactiveClasses: "bg-white/50 dark:bg-gray-800/50 hover:bg-white dark:hover:bg-gray-800" + }, + interval: 3e3, + onNext: function() { + }, + onPrev: function() { + }, + onChange: function() { + } + }; + var DefaultInstanceOptions3 = { + id: null, + override: true + }; + var Carousel = ( + /** @class */ + function() { + function Carousel2(carouselEl, items, options, instanceOptions) { + if (carouselEl === void 0) { + carouselEl = null; + } + if (items === void 0) { + items = []; + } + if (options === void 0) { + options = Default3; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions3; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : carouselEl.id; + this._carouselEl = carouselEl; + this._items = items; + this._options = __assign3(__assign3(__assign3({}, Default3), options), { indicators: __assign3(__assign3({}, Default3.indicators), options.indicators) }); + this._activeItem = this.getItem(this._options.defaultPosition); + this._indicators = this._options.indicators.items; + this._intervalDuration = this._options.interval; + this._intervalInstance = null; + this._initialized = false; + this.init(); + instances_default.addInstance("Carousel", this, this._instanceId, instanceOptions.override); + } + Carousel2.prototype.init = function() { + var _this = this; + if (this._items.length && !this._initialized) { + this._items.map(function(item) { + item.el.classList.add("absolute", "inset-0", "transition-transform", "transform"); + }); + if (this.getActiveItem()) { + this.slideTo(this.getActiveItem().position); + } else { + this.slideTo(0); + } + this._indicators.map(function(indicator, position) { + indicator.el.addEventListener("click", function() { + _this.slideTo(position); + }); + }); + this._initialized = true; + } + }; + Carousel2.prototype.destroy = function() { + if (this._initialized) { + this._initialized = false; + } + }; + Carousel2.prototype.removeInstance = function() { + instances_default.removeInstance("Carousel", this._instanceId); + }; + Carousel2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Carousel2.prototype.getItem = function(position) { + return this._items[position]; + }; + Carousel2.prototype.slideTo = function(position) { + var nextItem = this._items[position]; + var rotationItems = { + left: nextItem.position === 0 ? this._items[this._items.length - 1] : this._items[nextItem.position - 1], + middle: nextItem, + right: nextItem.position === this._items.length - 1 ? this._items[0] : this._items[nextItem.position + 1] + }; + this._rotate(rotationItems); + this._setActiveItem(nextItem); + if (this._intervalInstance) { + this.pause(); + this.cycle(); + } + this._options.onChange(this); + }; + Carousel2.prototype.next = function() { + var activeItem = this.getActiveItem(); + var nextItem = null; + if (activeItem.position === this._items.length - 1) { + nextItem = this._items[0]; + } else { + nextItem = this._items[activeItem.position + 1]; + } + this.slideTo(nextItem.position); + this._options.onNext(this); + }; + Carousel2.prototype.prev = function() { + var activeItem = this.getActiveItem(); + var prevItem = null; + if (activeItem.position === 0) { + prevItem = this._items[this._items.length - 1]; + } else { + prevItem = this._items[activeItem.position - 1]; + } + this.slideTo(prevItem.position); + this._options.onPrev(this); + }; + Carousel2.prototype._rotate = function(rotationItems) { + this._items.map(function(item) { + item.el.classList.add("hidden"); + }); + if (this._items.length === 1) { + rotationItems.middle.el.classList.remove("-translate-x-full", "translate-x-full", "translate-x-0", "hidden", "z-10"); + rotationItems.middle.el.classList.add("translate-x-0", "z-20"); + return; + } + rotationItems.left.el.classList.remove("-translate-x-full", "translate-x-full", "translate-x-0", "hidden", "z-20"); + rotationItems.left.el.classList.add("-translate-x-full", "z-10"); + rotationItems.middle.el.classList.remove("-translate-x-full", "translate-x-full", "translate-x-0", "hidden", "z-10"); + rotationItems.middle.el.classList.add("translate-x-0", "z-30"); + rotationItems.right.el.classList.remove("-translate-x-full", "translate-x-full", "translate-x-0", "hidden", "z-30"); + rotationItems.right.el.classList.add("translate-x-full", "z-20"); + }; + Carousel2.prototype.cycle = function() { + var _this = this; + if (typeof window !== "undefined") { + this._intervalInstance = window.setInterval(function() { + _this.next(); + }, this._intervalDuration); + } + }; + Carousel2.prototype.pause = function() { + clearInterval(this._intervalInstance); + }; + Carousel2.prototype.getActiveItem = function() { + return this._activeItem; + }; + Carousel2.prototype._setActiveItem = function(item) { + var _a, _b; + var _this = this; + this._activeItem = item; + var position = item.position; + if (this._indicators.length) { + this._indicators.map(function(indicator) { + var _a2, _b2; + indicator.el.setAttribute("aria-current", "false"); + (_a2 = indicator.el.classList).remove.apply(_a2, _this._options.indicators.activeClasses.split(" ")); + (_b2 = indicator.el.classList).add.apply(_b2, _this._options.indicators.inactiveClasses.split(" ")); + }); + (_a = this._indicators[position].el.classList).add.apply(_a, this._options.indicators.activeClasses.split(" ")); + (_b = this._indicators[position].el.classList).remove.apply(_b, this._options.indicators.inactiveClasses.split(" ")); + this._indicators[position].el.setAttribute("aria-current", "true"); + } + }; + Carousel2.prototype.updateOnNext = function(callback) { + this._options.onNext = callback; + }; + Carousel2.prototype.updateOnPrev = function(callback) { + this._options.onPrev = callback; + }; + Carousel2.prototype.updateOnChange = function(callback) { + this._options.onChange = callback; + }; + return Carousel2; + }() + ); + function initCarousels() { + document.querySelectorAll("[data-carousel]").forEach(function($carouselEl) { + var interval = $carouselEl.getAttribute("data-carousel-interval"); + var slide = $carouselEl.getAttribute("data-carousel") === "slide" ? true : false; + var items = []; + var defaultPosition = 0; + if ($carouselEl.querySelectorAll("[data-carousel-item]").length) { + Array.from($carouselEl.querySelectorAll("[data-carousel-item]")).map(function($carouselItemEl, position) { + items.push({ + position, + el: $carouselItemEl + }); + if ($carouselItemEl.getAttribute("data-carousel-item") === "active") { + defaultPosition = position; + } + }); + } + var indicators = []; + if ($carouselEl.querySelectorAll("[data-carousel-slide-to]").length) { + Array.from($carouselEl.querySelectorAll("[data-carousel-slide-to]")).map(function($indicatorEl) { + indicators.push({ + position: parseInt($indicatorEl.getAttribute("data-carousel-slide-to")), + el: $indicatorEl + }); + }); + } + var carousel = new Carousel($carouselEl, items, { + defaultPosition, + indicators: { + items: indicators + }, + interval: interval ? interval : Default3.interval + }); + if (slide) { + carousel.cycle(); + } + var carouselNextEl = $carouselEl.querySelector("[data-carousel-next]"); + var carouselPrevEl = $carouselEl.querySelector("[data-carousel-prev]"); + if (carouselNextEl) { + carouselNextEl.addEventListener("click", function() { + carousel.next(); + }); + } + if (carouselPrevEl) { + carouselPrevEl.addEventListener("click", function() { + carousel.prev(); + }); + } + }); + } + if (typeof window !== "undefined") { + window.Carousel = Carousel; + window.initCarousels = initCarousels; + } + + // node_modules/flowbite/lib/esm/components/dismiss/index.js + var __assign4 = function() { + __assign4 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign4.apply(this, arguments); + }; + var Default4 = { + transition: "transition-opacity", + duration: 300, + timing: "ease-out", + onHide: function() { + } + }; + var DefaultInstanceOptions4 = { + id: null, + override: true + }; + var Dismiss = ( + /** @class */ + function() { + function Dismiss2(targetEl, triggerEl, options, instanceOptions) { + if (targetEl === void 0) { + targetEl = null; + } + if (triggerEl === void 0) { + triggerEl = null; + } + if (options === void 0) { + options = Default4; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions4; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : targetEl.id; + this._targetEl = targetEl; + this._triggerEl = triggerEl; + this._options = __assign4(__assign4({}, Default4), options); + this._initialized = false; + this.init(); + instances_default.addInstance("Dismiss", this, this._instanceId, instanceOptions.override); + } + Dismiss2.prototype.init = function() { + var _this = this; + if (this._triggerEl && this._targetEl && !this._initialized) { + this._clickHandler = function() { + _this.hide(); + }; + this._triggerEl.addEventListener("click", this._clickHandler); + this._initialized = true; + } + }; + Dismiss2.prototype.destroy = function() { + if (this._triggerEl && this._initialized) { + this._triggerEl.removeEventListener("click", this._clickHandler); + this._initialized = false; + } + }; + Dismiss2.prototype.removeInstance = function() { + instances_default.removeInstance("Dismiss", this._instanceId); + }; + Dismiss2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Dismiss2.prototype.hide = function() { + var _this = this; + this._targetEl.classList.add(this._options.transition, "duration-".concat(this._options.duration), this._options.timing, "opacity-0"); + setTimeout(function() { + _this._targetEl.classList.add("hidden"); + }, this._options.duration); + this._options.onHide(this, this._targetEl); + }; + Dismiss2.prototype.updateOnHide = function(callback) { + this._options.onHide = callback; + }; + return Dismiss2; + }() + ); + function initDismisses() { + document.querySelectorAll("[data-dismiss-target]").forEach(function($triggerEl) { + var targetId = $triggerEl.getAttribute("data-dismiss-target"); + var $dismissEl = document.querySelector(targetId); + if ($dismissEl) { + new Dismiss($dismissEl, $triggerEl); + } else { + console.error('The dismiss element with id "'.concat(targetId, '" does not exist. Please check the data-dismiss-target attribute.')); + } + }); + } + if (typeof window !== "undefined") { + window.Dismiss = Dismiss; + window.initDismisses = initDismisses; + } + + // node_modules/@popperjs/core/lib/enums.js + var top = "top"; + var bottom = "bottom"; + var right = "right"; + var left = "left"; + var auto = "auto"; + var basePlacements = [top, bottom, right, left]; + var start = "start"; + var end = "end"; + var clippingParents = "clippingParents"; + var viewport = "viewport"; + var popper = "popper"; + var reference = "reference"; + var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) { + return acc.concat([placement + "-" + start, placement + "-" + end]); + }, []); + var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) { + return acc.concat([placement, placement + "-" + start, placement + "-" + end]); + }, []); + var beforeRead = "beforeRead"; + var read = "read"; + var afterRead = "afterRead"; + var beforeMain = "beforeMain"; + var main = "main"; + var afterMain = "afterMain"; + var beforeWrite = "beforeWrite"; + var write = "write"; + var afterWrite = "afterWrite"; + var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; + + // node_modules/@popperjs/core/lib/dom-utils/getNodeName.js + function getNodeName(element) { + return element ? (element.nodeName || "").toLowerCase() : null; + } + + // node_modules/@popperjs/core/lib/dom-utils/getWindow.js + function getWindow(node) { + if (node == null) { + return window; + } + if (node.toString() !== "[object Window]") { + var ownerDocument = node.ownerDocument; + return ownerDocument ? ownerDocument.defaultView || window : window; + } + return node; + } + + // node_modules/@popperjs/core/lib/dom-utils/instanceOf.js + function isElement(node) { + var OwnElement = getWindow(node).Element; + return node instanceof OwnElement || node instanceof Element; + } + function isHTMLElement(node) { + var OwnElement = getWindow(node).HTMLElement; + return node instanceof OwnElement || node instanceof HTMLElement; + } + function isShadowRoot(node) { + if (typeof ShadowRoot === "undefined") { + return false; + } + var OwnElement = getWindow(node).ShadowRoot; + return node instanceof OwnElement || node instanceof ShadowRoot; + } + + // node_modules/@popperjs/core/lib/modifiers/applyStyles.js + function applyStyles(_ref) { + var state = _ref.state; + Object.keys(state.elements).forEach(function(name) { + var style = state.styles[name] || {}; + var attributes = state.attributes[name] || {}; + var element = state.elements[name]; + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } + Object.assign(element.style, style); + Object.keys(attributes).forEach(function(name2) { + var value = attributes[name2]; + if (value === false) { + element.removeAttribute(name2); + } else { + element.setAttribute(name2, value === true ? "" : value); + } + }); + }); + } + function effect(_ref2) { + var state = _ref2.state; + var initialStyles = { + popper: { + position: state.options.strategy, + left: "0", + top: "0", + margin: "0" + }, + arrow: { + position: "absolute" + }, + reference: {} + }; + Object.assign(state.elements.popper.style, initialStyles.popper); + state.styles = initialStyles; + if (state.elements.arrow) { + Object.assign(state.elements.arrow.style, initialStyles.arrow); + } + return function() { + Object.keys(state.elements).forEach(function(name) { + var element = state.elements[name]; + var attributes = state.attributes[name] || {}; + var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); + var style = styleProperties.reduce(function(style2, property) { + style2[property] = ""; + return style2; + }, {}); + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } + Object.assign(element.style, style); + Object.keys(attributes).forEach(function(attribute) { + element.removeAttribute(attribute); + }); + }); + }; + } + var applyStyles_default = { + name: "applyStyles", + enabled: true, + phase: "write", + fn: applyStyles, + effect, + requires: ["computeStyles"] + }; + + // node_modules/@popperjs/core/lib/utils/getBasePlacement.js + function getBasePlacement(placement) { + return placement.split("-")[0]; + } + + // node_modules/@popperjs/core/lib/utils/math.js + var max = Math.max; + var min = Math.min; + var round = Math.round; + + // node_modules/@popperjs/core/lib/utils/userAgent.js + function getUAString() { + var uaData = navigator.userAgentData; + if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) { + return uaData.brands.map(function(item) { + return item.brand + "/" + item.version; + }).join(" "); + } + return navigator.userAgent; + } + + // node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js + function isLayoutViewport() { + return !/^((?!chrome|android).)*safari/i.test(getUAString()); + } + + // node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js + function getBoundingClientRect(element, includeScale, isFixedStrategy) { + if (includeScale === void 0) { + includeScale = false; + } + if (isFixedStrategy === void 0) { + isFixedStrategy = false; + } + var clientRect = element.getBoundingClientRect(); + var scaleX = 1; + var scaleY = 1; + if (includeScale && isHTMLElement(element)) { + scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1; + scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1; + } + var _ref = isElement(element) ? getWindow(element) : window, visualViewport = _ref.visualViewport; + var addVisualOffsets = !isLayoutViewport() && isFixedStrategy; + var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; + var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; + var width = clientRect.width / scaleX; + var height = clientRect.height / scaleY; + return { + width, + height, + top: y, + right: x + width, + bottom: y + height, + left: x, + x, + y + }; + } + + // node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js + function getLayoutRect(element) { + var clientRect = getBoundingClientRect(element); + var width = element.offsetWidth; + var height = element.offsetHeight; + if (Math.abs(clientRect.width - width) <= 1) { + width = clientRect.width; + } + if (Math.abs(clientRect.height - height) <= 1) { + height = clientRect.height; + } + return { + x: element.offsetLeft, + y: element.offsetTop, + width, + height + }; + } + + // node_modules/@popperjs/core/lib/dom-utils/contains.js + function contains(parent, child) { + var rootNode = child.getRootNode && child.getRootNode(); + if (parent.contains(child)) { + return true; + } else if (rootNode && isShadowRoot(rootNode)) { + var next2 = child; + do { + if (next2 && parent.isSameNode(next2)) { + return true; + } + next2 = next2.parentNode || next2.host; + } while (next2); + } + return false; + } + + // node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js + function getComputedStyle2(element) { + return getWindow(element).getComputedStyle(element); + } + + // node_modules/@popperjs/core/lib/dom-utils/isTableElement.js + function isTableElement(element) { + return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0; + } + + // node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js + function getDocumentElement(element) { + return ((isElement(element) ? element.ownerDocument : ( + // $FlowFixMe[prop-missing] + element.document + )) || window.document).documentElement; + } + + // node_modules/@popperjs/core/lib/dom-utils/getParentNode.js + function getParentNode(element) { + if (getNodeName(element) === "html") { + return element; + } + return ( + // this is a quicker (but less type safe) way to save quite some bytes from the bundle + // $FlowFixMe[incompatible-return] + // $FlowFixMe[prop-missing] + element.assignedSlot || // step into the shadow DOM of the parent of a slotted node + element.parentNode || // DOM Element detected + (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected + // $FlowFixMe[incompatible-call]: HTMLElement is a Node + getDocumentElement(element) + ); + } + + // node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js + function getTrueOffsetParent(element) { + if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 + getComputedStyle2(element).position === "fixed") { + return null; + } + return element.offsetParent; + } + function getContainingBlock(element) { + var isFirefox = /firefox/i.test(getUAString()); + var isIE = /Trident/i.test(getUAString()); + if (isIE && isHTMLElement(element)) { + var elementCss = getComputedStyle2(element); + if (elementCss.position === "fixed") { + return null; + } + } + var currentNode = getParentNode(element); + if (isShadowRoot(currentNode)) { + currentNode = currentNode.host; + } + while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) { + var css = getComputedStyle2(currentNode); + if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") { + return currentNode; + } else { + currentNode = currentNode.parentNode; + } + } + return null; + } + function getOffsetParent(element) { + var window2 = getWindow(element); + var offsetParent = getTrueOffsetParent(element); + while (offsetParent && isTableElement(offsetParent) && getComputedStyle2(offsetParent).position === "static") { + offsetParent = getTrueOffsetParent(offsetParent); + } + if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle2(offsetParent).position === "static")) { + return window2; + } + return offsetParent || getContainingBlock(element) || window2; + } + + // node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js + function getMainAxisFromPlacement(placement) { + return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y"; + } + + // node_modules/@popperjs/core/lib/utils/within.js + function within(min2, value, max2) { + return max(min2, min(value, max2)); + } + function withinMaxClamp(min2, value, max2) { + var v = within(min2, value, max2); + return v > max2 ? max2 : v; + } + + // node_modules/@popperjs/core/lib/utils/getFreshSideObject.js + function getFreshSideObject() { + return { + top: 0, + right: 0, + bottom: 0, + left: 0 + }; + } + + // node_modules/@popperjs/core/lib/utils/mergePaddingObject.js + function mergePaddingObject(paddingObject) { + return Object.assign({}, getFreshSideObject(), paddingObject); + } + + // node_modules/@popperjs/core/lib/utils/expandToHashMap.js + function expandToHashMap(value, keys2) { + return keys2.reduce(function(hashMap, key) { + hashMap[key] = value; + return hashMap; + }, {}); + } + + // node_modules/@popperjs/core/lib/modifiers/arrow.js + var toPaddingObject = function toPaddingObject2(padding, state) { + padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, { + placement: state.placement + })) : padding; + return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); + }; + function arrow(_ref) { + var _state$modifiersData$; + var state = _ref.state, name = _ref.name, options = _ref.options; + var arrowElement = state.elements.arrow; + var popperOffsets2 = state.modifiersData.popperOffsets; + var basePlacement = getBasePlacement(state.placement); + var axis = getMainAxisFromPlacement(basePlacement); + var isVertical = [left, right].indexOf(basePlacement) >= 0; + var len = isVertical ? "height" : "width"; + if (!arrowElement || !popperOffsets2) { + return; + } + var paddingObject = toPaddingObject(options.padding, state); + var arrowRect = getLayoutRect(arrowElement); + var minProp = axis === "y" ? top : left; + var maxProp = axis === "y" ? bottom : right; + var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len]; + var startDiff = popperOffsets2[axis] - state.rects.reference[axis]; + var arrowOffsetParent = getOffsetParent(arrowElement); + var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; + var centerToReference = endDiff / 2 - startDiff / 2; + var min2 = paddingObject[minProp]; + var max2 = clientSize - arrowRect[len] - paddingObject[maxProp]; + var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; + var offset2 = within(min2, center, max2); + var axisProp = axis; + state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$); + } + function effect2(_ref2) { + var state = _ref2.state, options = _ref2.options; + var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element; + if (arrowElement == null) { + return; + } + if (typeof arrowElement === "string") { + arrowElement = state.elements.popper.querySelector(arrowElement); + if (!arrowElement) { + return; + } + } + if (!contains(state.elements.popper, arrowElement)) { + return; + } + state.elements.arrow = arrowElement; + } + var arrow_default = { + name: "arrow", + enabled: true, + phase: "main", + fn: arrow, + effect: effect2, + requires: ["popperOffsets"], + requiresIfExists: ["preventOverflow"] + }; + + // node_modules/@popperjs/core/lib/utils/getVariation.js + function getVariation(placement) { + return placement.split("-")[1]; + } + + // node_modules/@popperjs/core/lib/modifiers/computeStyles.js + var unsetSides = { + top: "auto", + right: "auto", + bottom: "auto", + left: "auto" + }; + function roundOffsetsByDPR(_ref, win) { + var x = _ref.x, y = _ref.y; + var dpr = win.devicePixelRatio || 1; + return { + x: round(x * dpr) / dpr || 0, + y: round(y * dpr) / dpr || 0 + }; + } + function mapToStyles(_ref2) { + var _Object$assign2; + var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed; + var _offsets$x = offsets.x, x = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y = _offsets$y === void 0 ? 0 : _offsets$y; + var _ref3 = typeof roundOffsets === "function" ? roundOffsets({ + x, + y + }) : { + x, + y + }; + x = _ref3.x; + y = _ref3.y; + var hasX = offsets.hasOwnProperty("x"); + var hasY = offsets.hasOwnProperty("y"); + var sideX = left; + var sideY = top; + var win = window; + if (adaptive) { + var offsetParent = getOffsetParent(popper2); + var heightProp = "clientHeight"; + var widthProp = "clientWidth"; + if (offsetParent === getWindow(popper2)) { + offsetParent = getDocumentElement(popper2); + if (getComputedStyle2(offsetParent).position !== "static" && position === "absolute") { + heightProp = "scrollHeight"; + widthProp = "scrollWidth"; + } + } + offsetParent = offsetParent; + if (placement === top || (placement === left || placement === right) && variation === end) { + sideY = bottom; + var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : ( + // $FlowFixMe[prop-missing] + offsetParent[heightProp] + ); + y -= offsetY - popperRect.height; + y *= gpuAcceleration ? 1 : -1; + } + if (placement === left || (placement === top || placement === bottom) && variation === end) { + sideX = right; + var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : ( + // $FlowFixMe[prop-missing] + offsetParent[widthProp] + ); + x -= offsetX - popperRect.width; + x *= gpuAcceleration ? 1 : -1; + } + } + var commonStyles = Object.assign({ + position + }, adaptive && unsetSides); + var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ + x, + y + }, getWindow(popper2)) : { + x, + y + }; + x = _ref4.x; + y = _ref4.y; + if (gpuAcceleration) { + var _Object$assign; + return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); + } + return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2)); + } + function computeStyles(_ref5) { + var state = _ref5.state, options = _ref5.options; + var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; + var commonStyles = { + placement: getBasePlacement(state.placement), + variation: getVariation(state.placement), + popper: state.elements.popper, + popperRect: state.rects.popper, + gpuAcceleration, + isFixed: state.options.strategy === "fixed" + }; + if (state.modifiersData.popperOffsets != null) { + state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.popperOffsets, + position: state.options.strategy, + adaptive, + roundOffsets + }))); + } + if (state.modifiersData.arrow != null) { + state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.arrow, + position: "absolute", + adaptive: false, + roundOffsets + }))); + } + state.attributes.popper = Object.assign({}, state.attributes.popper, { + "data-popper-placement": state.placement + }); + } + var computeStyles_default = { + name: "computeStyles", + enabled: true, + phase: "beforeWrite", + fn: computeStyles, + data: {} + }; + + // node_modules/@popperjs/core/lib/modifiers/eventListeners.js + var passive = { + passive: true + }; + function effect3(_ref) { + var state = _ref.state, instance = _ref.instance, options = _ref.options; + var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize; + var window2 = getWindow(state.elements.popper); + var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); + if (scroll) { + scrollParents.forEach(function(scrollParent) { + scrollParent.addEventListener("scroll", instance.update, passive); + }); + } + if (resize) { + window2.addEventListener("resize", instance.update, passive); + } + return function() { + if (scroll) { + scrollParents.forEach(function(scrollParent) { + scrollParent.removeEventListener("scroll", instance.update, passive); + }); + } + if (resize) { + window2.removeEventListener("resize", instance.update, passive); + } + }; + } + var eventListeners_default = { + name: "eventListeners", + enabled: true, + phase: "write", + fn: function fn() { + }, + effect: effect3, + data: {} + }; + + // node_modules/@popperjs/core/lib/utils/getOppositePlacement.js + var hash = { + left: "right", + right: "left", + bottom: "top", + top: "bottom" + }; + function getOppositePlacement(placement) { + return placement.replace(/left|right|bottom|top/g, function(matched) { + return hash[matched]; + }); + } + + // node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js + var hash2 = { + start: "end", + end: "start" + }; + function getOppositeVariationPlacement(placement) { + return placement.replace(/start|end/g, function(matched) { + return hash2[matched]; + }); + } + + // node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js + function getWindowScroll(node) { + var win = getWindow(node); + var scrollLeft = win.pageXOffset; + var scrollTop = win.pageYOffset; + return { + scrollLeft, + scrollTop + }; + } + + // node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js + function getWindowScrollBarX(element) { + return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; + } + + // node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js + function getViewportRect(element, strategy) { + var win = getWindow(element); + var html = getDocumentElement(element); + var visualViewport = win.visualViewport; + var width = html.clientWidth; + var height = html.clientHeight; + var x = 0; + var y = 0; + if (visualViewport) { + width = visualViewport.width; + height = visualViewport.height; + var layoutViewport = isLayoutViewport(); + if (layoutViewport || !layoutViewport && strategy === "fixed") { + x = visualViewport.offsetLeft; + y = visualViewport.offsetTop; + } + } + return { + width, + height, + x: x + getWindowScrollBarX(element), + y + }; + } + + // node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js + function getDocumentRect(element) { + var _element$ownerDocumen; + var html = getDocumentElement(element); + var winScroll = getWindowScroll(element); + var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; + var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); + var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); + var x = -winScroll.scrollLeft + getWindowScrollBarX(element); + var y = -winScroll.scrollTop; + if (getComputedStyle2(body || html).direction === "rtl") { + x += max(html.clientWidth, body ? body.clientWidth : 0) - width; + } + return { + width, + height, + x, + y + }; + } + + // node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js + function isScrollParent(element) { + var _getComputedStyle = getComputedStyle2(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY; + return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); + } + + // node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js + function getScrollParent(node) { + if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) { + return node.ownerDocument.body; + } + if (isHTMLElement(node) && isScrollParent(node)) { + return node; + } + return getScrollParent(getParentNode(node)); + } + + // node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js + function listScrollParents(element, list) { + var _element$ownerDocumen; + if (list === void 0) { + list = []; + } + var scrollParent = getScrollParent(element); + var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); + var win = getWindow(scrollParent); + var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; + var updatedList = list.concat(target); + return isBody ? updatedList : ( + // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here + updatedList.concat(listScrollParents(getParentNode(target))) + ); + } + + // node_modules/@popperjs/core/lib/utils/rectToClientRect.js + function rectToClientRect(rect) { + return Object.assign({}, rect, { + left: rect.x, + top: rect.y, + right: rect.x + rect.width, + bottom: rect.y + rect.height + }); + } + + // node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js + function getInnerBoundingClientRect(element, strategy) { + var rect = getBoundingClientRect(element, false, strategy === "fixed"); + rect.top = rect.top + element.clientTop; + rect.left = rect.left + element.clientLeft; + rect.bottom = rect.top + element.clientHeight; + rect.right = rect.left + element.clientWidth; + rect.width = element.clientWidth; + rect.height = element.clientHeight; + rect.x = rect.left; + rect.y = rect.top; + return rect; + } + function getClientRectFromMixedType(element, clippingParent, strategy) { + return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element))); + } + function getClippingParents(element) { + var clippingParents2 = listScrollParents(getParentNode(element)); + var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle2(element).position) >= 0; + var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; + if (!isElement(clipperElement)) { + return []; + } + return clippingParents2.filter(function(clippingParent) { + return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body"; + }); + } + function getClippingRect(element, boundary, rootBoundary, strategy) { + var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary); + var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]); + var firstClippingParent = clippingParents2[0]; + var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) { + var rect = getClientRectFromMixedType(element, clippingParent, strategy); + accRect.top = max(rect.top, accRect.top); + accRect.right = min(rect.right, accRect.right); + accRect.bottom = min(rect.bottom, accRect.bottom); + accRect.left = max(rect.left, accRect.left); + return accRect; + }, getClientRectFromMixedType(element, firstClippingParent, strategy)); + clippingRect.width = clippingRect.right - clippingRect.left; + clippingRect.height = clippingRect.bottom - clippingRect.top; + clippingRect.x = clippingRect.left; + clippingRect.y = clippingRect.top; + return clippingRect; + } + + // node_modules/@popperjs/core/lib/utils/computeOffsets.js + function computeOffsets(_ref) { + var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement; + var basePlacement = placement ? getBasePlacement(placement) : null; + var variation = placement ? getVariation(placement) : null; + var commonX = reference2.x + reference2.width / 2 - element.width / 2; + var commonY = reference2.y + reference2.height / 2 - element.height / 2; + var offsets; + switch (basePlacement) { + case top: + offsets = { + x: commonX, + y: reference2.y - element.height + }; + break; + case bottom: + offsets = { + x: commonX, + y: reference2.y + reference2.height + }; + break; + case right: + offsets = { + x: reference2.x + reference2.width, + y: commonY + }; + break; + case left: + offsets = { + x: reference2.x - element.width, + y: commonY + }; + break; + default: + offsets = { + x: reference2.x, + y: reference2.y + }; + } + var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; + if (mainAxis != null) { + var len = mainAxis === "y" ? "height" : "width"; + switch (variation) { + case start: + offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2); + break; + case end: + offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2); + break; + default: + } + } + return offsets; + } + + // node_modules/@popperjs/core/lib/utils/detectOverflow.js + function detectOverflow(state, options) { + if (options === void 0) { + options = {}; + } + var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$strategy = _options.strategy, strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding; + var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); + var altContext = elementContext === popper ? reference : popper; + var popperRect = state.rects.popper; + var element = state.elements[altBoundary ? altContext : elementContext]; + var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy); + var referenceClientRect = getBoundingClientRect(state.elements.reference); + var popperOffsets2 = computeOffsets({ + reference: referenceClientRect, + element: popperRect, + strategy: "absolute", + placement + }); + var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2)); + var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; + var overflowOffsets = { + top: clippingClientRect.top - elementClientRect.top + paddingObject.top, + bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, + left: clippingClientRect.left - elementClientRect.left + paddingObject.left, + right: elementClientRect.right - clippingClientRect.right + paddingObject.right + }; + var offsetData = state.modifiersData.offset; + if (elementContext === popper && offsetData) { + var offset2 = offsetData[placement]; + Object.keys(overflowOffsets).forEach(function(key) { + var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; + var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x"; + overflowOffsets[key] += offset2[axis] * multiply; + }); + } + return overflowOffsets; + } + + // node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js + function computeAutoPlacement(state, options) { + if (options === void 0) { + options = {}; + } + var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; + var variation = getVariation(placement); + var placements2 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) { + return getVariation(placement2) === variation; + }) : basePlacements; + var allowedPlacements = placements2.filter(function(placement2) { + return allowedAutoPlacements.indexOf(placement2) >= 0; + }); + if (allowedPlacements.length === 0) { + allowedPlacements = placements2; + } + var overflows = allowedPlacements.reduce(function(acc, placement2) { + acc[placement2] = detectOverflow(state, { + placement: placement2, + boundary, + rootBoundary, + padding + })[getBasePlacement(placement2)]; + return acc; + }, {}); + return Object.keys(overflows).sort(function(a, b) { + return overflows[a] - overflows[b]; + }); + } + + // node_modules/@popperjs/core/lib/modifiers/flip.js + function getExpandedFallbackPlacements(placement) { + if (getBasePlacement(placement) === auto) { + return []; + } + var oppositePlacement = getOppositePlacement(placement); + return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; + } + function flip(_ref) { + var state = _ref.state, options = _ref.options, name = _ref.name; + if (state.modifiersData[name]._skip) { + return; + } + var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements; + var preferredPlacement = state.options.placement; + var basePlacement = getBasePlacement(preferredPlacement); + var isBasePlacement = basePlacement === preferredPlacement; + var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); + var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) { + return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, { + placement: placement2, + boundary, + rootBoundary, + padding, + flipVariations, + allowedAutoPlacements + }) : placement2); + }, []); + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var checksMap = /* @__PURE__ */ new Map(); + var makeFallbackChecks = true; + var firstFittingPlacement = placements2[0]; + for (var i = 0; i < placements2.length; i++) { + var placement = placements2[i]; + var _basePlacement = getBasePlacement(placement); + var isStartVariation = getVariation(placement) === start; + var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; + var len = isVertical ? "width" : "height"; + var overflow = detectOverflow(state, { + placement, + boundary, + rootBoundary, + altBoundary, + padding + }); + var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; + if (referenceRect[len] > popperRect[len]) { + mainVariationSide = getOppositePlacement(mainVariationSide); + } + var altVariationSide = getOppositePlacement(mainVariationSide); + var checks = []; + if (checkMainAxis) { + checks.push(overflow[_basePlacement] <= 0); + } + if (checkAltAxis) { + checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); + } + if (checks.every(function(check) { + return check; + })) { + firstFittingPlacement = placement; + makeFallbackChecks = false; + break; + } + checksMap.set(placement, checks); + } + if (makeFallbackChecks) { + var numberOfChecks = flipVariations ? 3 : 1; + var _loop = function _loop2(_i2) { + var fittingPlacement = placements2.find(function(placement2) { + var checks2 = checksMap.get(placement2); + if (checks2) { + return checks2.slice(0, _i2).every(function(check) { + return check; + }); + } + }); + if (fittingPlacement) { + firstFittingPlacement = fittingPlacement; + return "break"; + } + }; + for (var _i = numberOfChecks; _i > 0; _i--) { + var _ret = _loop(_i); + if (_ret === "break") + break; + } + } + if (state.placement !== firstFittingPlacement) { + state.modifiersData[name]._skip = true; + state.placement = firstFittingPlacement; + state.reset = true; + } + } + var flip_default = { + name: "flip", + enabled: true, + phase: "main", + fn: flip, + requiresIfExists: ["offset"], + data: { + _skip: false + } + }; + + // node_modules/@popperjs/core/lib/modifiers/hide.js + function getSideOffsets(overflow, rect, preventedOffsets) { + if (preventedOffsets === void 0) { + preventedOffsets = { + x: 0, + y: 0 + }; + } + return { + top: overflow.top - rect.height - preventedOffsets.y, + right: overflow.right - rect.width + preventedOffsets.x, + bottom: overflow.bottom - rect.height + preventedOffsets.y, + left: overflow.left - rect.width - preventedOffsets.x + }; + } + function isAnySideFullyClipped(overflow) { + return [top, right, bottom, left].some(function(side) { + return overflow[side] >= 0; + }); + } + function hide(_ref) { + var state = _ref.state, name = _ref.name; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var preventedOffsets = state.modifiersData.preventOverflow; + var referenceOverflow = detectOverflow(state, { + elementContext: "reference" + }); + var popperAltOverflow = detectOverflow(state, { + altBoundary: true + }); + var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); + var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); + var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); + var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); + state.modifiersData[name] = { + referenceClippingOffsets, + popperEscapeOffsets, + isReferenceHidden, + hasPopperEscaped + }; + state.attributes.popper = Object.assign({}, state.attributes.popper, { + "data-popper-reference-hidden": isReferenceHidden, + "data-popper-escaped": hasPopperEscaped + }); + } + var hide_default = { + name: "hide", + enabled: true, + phase: "main", + requiresIfExists: ["preventOverflow"], + fn: hide + }; + + // node_modules/@popperjs/core/lib/modifiers/offset.js + function distanceAndSkiddingToXY(placement, rects, offset2) { + var basePlacement = getBasePlacement(placement); + var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; + var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, { + placement + })) : offset2, skidding = _ref[0], distance = _ref[1]; + skidding = skidding || 0; + distance = (distance || 0) * invertDistance; + return [left, right].indexOf(basePlacement) >= 0 ? { + x: distance, + y: skidding + } : { + x: skidding, + y: distance + }; + } + function offset(_ref2) { + var state = _ref2.state, options = _ref2.options, name = _ref2.name; + var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset; + var data = placements.reduce(function(acc, placement) { + acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2); + return acc; + }, {}); + var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y; + if (state.modifiersData.popperOffsets != null) { + state.modifiersData.popperOffsets.x += x; + state.modifiersData.popperOffsets.y += y; + } + state.modifiersData[name] = data; + } + var offset_default = { + name: "offset", + enabled: true, + phase: "main", + requires: ["popperOffsets"], + fn: offset + }; + + // node_modules/@popperjs/core/lib/modifiers/popperOffsets.js + function popperOffsets(_ref) { + var state = _ref.state, name = _ref.name; + state.modifiersData[name] = computeOffsets({ + reference: state.rects.reference, + element: state.rects.popper, + strategy: "absolute", + placement: state.placement + }); + } + var popperOffsets_default = { + name: "popperOffsets", + enabled: true, + phase: "read", + fn: popperOffsets, + data: {} + }; + + // node_modules/@popperjs/core/lib/utils/getAltAxis.js + function getAltAxis(axis) { + return axis === "x" ? "y" : "x"; + } + + // node_modules/@popperjs/core/lib/modifiers/preventOverflow.js + function preventOverflow(_ref) { + var state = _ref.state, options = _ref.options, name = _ref.name; + var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; + var overflow = detectOverflow(state, { + boundary, + rootBoundary, + padding, + altBoundary + }); + var basePlacement = getBasePlacement(state.placement); + var variation = getVariation(state.placement); + var isBasePlacement = !variation; + var mainAxis = getMainAxisFromPlacement(basePlacement); + var altAxis = getAltAxis(mainAxis); + var popperOffsets2 = state.modifiersData.popperOffsets; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, { + placement: state.placement + })) : tetherOffset; + var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? { + mainAxis: tetherOffsetValue, + altAxis: tetherOffsetValue + } : Object.assign({ + mainAxis: 0, + altAxis: 0 + }, tetherOffsetValue); + var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; + var data = { + x: 0, + y: 0 + }; + if (!popperOffsets2) { + return; + } + if (checkMainAxis) { + var _offsetModifierState$; + var mainSide = mainAxis === "y" ? top : left; + var altSide = mainAxis === "y" ? bottom : right; + var len = mainAxis === "y" ? "height" : "width"; + var offset2 = popperOffsets2[mainAxis]; + var min2 = offset2 + overflow[mainSide]; + var max2 = offset2 - overflow[altSide]; + var additive = tether ? -popperRect[len] / 2 : 0; + var minLen = variation === start ? referenceRect[len] : popperRect[len]; + var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; + var arrowElement = state.elements.arrow; + var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { + width: 0, + height: 0 + }; + var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject(); + var arrowPaddingMin = arrowPaddingObject[mainSide]; + var arrowPaddingMax = arrowPaddingObject[altSide]; + var arrowLen = within(0, referenceRect[len], arrowRect[len]); + var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; + var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; + var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); + var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; + var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; + var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset; + var tetherMax = offset2 + maxOffset - offsetModifierValue; + var preventedOffset = within(tether ? min(min2, tetherMin) : min2, offset2, tether ? max(max2, tetherMax) : max2); + popperOffsets2[mainAxis] = preventedOffset; + data[mainAxis] = preventedOffset - offset2; + } + if (checkAltAxis) { + var _offsetModifierState$2; + var _mainSide = mainAxis === "x" ? top : left; + var _altSide = mainAxis === "x" ? bottom : right; + var _offset = popperOffsets2[altAxis]; + var _len = altAxis === "y" ? "height" : "width"; + var _min = _offset + overflow[_mainSide]; + var _max = _offset - overflow[_altSide]; + var isOriginSide = [top, left].indexOf(basePlacement) !== -1; + var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; + var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; + var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; + var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); + popperOffsets2[altAxis] = _preventedOffset; + data[altAxis] = _preventedOffset - _offset; + } + state.modifiersData[name] = data; + } + var preventOverflow_default = { + name: "preventOverflow", + enabled: true, + phase: "main", + fn: preventOverflow, + requiresIfExists: ["offset"] + }; + + // node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js + function getHTMLElementScroll(element) { + return { + scrollLeft: element.scrollLeft, + scrollTop: element.scrollTop + }; + } + + // node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js + function getNodeScroll(node) { + if (node === getWindow(node) || !isHTMLElement(node)) { + return getWindowScroll(node); + } else { + return getHTMLElementScroll(node); + } + } + + // node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js + function isElementScaled(element) { + var rect = element.getBoundingClientRect(); + var scaleX = round(rect.width) / element.offsetWidth || 1; + var scaleY = round(rect.height) / element.offsetHeight || 1; + return scaleX !== 1 || scaleY !== 1; + } + function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { + if (isFixed === void 0) { + isFixed = false; + } + var isOffsetParentAnElement = isHTMLElement(offsetParent); + var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); + var documentElement = getDocumentElement(offsetParent); + var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed); + var scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + var offsets = { + x: 0, + y: 0 + }; + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if (getNodeName(offsetParent) !== "body" || // https://github.com/popperjs/popper-core/issues/1078 + isScrollParent(documentElement)) { + scroll = getNodeScroll(offsetParent); + } + if (isHTMLElement(offsetParent)) { + offsets = getBoundingClientRect(offsetParent, true); + offsets.x += offsetParent.clientLeft; + offsets.y += offsetParent.clientTop; + } else if (documentElement) { + offsets.x = getWindowScrollBarX(documentElement); + } + } + return { + x: rect.left + scroll.scrollLeft - offsets.x, + y: rect.top + scroll.scrollTop - offsets.y, + width: rect.width, + height: rect.height + }; + } + + // node_modules/@popperjs/core/lib/utils/orderModifiers.js + function order(modifiers) { + var map = /* @__PURE__ */ new Map(); + var visited = /* @__PURE__ */ new Set(); + var result = []; + modifiers.forEach(function(modifier) { + map.set(modifier.name, modifier); + }); + function sort(modifier) { + visited.add(modifier.name); + var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); + requires.forEach(function(dep) { + if (!visited.has(dep)) { + var depModifier = map.get(dep); + if (depModifier) { + sort(depModifier); + } + } + }); + result.push(modifier); + } + modifiers.forEach(function(modifier) { + if (!visited.has(modifier.name)) { + sort(modifier); + } + }); + return result; + } + function orderModifiers(modifiers) { + var orderedModifiers = order(modifiers); + return modifierPhases.reduce(function(acc, phase) { + return acc.concat(orderedModifiers.filter(function(modifier) { + return modifier.phase === phase; + })); + }, []); + } + + // node_modules/@popperjs/core/lib/utils/debounce.js + function debounce(fn2) { + var pending; + return function() { + if (!pending) { + pending = new Promise(function(resolve) { + Promise.resolve().then(function() { + pending = void 0; + resolve(fn2()); + }); + }); + } + return pending; + }; + } + + // node_modules/@popperjs/core/lib/utils/mergeByName.js + function mergeByName(modifiers) { + var merged = modifiers.reduce(function(merged2, current) { + var existing = merged2[current.name]; + merged2[current.name] = existing ? Object.assign({}, existing, current, { + options: Object.assign({}, existing.options, current.options), + data: Object.assign({}, existing.data, current.data) + }) : current; + return merged2; + }, {}); + return Object.keys(merged).map(function(key) { + return merged[key]; + }); + } + + // node_modules/@popperjs/core/lib/createPopper.js + var DEFAULT_OPTIONS = { + placement: "bottom", + modifiers: [], + strategy: "absolute" + }; + function areValidElements() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return !args.some(function(element) { + return !(element && typeof element.getBoundingClientRect === "function"); + }); + } + function popperGenerator(generatorOptions) { + if (generatorOptions === void 0) { + generatorOptions = {}; + } + var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions2 = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; + return function createPopper2(reference2, popper2, options) { + if (options === void 0) { + options = defaultOptions2; + } + var state = { + placement: "bottom", + orderedModifiers: [], + options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions2), + modifiersData: {}, + elements: { + reference: reference2, + popper: popper2 + }, + attributes: {}, + styles: {} + }; + var effectCleanupFns = []; + var isDestroyed = false; + var instance = { + state, + setOptions: function setOptions(setOptionsAction) { + var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction; + cleanupModifierEffects(); + state.options = Object.assign({}, defaultOptions2, state.options, options2); + state.scrollParents = { + reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [], + popper: listScrollParents(popper2) + }; + var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers))); + state.orderedModifiers = orderedModifiers.filter(function(m2) { + return m2.enabled; + }); + runModifierEffects(); + return instance.update(); + }, + // Sync update – it will always be executed, even if not necessary. This + // is useful for low frequency updates where sync behavior simplifies the + // logic. + // For high frequency updates (e.g. `resize` and `scroll` events), always + // prefer the async Popper#update method + forceUpdate: function forceUpdate() { + if (isDestroyed) { + return; + } + var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper; + if (!areValidElements(reference3, popper3)) { + return; + } + state.rects = { + reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"), + popper: getLayoutRect(popper3) + }; + state.reset = false; + state.placement = state.options.placement; + state.orderedModifiers.forEach(function(modifier) { + return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); + }); + for (var index = 0; index < state.orderedModifiers.length; index++) { + if (state.reset === true) { + state.reset = false; + index = -1; + continue; + } + var _state$orderedModifie = state.orderedModifiers[index], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; + if (typeof fn2 === "function") { + state = fn2({ + state, + options: _options, + name, + instance + }) || state; + } + } + }, + // Async and optimistically optimized update – it will not be executed if + // not necessary (debounced to run at most once-per-tick) + update: debounce(function() { + return new Promise(function(resolve) { + instance.forceUpdate(); + resolve(state); + }); + }), + destroy: function destroy() { + cleanupModifierEffects(); + isDestroyed = true; + } + }; + if (!areValidElements(reference2, popper2)) { + return instance; + } + instance.setOptions(options).then(function(state2) { + if (!isDestroyed && options.onFirstUpdate) { + options.onFirstUpdate(state2); + } + }); + function runModifierEffects() { + state.orderedModifiers.forEach(function(_ref) { + var name = _ref.name, _ref$options = _ref.options, options2 = _ref$options === void 0 ? {} : _ref$options, effect4 = _ref.effect; + if (typeof effect4 === "function") { + var cleanupFn = effect4({ + state, + name, + instance, + options: options2 + }); + var noopFn = function noopFn2() { + }; + effectCleanupFns.push(cleanupFn || noopFn); + } + }); + } + function cleanupModifierEffects() { + effectCleanupFns.forEach(function(fn2) { + return fn2(); + }); + effectCleanupFns = []; + } + return instance; + }; + } + + // node_modules/@popperjs/core/lib/popper.js + var defaultModifiers = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default, offset_default, flip_default, preventOverflow_default, arrow_default, hide_default]; + var createPopper = /* @__PURE__ */ popperGenerator({ + defaultModifiers + }); + + // node_modules/flowbite/lib/esm/components/dropdown/index.js + var __assign5 = function() { + __assign5 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign5.apply(this, arguments); + }; + var __spreadArray = function(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) + ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + }; + var Default5 = { + placement: "bottom", + triggerType: "click", + offsetSkidding: 0, + offsetDistance: 10, + delay: 300, + ignoreClickOutsideClass: false, + onShow: function() { + }, + onHide: function() { + }, + onToggle: function() { + } + }; + var DefaultInstanceOptions5 = { + id: null, + override: true + }; + var Dropdown = ( + /** @class */ + function() { + function Dropdown2(targetElement, triggerElement, options, instanceOptions) { + if (targetElement === void 0) { + targetElement = null; + } + if (triggerElement === void 0) { + triggerElement = null; + } + if (options === void 0) { + options = Default5; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions5; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : targetElement.id; + this._targetEl = targetElement; + this._triggerEl = triggerElement; + this._options = __assign5(__assign5({}, Default5), options); + this._popperInstance = null; + this._visible = false; + this._initialized = false; + this.init(); + instances_default.addInstance("Dropdown", this, this._instanceId, instanceOptions.override); + } + Dropdown2.prototype.init = function() { + if (this._triggerEl && this._targetEl && !this._initialized) { + this._popperInstance = this._createPopperInstance(); + this._setupEventListeners(); + this._initialized = true; + } + }; + Dropdown2.prototype.destroy = function() { + var _this = this; + var triggerEvents = this._getTriggerEvents(); + if (this._options.triggerType === "click") { + triggerEvents.showEvents.forEach(function(ev) { + _this._triggerEl.removeEventListener(ev, _this._clickHandler); + }); + } + if (this._options.triggerType === "hover") { + triggerEvents.showEvents.forEach(function(ev) { + _this._triggerEl.removeEventListener(ev, _this._hoverShowTriggerElHandler); + _this._targetEl.removeEventListener(ev, _this._hoverShowTargetElHandler); + }); + triggerEvents.hideEvents.forEach(function(ev) { + _this._triggerEl.removeEventListener(ev, _this._hoverHideHandler); + _this._targetEl.removeEventListener(ev, _this._hoverHideHandler); + }); + } + this._popperInstance.destroy(); + this._initialized = false; + }; + Dropdown2.prototype.removeInstance = function() { + instances_default.removeInstance("Dropdown", this._instanceId); + }; + Dropdown2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Dropdown2.prototype._setupEventListeners = function() { + var _this = this; + var triggerEvents = this._getTriggerEvents(); + this._clickHandler = function() { + _this.toggle(); + }; + if (this._options.triggerType === "click") { + triggerEvents.showEvents.forEach(function(ev) { + _this._triggerEl.addEventListener(ev, _this._clickHandler); + }); + } + this._hoverShowTriggerElHandler = function(ev) { + if (ev.type === "click") { + _this.toggle(); + } else { + setTimeout(function() { + _this.show(); + }, _this._options.delay); + } + }; + this._hoverShowTargetElHandler = function() { + _this.show(); + }; + this._hoverHideHandler = function() { + setTimeout(function() { + if (!_this._targetEl.matches(":hover")) { + _this.hide(); + } + }, _this._options.delay); + }; + if (this._options.triggerType === "hover") { + triggerEvents.showEvents.forEach(function(ev) { + _this._triggerEl.addEventListener(ev, _this._hoverShowTriggerElHandler); + _this._targetEl.addEventListener(ev, _this._hoverShowTargetElHandler); + }); + triggerEvents.hideEvents.forEach(function(ev) { + _this._triggerEl.addEventListener(ev, _this._hoverHideHandler); + _this._targetEl.addEventListener(ev, _this._hoverHideHandler); + }); + } + }; + Dropdown2.prototype._createPopperInstance = function() { + return createPopper(this._triggerEl, this._targetEl, { + placement: this._options.placement, + modifiers: [ + { + name: "offset", + options: { + offset: [ + this._options.offsetSkidding, + this._options.offsetDistance + ] + } + } + ] + }); + }; + Dropdown2.prototype._setupClickOutsideListener = function() { + var _this = this; + this._clickOutsideEventListener = function(ev) { + _this._handleClickOutside(ev, _this._targetEl); + }; + document.body.addEventListener("click", this._clickOutsideEventListener, true); + }; + Dropdown2.prototype._removeClickOutsideListener = function() { + document.body.removeEventListener("click", this._clickOutsideEventListener, true); + }; + Dropdown2.prototype._handleClickOutside = function(ev, targetEl) { + var clickedEl = ev.target; + var ignoreClickOutsideClass = this._options.ignoreClickOutsideClass; + var isIgnored = false; + if (ignoreClickOutsideClass) { + var ignoredClickOutsideEls = document.querySelectorAll(".".concat(ignoreClickOutsideClass)); + ignoredClickOutsideEls.forEach(function(el) { + if (el.contains(clickedEl)) { + isIgnored = true; + return; + } + }); + } + if (clickedEl !== targetEl && !targetEl.contains(clickedEl) && !this._triggerEl.contains(clickedEl) && !isIgnored && this.isVisible()) { + this.hide(); + } + }; + Dropdown2.prototype._getTriggerEvents = function() { + switch (this._options.triggerType) { + case "hover": + return { + showEvents: ["mouseenter", "click"], + hideEvents: ["mouseleave"] + }; + case "click": + return { + showEvents: ["click"], + hideEvents: [] + }; + case "none": + return { + showEvents: [], + hideEvents: [] + }; + default: + return { + showEvents: ["click"], + hideEvents: [] + }; + } + }; + Dropdown2.prototype.toggle = function() { + if (this.isVisible()) { + this.hide(); + } else { + this.show(); + } + this._options.onToggle(this); + }; + Dropdown2.prototype.isVisible = function() { + return this._visible; + }; + Dropdown2.prototype.show = function() { + this._targetEl.classList.remove("hidden"); + this._targetEl.classList.add("block"); + this._popperInstance.setOptions(function(options) { + return __assign5(__assign5({}, options), { modifiers: __spreadArray(__spreadArray([], options.modifiers, true), [ + { name: "eventListeners", enabled: true } + ], false) }); + }); + this._setupClickOutsideListener(); + this._popperInstance.update(); + this._visible = true; + this._options.onShow(this); + }; + Dropdown2.prototype.hide = function() { + this._targetEl.classList.remove("block"); + this._targetEl.classList.add("hidden"); + this._popperInstance.setOptions(function(options) { + return __assign5(__assign5({}, options), { modifiers: __spreadArray(__spreadArray([], options.modifiers, true), [ + { name: "eventListeners", enabled: false } + ], false) }); + }); + this._visible = false; + this._removeClickOutsideListener(); + this._options.onHide(this); + }; + Dropdown2.prototype.updateOnShow = function(callback) { + this._options.onShow = callback; + }; + Dropdown2.prototype.updateOnHide = function(callback) { + this._options.onHide = callback; + }; + Dropdown2.prototype.updateOnToggle = function(callback) { + this._options.onToggle = callback; + }; + return Dropdown2; + }() + ); + function initDropdowns() { + document.querySelectorAll("[data-dropdown-toggle]").forEach(function($triggerEl) { + var dropdownId = $triggerEl.getAttribute("data-dropdown-toggle"); + var $dropdownEl = document.getElementById(dropdownId); + if ($dropdownEl) { + var placement = $triggerEl.getAttribute("data-dropdown-placement"); + var offsetSkidding = $triggerEl.getAttribute("data-dropdown-offset-skidding"); + var offsetDistance = $triggerEl.getAttribute("data-dropdown-offset-distance"); + var triggerType = $triggerEl.getAttribute("data-dropdown-trigger"); + var delay = $triggerEl.getAttribute("data-dropdown-delay"); + var ignoreClickOutsideClass = $triggerEl.getAttribute("data-dropdown-ignore-click-outside-class"); + new Dropdown($dropdownEl, $triggerEl, { + placement: placement ? placement : Default5.placement, + triggerType: triggerType ? triggerType : Default5.triggerType, + offsetSkidding: offsetSkidding ? parseInt(offsetSkidding) : Default5.offsetSkidding, + offsetDistance: offsetDistance ? parseInt(offsetDistance) : Default5.offsetDistance, + delay: delay ? parseInt(delay) : Default5.delay, + ignoreClickOutsideClass: ignoreClickOutsideClass ? ignoreClickOutsideClass : Default5.ignoreClickOutsideClass + }); + } else { + console.error('The dropdown element with id "'.concat(dropdownId, '" does not exist. Please check the data-dropdown-toggle attribute.')); + } + }); + } + if (typeof window !== "undefined") { + window.Dropdown = Dropdown; + window.initDropdowns = initDropdowns; + } + + // node_modules/flowbite/lib/esm/components/modal/index.js + var __assign6 = function() { + __assign6 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign6.apply(this, arguments); + }; + var Default6 = { + placement: "center", + backdropClasses: "bg-gray-900/50 dark:bg-gray-900/80 fixed inset-0 z-40", + backdrop: "dynamic", + closable: true, + onHide: function() { + }, + onShow: function() { + }, + onToggle: function() { + } + }; + var DefaultInstanceOptions6 = { + id: null, + override: true + }; + var Modal = ( + /** @class */ + function() { + function Modal2(targetEl, options, instanceOptions) { + if (targetEl === void 0) { + targetEl = null; + } + if (options === void 0) { + options = Default6; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions6; + } + this._eventListenerInstances = []; + this._instanceId = instanceOptions.id ? instanceOptions.id : targetEl.id; + this._targetEl = targetEl; + this._options = __assign6(__assign6({}, Default6), options); + this._isHidden = true; + this._backdropEl = null; + this._initialized = false; + this.init(); + instances_default.addInstance("Modal", this, this._instanceId, instanceOptions.override); + } + Modal2.prototype.init = function() { + var _this = this; + if (this._targetEl && !this._initialized) { + this._getPlacementClasses().map(function(c) { + _this._targetEl.classList.add(c); + }); + this._initialized = true; + } + }; + Modal2.prototype.destroy = function() { + if (this._initialized) { + this.removeAllEventListenerInstances(); + this._destroyBackdropEl(); + this._initialized = false; + } + }; + Modal2.prototype.removeInstance = function() { + instances_default.removeInstance("Modal", this._instanceId); + }; + Modal2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Modal2.prototype._createBackdrop = function() { + var _a; + if (this._isHidden) { + var backdropEl = document.createElement("div"); + backdropEl.setAttribute("modal-backdrop", ""); + (_a = backdropEl.classList).add.apply(_a, this._options.backdropClasses.split(" ")); + document.querySelector("body").append(backdropEl); + this._backdropEl = backdropEl; + } + }; + Modal2.prototype._destroyBackdropEl = function() { + if (!this._isHidden) { + document.querySelector("[modal-backdrop]").remove(); + } + }; + Modal2.prototype._setupModalCloseEventListeners = function() { + var _this = this; + if (this._options.backdrop === "dynamic") { + this._clickOutsideEventListener = function(ev) { + _this._handleOutsideClick(ev.target); + }; + this._targetEl.addEventListener("click", this._clickOutsideEventListener, true); + } + this._keydownEventListener = function(ev) { + if (ev.key === "Escape") { + _this.hide(); + } + }; + document.body.addEventListener("keydown", this._keydownEventListener, true); + }; + Modal2.prototype._removeModalCloseEventListeners = function() { + if (this._options.backdrop === "dynamic") { + this._targetEl.removeEventListener("click", this._clickOutsideEventListener, true); + } + document.body.removeEventListener("keydown", this._keydownEventListener, true); + }; + Modal2.prototype._handleOutsideClick = function(target) { + if (target === this._targetEl || target === this._backdropEl && this.isVisible()) { + this.hide(); + } + }; + Modal2.prototype._getPlacementClasses = function() { + switch (this._options.placement) { + case "top-left": + return ["justify-start", "items-start"]; + case "top-center": + return ["justify-center", "items-start"]; + case "top-right": + return ["justify-end", "items-start"]; + case "center-left": + return ["justify-start", "items-center"]; + case "center": + return ["justify-center", "items-center"]; + case "center-right": + return ["justify-end", "items-center"]; + case "bottom-left": + return ["justify-start", "items-end"]; + case "bottom-center": + return ["justify-center", "items-end"]; + case "bottom-right": + return ["justify-end", "items-end"]; + default: + return ["justify-center", "items-center"]; + } + }; + Modal2.prototype.toggle = function() { + if (this._isHidden) { + this.show(); + } else { + this.hide(); + } + this._options.onToggle(this); + }; + Modal2.prototype.show = function() { + if (this.isHidden) { + this._targetEl.classList.add("flex"); + this._targetEl.classList.remove("hidden"); + this._targetEl.setAttribute("aria-modal", "true"); + this._targetEl.setAttribute("role", "dialog"); + this._targetEl.removeAttribute("aria-hidden"); + this._createBackdrop(); + this._isHidden = false; + if (this._options.closable) { + this._setupModalCloseEventListeners(); + } + document.body.classList.add("overflow-hidden"); + this._options.onShow(this); + } + }; + Modal2.prototype.hide = function() { + if (this.isVisible) { + this._targetEl.classList.add("hidden"); + this._targetEl.classList.remove("flex"); + this._targetEl.setAttribute("aria-hidden", "true"); + this._targetEl.removeAttribute("aria-modal"); + this._targetEl.removeAttribute("role"); + this._destroyBackdropEl(); + this._isHidden = true; + document.body.classList.remove("overflow-hidden"); + if (this._options.closable) { + this._removeModalCloseEventListeners(); + } + this._options.onHide(this); + } + }; + Modal2.prototype.isVisible = function() { + return !this._isHidden; + }; + Modal2.prototype.isHidden = function() { + return this._isHidden; + }; + Modal2.prototype.addEventListenerInstance = function(element, type, handler) { + this._eventListenerInstances.push({ + element, + type, + handler + }); + }; + Modal2.prototype.removeAllEventListenerInstances = function() { + this._eventListenerInstances.map(function(eventListenerInstance) { + eventListenerInstance.element.removeEventListener(eventListenerInstance.type, eventListenerInstance.handler); + }); + this._eventListenerInstances = []; + }; + Modal2.prototype.getAllEventListenerInstances = function() { + return this._eventListenerInstances; + }; + Modal2.prototype.updateOnShow = function(callback) { + this._options.onShow = callback; + }; + Modal2.prototype.updateOnHide = function(callback) { + this._options.onHide = callback; + }; + Modal2.prototype.updateOnToggle = function(callback) { + this._options.onToggle = callback; + }; + return Modal2; + }() + ); + function initModals() { + document.querySelectorAll("[data-modal-target]").forEach(function($triggerEl) { + var modalId = $triggerEl.getAttribute("data-modal-target"); + var $modalEl = document.getElementById(modalId); + if ($modalEl) { + var placement = $modalEl.getAttribute("data-modal-placement"); + var backdrop = $modalEl.getAttribute("data-modal-backdrop"); + new Modal($modalEl, { + placement: placement ? placement : Default6.placement, + backdrop: backdrop ? backdrop : Default6.backdrop + }); + } else { + console.error("Modal with id ".concat(modalId, " does not exist. Are you sure that the data-modal-target attribute points to the correct modal id?.")); + } + }); + document.querySelectorAll("[data-modal-toggle]").forEach(function($triggerEl) { + var modalId = $triggerEl.getAttribute("data-modal-toggle"); + var $modalEl = document.getElementById(modalId); + if ($modalEl) { + var modal_1 = instances_default.getInstance("Modal", modalId); + if (modal_1) { + var toggleModal = function() { + modal_1.toggle(); + }; + $triggerEl.addEventListener("click", toggleModal); + modal_1.addEventListenerInstance($triggerEl, "click", toggleModal); + } else { + console.error("Modal with id ".concat(modalId, " has not been initialized. Please initialize it using the data-modal-target attribute.")); + } + } else { + console.error("Modal with id ".concat(modalId, " does not exist. Are you sure that the data-modal-toggle attribute points to the correct modal id?")); + } + }); + document.querySelectorAll("[data-modal-show]").forEach(function($triggerEl) { + var modalId = $triggerEl.getAttribute("data-modal-show"); + var $modalEl = document.getElementById(modalId); + if ($modalEl) { + var modal_2 = instances_default.getInstance("Modal", modalId); + if (modal_2) { + var showModal = function() { + modal_2.show(); + }; + $triggerEl.addEventListener("click", showModal); + modal_2.addEventListenerInstance($triggerEl, "click", showModal); + } else { + console.error("Modal with id ".concat(modalId, " has not been initialized. Please initialize it using the data-modal-target attribute.")); + } + } else { + console.error("Modal with id ".concat(modalId, " does not exist. Are you sure that the data-modal-show attribute points to the correct modal id?")); + } + }); + document.querySelectorAll("[data-modal-hide]").forEach(function($triggerEl) { + var modalId = $triggerEl.getAttribute("data-modal-hide"); + var $modalEl = document.getElementById(modalId); + if ($modalEl) { + var modal_3 = instances_default.getInstance("Modal", modalId); + if (modal_3) { + var hideModal = function() { + modal_3.hide(); + }; + $triggerEl.addEventListener("click", hideModal); + modal_3.addEventListenerInstance($triggerEl, "click", hideModal); + } else { + console.error("Modal with id ".concat(modalId, " has not been initialized. Please initialize it using the data-modal-target attribute.")); + } + } else { + console.error("Modal with id ".concat(modalId, " does not exist. Are you sure that the data-modal-hide attribute points to the correct modal id?")); + } + }); + } + if (typeof window !== "undefined") { + window.Modal = Modal; + window.initModals = initModals; + } + + // node_modules/flowbite/lib/esm/components/drawer/index.js + var __assign7 = function() { + __assign7 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign7.apply(this, arguments); + }; + var Default7 = { + placement: "left", + bodyScrolling: false, + backdrop: true, + edge: false, + edgeOffset: "bottom-[60px]", + backdropClasses: "bg-gray-900/50 dark:bg-gray-900/80 fixed inset-0 z-30", + onShow: function() { + }, + onHide: function() { + }, + onToggle: function() { + } + }; + var DefaultInstanceOptions7 = { + id: null, + override: true + }; + var Drawer = ( + /** @class */ + function() { + function Drawer2(targetEl, options, instanceOptions) { + if (targetEl === void 0) { + targetEl = null; + } + if (options === void 0) { + options = Default7; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions7; + } + this._eventListenerInstances = []; + this._instanceId = instanceOptions.id ? instanceOptions.id : targetEl.id; + this._targetEl = targetEl; + this._options = __assign7(__assign7({}, Default7), options); + this._visible = false; + this._initialized = false; + this.init(); + instances_default.addInstance("Drawer", this, this._instanceId, instanceOptions.override); + } + Drawer2.prototype.init = function() { + var _this = this; + if (this._targetEl && !this._initialized) { + this._targetEl.setAttribute("aria-hidden", "true"); + this._targetEl.classList.add("transition-transform"); + this._getPlacementClasses(this._options.placement).base.map(function(c) { + _this._targetEl.classList.add(c); + }); + this._handleEscapeKey = function(event) { + if (event.key === "Escape") { + if (_this.isVisible()) { + _this.hide(); + } + } + }; + document.addEventListener("keydown", this._handleEscapeKey); + this._initialized = true; + } + }; + Drawer2.prototype.destroy = function() { + if (this._initialized) { + this.removeAllEventListenerInstances(); + this._destroyBackdropEl(); + document.removeEventListener("keydown", this._handleEscapeKey); + this._initialized = false; + } + }; + Drawer2.prototype.removeInstance = function() { + instances_default.removeInstance("Drawer", this._instanceId); + }; + Drawer2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Drawer2.prototype.hide = function() { + var _this = this; + if (this._options.edge) { + this._getPlacementClasses(this._options.placement + "-edge").active.map(function(c) { + _this._targetEl.classList.remove(c); + }); + this._getPlacementClasses(this._options.placement + "-edge").inactive.map(function(c) { + _this._targetEl.classList.add(c); + }); + } else { + this._getPlacementClasses(this._options.placement).active.map(function(c) { + _this._targetEl.classList.remove(c); + }); + this._getPlacementClasses(this._options.placement).inactive.map(function(c) { + _this._targetEl.classList.add(c); + }); + } + this._targetEl.setAttribute("aria-hidden", "true"); + this._targetEl.removeAttribute("aria-modal"); + this._targetEl.removeAttribute("role"); + if (!this._options.bodyScrolling) { + document.body.classList.remove("overflow-hidden"); + } + if (this._options.backdrop) { + this._destroyBackdropEl(); + } + this._visible = false; + this._options.onHide(this); + }; + Drawer2.prototype.show = function() { + var _this = this; + if (this._options.edge) { + this._getPlacementClasses(this._options.placement + "-edge").active.map(function(c) { + _this._targetEl.classList.add(c); + }); + this._getPlacementClasses(this._options.placement + "-edge").inactive.map(function(c) { + _this._targetEl.classList.remove(c); + }); + } else { + this._getPlacementClasses(this._options.placement).active.map(function(c) { + _this._targetEl.classList.add(c); + }); + this._getPlacementClasses(this._options.placement).inactive.map(function(c) { + _this._targetEl.classList.remove(c); + }); + } + this._targetEl.setAttribute("aria-modal", "true"); + this._targetEl.setAttribute("role", "dialog"); + this._targetEl.removeAttribute("aria-hidden"); + if (!this._options.bodyScrolling) { + document.body.classList.add("overflow-hidden"); + } + if (this._options.backdrop) { + this._createBackdrop(); + } + this._visible = true; + this._options.onShow(this); + }; + Drawer2.prototype.toggle = function() { + if (this.isVisible()) { + this.hide(); + } else { + this.show(); + } + }; + Drawer2.prototype._createBackdrop = function() { + var _a; + var _this = this; + if (!this._visible) { + var backdropEl = document.createElement("div"); + backdropEl.setAttribute("drawer-backdrop", ""); + (_a = backdropEl.classList).add.apply(_a, this._options.backdropClasses.split(" ")); + document.querySelector("body").append(backdropEl); + backdropEl.addEventListener("click", function() { + _this.hide(); + }); + } + }; + Drawer2.prototype._destroyBackdropEl = function() { + if (this._visible && document.querySelector("[drawer-backdrop]") !== null) { + document.querySelector("[drawer-backdrop]").remove(); + } + }; + Drawer2.prototype._getPlacementClasses = function(placement) { + switch (placement) { + case "top": + return { + base: ["top-0", "left-0", "right-0"], + active: ["transform-none"], + inactive: ["-translate-y-full"] + }; + case "right": + return { + base: ["right-0", "top-0"], + active: ["transform-none"], + inactive: ["translate-x-full"] + }; + case "bottom": + return { + base: ["bottom-0", "left-0", "right-0"], + active: ["transform-none"], + inactive: ["translate-y-full"] + }; + case "left": + return { + base: ["left-0", "top-0"], + active: ["transform-none"], + inactive: ["-translate-x-full"] + }; + case "bottom-edge": + return { + base: ["left-0", "top-0"], + active: ["transform-none"], + inactive: ["translate-y-full", this._options.edgeOffset] + }; + default: + return { + base: ["left-0", "top-0"], + active: ["transform-none"], + inactive: ["-translate-x-full"] + }; + } + }; + Drawer2.prototype.isHidden = function() { + return !this._visible; + }; + Drawer2.prototype.isVisible = function() { + return this._visible; + }; + Drawer2.prototype.addEventListenerInstance = function(element, type, handler) { + this._eventListenerInstances.push({ + element, + type, + handler + }); + }; + Drawer2.prototype.removeAllEventListenerInstances = function() { + this._eventListenerInstances.map(function(eventListenerInstance) { + eventListenerInstance.element.removeEventListener(eventListenerInstance.type, eventListenerInstance.handler); + }); + this._eventListenerInstances = []; + }; + Drawer2.prototype.getAllEventListenerInstances = function() { + return this._eventListenerInstances; + }; + Drawer2.prototype.updateOnShow = function(callback) { + this._options.onShow = callback; + }; + Drawer2.prototype.updateOnHide = function(callback) { + this._options.onHide = callback; + }; + Drawer2.prototype.updateOnToggle = function(callback) { + this._options.onToggle = callback; + }; + return Drawer2; + }() + ); + function initDrawers() { + document.querySelectorAll("[data-drawer-target]").forEach(function($triggerEl) { + var drawerId = $triggerEl.getAttribute("data-drawer-target"); + var $drawerEl = document.getElementById(drawerId); + if ($drawerEl) { + var placement = $triggerEl.getAttribute("data-drawer-placement"); + var bodyScrolling = $triggerEl.getAttribute("data-drawer-body-scrolling"); + var backdrop = $triggerEl.getAttribute("data-drawer-backdrop"); + var edge = $triggerEl.getAttribute("data-drawer-edge"); + var edgeOffset = $triggerEl.getAttribute("data-drawer-edge-offset"); + new Drawer($drawerEl, { + placement: placement ? placement : Default7.placement, + bodyScrolling: bodyScrolling ? bodyScrolling === "true" ? true : false : Default7.bodyScrolling, + backdrop: backdrop ? backdrop === "true" ? true : false : Default7.backdrop, + edge: edge ? edge === "true" ? true : false : Default7.edge, + edgeOffset: edgeOffset ? edgeOffset : Default7.edgeOffset + }); + } else { + console.error("Drawer with id ".concat(drawerId, " not found. Are you sure that the data-drawer-target attribute points to the correct drawer id?")); + } + }); + document.querySelectorAll("[data-drawer-toggle]").forEach(function($triggerEl) { + var drawerId = $triggerEl.getAttribute("data-drawer-toggle"); + var $drawerEl = document.getElementById(drawerId); + if ($drawerEl) { + var drawer_1 = instances_default.getInstance("Drawer", drawerId); + if (drawer_1) { + var toggleDrawer = function() { + drawer_1.toggle(); + }; + $triggerEl.addEventListener("click", toggleDrawer); + drawer_1.addEventListenerInstance($triggerEl, "click", toggleDrawer); + } else { + console.error("Drawer with id ".concat(drawerId, " has not been initialized. Please initialize it using the data-drawer-target attribute.")); + } + } else { + console.error("Drawer with id ".concat(drawerId, " not found. Are you sure that the data-drawer-target attribute points to the correct drawer id?")); + } + }); + document.querySelectorAll("[data-drawer-dismiss], [data-drawer-hide]").forEach(function($triggerEl) { + var drawerId = $triggerEl.getAttribute("data-drawer-dismiss") ? $triggerEl.getAttribute("data-drawer-dismiss") : $triggerEl.getAttribute("data-drawer-hide"); + var $drawerEl = document.getElementById(drawerId); + if ($drawerEl) { + var drawer_2 = instances_default.getInstance("Drawer", drawerId); + if (drawer_2) { + var hideDrawer = function() { + drawer_2.hide(); + }; + $triggerEl.addEventListener("click", hideDrawer); + drawer_2.addEventListenerInstance($triggerEl, "click", hideDrawer); + } else { + console.error("Drawer with id ".concat(drawerId, " has not been initialized. Please initialize it using the data-drawer-target attribute.")); + } + } else { + console.error("Drawer with id ".concat(drawerId, " not found. Are you sure that the data-drawer-target attribute points to the correct drawer id")); + } + }); + document.querySelectorAll("[data-drawer-show]").forEach(function($triggerEl) { + var drawerId = $triggerEl.getAttribute("data-drawer-show"); + var $drawerEl = document.getElementById(drawerId); + if ($drawerEl) { + var drawer_3 = instances_default.getInstance("Drawer", drawerId); + if (drawer_3) { + var showDrawer = function() { + drawer_3.show(); + }; + $triggerEl.addEventListener("click", showDrawer); + drawer_3.addEventListenerInstance($triggerEl, "click", showDrawer); + } else { + console.error("Drawer with id ".concat(drawerId, " has not been initialized. Please initialize it using the data-drawer-target attribute.")); + } + } else { + console.error("Drawer with id ".concat(drawerId, " not found. Are you sure that the data-drawer-target attribute points to the correct drawer id?")); + } + }); + } + if (typeof window !== "undefined") { + window.Drawer = Drawer; + window.initDrawers = initDrawers; + } + + // node_modules/flowbite/lib/esm/components/tabs/index.js + var __assign8 = function() { + __assign8 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign8.apply(this, arguments); + }; + var Default8 = { + defaultTabId: null, + activeClasses: "text-blue-600 hover:text-blue-600 dark:text-blue-500 dark:hover:text-blue-500 border-blue-600 dark:border-blue-500", + inactiveClasses: "dark:border-transparent text-gray-500 hover:text-gray-600 dark:text-gray-400 border-gray-100 hover:border-gray-300 dark:border-gray-700 dark:hover:text-gray-300", + onShow: function() { + } + }; + var DefaultInstanceOptions8 = { + id: null, + override: true + }; + var Tabs = ( + /** @class */ + function() { + function Tabs2(tabsEl, items, options, instanceOptions) { + if (tabsEl === void 0) { + tabsEl = null; + } + if (items === void 0) { + items = []; + } + if (options === void 0) { + options = Default8; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions8; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : tabsEl.id; + this._tabsEl = tabsEl; + this._items = items; + this._activeTab = options ? this.getTab(options.defaultTabId) : null; + this._options = __assign8(__assign8({}, Default8), options); + this._initialized = false; + this.init(); + instances_default.addInstance("Tabs", this, this._tabsEl.id, true); + instances_default.addInstance("Tabs", this, this._instanceId, instanceOptions.override); + } + Tabs2.prototype.init = function() { + var _this = this; + if (this._items.length && !this._initialized) { + if (!this._activeTab) { + this.setActiveTab(this._items[0]); + } + this.show(this._activeTab.id, true); + this._items.map(function(tab) { + tab.triggerEl.addEventListener("click", function(event) { + event.preventDefault(); + _this.show(tab.id); + }); + }); + } + }; + Tabs2.prototype.destroy = function() { + if (this._initialized) { + this._initialized = false; + } + }; + Tabs2.prototype.removeInstance = function() { + this.destroy(); + instances_default.removeInstance("Tabs", this._instanceId); + }; + Tabs2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Tabs2.prototype.getActiveTab = function() { + return this._activeTab; + }; + Tabs2.prototype.setActiveTab = function(tab) { + this._activeTab = tab; + }; + Tabs2.prototype.getTab = function(id) { + return this._items.filter(function(t) { + return t.id === id; + })[0]; + }; + Tabs2.prototype.show = function(id, forceShow) { + var _a, _b; + var _this = this; + if (forceShow === void 0) { + forceShow = false; + } + var tab = this.getTab(id); + if (tab === this._activeTab && !forceShow) { + return; + } + this._items.map(function(t) { + var _a2, _b2; + if (t !== tab) { + (_a2 = t.triggerEl.classList).remove.apply(_a2, _this._options.activeClasses.split(" ")); + (_b2 = t.triggerEl.classList).add.apply(_b2, _this._options.inactiveClasses.split(" ")); + t.targetEl.classList.add("hidden"); + t.triggerEl.setAttribute("aria-selected", "false"); + } + }); + (_a = tab.triggerEl.classList).add.apply(_a, this._options.activeClasses.split(" ")); + (_b = tab.triggerEl.classList).remove.apply(_b, this._options.inactiveClasses.split(" ")); + tab.triggerEl.setAttribute("aria-selected", "true"); + tab.targetEl.classList.remove("hidden"); + this.setActiveTab(tab); + this._options.onShow(this, tab); + }; + Tabs2.prototype.updateOnShow = function(callback) { + this._options.onShow = callback; + }; + return Tabs2; + }() + ); + function initTabs() { + document.querySelectorAll("[data-tabs-toggle]").forEach(function($parentEl) { + var tabItems = []; + var activeClasses = $parentEl.getAttribute("data-tabs-active-classes"); + var inactiveClasses = $parentEl.getAttribute("data-tabs-inactive-classes"); + var defaultTabId = null; + $parentEl.querySelectorAll('[role="tab"]').forEach(function($triggerEl) { + var isActive = $triggerEl.getAttribute("aria-selected") === "true"; + var tab = { + id: $triggerEl.getAttribute("data-tabs-target"), + triggerEl: $triggerEl, + targetEl: document.querySelector($triggerEl.getAttribute("data-tabs-target")) + }; + tabItems.push(tab); + if (isActive) { + defaultTabId = tab.id; + } + }); + new Tabs($parentEl, tabItems, { + defaultTabId, + activeClasses: activeClasses ? activeClasses : Default8.activeClasses, + inactiveClasses: inactiveClasses ? inactiveClasses : Default8.inactiveClasses + }); + }); + } + if (typeof window !== "undefined") { + window.Tabs = Tabs; + window.initTabs = initTabs; + } + + // node_modules/flowbite/lib/esm/components/tooltip/index.js + var __assign9 = function() { + __assign9 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign9.apply(this, arguments); + }; + var __spreadArray2 = function(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) + ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + }; + var Default9 = { + placement: "top", + triggerType: "hover", + onShow: function() { + }, + onHide: function() { + }, + onToggle: function() { + } + }; + var DefaultInstanceOptions9 = { + id: null, + override: true + }; + var Tooltip = ( + /** @class */ + function() { + function Tooltip3(targetEl, triggerEl, options, instanceOptions) { + if (targetEl === void 0) { + targetEl = null; + } + if (triggerEl === void 0) { + triggerEl = null; + } + if (options === void 0) { + options = Default9; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions9; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : targetEl.id; + this._targetEl = targetEl; + this._triggerEl = triggerEl; + this._options = __assign9(__assign9({}, Default9), options); + this._popperInstance = null; + this._visible = false; + this._initialized = false; + this.init(); + instances_default.addInstance("Tooltip", this, this._instanceId, instanceOptions.override); + } + Tooltip3.prototype.init = function() { + if (this._triggerEl && this._targetEl && !this._initialized) { + this._setupEventListeners(); + this._popperInstance = this._createPopperInstance(); + this._initialized = true; + } + }; + Tooltip3.prototype.destroy = function() { + var _this = this; + if (this._initialized) { + var triggerEvents = this._getTriggerEvents(); + triggerEvents.showEvents.forEach(function(ev) { + _this._triggerEl.removeEventListener(ev, _this._showHandler); + }); + triggerEvents.hideEvents.forEach(function(ev) { + _this._triggerEl.removeEventListener(ev, _this._hideHandler); + }); + this._removeKeydownListener(); + this._removeClickOutsideListener(); + if (this._popperInstance) { + this._popperInstance.destroy(); + } + this._initialized = false; + } + }; + Tooltip3.prototype.removeInstance = function() { + instances_default.removeInstance("Tooltip", this._instanceId); + }; + Tooltip3.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Tooltip3.prototype._setupEventListeners = function() { + var _this = this; + var triggerEvents = this._getTriggerEvents(); + this._showHandler = function() { + _this.show(); + }; + this._hideHandler = function() { + _this.hide(); + }; + triggerEvents.showEvents.forEach(function(ev) { + _this._triggerEl.addEventListener(ev, _this._showHandler); + }); + triggerEvents.hideEvents.forEach(function(ev) { + _this._triggerEl.addEventListener(ev, _this._hideHandler); + }); + }; + Tooltip3.prototype._createPopperInstance = function() { + return createPopper(this._triggerEl, this._targetEl, { + placement: this._options.placement, + modifiers: [ + { + name: "offset", + options: { + offset: [0, 8] + } + } + ] + }); + }; + Tooltip3.prototype._getTriggerEvents = function() { + switch (this._options.triggerType) { + case "hover": + return { + showEvents: ["mouseenter", "focus"], + hideEvents: ["mouseleave", "blur"] + }; + case "click": + return { + showEvents: ["click", "focus"], + hideEvents: ["focusout", "blur"] + }; + case "none": + return { + showEvents: [], + hideEvents: [] + }; + default: + return { + showEvents: ["mouseenter", "focus"], + hideEvents: ["mouseleave", "blur"] + }; + } + }; + Tooltip3.prototype._setupKeydownListener = function() { + var _this = this; + this._keydownEventListener = function(ev) { + if (ev.key === "Escape") { + _this.hide(); + } + }; + document.body.addEventListener("keydown", this._keydownEventListener, true); + }; + Tooltip3.prototype._removeKeydownListener = function() { + document.body.removeEventListener("keydown", this._keydownEventListener, true); + }; + Tooltip3.prototype._setupClickOutsideListener = function() { + var _this = this; + this._clickOutsideEventListener = function(ev) { + _this._handleClickOutside(ev, _this._targetEl); + }; + document.body.addEventListener("click", this._clickOutsideEventListener, true); + }; + Tooltip3.prototype._removeClickOutsideListener = function() { + document.body.removeEventListener("click", this._clickOutsideEventListener, true); + }; + Tooltip3.prototype._handleClickOutside = function(ev, targetEl) { + var clickedEl = ev.target; + if (clickedEl !== targetEl && !targetEl.contains(clickedEl) && !this._triggerEl.contains(clickedEl) && this.isVisible()) { + this.hide(); + } + }; + Tooltip3.prototype.isVisible = function() { + return this._visible; + }; + Tooltip3.prototype.toggle = function() { + if (this.isVisible()) { + this.hide(); + } else { + this.show(); + } + }; + Tooltip3.prototype.show = function() { + this._targetEl.classList.remove("opacity-0", "invisible"); + this._targetEl.classList.add("opacity-100", "visible"); + this._popperInstance.setOptions(function(options) { + return __assign9(__assign9({}, options), { modifiers: __spreadArray2(__spreadArray2([], options.modifiers, true), [ + { name: "eventListeners", enabled: true } + ], false) }); + }); + this._setupClickOutsideListener(); + this._setupKeydownListener(); + this._popperInstance.update(); + this._visible = true; + this._options.onShow(this); + }; + Tooltip3.prototype.hide = function() { + this._targetEl.classList.remove("opacity-100", "visible"); + this._targetEl.classList.add("opacity-0", "invisible"); + this._popperInstance.setOptions(function(options) { + return __assign9(__assign9({}, options), { modifiers: __spreadArray2(__spreadArray2([], options.modifiers, true), [ + { name: "eventListeners", enabled: false } + ], false) }); + }); + this._removeClickOutsideListener(); + this._removeKeydownListener(); + this._visible = false; + this._options.onHide(this); + }; + Tooltip3.prototype.updateOnShow = function(callback) { + this._options.onShow = callback; + }; + Tooltip3.prototype.updateOnHide = function(callback) { + this._options.onHide = callback; + }; + Tooltip3.prototype.updateOnToggle = function(callback) { + this._options.onToggle = callback; + }; + return Tooltip3; + }() + ); + function initTooltips() { + document.querySelectorAll("[data-tooltip-target]").forEach(function($triggerEl) { + var tooltipId = $triggerEl.getAttribute("data-tooltip-target"); + var $tooltipEl = document.getElementById(tooltipId); + if ($tooltipEl) { + var triggerType = $triggerEl.getAttribute("data-tooltip-trigger"); + var placement = $triggerEl.getAttribute("data-tooltip-placement"); + new Tooltip($tooltipEl, $triggerEl, { + placement: placement ? placement : Default9.placement, + triggerType: triggerType ? triggerType : Default9.triggerType + }); + } else { + console.error('The tooltip element with id "'.concat(tooltipId, '" does not exist. Please check the data-tooltip-target attribute.')); + } + }); + } + if (typeof window !== "undefined") { + window.Tooltip = Tooltip; + window.initTooltips = initTooltips; + } + + // node_modules/flowbite/lib/esm/components/popover/index.js + var __assign10 = function() { + __assign10 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign10.apply(this, arguments); + }; + var __spreadArray3 = function(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) + ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + }; + var Default10 = { + placement: "top", + offset: 10, + triggerType: "hover", + onShow: function() { + }, + onHide: function() { + }, + onToggle: function() { + } + }; + var DefaultInstanceOptions10 = { + id: null, + override: true + }; + var Popover = ( + /** @class */ + function() { + function Popover2(targetEl, triggerEl, options, instanceOptions) { + if (targetEl === void 0) { + targetEl = null; + } + if (triggerEl === void 0) { + triggerEl = null; + } + if (options === void 0) { + options = Default10; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions10; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : targetEl.id; + this._targetEl = targetEl; + this._triggerEl = triggerEl; + this._options = __assign10(__assign10({}, Default10), options); + this._popperInstance = null; + this._visible = false; + this._initialized = false; + this.init(); + instances_default.addInstance("Popover", this, instanceOptions.id ? instanceOptions.id : this._targetEl.id, instanceOptions.override); + } + Popover2.prototype.init = function() { + if (this._triggerEl && this._targetEl && !this._initialized) { + this._setupEventListeners(); + this._popperInstance = this._createPopperInstance(); + this._initialized = true; + } + }; + Popover2.prototype.destroy = function() { + var _this = this; + if (this._initialized) { + var triggerEvents = this._getTriggerEvents(); + triggerEvents.showEvents.forEach(function(ev) { + _this._triggerEl.removeEventListener(ev, _this._showHandler); + _this._targetEl.removeEventListener(ev, _this._showHandler); + }); + triggerEvents.hideEvents.forEach(function(ev) { + _this._triggerEl.removeEventListener(ev, _this._hideHandler); + _this._targetEl.removeEventListener(ev, _this._hideHandler); + }); + this._removeKeydownListener(); + this._removeClickOutsideListener(); + if (this._popperInstance) { + this._popperInstance.destroy(); + } + this._initialized = false; + } + }; + Popover2.prototype.removeInstance = function() { + instances_default.removeInstance("Popover", this._instanceId); + }; + Popover2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Popover2.prototype._setupEventListeners = function() { + var _this = this; + var triggerEvents = this._getTriggerEvents(); + this._showHandler = function() { + _this.show(); + }; + this._hideHandler = function() { + setTimeout(function() { + if (!_this._targetEl.matches(":hover")) { + _this.hide(); + } + }, 100); + }; + triggerEvents.showEvents.forEach(function(ev) { + _this._triggerEl.addEventListener(ev, _this._showHandler); + _this._targetEl.addEventListener(ev, _this._showHandler); + }); + triggerEvents.hideEvents.forEach(function(ev) { + _this._triggerEl.addEventListener(ev, _this._hideHandler); + _this._targetEl.addEventListener(ev, _this._hideHandler); + }); + }; + Popover2.prototype._createPopperInstance = function() { + return createPopper(this._triggerEl, this._targetEl, { + placement: this._options.placement, + modifiers: [ + { + name: "offset", + options: { + offset: [0, this._options.offset] + } + } + ] + }); + }; + Popover2.prototype._getTriggerEvents = function() { + switch (this._options.triggerType) { + case "hover": + return { + showEvents: ["mouseenter", "focus"], + hideEvents: ["mouseleave", "blur"] + }; + case "click": + return { + showEvents: ["click", "focus"], + hideEvents: ["focusout", "blur"] + }; + case "none": + return { + showEvents: [], + hideEvents: [] + }; + default: + return { + showEvents: ["mouseenter", "focus"], + hideEvents: ["mouseleave", "blur"] + }; + } + }; + Popover2.prototype._setupKeydownListener = function() { + var _this = this; + this._keydownEventListener = function(ev) { + if (ev.key === "Escape") { + _this.hide(); + } + }; + document.body.addEventListener("keydown", this._keydownEventListener, true); + }; + Popover2.prototype._removeKeydownListener = function() { + document.body.removeEventListener("keydown", this._keydownEventListener, true); + }; + Popover2.prototype._setupClickOutsideListener = function() { + var _this = this; + this._clickOutsideEventListener = function(ev) { + _this._handleClickOutside(ev, _this._targetEl); + }; + document.body.addEventListener("click", this._clickOutsideEventListener, true); + }; + Popover2.prototype._removeClickOutsideListener = function() { + document.body.removeEventListener("click", this._clickOutsideEventListener, true); + }; + Popover2.prototype._handleClickOutside = function(ev, targetEl) { + var clickedEl = ev.target; + if (clickedEl !== targetEl && !targetEl.contains(clickedEl) && !this._triggerEl.contains(clickedEl) && this.isVisible()) { + this.hide(); + } + }; + Popover2.prototype.isVisible = function() { + return this._visible; + }; + Popover2.prototype.toggle = function() { + if (this.isVisible()) { + this.hide(); + } else { + this.show(); + } + this._options.onToggle(this); + }; + Popover2.prototype.show = function() { + this._targetEl.classList.remove("opacity-0", "invisible"); + this._targetEl.classList.add("opacity-100", "visible"); + this._popperInstance.setOptions(function(options) { + return __assign10(__assign10({}, options), { modifiers: __spreadArray3(__spreadArray3([], options.modifiers, true), [ + { name: "eventListeners", enabled: true } + ], false) }); + }); + this._setupClickOutsideListener(); + this._setupKeydownListener(); + this._popperInstance.update(); + this._visible = true; + this._options.onShow(this); + }; + Popover2.prototype.hide = function() { + this._targetEl.classList.remove("opacity-100", "visible"); + this._targetEl.classList.add("opacity-0", "invisible"); + this._popperInstance.setOptions(function(options) { + return __assign10(__assign10({}, options), { modifiers: __spreadArray3(__spreadArray3([], options.modifiers, true), [ + { name: "eventListeners", enabled: false } + ], false) }); + }); + this._removeClickOutsideListener(); + this._removeKeydownListener(); + this._visible = false; + this._options.onHide(this); + }; + Popover2.prototype.updateOnShow = function(callback) { + this._options.onShow = callback; + }; + Popover2.prototype.updateOnHide = function(callback) { + this._options.onHide = callback; + }; + Popover2.prototype.updateOnToggle = function(callback) { + this._options.onToggle = callback; + }; + return Popover2; + }() + ); + function initPopovers() { + document.querySelectorAll("[data-popover-target]").forEach(function($triggerEl) { + var popoverID = $triggerEl.getAttribute("data-popover-target"); + var $popoverEl = document.getElementById(popoverID); + if ($popoverEl) { + var triggerType = $triggerEl.getAttribute("data-popover-trigger"); + var placement = $triggerEl.getAttribute("data-popover-placement"); + var offset2 = $triggerEl.getAttribute("data-popover-offset"); + new Popover($popoverEl, $triggerEl, { + placement: placement ? placement : Default10.placement, + offset: offset2 ? parseInt(offset2) : Default10.offset, + triggerType: triggerType ? triggerType : Default10.triggerType + }); + } else { + console.error('The popover element with id "'.concat(popoverID, '" does not exist. Please check the data-popover-target attribute.')); + } + }); + } + if (typeof window !== "undefined") { + window.Popover = Popover; + window.initPopovers = initPopovers; + } + + // node_modules/flowbite/lib/esm/components/dial/index.js + var __assign11 = function() { + __assign11 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign11.apply(this, arguments); + }; + var Default11 = { + triggerType: "hover", + onShow: function() { + }, + onHide: function() { + }, + onToggle: function() { + } + }; + var DefaultInstanceOptions11 = { + id: null, + override: true + }; + var Dial = ( + /** @class */ + function() { + function Dial2(parentEl, triggerEl, targetEl, options, instanceOptions) { + if (parentEl === void 0) { + parentEl = null; + } + if (triggerEl === void 0) { + triggerEl = null; + } + if (targetEl === void 0) { + targetEl = null; + } + if (options === void 0) { + options = Default11; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions11; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : targetEl.id; + this._parentEl = parentEl; + this._triggerEl = triggerEl; + this._targetEl = targetEl; + this._options = __assign11(__assign11({}, Default11), options); + this._visible = false; + this._initialized = false; + this.init(); + instances_default.addInstance("Dial", this, this._instanceId, instanceOptions.override); + } + Dial2.prototype.init = function() { + var _this = this; + if (this._triggerEl && this._targetEl && !this._initialized) { + var triggerEventTypes = this._getTriggerEventTypes(this._options.triggerType); + this._showEventHandler = function() { + _this.show(); + }; + triggerEventTypes.showEvents.forEach(function(ev) { + _this._triggerEl.addEventListener(ev, _this._showEventHandler); + _this._targetEl.addEventListener(ev, _this._showEventHandler); + }); + this._hideEventHandler = function() { + if (!_this._parentEl.matches(":hover")) { + _this.hide(); + } + }; + triggerEventTypes.hideEvents.forEach(function(ev) { + _this._parentEl.addEventListener(ev, _this._hideEventHandler); + }); + this._initialized = true; + } + }; + Dial2.prototype.destroy = function() { + var _this = this; + if (this._initialized) { + var triggerEventTypes = this._getTriggerEventTypes(this._options.triggerType); + triggerEventTypes.showEvents.forEach(function(ev) { + _this._triggerEl.removeEventListener(ev, _this._showEventHandler); + _this._targetEl.removeEventListener(ev, _this._showEventHandler); + }); + triggerEventTypes.hideEvents.forEach(function(ev) { + _this._parentEl.removeEventListener(ev, _this._hideEventHandler); + }); + this._initialized = false; + } + }; + Dial2.prototype.removeInstance = function() { + instances_default.removeInstance("Dial", this._instanceId); + }; + Dial2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + Dial2.prototype.hide = function() { + this._targetEl.classList.add("hidden"); + if (this._triggerEl) { + this._triggerEl.setAttribute("aria-expanded", "false"); + } + this._visible = false; + this._options.onHide(this); + }; + Dial2.prototype.show = function() { + this._targetEl.classList.remove("hidden"); + if (this._triggerEl) { + this._triggerEl.setAttribute("aria-expanded", "true"); + } + this._visible = true; + this._options.onShow(this); + }; + Dial2.prototype.toggle = function() { + if (this._visible) { + this.hide(); + } else { + this.show(); + } + }; + Dial2.prototype.isHidden = function() { + return !this._visible; + }; + Dial2.prototype.isVisible = function() { + return this._visible; + }; + Dial2.prototype._getTriggerEventTypes = function(triggerType) { + switch (triggerType) { + case "hover": + return { + showEvents: ["mouseenter", "focus"], + hideEvents: ["mouseleave", "blur"] + }; + case "click": + return { + showEvents: ["click", "focus"], + hideEvents: ["focusout", "blur"] + }; + case "none": + return { + showEvents: [], + hideEvents: [] + }; + default: + return { + showEvents: ["mouseenter", "focus"], + hideEvents: ["mouseleave", "blur"] + }; + } + }; + Dial2.prototype.updateOnShow = function(callback) { + this._options.onShow = callback; + }; + Dial2.prototype.updateOnHide = function(callback) { + this._options.onHide = callback; + }; + Dial2.prototype.updateOnToggle = function(callback) { + this._options.onToggle = callback; + }; + return Dial2; + }() + ); + function initDials() { + document.querySelectorAll("[data-dial-init]").forEach(function($parentEl) { + var $triggerEl = $parentEl.querySelector("[data-dial-toggle]"); + if ($triggerEl) { + var dialId = $triggerEl.getAttribute("data-dial-toggle"); + var $dialEl = document.getElementById(dialId); + if ($dialEl) { + var triggerType = $triggerEl.getAttribute("data-dial-trigger"); + new Dial($parentEl, $triggerEl, $dialEl, { + triggerType: triggerType ? triggerType : Default11.triggerType + }); + } else { + console.error("Dial with id ".concat(dialId, " does not exist. Are you sure that the data-dial-toggle attribute points to the correct modal id?")); + } + } else { + console.error("Dial with id ".concat($parentEl.id, " does not have a trigger element. Are you sure that the data-dial-toggle attribute exists?")); + } + }); + } + if (typeof window !== "undefined") { + window.Dial = Dial; + window.initDials = initDials; + } + + // node_modules/flowbite/lib/esm/components/input-counter/index.js + var __assign12 = function() { + __assign12 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign12.apply(this, arguments); + }; + var Default12 = { + minValue: null, + maxValue: null, + onIncrement: function() { + }, + onDecrement: function() { + } + }; + var DefaultInstanceOptions12 = { + id: null, + override: true + }; + var InputCounter = ( + /** @class */ + function() { + function InputCounter2(targetEl, incrementEl, decrementEl, options, instanceOptions) { + if (targetEl === void 0) { + targetEl = null; + } + if (incrementEl === void 0) { + incrementEl = null; + } + if (decrementEl === void 0) { + decrementEl = null; + } + if (options === void 0) { + options = Default12; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions12; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : targetEl.id; + this._targetEl = targetEl; + this._incrementEl = incrementEl; + this._decrementEl = decrementEl; + this._options = __assign12(__assign12({}, Default12), options); + this._initialized = false; + this.init(); + instances_default.addInstance("InputCounter", this, this._instanceId, instanceOptions.override); + } + InputCounter2.prototype.init = function() { + var _this = this; + if (this._targetEl && !this._initialized) { + this._inputHandler = function(event) { + { + var target = event.target; + if (!/^\d*$/.test(target.value)) { + target.value = target.value.replace(/[^\d]/g, ""); + } + if (_this._options.maxValue !== null && parseInt(target.value) > _this._options.maxValue) { + target.value = _this._options.maxValue.toString(); + } + if (_this._options.minValue !== null && parseInt(target.value) < _this._options.minValue) { + target.value = _this._options.minValue.toString(); + } + } + }; + this._incrementClickHandler = function() { + _this.increment(); + }; + this._decrementClickHandler = function() { + _this.decrement(); + }; + this._targetEl.addEventListener("input", this._inputHandler); + if (this._incrementEl) { + this._incrementEl.addEventListener("click", this._incrementClickHandler); + } + if (this._decrementEl) { + this._decrementEl.addEventListener("click", this._decrementClickHandler); + } + this._initialized = true; + } + }; + InputCounter2.prototype.destroy = function() { + if (this._targetEl && this._initialized) { + this._targetEl.removeEventListener("input", this._inputHandler); + if (this._incrementEl) { + this._incrementEl.removeEventListener("click", this._incrementClickHandler); + } + if (this._decrementEl) { + this._decrementEl.removeEventListener("click", this._decrementClickHandler); + } + this._initialized = false; + } + }; + InputCounter2.prototype.removeInstance = function() { + instances_default.removeInstance("InputCounter", this._instanceId); + }; + InputCounter2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + InputCounter2.prototype.getCurrentValue = function() { + return parseInt(this._targetEl.value) || 0; + }; + InputCounter2.prototype.increment = function() { + if (this._options.maxValue !== null && this.getCurrentValue() >= this._options.maxValue) { + return; + } + this._targetEl.value = (this.getCurrentValue() + 1).toString(); + this._options.onIncrement(this); + }; + InputCounter2.prototype.decrement = function() { + if (this._options.minValue !== null && this.getCurrentValue() <= this._options.minValue) { + return; + } + this._targetEl.value = (this.getCurrentValue() - 1).toString(); + this._options.onDecrement(this); + }; + InputCounter2.prototype.updateOnIncrement = function(callback) { + this._options.onIncrement = callback; + }; + InputCounter2.prototype.updateOnDecrement = function(callback) { + this._options.onDecrement = callback; + }; + return InputCounter2; + }() + ); + function initInputCounters() { + document.querySelectorAll("[data-input-counter]").forEach(function($targetEl) { + var targetId = $targetEl.id; + var $incrementEl = document.querySelector('[data-input-counter-increment="' + targetId + '"]'); + var $decrementEl = document.querySelector('[data-input-counter-decrement="' + targetId + '"]'); + var minValue = $targetEl.getAttribute("data-input-counter-min"); + var maxValue = $targetEl.getAttribute("data-input-counter-max"); + if ($targetEl) { + if (!instances_default.instanceExists("InputCounter", $targetEl.getAttribute("id"))) { + new InputCounter($targetEl, $incrementEl ? $incrementEl : null, $decrementEl ? $decrementEl : null, { + minValue: minValue ? parseInt(minValue) : null, + maxValue: maxValue ? parseInt(maxValue) : null + }); + } + } else { + console.error('The target element with id "'.concat(targetId, '" does not exist. Please check the data-input-counter attribute.')); + } + }); + } + if (typeof window !== "undefined") { + window.InputCounter = InputCounter; + window.initInputCounters = initInputCounters; + } + + // node_modules/flowbite/lib/esm/components/clipboard/index.js + var __assign13 = function() { + __assign13 = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign13.apply(this, arguments); + }; + var Default13 = { + htmlEntities: false, + contentType: "input", + onCopy: function() { + } + }; + var DefaultInstanceOptions13 = { + id: null, + override: true + }; + var CopyClipboard = ( + /** @class */ + function() { + function CopyClipboard2(triggerEl, targetEl, options, instanceOptions) { + if (triggerEl === void 0) { + triggerEl = null; + } + if (targetEl === void 0) { + targetEl = null; + } + if (options === void 0) { + options = Default13; + } + if (instanceOptions === void 0) { + instanceOptions = DefaultInstanceOptions13; + } + this._instanceId = instanceOptions.id ? instanceOptions.id : targetEl.id; + this._triggerEl = triggerEl; + this._targetEl = targetEl; + this._options = __assign13(__assign13({}, Default13), options); + this._initialized = false; + this.init(); + instances_default.addInstance("CopyClipboard", this, this._instanceId, instanceOptions.override); + } + CopyClipboard2.prototype.init = function() { + var _this = this; + if (this._targetEl && this._triggerEl && !this._initialized) { + this._triggerElClickHandler = function() { + _this.copy(); + }; + if (this._triggerEl) { + this._triggerEl.addEventListener("click", this._triggerElClickHandler); + } + this._initialized = true; + } + }; + CopyClipboard2.prototype.destroy = function() { + if (this._triggerEl && this._targetEl && this._initialized) { + if (this._triggerEl) { + this._triggerEl.removeEventListener("click", this._triggerElClickHandler); + } + this._initialized = false; + } + }; + CopyClipboard2.prototype.removeInstance = function() { + instances_default.removeInstance("CopyClipboard", this._instanceId); + }; + CopyClipboard2.prototype.destroyAndRemoveInstance = function() { + this.destroy(); + this.removeInstance(); + }; + CopyClipboard2.prototype.getTargetValue = function() { + if (this._options.contentType === "input") { + return this._targetEl.value; + } + if (this._options.contentType === "innerHTML") { + return this._targetEl.innerHTML; + } + if (this._options.contentType === "textContent") { + return this._targetEl.textContent.replace(/\s+/g, " ").trim(); + } + }; + CopyClipboard2.prototype.copy = function() { + var textToCopy = this.getTargetValue(); + if (this._options.htmlEntities) { + textToCopy = this.decodeHTML(textToCopy); + } + var tempTextArea = document.createElement("textarea"); + tempTextArea.value = textToCopy; + document.body.appendChild(tempTextArea); + tempTextArea.select(); + document.execCommand("copy"); + document.body.removeChild(tempTextArea); + this._options.onCopy(this); + return textToCopy; + }; + CopyClipboard2.prototype.decodeHTML = function(html) { + var textarea = document.createElement("textarea"); + textarea.innerHTML = html; + return textarea.textContent; + }; + CopyClipboard2.prototype.updateOnCopyCallback = function(callback) { + this._options.onCopy = callback; + }; + return CopyClipboard2; + }() + ); + function initCopyClipboards() { + document.querySelectorAll("[data-copy-to-clipboard-target]").forEach(function($triggerEl) { + var targetId = $triggerEl.getAttribute("data-copy-to-clipboard-target"); + var $targetEl = document.getElementById(targetId); + var contentType = $triggerEl.getAttribute("data-copy-to-clipboard-content-type"); + var htmlEntities = $triggerEl.getAttribute("data-copy-to-clipboard-html-entities"); + if ($targetEl) { + if (!instances_default.instanceExists("CopyClipboard", $targetEl.getAttribute("id"))) { + new CopyClipboard($triggerEl, $targetEl, { + htmlEntities: htmlEntities && htmlEntities === "true" ? true : Default13.htmlEntities, + contentType: contentType ? contentType : Default13.contentType + }); + } + } else { + console.error('The target element with id "'.concat(targetId, '" does not exist. Please check the data-copy-to-clipboard-target attribute.')); + } + }); + } + if (typeof window !== "undefined") { + window.CopyClipboard = CopyClipboard; + window.initClipboards = initCopyClipboards; + } + + // node_modules/flowbite/lib/esm/components/index.js + function initFlowbite() { + initAccordions(); + initCollapses(); + initCarousels(); + initDismisses(); + initDropdowns(); + initModals(); + initDrawers(); + initTabs(); + initTooltips(); + initPopovers(); + initDials(); + initInputCounters(); + initCopyClipboards(); + } + if (typeof window !== "undefined") { + window.initFlowbite = initFlowbite; + } + + // node_modules/flowbite/lib/esm/index.js + var events = new events_default("load", [ + initAccordions, + initCollapses, + initCarousels, + initDismisses, + initDropdowns, + initModals, + initDrawers, + initTabs, + initTooltips, + initPopovers, + initDials, + initInputCounters, + initCopyClipboards + ]); + events.init(); + + // node_modules/@activeadmin/activeadmin/node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js + var linkClickSelector = "a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]"; + var buttonClickSelector = { + selector: "button[data-remote]:not([form]), button[data-confirm]:not([form])", + exclude: "form button" + }; + var inputChangeSelector = "select[data-remote], input[data-remote], textarea[data-remote]"; + var formSubmitSelector = "form:not([data-turbo=true])"; + var formInputClickSelector = "form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])"; + var formDisableSelector = "input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled"; + var formEnableSelector = "input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled"; + var fileInputSelector = "input[name][type=file]:not([disabled])"; + var linkDisableSelector = "a[data-disable-with], a[data-disable]"; + var buttonDisableSelector = "button[data-remote][data-disable-with], button[data-remote][data-disable]"; + var nonce = null; + var loadCSPNonce = () => { + const metaTag = document.querySelector("meta[name=csp-nonce]"); + return nonce = metaTag && metaTag.content; + }; + var cspNonce = () => nonce || loadCSPNonce(); + var m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector; + var matches = function(element, selector) { + if (selector.exclude) { + return m.call(element, selector.selector) && !m.call(element, selector.exclude); + } else { + return m.call(element, selector); + } + }; + var EXPANDO = "_ujsData"; + var getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : void 0; + var setData = function(element, key, value) { + if (!element[EXPANDO]) { + element[EXPANDO] = {}; + } + return element[EXPANDO][key] = value; + }; + var $ = (selector) => Array.prototype.slice.call(document.querySelectorAll(selector)); + var isContentEditable = function(element) { + var isEditable = false; + do { + if (element.isContentEditable) { + isEditable = true; + break; + } + element = element.parentElement; + } while (element); + return isEditable; + }; + var csrfToken = () => { + const meta = document.querySelector("meta[name=csrf-token]"); + return meta && meta.content; + }; + var csrfParam = () => { + const meta = document.querySelector("meta[name=csrf-param]"); + return meta && meta.content; + }; + var CSRFProtection = (xhr) => { + const token = csrfToken(); + if (token) { + return xhr.setRequestHeader("X-CSRF-Token", token); + } + }; + var refreshCSRFTokens = () => { + const token = csrfToken(); + const param = csrfParam(); + if (token && param) { + return $('form input[name="' + param + '"]').forEach((input) => input.value = token); + } + }; + var AcceptHeaders = { + "*": "*/*", + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript", + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }; + var ajax = (options) => { + options = prepareOptions(options); + var xhr = createXHR(options, function() { + const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader("Content-Type")); + if (Math.floor(xhr.status / 100) === 2) { + if (typeof options.success === "function") { + options.success(response, xhr.statusText, xhr); + } + } else { + if (typeof options.error === "function") { + options.error(response, xhr.statusText, xhr); + } + } + return typeof options.complete === "function" ? options.complete(xhr, xhr.statusText) : void 0; + }); + if (options.beforeSend && !options.beforeSend(xhr, options)) { + return false; + } + if (xhr.readyState === XMLHttpRequest.OPENED) { + return xhr.send(options.data); + } + }; + var prepareOptions = function(options) { + options.url = options.url || location.href; + options.type = options.type.toUpperCase(); + if (options.type === "GET" && options.data) { + if (options.url.indexOf("?") < 0) { + options.url += "?" + options.data; + } else { + options.url += "&" + options.data; + } + } + if (!(options.dataType in AcceptHeaders)) { + options.dataType = "*"; + } + options.accept = AcceptHeaders[options.dataType]; + if (options.dataType !== "*") { + options.accept += ", */*; q=0.01"; + } + return options; + }; + var createXHR = function(options, done) { + const xhr = new XMLHttpRequest(); + xhr.open(options.type, options.url, true); + xhr.setRequestHeader("Accept", options.accept); + if (typeof options.data === "string") { + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + } + if (!options.crossDomain) { + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + CSRFProtection(xhr); + } + xhr.withCredentials = !!options.withCredentials; + xhr.onreadystatechange = function() { + if (xhr.readyState === XMLHttpRequest.DONE) { + return done(xhr); + } + }; + return xhr; + }; + var processResponse = function(response, type) { + if (typeof response === "string" && typeof type === "string") { + if (type.match(/\bjson\b/)) { + try { + response = JSON.parse(response); + } catch (error) { + } + } else if (type.match(/\b(?:java|ecma)script\b/)) { + const script = document.createElement("script"); + script.setAttribute("nonce", cspNonce()); + script.text = response; + document.head.appendChild(script).parentNode.removeChild(script); + } else if (type.match(/\b(xml|html|svg)\b/)) { + const parser = new DOMParser(); + type = type.replace(/;.+/, ""); + try { + response = parser.parseFromString(response, type); + } catch (error1) { + } + } + } + return response; + }; + var href = (element) => element.href; + var isCrossDomain = function(url) { + const originAnchor = document.createElement("a"); + originAnchor.href = location.href; + const urlAnchor = document.createElement("a"); + try { + urlAnchor.href = url; + return !((!urlAnchor.protocol || urlAnchor.protocol === ":") && !urlAnchor.host || originAnchor.protocol + "//" + originAnchor.host === urlAnchor.protocol + "//" + urlAnchor.host); + } catch (e) { + return true; + } + }; + var preventDefault; + var { CustomEvent } = window; + if (typeof CustomEvent !== "function") { + CustomEvent = function(event, params) { + const evt = document.createEvent("CustomEvent"); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + return evt; + }; + CustomEvent.prototype = window.Event.prototype; + ({ preventDefault } = CustomEvent.prototype); + CustomEvent.prototype.preventDefault = function() { + const result = preventDefault.call(this); + if (this.cancelable && !this.defaultPrevented) { + Object.defineProperty(this, "defaultPrevented", { + get() { + return true; + } + }); + } + return result; + }; + } + var fire = (obj, name, data) => { + const event = new CustomEvent(name, { + bubbles: true, + cancelable: true, + detail: data + }); + obj.dispatchEvent(event); + return !event.defaultPrevented; + }; + var stopEverything = (e) => { + fire(e.target, "ujs:everythingStopped"); + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + }; + var delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, function(e) { + let { target } = e; + while (!!(target instanceof Element) && !matches(target, selector)) { + target = target.parentNode; + } + if (target instanceof Element && handler.call(target, e) === false) { + e.preventDefault(); + e.stopPropagation(); + } + }); + var toArray = (e) => Array.prototype.slice.call(e); + var serializeElement = (element, additionalParam) => { + let inputs = [element]; + if (matches(element, "form")) { + inputs = toArray(element.elements); + } + const params = []; + inputs.forEach(function(input) { + if (!input.name || input.disabled) { + return; + } + if (matches(input, "fieldset[disabled] *")) { + return; + } + if (matches(input, "select")) { + toArray(input.options).forEach(function(option) { + if (option.selected) { + params.push({ + name: input.name, + value: option.value + }); + } + }); + } else if (input.checked || ["radio", "checkbox", "submit"].indexOf(input.type) === -1) { + params.push({ + name: input.name, + value: input.value + }); + } + }); + if (additionalParam) { + params.push(additionalParam); + } + return params.map(function(param) { + if (param.name) { + return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`; + } else { + return param; + } + }).join("&"); + }; + var formElements = (form, selector) => { + if (matches(form, "form")) { + return toArray(form.elements).filter((el) => matches(el, selector)); + } else { + return toArray(form.querySelectorAll(selector)); + } + }; + var handleConfirmWithRails = (rails) => function(e) { + if (!allowAction(this, rails)) { + stopEverything(e); + } + }; + var confirm = (message, element) => window.confirm(message); + var allowAction = function(element, rails) { + let callback; + const message = element.getAttribute("data-confirm"); + if (!message) { + return true; + } + let answer = false; + if (fire(element, "confirm")) { + try { + answer = rails.confirm(message, element); + } catch (error) { + } + callback = fire(element, "confirm:complete", [answer]); + } + return answer && callback; + }; + var handleDisabledElement = function(e) { + const element = this; + if (element.disabled) { + stopEverything(e); + } + }; + var enableElement = (e) => { + let element; + if (e instanceof Event) { + if (isXhrRedirect(e)) { + return; + } + element = e.target; + } else { + element = e; + } + if (isContentEditable(element)) { + return; + } + if (matches(element, linkDisableSelector)) { + return enableLinkElement(element); + } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) { + return enableFormElement(element); + } else if (matches(element, formSubmitSelector)) { + return enableFormElements(element); + } + }; + var disableElement = (e) => { + const element = e instanceof Event ? e.target : e; + if (isContentEditable(element)) { + return; + } + if (matches(element, linkDisableSelector)) { + return disableLinkElement(element); + } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) { + return disableFormElement(element); + } else if (matches(element, formSubmitSelector)) { + return disableFormElements(element); + } + }; + var disableLinkElement = function(element) { + if (getData(element, "ujs:disabled")) { + return; + } + const replacement = element.getAttribute("data-disable-with"); + if (replacement != null) { + setData(element, "ujs:enable-with", element.innerHTML); + element.innerHTML = replacement; + } + element.addEventListener("click", stopEverything); + return setData(element, "ujs:disabled", true); + }; + var enableLinkElement = function(element) { + const originalText = getData(element, "ujs:enable-with"); + if (originalText != null) { + element.innerHTML = originalText; + setData(element, "ujs:enable-with", null); + } + element.removeEventListener("click", stopEverything); + return setData(element, "ujs:disabled", null); + }; + var disableFormElements = (form) => formElements(form, formDisableSelector).forEach(disableFormElement); + var disableFormElement = function(element) { + if (getData(element, "ujs:disabled")) { + return; + } + const replacement = element.getAttribute("data-disable-with"); + if (replacement != null) { + if (matches(element, "button")) { + setData(element, "ujs:enable-with", element.innerHTML); + element.innerHTML = replacement; + } else { + setData(element, "ujs:enable-with", element.value); + element.value = replacement; + } + } + element.disabled = true; + return setData(element, "ujs:disabled", true); + }; + var enableFormElements = (form) => formElements(form, formEnableSelector).forEach((element) => enableFormElement(element)); + var enableFormElement = function(element) { + const originalText = getData(element, "ujs:enable-with"); + if (originalText != null) { + if (matches(element, "button")) { + element.innerHTML = originalText; + } else { + element.value = originalText; + } + setData(element, "ujs:enable-with", null); + } + element.disabled = false; + return setData(element, "ujs:disabled", null); + }; + var isXhrRedirect = function(event) { + const xhr = event.detail ? event.detail[0] : void 0; + return xhr && xhr.getResponseHeader("X-Xhr-Redirect"); + }; + var handleMethodWithRails = (rails) => function(e) { + const link = this; + const method = link.getAttribute("data-method"); + if (!method) { + return; + } + if (isContentEditable(this)) { + return; + } + const href2 = rails.href(link); + const csrfToken$1 = csrfToken(); + const csrfParam$1 = csrfParam(); + const form = document.createElement("form"); + let formContent = ``; + if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href2)) { + formContent += ``; + } + formContent += ''; + form.method = "post"; + form.action = href2; + form.target = link.target; + form.innerHTML = formContent; + form.style.display = "none"; + document.body.appendChild(form); + form.querySelector('[type="submit"]').click(); + stopEverything(e); + }; + var isRemote = function(element) { + const value = element.getAttribute("data-remote"); + return value != null && value !== "false"; + }; + var handleRemoteWithRails = (rails) => function(e) { + let data, method, url; + const element = this; + if (!isRemote(element)) { + return true; + } + if (!fire(element, "ajax:before")) { + fire(element, "ajax:stopped"); + return false; + } + if (isContentEditable(element)) { + fire(element, "ajax:stopped"); + return false; + } + const withCredentials = element.getAttribute("data-with-credentials"); + const dataType = element.getAttribute("data-type") || "script"; + if (matches(element, formSubmitSelector)) { + const button = getData(element, "ujs:submit-button"); + method = getData(element, "ujs:submit-button-formmethod") || element.getAttribute("method") || "get"; + url = getData(element, "ujs:submit-button-formaction") || element.getAttribute("action") || location.href; + if (method.toUpperCase() === "GET") { + url = url.replace(/\?.*$/, ""); + } + if (element.enctype === "multipart/form-data") { + data = new FormData(element); + if (button != null) { + data.append(button.name, button.value); + } + } else { + data = serializeElement(element, button); + } + setData(element, "ujs:submit-button", null); + setData(element, "ujs:submit-button-formmethod", null); + setData(element, "ujs:submit-button-formaction", null); + } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) { + method = element.getAttribute("data-method"); + url = element.getAttribute("data-url"); + data = serializeElement(element, element.getAttribute("data-params")); + } else { + method = element.getAttribute("data-method"); + url = rails.href(element); + data = element.getAttribute("data-params"); + } + ajax({ + type: method || "GET", + url, + data, + dataType, + beforeSend(xhr, options) { + if (fire(element, "ajax:beforeSend", [xhr, options])) { + return fire(element, "ajax:send", [xhr]); + } else { + fire(element, "ajax:stopped"); + return false; + } + }, + success(...args) { + return fire(element, "ajax:success", args); + }, + error(...args) { + return fire(element, "ajax:error", args); + }, + complete(...args) { + return fire(element, "ajax:complete", args); + }, + crossDomain: isCrossDomain(url), + withCredentials: withCredentials != null && withCredentials !== "false" + }); + stopEverything(e); + }; + var formSubmitButtonClick = function(e) { + const button = this; + const { form } = button; + if (!form) { + return; + } + if (button.name) { + setData(form, "ujs:submit-button", { + name: button.name, + value: button.value + }); + } + setData(form, "ujs:formnovalidate-button", button.formNoValidate); + setData(form, "ujs:submit-button-formaction", button.getAttribute("formaction")); + return setData(form, "ujs:submit-button-formmethod", button.getAttribute("formmethod")); + }; + var preventInsignificantClick = function(e) { + const link = this; + const method = (link.getAttribute("data-method") || "GET").toUpperCase(); + const data = link.getAttribute("data-params"); + const metaClick = e.metaKey || e.ctrlKey; + const insignificantMetaClick = metaClick && method === "GET" && !data; + const nonPrimaryMouseClick = e.button != null && e.button !== 0; + if (nonPrimaryMouseClick || insignificantMetaClick) { + e.stopImmediatePropagation(); + } + }; + var Rails = { + $, + ajax, + buttonClickSelector, + buttonDisableSelector, + confirm, + cspNonce, + csrfToken, + csrfParam, + CSRFProtection, + delegate, + disableElement, + enableElement, + fileInputSelector, + fire, + formElements, + formEnableSelector, + formDisableSelector, + formInputClickSelector, + formSubmitButtonClick, + formSubmitSelector, + getData, + handleDisabledElement, + href, + inputChangeSelector, + isCrossDomain, + linkClickSelector, + linkDisableSelector, + loadCSPNonce, + matches, + preventInsignificantClick, + refreshCSRFTokens, + serializeElement, + setData, + stopEverything + }; + var handleConfirm = handleConfirmWithRails(Rails); + Rails.handleConfirm = handleConfirm; + var handleMethod = handleMethodWithRails(Rails); + Rails.handleMethod = handleMethod; + var handleRemote = handleRemoteWithRails(Rails); + Rails.handleRemote = handleRemote; + var start2 = function() { + if (window._rails_loaded) { + throw new Error("rails-ujs has already been loaded!"); + } + window.addEventListener("pageshow", function() { + $(formEnableSelector).forEach(function(el) { + if (getData(el, "ujs:disabled")) { + enableElement(el); + } + }); + $(linkDisableSelector).forEach(function(el) { + if (getData(el, "ujs:disabled")) { + enableElement(el); + } + }); + }); + delegate(document, linkDisableSelector, "ajax:complete", enableElement); + delegate(document, linkDisableSelector, "ajax:stopped", enableElement); + delegate(document, buttonDisableSelector, "ajax:complete", enableElement); + delegate(document, buttonDisableSelector, "ajax:stopped", enableElement); + delegate(document, linkClickSelector, "click", preventInsignificantClick); + delegate(document, linkClickSelector, "click", handleDisabledElement); + delegate(document, linkClickSelector, "click", handleConfirm); + delegate(document, linkClickSelector, "click", disableElement); + delegate(document, linkClickSelector, "click", handleRemote); + delegate(document, linkClickSelector, "click", handleMethod); + delegate(document, buttonClickSelector, "click", preventInsignificantClick); + delegate(document, buttonClickSelector, "click", handleDisabledElement); + delegate(document, buttonClickSelector, "click", handleConfirm); + delegate(document, buttonClickSelector, "click", disableElement); + delegate(document, buttonClickSelector, "click", handleRemote); + delegate(document, inputChangeSelector, "change", handleDisabledElement); + delegate(document, inputChangeSelector, "change", handleConfirm); + delegate(document, inputChangeSelector, "change", handleRemote); + delegate(document, formSubmitSelector, "submit", handleDisabledElement); + delegate(document, formSubmitSelector, "submit", handleConfirm); + delegate(document, formSubmitSelector, "submit", handleRemote); + delegate(document, formSubmitSelector, "submit", (e) => setTimeout(() => disableElement(e), 13)); + delegate(document, formSubmitSelector, "ajax:send", disableElement); + delegate(document, formSubmitSelector, "ajax:complete", enableElement); + delegate(document, formInputClickSelector, "click", preventInsignificantClick); + delegate(document, formInputClickSelector, "click", handleDisabledElement); + delegate(document, formInputClickSelector, "click", handleConfirm); + delegate(document, formInputClickSelector, "click", formSubmitButtonClick); + document.addEventListener("DOMContentLoaded", refreshCSRFTokens); + document.addEventListener("DOMContentLoaded", loadCSPNonce); + return window._rails_loaded = true; + }; + Rails.start = start2; + if (typeof jQuery !== "undefined" && jQuery && jQuery.ajax) { + if (jQuery.rails) { + throw new Error("If you load both jquery_ujs and rails-ujs, use rails-ujs only."); + } + jQuery.rails = Rails; + jQuery.ajaxPrefilter(function(options, originalOptions, xhr) { + if (!options.crossDomain) { + return CSRFProtection(xhr); + } + }); + } + + // node_modules/@activeadmin/activeadmin/dist/active_admin/features/batch_actions.js + var submitForm = function() { + let form = document.getElementById("collection_selection"); + if (form) { + form.submit(); + } + }; + var batchActionClick = function(event) { + event.preventDefault(); + let batchAction = document.getElementById("batch_action"); + if (batchAction) { + batchAction.value = this.dataset.action; + } + if (!event.target.dataset.confirm) { + submitForm(); + } + }; + var batchActionConfirmComplete = function(event) { + event.preventDefault(); + if (event.detail[0] === true) { + let batchAction = document.getElementById("batch_action"); + if (batchAction) { + batchAction.value = this.dataset.action; + } + submitForm(); + } + }; + var batchActionFormSubmit = function(event) { + event.preventDefault(); + let json = JSON.stringify(Object.fromEntries(new FormData(this).entries())); + let inputsField = document.getElementById("batch_action_inputs"); + let form = document.getElementById("collection_selection"); + if (json && inputsField && form) { + inputsField.value = json; + form.submit(); + } + }; + Rails.delegate(document, "[data-batch-action-item]", "confirm:complete", batchActionConfirmComplete); + Rails.delegate(document, "[data-batch-action-item]", "click", batchActionClick); + Rails.delegate(document, "form[data-batch-action-form]", "submit", batchActionFormSubmit); + var disableDropdown = function(condition) { + const button = document.querySelector(".batch-actions-dropdown-toggle"); + if (button) { + button.disabled = condition; + } + }; + var toggleAllChange = function(event) { + const checkboxes = document.querySelectorAll(".batch-actions-resource-selection"); + for (const checkbox of checkboxes) { + checkbox.checked = this.checked; + } + const rows = document.querySelectorAll(".paginated-collection tbody tr"); + for (const row of rows) { + row.classList.toggle("selected", this.checked); + } + disableDropdown(!this.checked); + }; + Rails.delegate(document, ".batch-actions-toggle-all", "change", toggleAllChange); + var toggleCheckboxChange = function(event) { + const numChecked = document.querySelectorAll(".batch-actions-resource-selection:checked").length; + const allChecked = numChecked === document.querySelectorAll(".batch-actions-resource-selection").length; + const someChecked = numChecked > 0 && numChecked < document.querySelectorAll(".batch-actions-resource-selection").length; + const toggleAll = document.querySelector(".batch-actions-toggle-all"); + if (toggleAll) { + toggleAll.checked = allChecked; + toggleAll.indeterminate = someChecked; + } + disableDropdown(numChecked === 0); + }; + Rails.delegate(document, ".batch-actions-resource-selection", "change", toggleCheckboxChange); + var tableRowClick = function(event) { + const type = event.target.type; + if (typeof type === "undefined" || type !== "checkbox" && type !== "button" && type !== "") { + const checkbox = event.target.closest("tr").querySelector("input[type=checkbox]"); + if (checkbox) { + checkbox.click(); + } + } + }; + Rails.delegate(document, ".paginated-collection tbody td", "click", tableRowClick); + + // node_modules/@activeadmin/activeadmin/dist/active_admin/features/dark_mode_toggle.js + var THEME_KEY = "theme"; + var darkModeMedia = window.matchMedia("(prefers-color-scheme: dark)"); + var setTheme = () => { + if (localStorage.getItem(THEME_KEY) === "dark" || !(THEME_KEY in localStorage) && darkModeMedia.matches) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + }; + darkModeMedia.addEventListener("change", setTheme); + document.addEventListener("DOMContentLoaded", setTheme); + window.addEventListener("storage", (event) => { + if (event.key === THEME_KEY) { + setTheme(); + } + }); + var toggleTheme = () => { + if (localStorage.getItem(THEME_KEY) === "dark" || !(THEME_KEY in localStorage) && darkModeMedia.matches) { + localStorage.setItem(THEME_KEY, "light"); + } else { + localStorage.setItem(THEME_KEY, "dark"); + } + setTheme(); + }; + Rails.delegate(document, ".dark-mode-toggle", "click", toggleTheme); + + // node_modules/@activeadmin/activeadmin/dist/active_admin/features/has_many.js + var hasManyRemoveClick = function(event) { + event.preventDefault(); + const oldGroup = this.closest("fieldset"); + if (oldGroup) { + oldGroup.remove(); + } + }; + Rails.delegate(document, "form .has-many-remove", "click", hasManyRemoveClick); + var hasManyAddClick = function(event) { + event.preventDefault(); + const parent = this.closest(".has-many-container"); + let index = parseInt(parent.dataset.has_many_index || parent.querySelectorAll("fieldset").length - 1, 10); + parent.dataset.has_many_index = ++index; + const regex = new RegExp(this.dataset.placeholder, "g"); + const html = this.dataset.html.replace(regex, index); + const tempEl = document.createElement("div"); + tempEl.innerHTML = html; + this.before(tempEl.firstChild); + }; + Rails.delegate(document, "form .has-many-add", "click", hasManyAddClick); + + // node_modules/@activeadmin/activeadmin/dist/active_admin/utils/dom.js + var nextSibling = function next(element, selector) { + let sibling = element.nextElementSibling; + while (sibling) { + if (sibling && sibling.matches(selector)) { + return sibling; + } + sibling = sibling.nextElementSibling; + } + }; + + // node_modules/@activeadmin/activeadmin/dist/active_admin/features/filters.js + var disableEmptyFields = function(event) { + Array.from(this.querySelectorAll("input, select, textarea")).filter((el) => el.value === "").forEach((el) => el.disabled = true); + }; + Rails.delegate(document, ".filters-form", "submit", disableEmptyFields); + var setSearchType = function(event) { + const input = nextSibling(this, "input"); + if (input) { + input.name = `q[${this.value}]`; + } + }; + Rails.delegate(document, ".filters-form-field [data-search-methods]", "change", setSearchType); + var clearFiltersForm = function(event) { + event.preventDefault(); + const regex = /^(q\[|page|utf8|commit)/; + const params = new URLSearchParams(window.location.search); + Array.from(params.keys()).filter((k) => k.match(regex)).forEach((k) => params.delete(k)); + window.location.search = params.toString(); + }; + Rails.delegate(document, ".filters-form-clear", "click", clearFiltersForm); + + // node_modules/@activeadmin/activeadmin/dist/active_admin/features/main_menu.js + var toggleMenu = function(event) { + const parent = this.parentNode; + if (!("open" in parent.dataset)) { + parent.dataset.open = ""; + } else { + delete parent.dataset.open; + } + }; + Rails.delegate(document, "#main-menu [data-menu-button]", "click", toggleMenu); + + // node_modules/@activeadmin/activeadmin/dist/active_admin/features/per_page.js + var setPerPage = function(event) { + const params = new URLSearchParams(window.location.search); + params.set("per_page", this.value); + window.location.search = params; + }; + Rails.delegate(document, ".pagination-per-page", "change", setPerPage); + + // node_modules/@activeadmin/activeadmin/dist/active_admin.js + Rails.start(); + + // node_modules/lodash-es/_freeGlobal.js + var freeGlobal = typeof window == "object" && window && window.Object === Object && window; + var freeGlobal_default = freeGlobal; + + // node_modules/lodash-es/_root.js + var freeSelf = typeof self == "object" && self && self.Object === Object && self; + var root = freeGlobal_default || freeSelf || Function("return this")(); + var root_default = root; + + // node_modules/lodash-es/_Symbol.js + var Symbol2 = root_default.Symbol; + var Symbol_default = Symbol2; + + // node_modules/lodash-es/_getRawTag.js + var objectProto = Object.prototype; + var hasOwnProperty = objectProto.hasOwnProperty; + var nativeObjectToString = objectProto.toString; + var symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0; + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; + try { + value[symToStringTag] = void 0; + var unmasked = true; + } catch (e) { + } + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + var getRawTag_default = getRawTag; + + // node_modules/lodash-es/_objectToString.js + var objectProto2 = Object.prototype; + var nativeObjectToString2 = objectProto2.toString; + function objectToString(value) { + return nativeObjectToString2.call(value); + } + var objectToString_default = objectToString; + + // node_modules/lodash-es/_baseGetTag.js + var nullTag = "[object Null]"; + var undefinedTag = "[object Undefined]"; + var symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0; + function baseGetTag(value) { + if (value == null) { + return value === void 0 ? undefinedTag : nullTag; + } + return symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value); + } + var baseGetTag_default = baseGetTag; + + // node_modules/lodash-es/isObjectLike.js + function isObjectLike(value) { + return value != null && typeof value == "object"; + } + var isObjectLike_default = isObjectLike; + + // node_modules/lodash-es/isArray.js + var isArray = Array.isArray; + var isArray_default = isArray; + + // node_modules/lodash-es/isObject.js + function isObject(value) { + var type = typeof value; + return value != null && (type == "object" || type == "function"); + } + var isObject_default = isObject; + + // node_modules/lodash-es/identity.js + function identity(value) { + return value; + } + var identity_default = identity; + + // node_modules/lodash-es/isFunction.js + var asyncTag = "[object AsyncFunction]"; + var funcTag = "[object Function]"; + var genTag = "[object GeneratorFunction]"; + var proxyTag = "[object Proxy]"; + function isFunction(value) { + if (!isObject_default(value)) { + return false; + } + var tag = baseGetTag_default(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + var isFunction_default = isFunction; + + // node_modules/lodash-es/_coreJsData.js + var coreJsData = root_default["__core-js_shared__"]; + var coreJsData_default = coreJsData; + + // node_modules/lodash-es/_isMasked.js + var maskSrcKey = function() { + var uid = /[^.]+$/.exec(coreJsData_default && coreJsData_default.keys && coreJsData_default.keys.IE_PROTO || ""); + return uid ? "Symbol(src)_1." + uid : ""; + }(); + function isMasked(func) { + return !!maskSrcKey && maskSrcKey in func; + } + var isMasked_default = isMasked; + + // node_modules/lodash-es/_toSource.js + var funcProto = Function.prototype; + var funcToString = funcProto.toString; + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) { + } + try { + return func + ""; + } catch (e) { + } + } + return ""; + } + var toSource_default = toSource; + + // node_modules/lodash-es/_baseIsNative.js + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + var reIsHostCtor = /^\[object .+?Constructor\]$/; + var funcProto2 = Function.prototype; + var objectProto3 = Object.prototype; + var funcToString2 = funcProto2.toString; + var hasOwnProperty2 = objectProto3.hasOwnProperty; + var reIsNative = RegExp( + "^" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" + ); + function baseIsNative(value) { + if (!isObject_default(value) || isMasked_default(value)) { + return false; + } + var pattern = isFunction_default(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource_default(value)); + } + var baseIsNative_default = baseIsNative; + + // node_modules/lodash-es/_getValue.js + function getValue(object, key) { + return object == null ? void 0 : object[key]; + } + var getValue_default = getValue; + + // node_modules/lodash-es/_getNative.js + function getNative(object, key) { + var value = getValue_default(object, key); + return baseIsNative_default(value) ? value : void 0; + } + var getNative_default = getNative; + + // node_modules/lodash-es/_WeakMap.js + var WeakMap2 = getNative_default(root_default, "WeakMap"); + var WeakMap_default = WeakMap2; + + // node_modules/lodash-es/_baseCreate.js + var objectCreate = Object.create; + var baseCreate = /* @__PURE__ */ function() { + function object() { + } + return function(proto) { + if (!isObject_default(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object(); + object.prototype = void 0; + return result; + }; + }(); + var baseCreate_default = baseCreate; + + // node_modules/lodash-es/_apply.js + function apply(func, thisArg, args) { + switch (args.length) { + case 0: + return func.call(thisArg); + case 1: + return func.call(thisArg, args[0]); + case 2: + return func.call(thisArg, args[0], args[1]); + case 3: + return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + var apply_default = apply; + + // node_modules/lodash-es/_copyArray.js + function copyArray(source, array) { + var index = -1, length = source.length; + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + var copyArray_default = copyArray; + + // node_modules/lodash-es/_shortOut.js + var HOT_COUNT = 800; + var HOT_SPAN = 16; + var nativeNow = Date.now; + function shortOut(func) { + var count = 0, lastCalled = 0; + return function() { + var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(void 0, arguments); + }; + } + var shortOut_default = shortOut; + + // node_modules/lodash-es/constant.js + function constant(value) { + return function() { + return value; + }; + } + var constant_default = constant; + + // node_modules/lodash-es/_defineProperty.js + var defineProperty = function() { + try { + var func = getNative_default(Object, "defineProperty"); + func({}, "", {}); + return func; + } catch (e) { + } + }(); + var defineProperty_default = defineProperty; + + // node_modules/lodash-es/_baseSetToString.js + var baseSetToString = !defineProperty_default ? identity_default : function(func, string) { + return defineProperty_default(func, "toString", { + "configurable": true, + "enumerable": false, + "value": constant_default(string), + "writable": true + }); + }; + var baseSetToString_default = baseSetToString; + + // node_modules/lodash-es/_setToString.js + var setToString = shortOut_default(baseSetToString_default); + var setToString_default = setToString; + + // node_modules/lodash-es/_arrayEach.js + function arrayEach(array, iteratee) { + var index = -1, length = array == null ? 0 : array.length; + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + var arrayEach_default = arrayEach; + + // node_modules/lodash-es/_isIndex.js + var MAX_SAFE_INTEGER = 9007199254740991; + var reIsUint = /^(?:0|[1-9]\d*)$/; + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); + } + var isIndex_default = isIndex; + + // node_modules/lodash-es/_baseAssignValue.js + function baseAssignValue(object, key, value) { + if (key == "__proto__" && defineProperty_default) { + defineProperty_default(object, key, { + "configurable": true, + "enumerable": true, + "value": value, + "writable": true + }); + } else { + object[key] = value; + } + } + var baseAssignValue_default = baseAssignValue; + + // node_modules/lodash-es/eq.js + function eq(value, other) { + return value === other || value !== value && other !== other; + } + var eq_default = eq; + + // node_modules/lodash-es/_assignValue.js + var objectProto4 = Object.prototype; + var hasOwnProperty3 = objectProto4.hasOwnProperty; + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty3.call(object, key) && eq_default(objValue, value)) || value === void 0 && !(key in object)) { + baseAssignValue_default(object, key, value); + } + } + var assignValue_default = assignValue; + + // node_modules/lodash-es/_copyObject.js + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + var index = -1, length = props.length; + while (++index < length) { + var key = props[index]; + var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0; + if (newValue === void 0) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue_default(object, key, newValue); + } else { + assignValue_default(object, key, newValue); + } + } + return object; + } + var copyObject_default = copyObject; + + // node_modules/lodash-es/_overRest.js + var nativeMax = Math.max; + function overRest(func, start3, transform) { + start3 = nativeMax(start3 === void 0 ? func.length - 1 : start3, 0); + return function() { + var args = arguments, index = -1, length = nativeMax(args.length - start3, 0), array = Array(length); + while (++index < length) { + array[index] = args[start3 + index]; + } + index = -1; + var otherArgs = Array(start3 + 1); + while (++index < start3) { + otherArgs[index] = args[index]; + } + otherArgs[start3] = transform(array); + return apply_default(func, this, otherArgs); + }; + } + var overRest_default = overRest; + + // node_modules/lodash-es/_baseRest.js + function baseRest(func, start3) { + return setToString_default(overRest_default(func, start3, identity_default), func + ""); + } + var baseRest_default = baseRest; + + // node_modules/lodash-es/isLength.js + var MAX_SAFE_INTEGER2 = 9007199254740991; + function isLength(value) { + return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2; + } + var isLength_default = isLength; + + // node_modules/lodash-es/isArrayLike.js + function isArrayLike(value) { + return value != null && isLength_default(value.length) && !isFunction_default(value); + } + var isArrayLike_default = isArrayLike; + + // node_modules/lodash-es/_isIterateeCall.js + function isIterateeCall(value, index, object) { + if (!isObject_default(object)) { + return false; + } + var type = typeof index; + if (type == "number" ? isArrayLike_default(object) && isIndex_default(index, object.length) : type == "string" && index in object) { + return eq_default(object[index], value); + } + return false; + } + var isIterateeCall_default = isIterateeCall; + + // node_modules/lodash-es/_createAssigner.js + function createAssigner(assigner) { + return baseRest_default(function(object, sources) { + var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0; + customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0; + if (guard && isIterateeCall_default(sources[0], sources[1], guard)) { + customizer = length < 3 ? void 0 : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + var createAssigner_default = createAssigner; + + // node_modules/lodash-es/_isPrototype.js + var objectProto5 = Object.prototype; + function isPrototype(value) { + var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto5; + return value === proto; + } + var isPrototype_default = isPrototype; + + // node_modules/lodash-es/_baseTimes.js + function baseTimes(n, iteratee) { + var index = -1, result = Array(n); + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + var baseTimes_default = baseTimes; + + // node_modules/lodash-es/_baseIsArguments.js + var argsTag = "[object Arguments]"; + function baseIsArguments(value) { + return isObjectLike_default(value) && baseGetTag_default(value) == argsTag; + } + var baseIsArguments_default = baseIsArguments; + + // node_modules/lodash-es/isArguments.js + var objectProto6 = Object.prototype; + var hasOwnProperty4 = objectProto6.hasOwnProperty; + var propertyIsEnumerable = objectProto6.propertyIsEnumerable; + var isArguments = baseIsArguments_default(/* @__PURE__ */ function() { + return arguments; + }()) ? baseIsArguments_default : function(value) { + return isObjectLike_default(value) && hasOwnProperty4.call(value, "callee") && !propertyIsEnumerable.call(value, "callee"); + }; + var isArguments_default = isArguments; + + // node_modules/lodash-es/stubFalse.js + function stubFalse() { + return false; + } + var stubFalse_default = stubFalse; + + // node_modules/lodash-es/isBuffer.js + var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; + var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; + var moduleExports = freeModule && freeModule.exports === freeExports; + var Buffer2 = moduleExports ? root_default.Buffer : void 0; + var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0; + var isBuffer = nativeIsBuffer || stubFalse_default; + var isBuffer_default = isBuffer; + + // node_modules/lodash-es/_baseIsTypedArray.js + var argsTag2 = "[object Arguments]"; + var arrayTag = "[object Array]"; + var boolTag = "[object Boolean]"; + var dateTag = "[object Date]"; + var errorTag = "[object Error]"; + var funcTag2 = "[object Function]"; + var mapTag = "[object Map]"; + var numberTag = "[object Number]"; + var objectTag = "[object Object]"; + var regexpTag = "[object RegExp]"; + var setTag = "[object Set]"; + var stringTag = "[object String]"; + var weakMapTag = "[object WeakMap]"; + var arrayBufferTag = "[object ArrayBuffer]"; + var dataViewTag = "[object DataView]"; + var float32Tag = "[object Float32Array]"; + var float64Tag = "[object Float64Array]"; + var int8Tag = "[object Int8Array]"; + var int16Tag = "[object Int16Array]"; + var int32Tag = "[object Int32Array]"; + var uint8Tag = "[object Uint8Array]"; + var uint8ClampedTag = "[object Uint8ClampedArray]"; + var uint16Tag = "[object Uint16Array]"; + var uint32Tag = "[object Uint32Array]"; + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag2] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + function baseIsTypedArray(value) { + return isObjectLike_default(value) && isLength_default(value.length) && !!typedArrayTags[baseGetTag_default(value)]; + } + var baseIsTypedArray_default = baseIsTypedArray; + + // node_modules/lodash-es/_baseUnary.js + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + var baseUnary_default = baseUnary; + + // node_modules/lodash-es/_nodeUtil.js + var freeExports2 = typeof exports == "object" && exports && !exports.nodeType && exports; + var freeModule2 = freeExports2 && typeof module == "object" && module && !module.nodeType && module; + var moduleExports2 = freeModule2 && freeModule2.exports === freeExports2; + var freeProcess = moduleExports2 && freeGlobal_default.process; + var nodeUtil = function() { + try { + var types = freeModule2 && freeModule2.require && freeModule2.require("util").types; + if (types) { + return types; + } + return freeProcess && freeProcess.binding && freeProcess.binding("util"); + } catch (e) { + } + }(); + var nodeUtil_default = nodeUtil; + + // node_modules/lodash-es/isTypedArray.js + var nodeIsTypedArray = nodeUtil_default && nodeUtil_default.isTypedArray; + var isTypedArray = nodeIsTypedArray ? baseUnary_default(nodeIsTypedArray) : baseIsTypedArray_default; + var isTypedArray_default = isTypedArray; + + // node_modules/lodash-es/_arrayLikeKeys.js + var objectProto7 = Object.prototype; + var hasOwnProperty5 = objectProto7.hasOwnProperty; + function arrayLikeKeys(value, inherited) { + var isArr = isArray_default(value), isArg = !isArr && isArguments_default(value), isBuff = !isArr && !isArg && isBuffer_default(value), isType = !isArr && !isArg && !isBuff && isTypedArray_default(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes_default(value.length, String) : [], length = result.length; + for (var key in value) { + if ((inherited || hasOwnProperty5.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode. + (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers. + isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays. + isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties. + isIndex_default(key, length)))) { + result.push(key); + } + } + return result; + } + var arrayLikeKeys_default = arrayLikeKeys; + + // node_modules/lodash-es/_overArg.js + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + var overArg_default = overArg; + + // node_modules/lodash-es/_nativeKeys.js + var nativeKeys = overArg_default(Object.keys, Object); + var nativeKeys_default = nativeKeys; + + // node_modules/lodash-es/_baseKeys.js + var objectProto8 = Object.prototype; + var hasOwnProperty6 = objectProto8.hasOwnProperty; + function baseKeys(object) { + if (!isPrototype_default(object)) { + return nativeKeys_default(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty6.call(object, key) && key != "constructor") { + result.push(key); + } + } + return result; + } + var baseKeys_default = baseKeys; + + // node_modules/lodash-es/keys.js + function keys(object) { + return isArrayLike_default(object) ? arrayLikeKeys_default(object) : baseKeys_default(object); + } + var keys_default = keys; + + // node_modules/lodash-es/_nativeKeysIn.js + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + var nativeKeysIn_default = nativeKeysIn; + + // node_modules/lodash-es/_baseKeysIn.js + var objectProto9 = Object.prototype; + var hasOwnProperty7 = objectProto9.hasOwnProperty; + function baseKeysIn(object) { + if (!isObject_default(object)) { + return nativeKeysIn_default(object); + } + var isProto = isPrototype_default(object), result = []; + for (var key in object) { + if (!(key == "constructor" && (isProto || !hasOwnProperty7.call(object, key)))) { + result.push(key); + } + } + return result; + } + var baseKeysIn_default = baseKeysIn; + + // node_modules/lodash-es/keysIn.js + function keysIn(object) { + return isArrayLike_default(object) ? arrayLikeKeys_default(object, true) : baseKeysIn_default(object); + } + var keysIn_default = keysIn; + + // node_modules/lodash-es/_nativeCreate.js + var nativeCreate = getNative_default(Object, "create"); + var nativeCreate_default = nativeCreate; + + // node_modules/lodash-es/_hashClear.js + function hashClear() { + this.__data__ = nativeCreate_default ? nativeCreate_default(null) : {}; + this.size = 0; + } + var hashClear_default = hashClear; + + // node_modules/lodash-es/_hashDelete.js + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + var hashDelete_default = hashDelete; + + // node_modules/lodash-es/_hashGet.js + var HASH_UNDEFINED = "__lodash_hash_undefined__"; + var objectProto10 = Object.prototype; + var hasOwnProperty8 = objectProto10.hasOwnProperty; + function hashGet(key) { + var data = this.__data__; + if (nativeCreate_default) { + var result = data[key]; + return result === HASH_UNDEFINED ? void 0 : result; + } + return hasOwnProperty8.call(data, key) ? data[key] : void 0; + } + var hashGet_default = hashGet; + + // node_modules/lodash-es/_hashHas.js + var objectProto11 = Object.prototype; + var hasOwnProperty9 = objectProto11.hasOwnProperty; + function hashHas(key) { + var data = this.__data__; + return nativeCreate_default ? data[key] !== void 0 : hasOwnProperty9.call(data, key); + } + var hashHas_default = hashHas; + + // node_modules/lodash-es/_hashSet.js + var HASH_UNDEFINED2 = "__lodash_hash_undefined__"; + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = nativeCreate_default && value === void 0 ? HASH_UNDEFINED2 : value; + return this; + } + var hashSet_default = hashSet; + + // node_modules/lodash-es/_Hash.js + function Hash(entries) { + var index = -1, length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + Hash.prototype.clear = hashClear_default; + Hash.prototype["delete"] = hashDelete_default; + Hash.prototype.get = hashGet_default; + Hash.prototype.has = hashHas_default; + Hash.prototype.set = hashSet_default; + var Hash_default = Hash; + + // node_modules/lodash-es/_listCacheClear.js + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + var listCacheClear_default = listCacheClear; + + // node_modules/lodash-es/_assocIndexOf.js + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq_default(array[length][0], key)) { + return length; + } + } + return -1; + } + var assocIndexOf_default = assocIndexOf; + + // node_modules/lodash-es/_listCacheDelete.js + var arrayProto = Array.prototype; + var splice = arrayProto.splice; + function listCacheDelete(key) { + var data = this.__data__, index = assocIndexOf_default(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + var listCacheDelete_default = listCacheDelete; + + // node_modules/lodash-es/_listCacheGet.js + function listCacheGet(key) { + var data = this.__data__, index = assocIndexOf_default(data, key); + return index < 0 ? void 0 : data[index][1]; + } + var listCacheGet_default = listCacheGet; + + // node_modules/lodash-es/_listCacheHas.js + function listCacheHas(key) { + return assocIndexOf_default(this.__data__, key) > -1; + } + var listCacheHas_default = listCacheHas; + + // node_modules/lodash-es/_listCacheSet.js + function listCacheSet(key, value) { + var data = this.__data__, index = assocIndexOf_default(data, key); + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + var listCacheSet_default = listCacheSet; + + // node_modules/lodash-es/_ListCache.js + function ListCache(entries) { + var index = -1, length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + ListCache.prototype.clear = listCacheClear_default; + ListCache.prototype["delete"] = listCacheDelete_default; + ListCache.prototype.get = listCacheGet_default; + ListCache.prototype.has = listCacheHas_default; + ListCache.prototype.set = listCacheSet_default; + var ListCache_default = ListCache; + + // node_modules/lodash-es/_Map.js + var Map2 = getNative_default(root_default, "Map"); + var Map_default = Map2; + + // node_modules/lodash-es/_mapCacheClear.js + function mapCacheClear() { + this.size = 0; + this.__data__ = { + "hash": new Hash_default(), + "map": new (Map_default || ListCache_default)(), + "string": new Hash_default() + }; + } + var mapCacheClear_default = mapCacheClear; + + // node_modules/lodash-es/_isKeyable.js + function isKeyable(value) { + var type = typeof value; + return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; + } + var isKeyable_default = isKeyable; + + // node_modules/lodash-es/_getMapData.js + function getMapData(map, key) { + var data = map.__data__; + return isKeyable_default(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; + } + var getMapData_default = getMapData; + + // node_modules/lodash-es/_mapCacheDelete.js + function mapCacheDelete(key) { + var result = getMapData_default(this, key)["delete"](key); + this.size -= result ? 1 : 0; + return result; + } + var mapCacheDelete_default = mapCacheDelete; + + // node_modules/lodash-es/_mapCacheGet.js + function mapCacheGet(key) { + return getMapData_default(this, key).get(key); + } + var mapCacheGet_default = mapCacheGet; + + // node_modules/lodash-es/_mapCacheHas.js + function mapCacheHas(key) { + return getMapData_default(this, key).has(key); + } + var mapCacheHas_default = mapCacheHas; + + // node_modules/lodash-es/_mapCacheSet.js + function mapCacheSet(key, value) { + var data = getMapData_default(this, key), size = data.size; + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + var mapCacheSet_default = mapCacheSet; + + // node_modules/lodash-es/_MapCache.js + function MapCache(entries) { + var index = -1, length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + MapCache.prototype.clear = mapCacheClear_default; + MapCache.prototype["delete"] = mapCacheDelete_default; + MapCache.prototype.get = mapCacheGet_default; + MapCache.prototype.has = mapCacheHas_default; + MapCache.prototype.set = mapCacheSet_default; + var MapCache_default = MapCache; + + // node_modules/lodash-es/_arrayPush.js + function arrayPush(array, values) { + var index = -1, length = values.length, offset2 = array.length; + while (++index < length) { + array[offset2 + index] = values[index]; + } + return array; + } + var arrayPush_default = arrayPush; + + // node_modules/lodash-es/_getPrototype.js + var getPrototype = overArg_default(Object.getPrototypeOf, Object); + var getPrototype_default = getPrototype; + + // node_modules/lodash-es/isPlainObject.js + var objectTag2 = "[object Object]"; + var funcProto3 = Function.prototype; + var objectProto12 = Object.prototype; + var funcToString3 = funcProto3.toString; + var hasOwnProperty10 = objectProto12.hasOwnProperty; + var objectCtorString = funcToString3.call(Object); + function isPlainObject(value) { + if (!isObjectLike_default(value) || baseGetTag_default(value) != objectTag2) { + return false; + } + var proto = getPrototype_default(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty10.call(proto, "constructor") && proto.constructor; + return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString3.call(Ctor) == objectCtorString; + } + var isPlainObject_default = isPlainObject; + + // node_modules/lodash-es/_stackClear.js + function stackClear() { + this.__data__ = new ListCache_default(); + this.size = 0; + } + var stackClear_default = stackClear; + + // node_modules/lodash-es/_stackDelete.js + function stackDelete(key) { + var data = this.__data__, result = data["delete"](key); + this.size = data.size; + return result; + } + var stackDelete_default = stackDelete; + + // node_modules/lodash-es/_stackGet.js + function stackGet(key) { + return this.__data__.get(key); + } + var stackGet_default = stackGet; + + // node_modules/lodash-es/_stackHas.js + function stackHas(key) { + return this.__data__.has(key); + } + var stackHas_default = stackHas; + + // node_modules/lodash-es/_stackSet.js + var LARGE_ARRAY_SIZE = 200; + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache_default) { + var pairs = data.__data__; + if (!Map_default || pairs.length < LARGE_ARRAY_SIZE - 1) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache_default(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + var stackSet_default = stackSet; + + // node_modules/lodash-es/_Stack.js + function Stack(entries) { + var data = this.__data__ = new ListCache_default(entries); + this.size = data.size; + } + Stack.prototype.clear = stackClear_default; + Stack.prototype["delete"] = stackDelete_default; + Stack.prototype.get = stackGet_default; + Stack.prototype.has = stackHas_default; + Stack.prototype.set = stackSet_default; + var Stack_default = Stack; + + // node_modules/lodash-es/_baseAssign.js + function baseAssign(object, source) { + return object && copyObject_default(source, keys_default(source), object); + } + var baseAssign_default = baseAssign; + + // node_modules/lodash-es/_baseAssignIn.js + function baseAssignIn(object, source) { + return object && copyObject_default(source, keysIn_default(source), object); + } + var baseAssignIn_default = baseAssignIn; + + // node_modules/lodash-es/_cloneBuffer.js + var freeExports3 = typeof exports == "object" && exports && !exports.nodeType && exports; + var freeModule3 = freeExports3 && typeof module == "object" && module && !module.nodeType && module; + var moduleExports3 = freeModule3 && freeModule3.exports === freeExports3; + var Buffer3 = moduleExports3 ? root_default.Buffer : void 0; + var allocUnsafe = Buffer3 ? Buffer3.allocUnsafe : void 0; + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + buffer.copy(result); + return result; + } + var cloneBuffer_default = cloneBuffer; + + // node_modules/lodash-es/_arrayFilter.js + function arrayFilter(array, predicate) { + var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + var arrayFilter_default = arrayFilter; + + // node_modules/lodash-es/stubArray.js + function stubArray() { + return []; + } + var stubArray_default = stubArray; + + // node_modules/lodash-es/_getSymbols.js + var objectProto13 = Object.prototype; + var propertyIsEnumerable2 = objectProto13.propertyIsEnumerable; + var nativeGetSymbols = Object.getOwnPropertySymbols; + var getSymbols = !nativeGetSymbols ? stubArray_default : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter_default(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable2.call(object, symbol); + }); + }; + var getSymbols_default = getSymbols; + + // node_modules/lodash-es/_copySymbols.js + function copySymbols(source, object) { + return copyObject_default(source, getSymbols_default(source), object); + } + var copySymbols_default = copySymbols; + + // node_modules/lodash-es/_getSymbolsIn.js + var nativeGetSymbols2 = Object.getOwnPropertySymbols; + var getSymbolsIn = !nativeGetSymbols2 ? stubArray_default : function(object) { + var result = []; + while (object) { + arrayPush_default(result, getSymbols_default(object)); + object = getPrototype_default(object); + } + return result; + }; + var getSymbolsIn_default = getSymbolsIn; + + // node_modules/lodash-es/_copySymbolsIn.js + function copySymbolsIn(source, object) { + return copyObject_default(source, getSymbolsIn_default(source), object); + } + var copySymbolsIn_default = copySymbolsIn; + + // node_modules/lodash-es/_baseGetAllKeys.js + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray_default(object) ? result : arrayPush_default(result, symbolsFunc(object)); + } + var baseGetAllKeys_default = baseGetAllKeys; + + // node_modules/lodash-es/_getAllKeys.js + function getAllKeys(object) { + return baseGetAllKeys_default(object, keys_default, getSymbols_default); + } + var getAllKeys_default = getAllKeys; + + // node_modules/lodash-es/_getAllKeysIn.js + function getAllKeysIn(object) { + return baseGetAllKeys_default(object, keysIn_default, getSymbolsIn_default); + } + var getAllKeysIn_default = getAllKeysIn; + + // node_modules/lodash-es/_DataView.js + var DataView = getNative_default(root_default, "DataView"); + var DataView_default = DataView; + + // node_modules/lodash-es/_Promise.js + var Promise2 = getNative_default(root_default, "Promise"); + var Promise_default = Promise2; + + // node_modules/lodash-es/_Set.js + var Set2 = getNative_default(root_default, "Set"); + var Set_default = Set2; + + // node_modules/lodash-es/_getTag.js + var mapTag2 = "[object Map]"; + var objectTag3 = "[object Object]"; + var promiseTag = "[object Promise]"; + var setTag2 = "[object Set]"; + var weakMapTag2 = "[object WeakMap]"; + var dataViewTag2 = "[object DataView]"; + var dataViewCtorString = toSource_default(DataView_default); + var mapCtorString = toSource_default(Map_default); + var promiseCtorString = toSource_default(Promise_default); + var setCtorString = toSource_default(Set_default); + var weakMapCtorString = toSource_default(WeakMap_default); + var getTag = baseGetTag_default; + if (DataView_default && getTag(new DataView_default(new ArrayBuffer(1))) != dataViewTag2 || Map_default && getTag(new Map_default()) != mapTag2 || Promise_default && getTag(Promise_default.resolve()) != promiseTag || Set_default && getTag(new Set_default()) != setTag2 || WeakMap_default && getTag(new WeakMap_default()) != weakMapTag2) { + getTag = function(value) { + var result = baseGetTag_default(value), Ctor = result == objectTag3 ? value.constructor : void 0, ctorString = Ctor ? toSource_default(Ctor) : ""; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: + return dataViewTag2; + case mapCtorString: + return mapTag2; + case promiseCtorString: + return promiseTag; + case setCtorString: + return setTag2; + case weakMapCtorString: + return weakMapTag2; + } + } + return result; + }; + } + var getTag_default = getTag; + + // node_modules/lodash-es/_initCloneArray.js + var objectProto14 = Object.prototype; + var hasOwnProperty11 = objectProto14.hasOwnProperty; + function initCloneArray(array) { + var length = array.length, result = new array.constructor(length); + if (length && typeof array[0] == "string" && hasOwnProperty11.call(array, "index")) { + result.index = array.index; + result.input = array.input; + } + return result; + } + var initCloneArray_default = initCloneArray; + + // node_modules/lodash-es/_Uint8Array.js + var Uint8Array2 = root_default.Uint8Array; + var Uint8Array_default = Uint8Array2; + + // node_modules/lodash-es/_cloneArrayBuffer.js + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array_default(result).set(new Uint8Array_default(arrayBuffer)); + return result; + } + var cloneArrayBuffer_default = cloneArrayBuffer; + + // node_modules/lodash-es/_cloneDataView.js + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer_default(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + var cloneDataView_default = cloneDataView; + + // node_modules/lodash-es/_cloneRegExp.js + var reFlags = /\w*$/; + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + var cloneRegExp_default = cloneRegExp; + + // node_modules/lodash-es/_cloneSymbol.js + var symbolProto = Symbol_default ? Symbol_default.prototype : void 0; + var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + var cloneSymbol_default = cloneSymbol; + + // node_modules/lodash-es/_cloneTypedArray.js + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer_default(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + var cloneTypedArray_default = cloneTypedArray; + + // node_modules/lodash-es/_initCloneByTag.js + var boolTag2 = "[object Boolean]"; + var dateTag2 = "[object Date]"; + var mapTag3 = "[object Map]"; + var numberTag2 = "[object Number]"; + var regexpTag2 = "[object RegExp]"; + var setTag3 = "[object Set]"; + var stringTag2 = "[object String]"; + var symbolTag = "[object Symbol]"; + var arrayBufferTag2 = "[object ArrayBuffer]"; + var dataViewTag3 = "[object DataView]"; + var float32Tag2 = "[object Float32Array]"; + var float64Tag2 = "[object Float64Array]"; + var int8Tag2 = "[object Int8Array]"; + var int16Tag2 = "[object Int16Array]"; + var int32Tag2 = "[object Int32Array]"; + var uint8Tag2 = "[object Uint8Array]"; + var uint8ClampedTag2 = "[object Uint8ClampedArray]"; + var uint16Tag2 = "[object Uint16Array]"; + var uint32Tag2 = "[object Uint32Array]"; + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag2: + return cloneArrayBuffer_default(object); + case boolTag2: + case dateTag2: + return new Ctor(+object); + case dataViewTag3: + return cloneDataView_default(object, isDeep); + case float32Tag2: + case float64Tag2: + case int8Tag2: + case int16Tag2: + case int32Tag2: + case uint8Tag2: + case uint8ClampedTag2: + case uint16Tag2: + case uint32Tag2: + return cloneTypedArray_default(object, isDeep); + case mapTag3: + return new Ctor(); + case numberTag2: + case stringTag2: + return new Ctor(object); + case regexpTag2: + return cloneRegExp_default(object); + case setTag3: + return new Ctor(); + case symbolTag: + return cloneSymbol_default(object); + } + } + var initCloneByTag_default = initCloneByTag; + + // node_modules/lodash-es/_initCloneObject.js + function initCloneObject(object) { + return typeof object.constructor == "function" && !isPrototype_default(object) ? baseCreate_default(getPrototype_default(object)) : {}; + } + var initCloneObject_default = initCloneObject; + + // node_modules/lodash-es/_baseIsMap.js + var mapTag4 = "[object Map]"; + function baseIsMap(value) { + return isObjectLike_default(value) && getTag_default(value) == mapTag4; + } + var baseIsMap_default = baseIsMap; + + // node_modules/lodash-es/isMap.js + var nodeIsMap = nodeUtil_default && nodeUtil_default.isMap; + var isMap = nodeIsMap ? baseUnary_default(nodeIsMap) : baseIsMap_default; + var isMap_default = isMap; + + // node_modules/lodash-es/_baseIsSet.js + var setTag4 = "[object Set]"; + function baseIsSet(value) { + return isObjectLike_default(value) && getTag_default(value) == setTag4; + } + var baseIsSet_default = baseIsSet; + + // node_modules/lodash-es/isSet.js + var nodeIsSet = nodeUtil_default && nodeUtil_default.isSet; + var isSet = nodeIsSet ? baseUnary_default(nodeIsSet) : baseIsSet_default; + var isSet_default = isSet; + + // node_modules/lodash-es/_baseClone.js + var CLONE_DEEP_FLAG = 1; + var CLONE_FLAT_FLAG = 2; + var CLONE_SYMBOLS_FLAG = 4; + var argsTag3 = "[object Arguments]"; + var arrayTag2 = "[object Array]"; + var boolTag3 = "[object Boolean]"; + var dateTag3 = "[object Date]"; + var errorTag2 = "[object Error]"; + var funcTag3 = "[object Function]"; + var genTag2 = "[object GeneratorFunction]"; + var mapTag5 = "[object Map]"; + var numberTag3 = "[object Number]"; + var objectTag4 = "[object Object]"; + var regexpTag3 = "[object RegExp]"; + var setTag5 = "[object Set]"; + var stringTag3 = "[object String]"; + var symbolTag2 = "[object Symbol]"; + var weakMapTag3 = "[object WeakMap]"; + var arrayBufferTag3 = "[object ArrayBuffer]"; + var dataViewTag4 = "[object DataView]"; + var float32Tag3 = "[object Float32Array]"; + var float64Tag3 = "[object Float64Array]"; + var int8Tag3 = "[object Int8Array]"; + var int16Tag3 = "[object Int16Array]"; + var int32Tag3 = "[object Int32Array]"; + var uint8Tag3 = "[object Uint8Array]"; + var uint8ClampedTag3 = "[object Uint8ClampedArray]"; + var uint16Tag3 = "[object Uint16Array]"; + var uint32Tag3 = "[object Uint32Array]"; + var cloneableTags = {}; + cloneableTags[argsTag3] = cloneableTags[arrayTag2] = cloneableTags[arrayBufferTag3] = cloneableTags[dataViewTag4] = cloneableTags[boolTag3] = cloneableTags[dateTag3] = cloneableTags[float32Tag3] = cloneableTags[float64Tag3] = cloneableTags[int8Tag3] = cloneableTags[int16Tag3] = cloneableTags[int32Tag3] = cloneableTags[mapTag5] = cloneableTags[numberTag3] = cloneableTags[objectTag4] = cloneableTags[regexpTag3] = cloneableTags[setTag5] = cloneableTags[stringTag3] = cloneableTags[symbolTag2] = cloneableTags[uint8Tag3] = cloneableTags[uint8ClampedTag3] = cloneableTags[uint16Tag3] = cloneableTags[uint32Tag3] = true; + cloneableTags[errorTag2] = cloneableTags[funcTag3] = cloneableTags[weakMapTag3] = false; + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG; + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== void 0) { + return result; + } + if (!isObject_default(value)) { + return value; + } + var isArr = isArray_default(value); + if (isArr) { + result = initCloneArray_default(value); + if (!isDeep) { + return copyArray_default(value, result); + } + } else { + var tag = getTag_default(value), isFunc = tag == funcTag3 || tag == genTag2; + if (isBuffer_default(value)) { + return cloneBuffer_default(value, isDeep); + } + if (tag == objectTag4 || tag == argsTag3 || isFunc && !object) { + result = isFlat || isFunc ? {} : initCloneObject_default(value); + if (!isDeep) { + return isFlat ? copySymbolsIn_default(value, baseAssignIn_default(result, value)) : copySymbols_default(value, baseAssign_default(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag_default(value, tag, isDeep); + } + } + stack || (stack = new Stack_default()); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + if (isSet_default(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap_default(value)) { + value.forEach(function(subValue, key2) { + result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); + }); + } + var keysFunc = isFull ? isFlat ? getAllKeysIn_default : getAllKeys_default : isFlat ? keysIn_default : keys_default; + var props = isArr ? void 0 : keysFunc(value); + arrayEach_default(props || value, function(subValue, key2) { + if (props) { + key2 = subValue; + subValue = value[key2]; + } + assignValue_default(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); + }); + return result; + } + var baseClone_default = baseClone; + + // node_modules/lodash-es/cloneDeep.js + var CLONE_DEEP_FLAG2 = 1; + var CLONE_SYMBOLS_FLAG2 = 4; + function cloneDeep(value) { + return baseClone_default(value, CLONE_DEEP_FLAG2 | CLONE_SYMBOLS_FLAG2); + } + var cloneDeep_default = cloneDeep; + + // node_modules/lodash-es/_setCacheAdd.js + var HASH_UNDEFINED3 = "__lodash_hash_undefined__"; + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED3); + return this; + } + var setCacheAdd_default = setCacheAdd; + + // node_modules/lodash-es/_setCacheHas.js + function setCacheHas(value) { + return this.__data__.has(value); + } + var setCacheHas_default = setCacheHas; + + // node_modules/lodash-es/_SetCache.js + function SetCache(values) { + var index = -1, length = values == null ? 0 : values.length; + this.__data__ = new MapCache_default(); + while (++index < length) { + this.add(values[index]); + } + } + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd_default; + SetCache.prototype.has = setCacheHas_default; + var SetCache_default = SetCache; + + // node_modules/lodash-es/_arraySome.js + function arraySome(array, predicate) { + var index = -1, length = array == null ? 0 : array.length; + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + var arraySome_default = arraySome; + + // node_modules/lodash-es/_cacheHas.js + function cacheHas(cache, key) { + return cache.has(key); + } + var cacheHas_default = cacheHas; + + // node_modules/lodash-es/_equalArrays.js + var COMPARE_PARTIAL_FLAG = 1; + var COMPARE_UNORDERED_FLAG = 2; + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache_default() : void 0; + stack.set(array, other); + stack.set(other, array); + while (++index < arrLength) { + var arrValue = array[index], othValue = other[index]; + if (customizer) { + var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== void 0) { + if (compared) { + continue; + } + result = false; + break; + } + if (seen) { + if (!arraySome_default(other, function(othValue2, othIndex) { + if (!cacheHas_default(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + result = false; + break; + } + } + stack["delete"](array); + stack["delete"](other); + return result; + } + var equalArrays_default = equalArrays; + + // node_modules/lodash-es/_mapToArray.js + function mapToArray(map) { + var index = -1, result = Array(map.size); + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + var mapToArray_default = mapToArray; + + // node_modules/lodash-es/_setToArray.js + function setToArray(set) { + var index = -1, result = Array(set.size); + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + var setToArray_default = setToArray; + + // node_modules/lodash-es/_equalByTag.js + var COMPARE_PARTIAL_FLAG2 = 1; + var COMPARE_UNORDERED_FLAG2 = 2; + var boolTag4 = "[object Boolean]"; + var dateTag4 = "[object Date]"; + var errorTag3 = "[object Error]"; + var mapTag6 = "[object Map]"; + var numberTag4 = "[object Number]"; + var regexpTag4 = "[object RegExp]"; + var setTag6 = "[object Set]"; + var stringTag4 = "[object String]"; + var symbolTag3 = "[object Symbol]"; + var arrayBufferTag4 = "[object ArrayBuffer]"; + var dataViewTag5 = "[object DataView]"; + var symbolProto2 = Symbol_default ? Symbol_default.prototype : void 0; + var symbolValueOf2 = symbolProto2 ? symbolProto2.valueOf : void 0; + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag5: + if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { + return false; + } + object = object.buffer; + other = other.buffer; + case arrayBufferTag4: + if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array_default(object), new Uint8Array_default(other))) { + return false; + } + return true; + case boolTag4: + case dateTag4: + case numberTag4: + return eq_default(+object, +other); + case errorTag3: + return object.name == other.name && object.message == other.message; + case regexpTag4: + case stringTag4: + return object == other + ""; + case mapTag6: + var convert = mapToArray_default; + case setTag6: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG2; + convert || (convert = setToArray_default); + if (object.size != other.size && !isPartial) { + return false; + } + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG2; + stack.set(object, other); + var result = equalArrays_default(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack["delete"](object); + return result; + case symbolTag3: + if (symbolValueOf2) { + return symbolValueOf2.call(object) == symbolValueOf2.call(other); + } + } + return false; + } + var equalByTag_default = equalByTag; + + // node_modules/lodash-es/_equalObjects.js + var COMPARE_PARTIAL_FLAG3 = 1; + var objectProto15 = Object.prototype; + var hasOwnProperty12 = objectProto15.hasOwnProperty; + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG3, objProps = getAllKeys_default(object), objLength = objProps.length, othProps = getAllKeys_default(other), othLength = othProps.length; + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty12.call(other, key))) { + return false; + } + } + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], othValue = other[key]; + if (customizer) { + var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); + } + if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { + result = false; + break; + } + skipCtor || (skipCtor = key == "constructor"); + } + if (result && !skipCtor) { + var objCtor = object.constructor, othCtor = other.constructor; + if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { + result = false; + } + } + stack["delete"](object); + stack["delete"](other); + return result; + } + var equalObjects_default = equalObjects; + + // node_modules/lodash-es/_baseIsEqualDeep.js + var COMPARE_PARTIAL_FLAG4 = 1; + var argsTag4 = "[object Arguments]"; + var arrayTag3 = "[object Array]"; + var objectTag5 = "[object Object]"; + var objectProto16 = Object.prototype; + var hasOwnProperty13 = objectProto16.hasOwnProperty; + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray_default(object), othIsArr = isArray_default(other), objTag = objIsArr ? arrayTag3 : getTag_default(object), othTag = othIsArr ? arrayTag3 : getTag_default(other); + objTag = objTag == argsTag4 ? objectTag5 : objTag; + othTag = othTag == argsTag4 ? objectTag5 : othTag; + var objIsObj = objTag == objectTag5, othIsObj = othTag == objectTag5, isSameTag = objTag == othTag; + if (isSameTag && isBuffer_default(object)) { + if (!isBuffer_default(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack_default()); + return objIsArr || isTypedArray_default(object) ? equalArrays_default(object, other, bitmask, customizer, equalFunc, stack) : equalByTag_default(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG4)) { + var objIsWrapped = objIsObj && hasOwnProperty13.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty13.call(other, "__wrapped__"); + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; + stack || (stack = new Stack_default()); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack_default()); + return equalObjects_default(object, other, bitmask, customizer, equalFunc, stack); + } + var baseIsEqualDeep_default = baseIsEqualDeep; + + // node_modules/lodash-es/_baseIsEqual.js + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || !isObjectLike_default(value) && !isObjectLike_default(other)) { + return value !== value && other !== other; + } + return baseIsEqualDeep_default(value, other, bitmask, customizer, baseIsEqual, stack); + } + var baseIsEqual_default = baseIsEqual; + + // node_modules/lodash-es/_createBaseFor.js + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + var createBaseFor_default = createBaseFor; + + // node_modules/lodash-es/_baseFor.js + var baseFor = createBaseFor_default(); + var baseFor_default = baseFor; + + // node_modules/lodash-es/_assignMergeValue.js + function assignMergeValue(object, key, value) { + if (value !== void 0 && !eq_default(object[key], value) || value === void 0 && !(key in object)) { + baseAssignValue_default(object, key, value); + } + } + var assignMergeValue_default = assignMergeValue; + + // node_modules/lodash-es/isArrayLikeObject.js + function isArrayLikeObject(value) { + return isObjectLike_default(value) && isArrayLike_default(value); + } + var isArrayLikeObject_default = isArrayLikeObject; + + // node_modules/lodash-es/_safeGet.js + function safeGet(object, key) { + if (key === "constructor" && typeof object[key] === "function") { + return; + } + if (key == "__proto__") { + return; + } + return object[key]; + } + var safeGet_default = safeGet; + + // node_modules/lodash-es/toPlainObject.js + function toPlainObject(value) { + return copyObject_default(value, keysIn_default(value)); + } + var toPlainObject_default = toPlainObject; + + // node_modules/lodash-es/_baseMergeDeep.js + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet_default(object, key), srcValue = safeGet_default(source, key), stacked = stack.get(srcValue); + if (stacked) { + assignMergeValue_default(object, key, stacked); + return; + } + var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0; + var isCommon = newValue === void 0; + if (isCommon) { + var isArr = isArray_default(srcValue), isBuff = !isArr && isBuffer_default(srcValue), isTyped = !isArr && !isBuff && isTypedArray_default(srcValue); + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray_default(objValue)) { + newValue = objValue; + } else if (isArrayLikeObject_default(objValue)) { + newValue = copyArray_default(objValue); + } else if (isBuff) { + isCommon = false; + newValue = cloneBuffer_default(srcValue, true); + } else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray_default(srcValue, true); + } else { + newValue = []; + } + } else if (isPlainObject_default(srcValue) || isArguments_default(srcValue)) { + newValue = objValue; + if (isArguments_default(objValue)) { + newValue = toPlainObject_default(objValue); + } else if (!isObject_default(objValue) || isFunction_default(objValue)) { + newValue = initCloneObject_default(srcValue); + } + } else { + isCommon = false; + } + } + if (isCommon) { + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack["delete"](srcValue); + } + assignMergeValue_default(object, key, newValue); + } + var baseMergeDeep_default = baseMergeDeep; + + // node_modules/lodash-es/_baseMerge.js + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor_default(source, function(srcValue, key) { + stack || (stack = new Stack_default()); + if (isObject_default(srcValue)) { + baseMergeDeep_default(object, source, key, srcIndex, baseMerge, customizer, stack); + } else { + var newValue = customizer ? customizer(safeGet_default(object, key), srcValue, key + "", object, source, stack) : void 0; + if (newValue === void 0) { + newValue = srcValue; + } + assignMergeValue_default(object, key, newValue); + } + }, keysIn_default); + } + var baseMerge_default = baseMerge; + + // node_modules/lodash-es/isEqual.js + function isEqual(value, other) { + return baseIsEqual_default(value, other); + } + var isEqual_default = isEqual; + + // node_modules/lodash-es/merge.js + var merge = createAssigner_default(function(object, source, srcIndex) { + baseMerge_default(object, source, srcIndex); + }); + var merge_default = merge; + + // node_modules/parchment/dist/parchment.js + var parchment_exports = {}; + __export(parchment_exports, { + Attributor: () => Attributor, + AttributorStore: () => AttributorStore$1, + BlockBlot: () => BlockBlot$1, + ClassAttributor: () => ClassAttributor$1, + ContainerBlot: () => ContainerBlot$1, + EmbedBlot: () => EmbedBlot$1, + InlineBlot: () => InlineBlot$1, + LeafBlot: () => LeafBlot$1, + ParentBlot: () => ParentBlot$1, + Registry: () => Registry, + Scope: () => Scope, + ScrollBlot: () => ScrollBlot$1, + StyleAttributor: () => StyleAttributor$1, + TextBlot: () => TextBlot$1 + }); + var Scope = /* @__PURE__ */ ((Scope2) => (Scope2[Scope2.TYPE = 3] = "TYPE", Scope2[Scope2.LEVEL = 12] = "LEVEL", Scope2[Scope2.ATTRIBUTE = 13] = "ATTRIBUTE", Scope2[Scope2.BLOT = 14] = "BLOT", Scope2[Scope2.INLINE = 7] = "INLINE", Scope2[Scope2.BLOCK = 11] = "BLOCK", Scope2[Scope2.BLOCK_BLOT = 10] = "BLOCK_BLOT", Scope2[Scope2.INLINE_BLOT = 6] = "INLINE_BLOT", Scope2[Scope2.BLOCK_ATTRIBUTE = 9] = "BLOCK_ATTRIBUTE", Scope2[Scope2.INLINE_ATTRIBUTE = 5] = "INLINE_ATTRIBUTE", Scope2[Scope2.ANY = 15] = "ANY", Scope2))(Scope || {}); + var Attributor = class { + constructor(attrName, keyName, options = {}) { + this.attrName = attrName, this.keyName = keyName; + const attributeBit = Scope.TYPE & Scope.ATTRIBUTE; + this.scope = options.scope != null ? ( + // Ignore type bits, force attribute bit + options.scope & Scope.LEVEL | attributeBit + ) : Scope.ATTRIBUTE, options.whitelist != null && (this.whitelist = options.whitelist); + } + static keys(node) { + return Array.from(node.attributes).map((item) => item.name); + } + add(node, value) { + return this.canAdd(node, value) ? (node.setAttribute(this.keyName, value), true) : false; + } + canAdd(_node, value) { + return this.whitelist == null ? true : typeof value == "string" ? this.whitelist.indexOf(value.replace(/["']/g, "")) > -1 : this.whitelist.indexOf(value) > -1; + } + remove(node) { + node.removeAttribute(this.keyName); + } + value(node) { + const value = node.getAttribute(this.keyName); + return this.canAdd(node, value) && value ? value : ""; + } + }; + var ParchmentError = class extends Error { + constructor(message) { + message = "[Parchment] " + message, super(message), this.message = message, this.name = this.constructor.name; + } + }; + var _Registry = class _Registry2 { + constructor() { + this.attributes = {}, this.classes = {}, this.tags = {}, this.types = {}; + } + static find(node, bubble = false) { + if (node == null) + return null; + if (this.blots.has(node)) + return this.blots.get(node) || null; + if (bubble) { + let parentNode = null; + try { + parentNode = node.parentNode; + } catch { + return null; + } + return this.find(parentNode, bubble); + } + return null; + } + create(scroll, input, value) { + const match2 = this.query(input); + if (match2 == null) + throw new ParchmentError(`Unable to create ${input} blot`); + const blotClass = match2, node = ( + // @ts-expect-error Fix me later + input instanceof Node || input.nodeType === Node.TEXT_NODE ? input : blotClass.create(value) + ), blot = new blotClass(scroll, node, value); + return _Registry2.blots.set(blot.domNode, blot), blot; + } + find(node, bubble = false) { + return _Registry2.find(node, bubble); + } + query(query, scope = Scope.ANY) { + let match2; + return typeof query == "string" ? match2 = this.types[query] || this.attributes[query] : query instanceof Text || query.nodeType === Node.TEXT_NODE ? match2 = this.types.text : typeof query == "number" ? query & Scope.LEVEL & Scope.BLOCK ? match2 = this.types.block : query & Scope.LEVEL & Scope.INLINE && (match2 = this.types.inline) : query instanceof Element && ((query.getAttribute("class") || "").split(/\s+/).some((name) => (match2 = this.classes[name], !!match2)), match2 = match2 || this.tags[query.tagName]), match2 == null ? null : "scope" in match2 && scope & Scope.LEVEL & match2.scope && scope & Scope.TYPE & match2.scope ? match2 : null; + } + register(...definitions) { + return definitions.map((definition) => { + const isBlot = "blotName" in definition, isAttr = "attrName" in definition; + if (!isBlot && !isAttr) + throw new ParchmentError("Invalid definition"); + if (isBlot && definition.blotName === "abstract") + throw new ParchmentError("Cannot register abstract class"); + const key = isBlot ? definition.blotName : isAttr ? definition.attrName : void 0; + return this.types[key] = definition, isAttr ? typeof definition.keyName == "string" && (this.attributes[definition.keyName] = definition) : isBlot && (definition.className && (this.classes[definition.className] = definition), definition.tagName && (Array.isArray(definition.tagName) ? definition.tagName = definition.tagName.map((tagName) => tagName.toUpperCase()) : definition.tagName = definition.tagName.toUpperCase(), (Array.isArray(definition.tagName) ? definition.tagName : [definition.tagName]).forEach((tag) => { + (this.tags[tag] == null || definition.className == null) && (this.tags[tag] = definition); + }))), definition; + }); + } + }; + _Registry.blots = /* @__PURE__ */ new WeakMap(); + var Registry = _Registry; + function match(node, prefix) { + return (node.getAttribute("class") || "").split(/\s+/).filter((name) => name.indexOf(`${prefix}-`) === 0); + } + var ClassAttributor = class extends Attributor { + static keys(node) { + return (node.getAttribute("class") || "").split(/\s+/).map((name) => name.split("-").slice(0, -1).join("-")); + } + add(node, value) { + return this.canAdd(node, value) ? (this.remove(node), node.classList.add(`${this.keyName}-${value}`), true) : false; + } + remove(node) { + match(node, this.keyName).forEach((name) => { + node.classList.remove(name); + }), node.classList.length === 0 && node.removeAttribute("class"); + } + value(node) { + const value = (match(node, this.keyName)[0] || "").slice(this.keyName.length + 1); + return this.canAdd(node, value) ? value : ""; + } + }; + var ClassAttributor$1 = ClassAttributor; + function camelize(name) { + const parts = name.split("-"), rest = parts.slice(1).map((part) => part[0].toUpperCase() + part.slice(1)).join(""); + return parts[0] + rest; + } + var StyleAttributor = class extends Attributor { + static keys(node) { + return (node.getAttribute("style") || "").split(";").map((value) => value.split(":")[0].trim()); + } + add(node, value) { + return this.canAdd(node, value) ? (node.style[camelize(this.keyName)] = value, true) : false; + } + remove(node) { + node.style[camelize(this.keyName)] = "", node.getAttribute("style") || node.removeAttribute("style"); + } + value(node) { + const value = node.style[camelize(this.keyName)]; + return this.canAdd(node, value) ? value : ""; + } + }; + var StyleAttributor$1 = StyleAttributor; + var AttributorStore = class { + constructor(domNode) { + this.attributes = {}, this.domNode = domNode, this.build(); + } + attribute(attribute, value) { + value ? attribute.add(this.domNode, value) && (attribute.value(this.domNode) != null ? this.attributes[attribute.attrName] = attribute : delete this.attributes[attribute.attrName]) : (attribute.remove(this.domNode), delete this.attributes[attribute.attrName]); + } + build() { + this.attributes = {}; + const blot = Registry.find(this.domNode); + if (blot == null) + return; + const attributes = Attributor.keys(this.domNode), classes = ClassAttributor$1.keys(this.domNode), styles = StyleAttributor$1.keys(this.domNode); + attributes.concat(classes).concat(styles).forEach((name) => { + const attr = blot.scroll.query(name, Scope.ATTRIBUTE); + attr instanceof Attributor && (this.attributes[attr.attrName] = attr); + }); + } + copy(target) { + Object.keys(this.attributes).forEach((key) => { + const value = this.attributes[key].value(this.domNode); + target.format(key, value); + }); + } + move(target) { + this.copy(target), Object.keys(this.attributes).forEach((key) => { + this.attributes[key].remove(this.domNode); + }), this.attributes = {}; + } + values() { + return Object.keys(this.attributes).reduce( + (attributes, name) => (attributes[name] = this.attributes[name].value(this.domNode), attributes), + {} + ); + } + }; + var AttributorStore$1 = AttributorStore; + var _ShadowBlot = class _ShadowBlot2 { + constructor(scroll, domNode) { + this.scroll = scroll, this.domNode = domNode, Registry.blots.set(domNode, this), this.prev = null, this.next = null; + } + static create(rawValue) { + if (this.tagName == null) + throw new ParchmentError("Blot definition missing tagName"); + let node, value; + return Array.isArray(this.tagName) ? (typeof rawValue == "string" ? (value = rawValue.toUpperCase(), parseInt(value, 10).toString() === value && (value = parseInt(value, 10))) : typeof rawValue == "number" && (value = rawValue), typeof value == "number" ? node = document.createElement(this.tagName[value - 1]) : value && this.tagName.indexOf(value) > -1 ? node = document.createElement(value) : node = document.createElement(this.tagName[0])) : node = document.createElement(this.tagName), this.className && node.classList.add(this.className), node; + } + // Hack for accessing inherited static methods + get statics() { + return this.constructor; + } + attach() { + } + clone() { + const domNode = this.domNode.cloneNode(false); + return this.scroll.create(domNode); + } + detach() { + this.parent != null && this.parent.removeChild(this), Registry.blots.delete(this.domNode); + } + deleteAt(index, length) { + this.isolate(index, length).remove(); + } + formatAt(index, length, name, value) { + const blot = this.isolate(index, length); + if (this.scroll.query(name, Scope.BLOT) != null && value) + blot.wrap(name, value); + else if (this.scroll.query(name, Scope.ATTRIBUTE) != null) { + const parent = this.scroll.create(this.statics.scope); + blot.wrap(parent), parent.format(name, value); + } + } + insertAt(index, value, def) { + const blot = def == null ? this.scroll.create("text", value) : this.scroll.create(value, def), ref = this.split(index); + this.parent.insertBefore(blot, ref || void 0); + } + isolate(index, length) { + const target = this.split(index); + if (target == null) + throw new Error("Attempt to isolate at end"); + return target.split(length), target; + } + length() { + return 1; + } + offset(root2 = this.parent) { + return this.parent == null || this === root2 ? 0 : this.parent.children.offset(this) + this.parent.offset(root2); + } + optimize(_context) { + this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer) && this.wrap(this.statics.requiredContainer.blotName); + } + remove() { + this.domNode.parentNode != null && this.domNode.parentNode.removeChild(this.domNode), this.detach(); + } + replaceWith(name, value) { + const replacement = typeof name == "string" ? this.scroll.create(name, value) : name; + return this.parent != null && (this.parent.insertBefore(replacement, this.next || void 0), this.remove()), replacement; + } + split(index, _force) { + return index === 0 ? this : this.next; + } + update(_mutations, _context) { + } + wrap(name, value) { + const wrapper = typeof name == "string" ? this.scroll.create(name, value) : name; + if (this.parent != null && this.parent.insertBefore(wrapper, this.next || void 0), typeof wrapper.appendChild != "function") + throw new ParchmentError(`Cannot wrap ${name}`); + return wrapper.appendChild(this), wrapper; + } + }; + _ShadowBlot.blotName = "abstract"; + var ShadowBlot = _ShadowBlot; + var _LeafBlot = class _LeafBlot2 extends ShadowBlot { + /** + * Returns the value represented by domNode if it is this Blot's type + * No checking that domNode can represent this Blot type is required so + * applications needing it should check externally before calling. + */ + static value(_domNode) { + return true; + } + /** + * Given location represented by node and offset from DOM Selection Range, + * return index to that location. + */ + index(node, offset2) { + return this.domNode === node || this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY ? Math.min(offset2, 1) : -1; + } + /** + * Given index to location within blot, return node and offset representing + * that location, consumable by DOM Selection Range + */ + position(index, _inclusive) { + let offset2 = Array.from(this.parent.domNode.childNodes).indexOf(this.domNode); + return index > 0 && (offset2 += 1), [this.parent.domNode, offset2]; + } + /** + * Return value represented by this blot + * Should not change without interaction from API or + * user change detectable by update() + */ + value() { + return { + [this.statics.blotName]: this.statics.value(this.domNode) || true + }; + } + }; + _LeafBlot.scope = Scope.INLINE_BLOT; + var LeafBlot = _LeafBlot; + var LeafBlot$1 = LeafBlot; + var LinkedList = class { + constructor() { + this.head = null, this.tail = null, this.length = 0; + } + append(...nodes) { + if (this.insertBefore(nodes[0], null), nodes.length > 1) { + const rest = nodes.slice(1); + this.append(...rest); + } + } + at(index) { + const next2 = this.iterator(); + let cur = next2(); + for (; cur && index > 0; ) + index -= 1, cur = next2(); + return cur; + } + contains(node) { + const next2 = this.iterator(); + let cur = next2(); + for (; cur; ) { + if (cur === node) + return true; + cur = next2(); + } + return false; + } + indexOf(node) { + const next2 = this.iterator(); + let cur = next2(), index = 0; + for (; cur; ) { + if (cur === node) + return index; + index += 1, cur = next2(); + } + return -1; + } + insertBefore(node, refNode) { + node != null && (this.remove(node), node.next = refNode, refNode != null ? (node.prev = refNode.prev, refNode.prev != null && (refNode.prev.next = node), refNode.prev = node, refNode === this.head && (this.head = node)) : this.tail != null ? (this.tail.next = node, node.prev = this.tail, this.tail = node) : (node.prev = null, this.head = this.tail = node), this.length += 1); + } + offset(target) { + let index = 0, cur = this.head; + for (; cur != null; ) { + if (cur === target) + return index; + index += cur.length(), cur = cur.next; + } + return -1; + } + remove(node) { + this.contains(node) && (node.prev != null && (node.prev.next = node.next), node.next != null && (node.next.prev = node.prev), node === this.head && (this.head = node.next), node === this.tail && (this.tail = node.prev), this.length -= 1); + } + iterator(curNode = this.head) { + return () => { + const ret = curNode; + return curNode != null && (curNode = curNode.next), ret; + }; + } + find(index, inclusive = false) { + const next2 = this.iterator(); + let cur = next2(); + for (; cur; ) { + const length = cur.length(); + if (index < length || inclusive && index === length && (cur.next == null || cur.next.length() !== 0)) + return [cur, index]; + index -= length, cur = next2(); + } + return [null, 0]; + } + forEach(callback) { + const next2 = this.iterator(); + let cur = next2(); + for (; cur; ) + callback(cur), cur = next2(); + } + forEachAt(index, length, callback) { + if (length <= 0) + return; + const [startNode, offset2] = this.find(index); + let curIndex = index - offset2; + const next2 = this.iterator(startNode); + let cur = next2(); + for (; cur && curIndex < index + length; ) { + const curLength = cur.length(); + index > curIndex ? callback( + cur, + index - curIndex, + Math.min(length, curIndex + curLength - index) + ) : callback(cur, 0, Math.min(curLength, index + length - curIndex)), curIndex += curLength, cur = next2(); + } + } + map(callback) { + return this.reduce((memo, cur) => (memo.push(callback(cur)), memo), []); + } + reduce(callback, memo) { + const next2 = this.iterator(); + let cur = next2(); + for (; cur; ) + memo = callback(memo, cur), cur = next2(); + return memo; + } + }; + function makeAttachedBlot(node, scroll) { + const found = scroll.find(node); + if (found) + return found; + try { + return scroll.create(node); + } catch { + const blot = scroll.create(Scope.INLINE); + return Array.from(node.childNodes).forEach((child) => { + blot.domNode.appendChild(child); + }), node.parentNode && node.parentNode.replaceChild(blot.domNode, node), blot.attach(), blot; + } + } + var _ParentBlot = class _ParentBlot2 extends ShadowBlot { + constructor(scroll, domNode) { + super(scroll, domNode), this.uiNode = null, this.build(); + } + appendChild(other) { + this.insertBefore(other); + } + attach() { + super.attach(), this.children.forEach((child) => { + child.attach(); + }); + } + attachUI(node) { + this.uiNode != null && this.uiNode.remove(), this.uiNode = node, _ParentBlot2.uiClass && this.uiNode.classList.add(_ParentBlot2.uiClass), this.uiNode.setAttribute("contenteditable", "false"), this.domNode.insertBefore(this.uiNode, this.domNode.firstChild); + } + /** + * Called during construction, should fill its own children LinkedList. + */ + build() { + this.children = new LinkedList(), Array.from(this.domNode.childNodes).filter((node) => node !== this.uiNode).reverse().forEach((node) => { + try { + const child = makeAttachedBlot(node, this.scroll); + this.insertBefore(child, this.children.head || void 0); + } catch (err) { + if (err instanceof ParchmentError) + return; + throw err; + } + }); + } + deleteAt(index, length) { + if (index === 0 && length === this.length()) + return this.remove(); + this.children.forEachAt(index, length, (child, offset2, childLength) => { + child.deleteAt(offset2, childLength); + }); + } + descendant(criteria, index = 0) { + const [child, offset2] = this.children.find(index); + return criteria.blotName == null && criteria(child) || criteria.blotName != null && child instanceof criteria ? [child, offset2] : child instanceof _ParentBlot2 ? child.descendant(criteria, offset2) : [null, -1]; + } + descendants(criteria, index = 0, length = Number.MAX_VALUE) { + let descendants = [], lengthLeft = length; + return this.children.forEachAt( + index, + length, + (child, childIndex, childLength) => { + (criteria.blotName == null && criteria(child) || criteria.blotName != null && child instanceof criteria) && descendants.push(child), child instanceof _ParentBlot2 && (descendants = descendants.concat( + child.descendants(criteria, childIndex, lengthLeft) + )), lengthLeft -= childLength; + } + ), descendants; + } + detach() { + this.children.forEach((child) => { + child.detach(); + }), super.detach(); + } + enforceAllowedChildren() { + let done = false; + this.children.forEach((child) => { + done || this.statics.allowedChildren.some( + (def) => child instanceof def + ) || (child.statics.scope === Scope.BLOCK_BLOT ? (child.next != null && this.splitAfter(child), child.prev != null && this.splitAfter(child.prev), child.parent.unwrap(), done = true) : child instanceof _ParentBlot2 ? child.unwrap() : child.remove()); + }); + } + formatAt(index, length, name, value) { + this.children.forEachAt(index, length, (child, offset2, childLength) => { + child.formatAt(offset2, childLength, name, value); + }); + } + insertAt(index, value, def) { + const [child, offset2] = this.children.find(index); + if (child) + child.insertAt(offset2, value, def); + else { + const blot = def == null ? this.scroll.create("text", value) : this.scroll.create(value, def); + this.appendChild(blot); + } + } + insertBefore(childBlot, refBlot) { + childBlot.parent != null && childBlot.parent.children.remove(childBlot); + let refDomNode = null; + this.children.insertBefore(childBlot, refBlot || null), childBlot.parent = this, refBlot != null && (refDomNode = refBlot.domNode), (this.domNode.parentNode !== childBlot.domNode || this.domNode.nextSibling !== refDomNode) && this.domNode.insertBefore(childBlot.domNode, refDomNode), childBlot.attach(); + } + length() { + return this.children.reduce((memo, child) => memo + child.length(), 0); + } + moveChildren(targetParent, refNode) { + this.children.forEach((child) => { + targetParent.insertBefore(child, refNode); + }); + } + optimize(context) { + if (super.optimize(context), this.enforceAllowedChildren(), this.uiNode != null && this.uiNode !== this.domNode.firstChild && this.domNode.insertBefore(this.uiNode, this.domNode.firstChild), this.children.length === 0) + if (this.statics.defaultChild != null) { + const child = this.scroll.create(this.statics.defaultChild.blotName); + this.appendChild(child); + } else + this.remove(); + } + path(index, inclusive = false) { + const [child, offset2] = this.children.find(index, inclusive), position = [[this, index]]; + return child instanceof _ParentBlot2 ? position.concat(child.path(offset2, inclusive)) : (child != null && position.push([child, offset2]), position); + } + removeChild(child) { + this.children.remove(child); + } + replaceWith(name, value) { + const replacement = typeof name == "string" ? this.scroll.create(name, value) : name; + return replacement instanceof _ParentBlot2 && this.moveChildren(replacement), super.replaceWith(replacement); + } + split(index, force = false) { + if (!force) { + if (index === 0) + return this; + if (index === this.length()) + return this.next; + } + const after = this.clone(); + return this.parent && this.parent.insertBefore(after, this.next || void 0), this.children.forEachAt(index, this.length(), (child, offset2, _length) => { + const split = child.split(offset2, force); + split != null && after.appendChild(split); + }), after; + } + splitAfter(child) { + const after = this.clone(); + for (; child.next != null; ) + after.appendChild(child.next); + return this.parent && this.parent.insertBefore(after, this.next || void 0), after; + } + unwrap() { + this.parent && this.moveChildren(this.parent, this.next || void 0), this.remove(); + } + update(mutations, _context) { + const addedNodes = [], removedNodes = []; + mutations.forEach((mutation) => { + mutation.target === this.domNode && mutation.type === "childList" && (addedNodes.push(...mutation.addedNodes), removedNodes.push(...mutation.removedNodes)); + }), removedNodes.forEach((node) => { + if (node.parentNode != null && // @ts-expect-error Fix me later + node.tagName !== "IFRAME" && document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) + return; + const blot = this.scroll.find(node); + blot != null && (blot.domNode.parentNode == null || blot.domNode.parentNode === this.domNode) && blot.detach(); + }), addedNodes.filter((node) => node.parentNode === this.domNode && node !== this.uiNode).sort((a, b) => a === b ? 0 : a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? 1 : -1).forEach((node) => { + let refBlot = null; + node.nextSibling != null && (refBlot = this.scroll.find(node.nextSibling)); + const blot = makeAttachedBlot(node, this.scroll); + (blot.next !== refBlot || blot.next == null) && (blot.parent != null && blot.parent.removeChild(this), this.insertBefore(blot, refBlot || void 0)); + }), this.enforceAllowedChildren(); + } + }; + _ParentBlot.uiClass = ""; + var ParentBlot = _ParentBlot; + var ParentBlot$1 = ParentBlot; + function isEqual2(obj1, obj2) { + if (Object.keys(obj1).length !== Object.keys(obj2).length) + return false; + for (const prop in obj1) + if (obj1[prop] !== obj2[prop]) + return false; + return true; + } + var _InlineBlot = class _InlineBlot2 extends ParentBlot$1 { + static create(value) { + return super.create(value); + } + static formats(domNode, scroll) { + const match2 = scroll.query(_InlineBlot2.blotName); + if (!(match2 != null && domNode.tagName === match2.tagName)) { + if (typeof this.tagName == "string") + return true; + if (Array.isArray(this.tagName)) + return domNode.tagName.toLowerCase(); + } + } + constructor(scroll, domNode) { + super(scroll, domNode), this.attributes = new AttributorStore$1(this.domNode); + } + format(name, value) { + if (name === this.statics.blotName && !value) + this.children.forEach((child) => { + child instanceof _InlineBlot2 || (child = child.wrap(_InlineBlot2.blotName, true)), this.attributes.copy(child); + }), this.unwrap(); + else { + const format = this.scroll.query(name, Scope.INLINE); + if (format == null) + return; + format instanceof Attributor ? this.attributes.attribute(format, value) : value && (name !== this.statics.blotName || this.formats()[name] !== value) && this.replaceWith(name, value); + } + } + formats() { + const formats = this.attributes.values(), format = this.statics.formats(this.domNode, this.scroll); + return format != null && (formats[this.statics.blotName] = format), formats; + } + formatAt(index, length, name, value) { + this.formats()[name] != null || this.scroll.query(name, Scope.ATTRIBUTE) ? this.isolate(index, length).format(name, value) : super.formatAt(index, length, name, value); + } + optimize(context) { + super.optimize(context); + const formats = this.formats(); + if (Object.keys(formats).length === 0) + return this.unwrap(); + const next2 = this.next; + next2 instanceof _InlineBlot2 && next2.prev === this && isEqual2(formats, next2.formats()) && (next2.moveChildren(this), next2.remove()); + } + replaceWith(name, value) { + const replacement = super.replaceWith(name, value); + return this.attributes.copy(replacement), replacement; + } + update(mutations, context) { + super.update(mutations, context), mutations.some( + (mutation) => mutation.target === this.domNode && mutation.type === "attributes" + ) && this.attributes.build(); + } + wrap(name, value) { + const wrapper = super.wrap(name, value); + return wrapper instanceof _InlineBlot2 && this.attributes.move(wrapper), wrapper; + } + }; + _InlineBlot.allowedChildren = [_InlineBlot, LeafBlot$1], _InlineBlot.blotName = "inline", _InlineBlot.scope = Scope.INLINE_BLOT, _InlineBlot.tagName = "SPAN"; + var InlineBlot = _InlineBlot; + var InlineBlot$1 = InlineBlot; + var _BlockBlot = class _BlockBlot2 extends ParentBlot$1 { + static create(value) { + return super.create(value); + } + static formats(domNode, scroll) { + const match2 = scroll.query(_BlockBlot2.blotName); + if (!(match2 != null && domNode.tagName === match2.tagName)) { + if (typeof this.tagName == "string") + return true; + if (Array.isArray(this.tagName)) + return domNode.tagName.toLowerCase(); + } + } + constructor(scroll, domNode) { + super(scroll, domNode), this.attributes = new AttributorStore$1(this.domNode); + } + format(name, value) { + const format = this.scroll.query(name, Scope.BLOCK); + format != null && (format instanceof Attributor ? this.attributes.attribute(format, value) : name === this.statics.blotName && !value ? this.replaceWith(_BlockBlot2.blotName) : value && (name !== this.statics.blotName || this.formats()[name] !== value) && this.replaceWith(name, value)); + } + formats() { + const formats = this.attributes.values(), format = this.statics.formats(this.domNode, this.scroll); + return format != null && (formats[this.statics.blotName] = format), formats; + } + formatAt(index, length, name, value) { + this.scroll.query(name, Scope.BLOCK) != null ? this.format(name, value) : super.formatAt(index, length, name, value); + } + insertAt(index, value, def) { + if (def == null || this.scroll.query(value, Scope.INLINE) != null) + super.insertAt(index, value, def); + else { + const after = this.split(index); + if (after != null) { + const blot = this.scroll.create(value, def); + after.parent.insertBefore(blot, after); + } else + throw new Error("Attempt to insertAt after block boundaries"); + } + } + replaceWith(name, value) { + const replacement = super.replaceWith(name, value); + return this.attributes.copy(replacement), replacement; + } + update(mutations, context) { + super.update(mutations, context), mutations.some( + (mutation) => mutation.target === this.domNode && mutation.type === "attributes" + ) && this.attributes.build(); + } + }; + _BlockBlot.blotName = "block", _BlockBlot.scope = Scope.BLOCK_BLOT, _BlockBlot.tagName = "P", _BlockBlot.allowedChildren = [ + InlineBlot$1, + _BlockBlot, + LeafBlot$1 + ]; + var BlockBlot = _BlockBlot; + var BlockBlot$1 = BlockBlot; + var _ContainerBlot = class _ContainerBlot2 extends ParentBlot$1 { + checkMerge() { + return this.next !== null && this.next.statics.blotName === this.statics.blotName; + } + deleteAt(index, length) { + super.deleteAt(index, length), this.enforceAllowedChildren(); + } + formatAt(index, length, name, value) { + super.formatAt(index, length, name, value), this.enforceAllowedChildren(); + } + insertAt(index, value, def) { + super.insertAt(index, value, def), this.enforceAllowedChildren(); + } + optimize(context) { + super.optimize(context), this.children.length > 0 && this.next != null && this.checkMerge() && (this.next.moveChildren(this), this.next.remove()); + } + }; + _ContainerBlot.blotName = "container", _ContainerBlot.scope = Scope.BLOCK_BLOT; + var ContainerBlot = _ContainerBlot; + var ContainerBlot$1 = ContainerBlot; + var EmbedBlot = class extends LeafBlot$1 { + static formats(_domNode, _scroll) { + } + format(name, value) { + super.formatAt(0, this.length(), name, value); + } + formatAt(index, length, name, value) { + index === 0 && length === this.length() ? this.format(name, value) : super.formatAt(index, length, name, value); + } + formats() { + return this.statics.formats(this.domNode, this.scroll); + } + }; + var EmbedBlot$1 = EmbedBlot; + var OBSERVER_CONFIG = { + attributes: true, + characterData: true, + characterDataOldValue: true, + childList: true, + subtree: true + }; + var MAX_OPTIMIZE_ITERATIONS = 100; + var _ScrollBlot = class _ScrollBlot2 extends ParentBlot$1 { + constructor(registry, node) { + super(null, node), this.registry = registry, this.scroll = this, this.build(), this.observer = new MutationObserver((mutations) => { + this.update(mutations); + }), this.observer.observe(this.domNode, OBSERVER_CONFIG), this.attach(); + } + create(input, value) { + return this.registry.create(this, input, value); + } + find(node, bubble = false) { + const blot = this.registry.find(node, bubble); + return blot ? blot.scroll === this ? blot : bubble ? this.find(blot.scroll.domNode.parentNode, true) : null : null; + } + query(query, scope = Scope.ANY) { + return this.registry.query(query, scope); + } + register(...definitions) { + return this.registry.register(...definitions); + } + build() { + this.scroll != null && super.build(); + } + detach() { + super.detach(), this.observer.disconnect(); + } + deleteAt(index, length) { + this.update(), index === 0 && length === this.length() ? this.children.forEach((child) => { + child.remove(); + }) : super.deleteAt(index, length); + } + formatAt(index, length, name, value) { + this.update(), super.formatAt(index, length, name, value); + } + insertAt(index, value, def) { + this.update(), super.insertAt(index, value, def); + } + optimize(mutations = [], context = {}) { + super.optimize(context); + const mutationsMap = context.mutationsMap || /* @__PURE__ */ new WeakMap(); + let records = Array.from(this.observer.takeRecords()); + for (; records.length > 0; ) + mutations.push(records.pop()); + const mark = (blot, markParent = true) => { + blot == null || blot === this || blot.domNode.parentNode != null && (mutationsMap.has(blot.domNode) || mutationsMap.set(blot.domNode, []), markParent && mark(blot.parent)); + }, optimize = (blot) => { + mutationsMap.has(blot.domNode) && (blot instanceof ParentBlot$1 && blot.children.forEach(optimize), mutationsMap.delete(blot.domNode), blot.optimize(context)); + }; + let remaining = mutations; + for (let i = 0; remaining.length > 0; i += 1) { + if (i >= MAX_OPTIMIZE_ITERATIONS) + throw new Error("[Parchment] Maximum optimize iterations reached"); + for (remaining.forEach((mutation) => { + const blot = this.find(mutation.target, true); + blot != null && (blot.domNode === mutation.target && (mutation.type === "childList" ? (mark(this.find(mutation.previousSibling, false)), Array.from(mutation.addedNodes).forEach((node) => { + const child = this.find(node, false); + mark(child, false), child instanceof ParentBlot$1 && child.children.forEach((grandChild) => { + mark(grandChild, false); + }); + })) : mutation.type === "attributes" && mark(blot.prev)), mark(blot)); + }), this.children.forEach(optimize), remaining = Array.from(this.observer.takeRecords()), records = remaining.slice(); records.length > 0; ) + mutations.push(records.pop()); + } + } + update(mutations, context = {}) { + mutations = mutations || this.observer.takeRecords(); + const mutationsMap = /* @__PURE__ */ new WeakMap(); + mutations.map((mutation) => { + const blot = this.find(mutation.target, true); + return blot == null ? null : mutationsMap.has(blot.domNode) ? (mutationsMap.get(blot.domNode).push(mutation), null) : (mutationsMap.set(blot.domNode, [mutation]), blot); + }).forEach((blot) => { + blot != null && blot !== this && mutationsMap.has(blot.domNode) && blot.update(mutationsMap.get(blot.domNode) || [], context); + }), context.mutationsMap = mutationsMap, mutationsMap.has(this.domNode) && super.update(mutationsMap.get(this.domNode), context), this.optimize(mutations, context); + } + }; + _ScrollBlot.blotName = "scroll", _ScrollBlot.defaultChild = BlockBlot$1, _ScrollBlot.allowedChildren = [BlockBlot$1, ContainerBlot$1], _ScrollBlot.scope = Scope.BLOCK_BLOT, _ScrollBlot.tagName = "DIV"; + var ScrollBlot = _ScrollBlot; + var ScrollBlot$1 = ScrollBlot; + var _TextBlot = class _TextBlot2 extends LeafBlot$1 { + static create(value) { + return document.createTextNode(value); + } + static value(domNode) { + return domNode.data; + } + constructor(scroll, node) { + super(scroll, node), this.text = this.statics.value(this.domNode); + } + deleteAt(index, length) { + this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length); + } + index(node, offset2) { + return this.domNode === node ? offset2 : -1; + } + insertAt(index, value, def) { + def == null ? (this.text = this.text.slice(0, index) + value + this.text.slice(index), this.domNode.data = this.text) : super.insertAt(index, value, def); + } + length() { + return this.text.length; + } + optimize(context) { + super.optimize(context), this.text = this.statics.value(this.domNode), this.text.length === 0 ? this.remove() : this.next instanceof _TextBlot2 && this.next.prev === this && (this.insertAt(this.length(), this.next.value()), this.next.remove()); + } + position(index, _inclusive = false) { + return [this.domNode, index]; + } + split(index, force = false) { + if (!force) { + if (index === 0) + return this; + if (index === this.length()) + return this.next; + } + const after = this.scroll.create(this.domNode.splitText(index)); + return this.parent.insertBefore(after, this.next || void 0), this.text = this.statics.value(this.domNode), after; + } + update(mutations, _context) { + mutations.some((mutation) => mutation.type === "characterData" && mutation.target === this.domNode) && (this.text = this.statics.value(this.domNode)); + } + value() { + return this.text; + } + }; + _TextBlot.blotName = "text", _TextBlot.scope = Scope.INLINE_BLOT; + var TextBlot = _TextBlot; + var TextBlot$1 = TextBlot; + + // node_modules/quill/core/quill.js + var import_quill_delta3 = __toESM(require_Delta(), 1); + + // node_modules/quill/core/editor.js + var import_quill_delta2 = __toESM(require_Delta(), 1); + + // node_modules/quill/blots/block.js + var import_quill_delta = __toESM(require_Delta(), 1); + + // node_modules/quill/blots/break.js + var Break = class extends EmbedBlot$1 { + static value() { + return void 0; + } + optimize() { + if (this.prev || this.next) { + this.remove(); + } + } + length() { + return 0; + } + value() { + return ""; + } + }; + Break.blotName = "break"; + Break.tagName = "BR"; + var break_default = Break; + + // node_modules/quill/blots/text.js + var Text2 = class extends TextBlot$1 { + }; + var entityMap = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'" + }; + function escapeText(text) { + return text.replace(/[&<>"']/g, (s) => entityMap[s]); + } + + // node_modules/quill/blots/inline.js + var Inline = class _Inline extends InlineBlot$1 { + static allowedChildren = [_Inline, break_default, EmbedBlot$1, Text2]; + // Lower index means deeper in the DOM tree, since not found (-1) is for embeds + static order = [ + "cursor", + "inline", + // Must be lower + "link", + // Chrome wants to be lower + "underline", + "strike", + "italic", + "bold", + "script", + "code" + // Must be higher + ]; + static compare(self2, other) { + const selfIndex = _Inline.order.indexOf(self2); + const otherIndex = _Inline.order.indexOf(other); + if (selfIndex >= 0 || otherIndex >= 0) { + return selfIndex - otherIndex; + } + if (self2 === other) { + return 0; + } + if (self2 < other) { + return -1; + } + return 1; + } + formatAt(index, length, name, value) { + if (_Inline.compare(this.statics.blotName, name) < 0 && this.scroll.query(name, Scope.BLOT)) { + const blot = this.isolate(index, length); + if (value) { + blot.wrap(name, value); + } + } else { + super.formatAt(index, length, name, value); + } + } + optimize(context) { + super.optimize(context); + if (this.parent instanceof _Inline && _Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) { + const parent = this.parent.isolate(this.offset(), this.length()); + this.moveChildren(parent); + parent.wrap(this); + } + } + }; + var inline_default = Inline; + + // node_modules/quill/blots/block.js + var NEWLINE_LENGTH = 1; + var Block = class extends BlockBlot$1 { + cache = {}; + delta() { + if (this.cache.delta == null) { + this.cache.delta = blockDelta(this); + } + return this.cache.delta; + } + deleteAt(index, length) { + super.deleteAt(index, length); + this.cache = {}; + } + formatAt(index, length, name, value) { + if (length <= 0) + return; + if (this.scroll.query(name, Scope.BLOCK)) { + if (index + length === this.length()) { + this.format(name, value); + } + } else { + super.formatAt(index, Math.min(length, this.length() - index - 1), name, value); + } + this.cache = {}; + } + insertAt(index, value, def) { + if (def != null) { + super.insertAt(index, value, def); + this.cache = {}; + return; + } + if (value.length === 0) + return; + const lines = value.split("\n"); + const text = lines.shift(); + if (text.length > 0) { + if (index < this.length() - 1 || this.children.tail == null) { + super.insertAt(Math.min(index, this.length() - 1), text); + } else { + this.children.tail.insertAt(this.children.tail.length(), text); + } + this.cache = {}; + } + let block = this; + lines.reduce((lineIndex, line) => { + block = block.split(lineIndex, true); + block.insertAt(0, line); + return line.length; + }, index + text.length); + } + insertBefore(blot, ref) { + const { + head + } = this.children; + super.insertBefore(blot, ref); + if (head instanceof break_default) { + head.remove(); + } + this.cache = {}; + } + length() { + if (this.cache.length == null) { + this.cache.length = super.length() + NEWLINE_LENGTH; + } + return this.cache.length; + } + moveChildren(target, ref) { + super.moveChildren(target, ref); + this.cache = {}; + } + optimize(context) { + super.optimize(context); + this.cache = {}; + } + path(index) { + return super.path(index, true); + } + removeChild(child) { + super.removeChild(child); + this.cache = {}; + } + split(index) { + let force = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) { + const clone = this.clone(); + if (index === 0) { + this.parent.insertBefore(clone, this); + return this; + } + this.parent.insertBefore(clone, this.next); + return clone; + } + const next2 = super.split(index, force); + this.cache = {}; + return next2; + } + }; + Block.blotName = "block"; + Block.tagName = "P"; + Block.defaultChild = break_default; + Block.allowedChildren = [break_default, inline_default, EmbedBlot$1, Text2]; + var BlockEmbed = class extends EmbedBlot$1 { + attach() { + super.attach(); + this.attributes = new AttributorStore$1(this.domNode); + } + delta() { + return new import_quill_delta.default().insert(this.value(), { + ...this.formats(), + ...this.attributes.values() + }); + } + format(name, value) { + const attribute = this.scroll.query(name, Scope.BLOCK_ATTRIBUTE); + if (attribute != null) { + this.attributes.attribute(attribute, value); + } + } + formatAt(index, length, name, value) { + this.format(name, value); + } + insertAt(index, value, def) { + if (def != null) { + super.insertAt(index, value, def); + return; + } + const lines = value.split("\n"); + const text = lines.pop(); + const blocks = lines.map((line) => { + const block = this.scroll.create(Block.blotName); + block.insertAt(0, line); + return block; + }); + const ref = this.split(index); + blocks.forEach((block) => { + this.parent.insertBefore(block, ref); + }); + if (text) { + this.parent.insertBefore(this.scroll.create("text", text), ref); + } + } + }; + BlockEmbed.scope = Scope.BLOCK_BLOT; + function blockDelta(blot) { + let filter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; + return blot.descendants(LeafBlot$1).reduce((delta, leaf) => { + if (leaf.length() === 0) { + return delta; + } + return delta.insert(leaf.value(), bubbleFormats(leaf, {}, filter)); + }, new import_quill_delta.default()).insert("\n", bubbleFormats(blot)); + } + function bubbleFormats(blot) { + let formats = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + let filter = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true; + if (blot == null) + return formats; + if ("formats" in blot && typeof blot.formats === "function") { + formats = { + ...formats, + ...blot.formats() + }; + if (filter) { + delete formats["code-token"]; + } + } + if (blot.parent == null || blot.parent.statics.blotName === "scroll" || blot.parent.statics.scope !== blot.statics.scope) { + return formats; + } + return bubbleFormats(blot.parent, formats, filter); + } + + // node_modules/quill/blots/cursor.js + var Cursor = class _Cursor extends EmbedBlot$1 { + static blotName = "cursor"; + static className = "ql-cursor"; + static tagName = "span"; + static CONTENTS = "\uFEFF"; + // Zero width no break space + static value() { + return void 0; + } + constructor(scroll, domNode, selection) { + super(scroll, domNode); + this.selection = selection; + this.textNode = document.createTextNode(_Cursor.CONTENTS); + this.domNode.appendChild(this.textNode); + this.savedLength = 0; + } + detach() { + if (this.parent != null) + this.parent.removeChild(this); + } + format(name, value) { + if (this.savedLength !== 0) { + super.format(name, value); + return; + } + let target = this; + let index = 0; + while (target != null && target.statics.scope !== Scope.BLOCK_BLOT) { + index += target.offset(target.parent); + target = target.parent; + } + if (target != null) { + this.savedLength = _Cursor.CONTENTS.length; + target.optimize(); + target.formatAt(index, _Cursor.CONTENTS.length, name, value); + this.savedLength = 0; + } + } + index(node, offset2) { + if (node === this.textNode) + return 0; + return super.index(node, offset2); + } + length() { + return this.savedLength; + } + position() { + return [this.textNode, this.textNode.data.length]; + } + remove() { + super.remove(); + this.parent = null; + } + restore() { + if (this.selection.composing || this.parent == null) + return null; + const range = this.selection.getNativeRange(); + while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) { + this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode); + } + const prevTextBlot = this.prev instanceof Text2 ? this.prev : null; + const prevTextLength = prevTextBlot ? prevTextBlot.length() : 0; + const nextTextBlot = this.next instanceof Text2 ? this.next : null; + const nextText = nextTextBlot ? nextTextBlot.text : ""; + const { + textNode + } = this; + const newText = textNode.data.split(_Cursor.CONTENTS).join(""); + textNode.data = _Cursor.CONTENTS; + let mergedTextBlot; + if (prevTextBlot) { + mergedTextBlot = prevTextBlot; + if (newText || nextTextBlot) { + prevTextBlot.insertAt(prevTextBlot.length(), newText + nextText); + if (nextTextBlot) { + nextTextBlot.remove(); + } + } + } else if (nextTextBlot) { + mergedTextBlot = nextTextBlot; + nextTextBlot.insertAt(0, newText); + } else { + const newTextNode = document.createTextNode(newText); + mergedTextBlot = this.scroll.create(newTextNode); + this.parent.insertBefore(mergedTextBlot, this); + } + this.remove(); + if (range) { + const remapOffset = (node, offset2) => { + if (prevTextBlot && node === prevTextBlot.domNode) { + return offset2; + } + if (node === textNode) { + return prevTextLength + offset2 - 1; + } + if (nextTextBlot && node === nextTextBlot.domNode) { + return prevTextLength + newText.length + offset2; + } + return null; + }; + const start3 = remapOffset(range.start.node, range.start.offset); + const end2 = remapOffset(range.end.node, range.end.offset); + if (start3 !== null && end2 !== null) { + return { + startNode: mergedTextBlot.domNode, + startOffset: start3, + endNode: mergedTextBlot.domNode, + endOffset: end2 + }; + } + } + return null; + } + update(mutations, context) { + if (mutations.some((mutation) => { + return mutation.type === "characterData" && mutation.target === this.textNode; + })) { + const range = this.restore(); + if (range) + context.range = range; + } + } + // Avoid .ql-cursor being a descendant of ``. + // The reason is Safari pushes down `` on text insertion. + // That will cause DOM nodes not sync with the model. + // + // For example ({I} is the caret), given the markup: + // \uFEFF{I} + // When typing a char "x", `` will be pushed down inside the `` first: + // \uFEFF{I} + // And then "x" will be inserted after ``: + // \uFEFFd{I} + optimize(context) { + super.optimize(context); + let { + parent + } = this; + while (parent) { + if (parent.domNode.tagName === "A") { + this.savedLength = _Cursor.CONTENTS.length; + parent.isolate(this.offset(parent), this.length()).unwrap(); + this.savedLength = 0; + break; + } + parent = parent.parent; + } + } + value() { + return ""; + } + }; + var cursor_default = Cursor; + + // node_modules/eventemitter3/index.mjs + var import_index = __toESM(require_eventemitter3(), 1); + + // node_modules/quill/core/instances.js + var instances_default2 = /* @__PURE__ */ new WeakMap(); + + // node_modules/quill/core/logger.js + var levels = ["error", "warn", "log", "info"]; + var level = "warn"; + function debug(method) { + if (level) { + if (levels.indexOf(method) <= levels.indexOf(level)) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + console[method](...args); + } + } + } + function namespace(ns) { + return levels.reduce((logger, method) => { + logger[method] = debug.bind(console, method, ns); + return logger; + }, {}); + } + namespace.level = (newLevel) => { + level = newLevel; + }; + debug.level = namespace.level; + var logger_default = namespace; + + // node_modules/quill/core/emitter.js + var debug2 = logger_default("quill:events"); + var EVENTS = ["selectionchange", "mousedown", "mouseup", "click"]; + EVENTS.forEach((eventName) => { + document.addEventListener(eventName, function() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + Array.from(document.querySelectorAll(".ql-container")).forEach((node) => { + const quill = instances_default2.get(node); + if (quill && quill.emitter) { + quill.emitter.handleDOM(...args); + } + }); + }); + }); + var Emitter = class extends import_index.default { + static events = { + EDITOR_CHANGE: "editor-change", + SCROLL_BEFORE_UPDATE: "scroll-before-update", + SCROLL_BLOT_MOUNT: "scroll-blot-mount", + SCROLL_BLOT_UNMOUNT: "scroll-blot-unmount", + SCROLL_OPTIMIZE: "scroll-optimize", + SCROLL_UPDATE: "scroll-update", + SCROLL_EMBED_UPDATE: "scroll-embed-update", + SELECTION_CHANGE: "selection-change", + TEXT_CHANGE: "text-change", + COMPOSITION_BEFORE_START: "composition-before-start", + COMPOSITION_START: "composition-start", + COMPOSITION_BEFORE_END: "composition-before-end", + COMPOSITION_END: "composition-end" + }; + static sources = { + API: "api", + SILENT: "silent", + USER: "user" + }; + constructor() { + super(); + this.domListeners = {}; + this.on("error", debug2.error); + } + emit() { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + debug2.log.call(debug2, ...args); + return super.emit(...args); + } + handleDOM(event) { + for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + args[_key3 - 1] = arguments[_key3]; + } + (this.domListeners[event.type] || []).forEach((_ref) => { + let { + node, + handler + } = _ref; + if (event.target === node || node.contains(event.target)) { + handler(event, ...args); + } + }); + } + listenDOM(eventName, node, handler) { + if (!this.domListeners[eventName]) { + this.domListeners[eventName] = []; + } + this.domListeners[eventName].push({ + node, + handler + }); + } + }; + var emitter_default = Emitter; + + // node_modules/quill/core/selection.js + var debug3 = logger_default("quill:selection"); + var Range = class { + constructor(index) { + let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + this.index = index; + this.length = length; + } + }; + var Selection = class { + constructor(scroll, emitter) { + this.emitter = emitter; + this.scroll = scroll; + this.composing = false; + this.mouseDown = false; + this.root = this.scroll.domNode; + this.cursor = this.scroll.create("cursor", this); + this.savedRange = new Range(0, 0); + this.lastRange = this.savedRange; + this.lastNative = null; + this.handleComposition(); + this.handleDragging(); + this.emitter.listenDOM("selectionchange", document, () => { + if (!this.mouseDown && !this.composing) { + setTimeout(this.update.bind(this, emitter_default.sources.USER), 1); + } + }); + this.emitter.on(emitter_default.events.SCROLL_BEFORE_UPDATE, () => { + if (!this.hasFocus()) + return; + const native = this.getNativeRange(); + if (native == null) + return; + if (native.start.node === this.cursor.textNode) + return; + this.emitter.once(emitter_default.events.SCROLL_UPDATE, (source, mutations) => { + try { + if (this.root.contains(native.start.node) && this.root.contains(native.end.node)) { + this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset); + } + const triggeredByTyping = mutations.some((mutation) => mutation.type === "characterData" || mutation.type === "childList" || mutation.type === "attributes" && mutation.target === this.root); + this.update(triggeredByTyping ? emitter_default.sources.SILENT : source); + } catch (ignored) { + } + }); + }); + this.emitter.on(emitter_default.events.SCROLL_OPTIMIZE, (mutations, context) => { + if (context.range) { + const { + startNode, + startOffset, + endNode, + endOffset + } = context.range; + this.setNativeRange(startNode, startOffset, endNode, endOffset); + this.update(emitter_default.sources.SILENT); + } + }); + this.update(emitter_default.sources.SILENT); + } + handleComposition() { + this.emitter.on(emitter_default.events.COMPOSITION_BEFORE_START, () => { + this.composing = true; + }); + this.emitter.on(emitter_default.events.COMPOSITION_END, () => { + this.composing = false; + if (this.cursor.parent) { + const range = this.cursor.restore(); + if (!range) + return; + setTimeout(() => { + this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset); + }, 1); + } + }); + } + handleDragging() { + this.emitter.listenDOM("mousedown", document.body, () => { + this.mouseDown = true; + }); + this.emitter.listenDOM("mouseup", document.body, () => { + this.mouseDown = false; + this.update(emitter_default.sources.USER); + }); + } + focus() { + if (this.hasFocus()) + return; + this.root.focus({ + preventScroll: true + }); + this.setRange(this.savedRange); + } + format(format, value) { + this.scroll.update(); + const nativeRange = this.getNativeRange(); + if (nativeRange == null || !nativeRange.native.collapsed || this.scroll.query(format, Scope.BLOCK)) + return; + if (nativeRange.start.node !== this.cursor.textNode) { + const blot = this.scroll.find(nativeRange.start.node, false); + if (blot == null) + return; + if (blot instanceof LeafBlot$1) { + const after = blot.split(nativeRange.start.offset); + blot.parent.insertBefore(this.cursor, after); + } else { + blot.insertBefore(this.cursor, nativeRange.start.node); + } + this.cursor.attach(); + } + this.cursor.format(format, value); + this.scroll.optimize(); + this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length); + this.update(); + } + getBounds(index) { + let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + const scrollLength = this.scroll.length(); + index = Math.min(index, scrollLength - 1); + length = Math.min(index + length, scrollLength - 1) - index; + let node; + let [leaf, offset2] = this.scroll.leaf(index); + if (leaf == null) + return null; + if (length > 0 && offset2 === leaf.length()) { + const [next2] = this.scroll.leaf(index + 1); + if (next2) { + const [line] = this.scroll.line(index); + const [nextLine] = this.scroll.line(index + 1); + if (line === nextLine) { + leaf = next2; + offset2 = 0; + } + } + } + [node, offset2] = leaf.position(offset2, true); + const range = document.createRange(); + if (length > 0) { + range.setStart(node, offset2); + [leaf, offset2] = this.scroll.leaf(index + length); + if (leaf == null) + return null; + [node, offset2] = leaf.position(offset2, true); + range.setEnd(node, offset2); + return range.getBoundingClientRect(); + } + let side = "left"; + let rect; + if (node instanceof Text) { + if (!node.data.length) { + return null; + } + if (offset2 < node.data.length) { + range.setStart(node, offset2); + range.setEnd(node, offset2 + 1); + } else { + range.setStart(node, offset2 - 1); + range.setEnd(node, offset2); + side = "right"; + } + rect = range.getBoundingClientRect(); + } else { + if (!(leaf.domNode instanceof Element)) + return null; + rect = leaf.domNode.getBoundingClientRect(); + if (offset2 > 0) + side = "right"; + } + return { + bottom: rect.top + rect.height, + height: rect.height, + left: rect[side], + right: rect[side], + top: rect.top, + width: 0 + }; + } + getNativeRange() { + const selection = document.getSelection(); + if (selection == null || selection.rangeCount <= 0) + return null; + const nativeRange = selection.getRangeAt(0); + if (nativeRange == null) + return null; + const range = this.normalizeNative(nativeRange); + debug3.info("getNativeRange", range); + return range; + } + getRange() { + const root2 = this.scroll.domNode; + if ("isConnected" in root2 && !root2.isConnected) { + return [null, null]; + } + const normalized = this.getNativeRange(); + if (normalized == null) + return [null, null]; + const range = this.normalizedToRange(normalized); + return [range, normalized]; + } + hasFocus() { + return document.activeElement === this.root || document.activeElement != null && contains2(this.root, document.activeElement); + } + normalizedToRange(range) { + const positions = [[range.start.node, range.start.offset]]; + if (!range.native.collapsed) { + positions.push([range.end.node, range.end.offset]); + } + const indexes = positions.map((position) => { + const [node, offset2] = position; + const blot = this.scroll.find(node, true); + const index = blot.offset(this.scroll); + if (offset2 === 0) { + return index; + } + if (blot instanceof LeafBlot$1) { + return index + blot.index(node, offset2); + } + return index + blot.length(); + }); + const end2 = Math.min(Math.max(...indexes), this.scroll.length() - 1); + const start3 = Math.min(end2, ...indexes); + return new Range(start3, end2 - start3); + } + normalizeNative(nativeRange) { + if (!contains2(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains2(this.root, nativeRange.endContainer)) { + return null; + } + const range = { + start: { + node: nativeRange.startContainer, + offset: nativeRange.startOffset + }, + end: { + node: nativeRange.endContainer, + offset: nativeRange.endOffset + }, + native: nativeRange + }; + [range.start, range.end].forEach((position) => { + let { + node, + offset: offset2 + } = position; + while (!(node instanceof Text) && node.childNodes.length > 0) { + if (node.childNodes.length > offset2) { + node = node.childNodes[offset2]; + offset2 = 0; + } else if (node.childNodes.length === offset2) { + node = node.lastChild; + if (node instanceof Text) { + offset2 = node.data.length; + } else if (node.childNodes.length > 0) { + offset2 = node.childNodes.length; + } else { + offset2 = node.childNodes.length + 1; + } + } else { + break; + } + } + position.node = node; + position.offset = offset2; + }); + return range; + } + rangeToNative(range) { + const scrollLength = this.scroll.length(); + const getPosition = (index, inclusive) => { + index = Math.min(scrollLength - 1, index); + const [leaf, leafOffset] = this.scroll.leaf(index); + return leaf ? leaf.position(leafOffset, inclusive) : [null, -1]; + }; + return [...getPosition(range.index, false), ...getPosition(range.index + range.length, true)]; + } + setNativeRange(startNode, startOffset) { + let endNode = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : startNode; + let endOffset = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : startOffset; + let force = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : false; + debug3.info("setNativeRange", startNode, startOffset, endNode, endOffset); + if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || // @ts-expect-error Fix me later + endNode.parentNode == null)) { + return; + } + const selection = document.getSelection(); + if (selection == null) + return; + if (startNode != null) { + if (!this.hasFocus()) + this.root.focus({ + preventScroll: true + }); + const { + native + } = this.getNativeRange() || {}; + if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) { + if (startNode instanceof Element && startNode.tagName === "BR") { + startOffset = Array.from(startNode.parentNode.childNodes).indexOf(startNode); + startNode = startNode.parentNode; + } + if (endNode instanceof Element && endNode.tagName === "BR") { + endOffset = Array.from(endNode.parentNode.childNodes).indexOf(endNode); + endNode = endNode.parentNode; + } + const range = document.createRange(); + range.setStart(startNode, startOffset); + range.setEnd(endNode, endOffset); + selection.removeAllRanges(); + selection.addRange(range); + } + } else { + selection.removeAllRanges(); + this.root.blur(); + } + } + setRange(range) { + let force = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + let source = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : emitter_default.sources.API; + if (typeof force === "string") { + source = force; + force = false; + } + debug3.info("setRange", range); + if (range != null) { + const args = this.rangeToNative(range); + this.setNativeRange(...args, force); + } else { + this.setNativeRange(null); + } + this.update(source); + } + update() { + let source = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : emitter_default.sources.USER; + const oldRange = this.lastRange; + const [lastRange, nativeRange] = this.getRange(); + this.lastRange = lastRange; + this.lastNative = nativeRange; + if (this.lastRange != null) { + this.savedRange = this.lastRange; + } + if (!isEqual_default(oldRange, this.lastRange)) { + if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) { + const range = this.cursor.restore(); + if (range) { + this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset); + } + } + const args = [emitter_default.events.SELECTION_CHANGE, cloneDeep_default(this.lastRange), cloneDeep_default(oldRange), source]; + this.emitter.emit(emitter_default.events.EDITOR_CHANGE, ...args); + if (source !== emitter_default.sources.SILENT) { + this.emitter.emit(...args); + } + } + } + }; + function contains2(parent, descendant) { + try { + descendant.parentNode; + } catch (e) { + return false; + } + return parent.contains(descendant); + } + var selection_default = Selection; + + // node_modules/quill/core/editor.js + var ASCII = /^[ -~]*$/; + var Editor = class { + constructor(scroll) { + this.scroll = scroll; + this.delta = this.getDelta(); + } + applyDelta(delta) { + this.scroll.update(); + let scrollLength = this.scroll.length(); + this.scroll.batchStart(); + const normalizedDelta = normalizeDelta(delta); + const deleteDelta = new import_quill_delta2.default(); + const normalizedOps = splitOpLines(normalizedDelta.ops.slice()); + normalizedOps.reduce((index, op) => { + const length = import_quill_delta2.Op.length(op); + let attributes = op.attributes || {}; + let isImplicitNewlinePrepended = false; + let isImplicitNewlineAppended = false; + if (op.insert != null) { + deleteDelta.retain(length); + if (typeof op.insert === "string") { + const text = op.insert; + isImplicitNewlineAppended = !text.endsWith("\n") && (scrollLength <= index || !!this.scroll.descendant(BlockEmbed, index)[0]); + this.scroll.insertAt(index, text); + const [line, offset2] = this.scroll.line(index); + let formats = merge_default({}, bubbleFormats(line)); + if (line instanceof Block) { + const [leaf] = line.descendant(LeafBlot$1, offset2); + if (leaf) { + formats = merge_default(formats, bubbleFormats(leaf)); + } + } + attributes = import_quill_delta2.AttributeMap.diff(formats, attributes) || {}; + } else if (typeof op.insert === "object") { + const key = Object.keys(op.insert)[0]; + if (key == null) + return index; + const isInlineEmbed = this.scroll.query(key, Scope.INLINE) != null; + if (isInlineEmbed) { + if (scrollLength <= index || !!this.scroll.descendant(BlockEmbed, index)[0]) { + isImplicitNewlineAppended = true; + } + } else if (index > 0) { + const [leaf, offset2] = this.scroll.descendant(LeafBlot$1, index - 1); + if (leaf instanceof Text2) { + const text = leaf.value(); + if (text[offset2] !== "\n") { + isImplicitNewlinePrepended = true; + } + } else if (leaf instanceof EmbedBlot$1 && leaf.statics.scope === Scope.INLINE_BLOT) { + isImplicitNewlinePrepended = true; + } + } + this.scroll.insertAt(index, key, op.insert[key]); + if (isInlineEmbed) { + const [leaf] = this.scroll.descendant(LeafBlot$1, index); + if (leaf) { + const formats = merge_default({}, bubbleFormats(leaf)); + attributes = import_quill_delta2.AttributeMap.diff(formats, attributes) || {}; + } + } + } + scrollLength += length; + } else { + deleteDelta.push(op); + if (op.retain !== null && typeof op.retain === "object") { + const key = Object.keys(op.retain)[0]; + if (key == null) + return index; + this.scroll.updateEmbedAt(index, key, op.retain[key]); + } + } + Object.keys(attributes).forEach((name) => { + this.scroll.formatAt(index, length, name, attributes[name]); + }); + const prependedLength = isImplicitNewlinePrepended ? 1 : 0; + const addedLength = isImplicitNewlineAppended ? 1 : 0; + scrollLength += prependedLength + addedLength; + deleteDelta.retain(prependedLength); + deleteDelta.delete(addedLength); + return index + length + prependedLength + addedLength; + }, 0); + deleteDelta.reduce((index, op) => { + if (typeof op.delete === "number") { + this.scroll.deleteAt(index, op.delete); + return index; + } + return index + import_quill_delta2.Op.length(op); + }, 0); + this.scroll.batchEnd(); + this.scroll.optimize(); + return this.update(normalizedDelta); + } + deleteText(index, length) { + this.scroll.deleteAt(index, length); + return this.update(new import_quill_delta2.default().retain(index).delete(length)); + } + formatLine(index, length) { + let formats = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + this.scroll.update(); + Object.keys(formats).forEach((format) => { + this.scroll.lines(index, Math.max(length, 1)).forEach((line) => { + line.format(format, formats[format]); + }); + }); + this.scroll.optimize(); + const delta = new import_quill_delta2.default().retain(index).retain(length, cloneDeep_default(formats)); + return this.update(delta); + } + formatText(index, length) { + let formats = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + Object.keys(formats).forEach((format) => { + this.scroll.formatAt(index, length, format, formats[format]); + }); + const delta = new import_quill_delta2.default().retain(index).retain(length, cloneDeep_default(formats)); + return this.update(delta); + } + getContents(index, length) { + return this.delta.slice(index, index + length); + } + getDelta() { + return this.scroll.lines().reduce((delta, line) => { + return delta.concat(line.delta()); + }, new import_quill_delta2.default()); + } + getFormat(index) { + let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + let lines = []; + let leaves = []; + if (length === 0) { + this.scroll.path(index).forEach((path) => { + const [blot] = path; + if (blot instanceof Block) { + lines.push(blot); + } else if (blot instanceof LeafBlot$1) { + leaves.push(blot); + } + }); + } else { + lines = this.scroll.lines(index, length); + leaves = this.scroll.descendants(LeafBlot$1, index, length); + } + const [lineFormats, leafFormats] = [lines, leaves].map((blots) => { + const blot = blots.shift(); + if (blot == null) + return {}; + let formats = bubbleFormats(blot); + while (Object.keys(formats).length > 0) { + const blot2 = blots.shift(); + if (blot2 == null) + return formats; + formats = combineFormats(bubbleFormats(blot2), formats); + } + return formats; + }); + return { + ...lineFormats, + ...leafFormats + }; + } + getHTML(index, length) { + const [line, lineOffset] = this.scroll.line(index); + if (line) { + const lineLength = line.length(); + const isWithinLine = line.length() >= lineOffset + length; + if (isWithinLine && !(lineOffset === 0 && length === lineLength)) { + return convertHTML(line, lineOffset, length, true); + } + return convertHTML(this.scroll, index, length, true); + } + return ""; + } + getText(index, length) { + return this.getContents(index, length).filter((op) => typeof op.insert === "string").map((op) => op.insert).join(""); + } + insertContents(index, contents) { + const normalizedDelta = normalizeDelta(contents); + const change = new import_quill_delta2.default().retain(index).concat(normalizedDelta); + this.scroll.insertContents(index, normalizedDelta); + return this.update(change); + } + insertEmbed(index, embed, value) { + this.scroll.insertAt(index, embed, value); + return this.update(new import_quill_delta2.default().retain(index).insert({ + [embed]: value + })); + } + insertText(index, text) { + let formats = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + text = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n"); + this.scroll.insertAt(index, text); + Object.keys(formats).forEach((format) => { + this.scroll.formatAt(index, text.length, format, formats[format]); + }); + return this.update(new import_quill_delta2.default().retain(index).insert(text, cloneDeep_default(formats))); + } + isBlank() { + if (this.scroll.children.length === 0) + return true; + if (this.scroll.children.length > 1) + return false; + const blot = this.scroll.children.head; + if (blot?.statics.blotName !== Block.blotName) + return false; + const block = blot; + if (block.children.length > 1) + return false; + return block.children.head instanceof break_default; + } + removeFormat(index, length) { + const text = this.getText(index, length); + const [line, offset2] = this.scroll.line(index + length); + let suffixLength = 0; + let suffix = new import_quill_delta2.default(); + if (line != null) { + suffixLength = line.length() - offset2; + suffix = line.delta().slice(offset2, offset2 + suffixLength - 1).insert("\n"); + } + const contents = this.getContents(index, length + suffixLength); + const diff = contents.diff(new import_quill_delta2.default().insert(text).concat(suffix)); + const delta = new import_quill_delta2.default().retain(index).concat(diff); + return this.applyDelta(delta); + } + update(change) { + let mutations = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : []; + let selectionInfo = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0; + const oldDelta = this.delta; + if (mutations.length === 1 && mutations[0].type === "characterData" && // @ts-expect-error Fix me later + mutations[0].target.data.match(ASCII) && this.scroll.find(mutations[0].target)) { + const textBlot = this.scroll.find(mutations[0].target); + const formats = bubbleFormats(textBlot); + const index = textBlot.offset(this.scroll); + const oldValue = mutations[0].oldValue.replace(cursor_default.CONTENTS, ""); + const oldText = new import_quill_delta2.default().insert(oldValue); + const newText = new import_quill_delta2.default().insert(textBlot.value()); + const relativeSelectionInfo = selectionInfo && { + oldRange: shiftRange(selectionInfo.oldRange, -index), + newRange: shiftRange(selectionInfo.newRange, -index) + }; + const diffDelta = new import_quill_delta2.default().retain(index).concat(oldText.diff(newText, relativeSelectionInfo)); + change = diffDelta.reduce((delta, op) => { + if (op.insert) { + return delta.insert(op.insert, formats); + } + return delta.push(op); + }, new import_quill_delta2.default()); + this.delta = oldDelta.compose(change); + } else { + this.delta = this.getDelta(); + if (!change || !isEqual_default(oldDelta.compose(change), this.delta)) { + change = oldDelta.diff(this.delta, selectionInfo); + } + } + return change; + } + }; + function convertListHTML(items, lastIndent, types) { + if (items.length === 0) { + const [endTag2] = getListType(types.pop()); + if (lastIndent <= 0) { + return ``; + } + return `${convertListHTML([], lastIndent - 1, types)}`; + } + const [{ + child, + offset: offset2, + length, + indent, + type + }, ...rest] = items; + const [tag, attribute] = getListType(type); + if (indent > lastIndent) { + types.push(type); + if (indent === lastIndent + 1) { + return `<${tag}>${convertHTML(child, offset2, length)}${convertListHTML(rest, indent, types)}`; + } + return `<${tag}>
  • ${convertListHTML(items, lastIndent + 1, types)}`; + } + const previousType = types[types.length - 1]; + if (indent === lastIndent && type === previousType) { + return `
  • ${convertHTML(child, offset2, length)}${convertListHTML(rest, indent, types)}`; + } + const [endTag] = getListType(types.pop()); + return `${convertListHTML(items, lastIndent - 1, types)}`; + } + function convertHTML(blot, index, length) { + let isRoot = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false; + if ("html" in blot && typeof blot.html === "function") { + return blot.html(index, length); + } + if (blot instanceof Text2) { + const escapedText = escapeText(blot.value().slice(index, index + length)); + return escapedText.replaceAll(" ", " "); + } + if (blot instanceof ParentBlot$1) { + if (blot.statics.blotName === "list-container") { + const items = []; + blot.children.forEachAt(index, length, (child, offset2, childLength) => { + const formats = "formats" in child && typeof child.formats === "function" ? child.formats() : {}; + items.push({ + child, + offset: offset2, + length: childLength, + indent: formats.indent || 0, + type: formats.list + }); + }); + return convertListHTML(items, -1, []); + } + const parts = []; + blot.children.forEachAt(index, length, (child, offset2, childLength) => { + parts.push(convertHTML(child, offset2, childLength)); + }); + if (isRoot || blot.statics.blotName === "list") { + return parts.join(""); + } + const { + outerHTML, + innerHTML + } = blot.domNode; + const [start3, end2] = outerHTML.split(`>${innerHTML}<`); + if (start3 === "${parts.join("")}<${end2}`; + } + return `${start3}>${parts.join("")}<${end2}`; + } + return blot.domNode instanceof Element ? blot.domNode.outerHTML : ""; + } + function combineFormats(formats, combined) { + return Object.keys(combined).reduce((merged, name) => { + if (formats[name] == null) + return merged; + const combinedValue = combined[name]; + if (combinedValue === formats[name]) { + merged[name] = combinedValue; + } else if (Array.isArray(combinedValue)) { + if (combinedValue.indexOf(formats[name]) < 0) { + merged[name] = combinedValue.concat([formats[name]]); + } else { + merged[name] = combinedValue; + } + } else { + merged[name] = [combinedValue, formats[name]]; + } + return merged; + }, {}); + } + function getListType(type) { + const tag = type === "ordered" ? "ol" : "ul"; + switch (type) { + case "checked": + return [tag, ' data-list="checked"']; + case "unchecked": + return [tag, ' data-list="unchecked"']; + default: + return [tag, ""]; + } + } + function normalizeDelta(delta) { + return delta.reduce((normalizedDelta, op) => { + if (typeof op.insert === "string") { + const text = op.insert.replace(/\r\n/g, "\n").replace(/\r/g, "\n"); + return normalizedDelta.insert(text, op.attributes); + } + return normalizedDelta.push(op); + }, new import_quill_delta2.default()); + } + function shiftRange(_ref, amount) { + let { + index, + length + } = _ref; + return new Range(index + amount, length); + } + function splitOpLines(ops) { + const split = []; + ops.forEach((op) => { + if (typeof op.insert === "string") { + const lines = op.insert.split("\n"); + lines.forEach((line, index) => { + if (index) + split.push({ + insert: "\n", + attributes: op.attributes + }); + if (line) + split.push({ + insert: line, + attributes: op.attributes + }); + }); + } else { + split.push(op); + } + }); + return split; + } + var editor_default = Editor; + + // node_modules/quill/core/module.js + var Module = class { + static DEFAULTS = {}; + constructor(quill) { + let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + this.quill = quill; + this.options = options; + } + }; + var module_default = Module; + + // node_modules/quill/blots/embed.js + var GUARD_TEXT = "\uFEFF"; + var Embed = class extends EmbedBlot$1 { + constructor(scroll, node) { + super(scroll, node); + this.contentNode = document.createElement("span"); + this.contentNode.setAttribute("contenteditable", "false"); + Array.from(this.domNode.childNodes).forEach((childNode) => { + this.contentNode.appendChild(childNode); + }); + this.leftGuard = document.createTextNode(GUARD_TEXT); + this.rightGuard = document.createTextNode(GUARD_TEXT); + this.domNode.appendChild(this.leftGuard); + this.domNode.appendChild(this.contentNode); + this.domNode.appendChild(this.rightGuard); + } + index(node, offset2) { + if (node === this.leftGuard) + return 0; + if (node === this.rightGuard) + return 1; + return super.index(node, offset2); + } + restore(node) { + let range = null; + let textNode; + const text = node.data.split(GUARD_TEXT).join(""); + if (node === this.leftGuard) { + if (this.prev instanceof Text2) { + const prevLength = this.prev.length(); + this.prev.insertAt(prevLength, text); + range = { + startNode: this.prev.domNode, + startOffset: prevLength + text.length + }; + } else { + textNode = document.createTextNode(text); + this.parent.insertBefore(this.scroll.create(textNode), this); + range = { + startNode: textNode, + startOffset: text.length + }; + } + } else if (node === this.rightGuard) { + if (this.next instanceof Text2) { + this.next.insertAt(0, text); + range = { + startNode: this.next.domNode, + startOffset: text.length + }; + } else { + textNode = document.createTextNode(text); + this.parent.insertBefore(this.scroll.create(textNode), this.next); + range = { + startNode: textNode, + startOffset: text.length + }; + } + } + node.data = GUARD_TEXT; + return range; + } + update(mutations, context) { + mutations.forEach((mutation) => { + if (mutation.type === "characterData" && (mutation.target === this.leftGuard || mutation.target === this.rightGuard)) { + const range = this.restore(mutation.target); + if (range) + context.range = range; + } + }); + } + }; + var embed_default = Embed; + + // node_modules/quill/core/composition.js + var Composition = class { + isComposing = false; + constructor(scroll, emitter) { + this.scroll = scroll; + this.emitter = emitter; + this.setupListeners(); + } + setupListeners() { + this.scroll.domNode.addEventListener("compositionstart", (event) => { + if (!this.isComposing) { + this.handleCompositionStart(event); + } + }); + this.scroll.domNode.addEventListener("compositionend", (event) => { + if (this.isComposing) { + queueMicrotask(() => { + this.handleCompositionEnd(event); + }); + } + }); + } + handleCompositionStart(event) { + const blot = event.target instanceof Node ? this.scroll.find(event.target, true) : null; + if (blot && !(blot instanceof embed_default)) { + this.emitter.emit(emitter_default.events.COMPOSITION_BEFORE_START, event); + this.scroll.batchStart(); + this.emitter.emit(emitter_default.events.COMPOSITION_START, event); + this.isComposing = true; + } + } + handleCompositionEnd(event) { + this.emitter.emit(emitter_default.events.COMPOSITION_BEFORE_END, event); + this.scroll.batchEnd(); + this.emitter.emit(emitter_default.events.COMPOSITION_END, event); + this.isComposing = false; + } + }; + var composition_default = Composition; + + // node_modules/quill/core/theme.js + var Theme = class _Theme { + static DEFAULTS = { + modules: {} + }; + static themes = { + default: _Theme + }; + modules = {}; + constructor(quill, options) { + this.quill = quill; + this.options = options; + } + init() { + Object.keys(this.options.modules).forEach((name) => { + if (this.modules[name] == null) { + this.addModule(name); + } + }); + } + addModule(name) { + const ModuleClass = this.quill.constructor.import(`modules/${name}`); + this.modules[name] = new ModuleClass(this.quill, this.options.modules[name] || {}); + return this.modules[name]; + } + }; + var theme_default = Theme; + + // node_modules/quill/core/utils/scrollRectIntoView.js + var getParentElement = (element) => element.parentElement || element.getRootNode().host || null; + var getElementRect = (element) => { + const rect = element.getBoundingClientRect(); + const scaleX = "offsetWidth" in element && Math.abs(rect.width) / element.offsetWidth || 1; + const scaleY = "offsetHeight" in element && Math.abs(rect.height) / element.offsetHeight || 1; + return { + top: rect.top, + right: rect.left + element.clientWidth * scaleX, + bottom: rect.top + element.clientHeight * scaleY, + left: rect.left + }; + }; + var paddingValueToInt = (value) => { + const number = parseInt(value, 10); + return Number.isNaN(number) ? 0 : number; + }; + var getScrollDistance = (targetStart, targetEnd, scrollStart, scrollEnd, scrollPaddingStart, scrollPaddingEnd) => { + if (targetStart < scrollStart && targetEnd > scrollEnd) { + return 0; + } + if (targetStart < scrollStart) { + return -(scrollStart - targetStart + scrollPaddingStart); + } + if (targetEnd > scrollEnd) { + return targetEnd - targetStart > scrollEnd - scrollStart ? targetStart + scrollPaddingStart - scrollStart : targetEnd - scrollEnd + scrollPaddingEnd; + } + return 0; + }; + var scrollRectIntoView = (root2, targetRect) => { + const document2 = root2.ownerDocument; + let rect = targetRect; + let current = root2; + while (current) { + const isDocumentBody = current === document2.body; + const bounding = isDocumentBody ? { + top: 0, + right: window.visualViewport?.width ?? document2.documentElement.clientWidth, + bottom: window.visualViewport?.height ?? document2.documentElement.clientHeight, + left: 0 + } : getElementRect(current); + const style = getComputedStyle(current); + const scrollDistanceX = getScrollDistance(rect.left, rect.right, bounding.left, bounding.right, paddingValueToInt(style.scrollPaddingLeft), paddingValueToInt(style.scrollPaddingRight)); + const scrollDistanceY = getScrollDistance(rect.top, rect.bottom, bounding.top, bounding.bottom, paddingValueToInt(style.scrollPaddingTop), paddingValueToInt(style.scrollPaddingBottom)); + if (scrollDistanceX || scrollDistanceY) { + if (isDocumentBody) { + document2.defaultView?.scrollBy(scrollDistanceX, scrollDistanceY); + } else { + const { + scrollLeft, + scrollTop + } = current; + if (scrollDistanceY) { + current.scrollTop += scrollDistanceY; + } + if (scrollDistanceX) { + current.scrollLeft += scrollDistanceX; + } + const scrolledLeft = current.scrollLeft - scrollLeft; + const scrolledTop = current.scrollTop - scrollTop; + rect = { + left: rect.left - scrolledLeft, + top: rect.top - scrolledTop, + right: rect.right - scrolledLeft, + bottom: rect.bottom - scrolledTop + }; + } + } + current = isDocumentBody || style.position === "fixed" ? null : getParentElement(current); + } + }; + var scrollRectIntoView_default = scrollRectIntoView; + + // node_modules/quill/core/utils/createRegistryWithFormats.js + var MAX_REGISTER_ITERATIONS = 100; + var CORE_FORMATS = ["block", "break", "cursor", "inline", "scroll", "text"]; + var createRegistryWithFormats = (formats, sourceRegistry, debug8) => { + const registry = new Registry(); + CORE_FORMATS.forEach((name) => { + const coreBlot = sourceRegistry.query(name); + if (coreBlot) + registry.register(coreBlot); + }); + formats.forEach((name) => { + let format = sourceRegistry.query(name); + if (!format) { + debug8.error(`Cannot register "${name}" specified in "formats" config. Are you sure it was registered?`); + } + let iterations = 0; + while (format) { + registry.register(format); + format = "blotName" in format ? format.requiredContainer ?? null : null; + iterations += 1; + if (iterations > MAX_REGISTER_ITERATIONS) { + debug8.error(`Cycle detected in registering blot requiredContainer: "${name}"`); + break; + } + } + }); + return registry; + }; + var createRegistryWithFormats_default = createRegistryWithFormats; + + // node_modules/quill/core/quill.js + var debug4 = logger_default("quill"); + var globalRegistry = new Registry(); + ParentBlot$1.uiClass = "ql-ui"; + var Quill = class _Quill { + static DEFAULTS = { + bounds: null, + modules: { + clipboard: true, + keyboard: true, + history: true, + uploader: true + }, + placeholder: "", + readOnly: false, + registry: globalRegistry, + theme: "default" + }; + static events = emitter_default.events; + static sources = emitter_default.sources; + static version = false ? "dev" : "2.0.3"; + static imports = { + delta: import_quill_delta3.default, + parchment: parchment_exports, + "core/module": module_default, + "core/theme": theme_default + }; + static debug(limit) { + if (limit === true) { + limit = "log"; + } + logger_default.level(limit); + } + static find(node) { + let bubble = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + return instances_default2.get(node) || globalRegistry.find(node, bubble); + } + static import(name) { + if (this.imports[name] == null) { + debug4.error(`Cannot import ${name}. Are you sure it was registered?`); + } + return this.imports[name]; + } + static register() { + if (typeof (arguments.length <= 0 ? void 0 : arguments[0]) !== "string") { + const target = arguments.length <= 0 ? void 0 : arguments[0]; + const overwrite = !!(arguments.length <= 1 ? void 0 : arguments[1]); + const name = "attrName" in target ? target.attrName : target.blotName; + if (typeof name === "string") { + this.register(`formats/${name}`, target, overwrite); + } else { + Object.keys(target).forEach((key) => { + this.register(key, target[key], overwrite); + }); + } + } else { + const path = arguments.length <= 0 ? void 0 : arguments[0]; + const target = arguments.length <= 1 ? void 0 : arguments[1]; + const overwrite = !!(arguments.length <= 2 ? void 0 : arguments[2]); + if (this.imports[path] != null && !overwrite) { + debug4.warn(`Overwriting ${path} with`, target); + } + this.imports[path] = target; + if ((path.startsWith("blots/") || path.startsWith("formats/")) && target && typeof target !== "boolean" && target.blotName !== "abstract") { + globalRegistry.register(target); + } + if (typeof target.register === "function") { + target.register(globalRegistry); + } + } + } + constructor(container) { + let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + this.options = expandConfig(container, options); + this.container = this.options.container; + if (this.container == null) { + debug4.error("Invalid Quill container", container); + return; + } + if (this.options.debug) { + _Quill.debug(this.options.debug); + } + const html = this.container.innerHTML.trim(); + this.container.classList.add("ql-container"); + this.container.innerHTML = ""; + instances_default2.set(this.container, this); + this.root = this.addContainer("ql-editor"); + this.root.classList.add("ql-blank"); + this.emitter = new emitter_default(); + const scrollBlotName = ScrollBlot$1.blotName; + const ScrollBlot2 = this.options.registry.query(scrollBlotName); + if (!ScrollBlot2 || !("blotName" in ScrollBlot2)) { + throw new Error(`Cannot initialize Quill without "${scrollBlotName}" blot`); + } + this.scroll = new ScrollBlot2(this.options.registry, this.root, { + emitter: this.emitter + }); + this.editor = new editor_default(this.scroll); + this.selection = new selection_default(this.scroll, this.emitter); + this.composition = new composition_default(this.scroll, this.emitter); + this.theme = new this.options.theme(this, this.options); + this.keyboard = this.theme.addModule("keyboard"); + this.clipboard = this.theme.addModule("clipboard"); + this.history = this.theme.addModule("history"); + this.uploader = this.theme.addModule("uploader"); + this.theme.addModule("input"); + this.theme.addModule("uiNode"); + this.theme.init(); + this.emitter.on(emitter_default.events.EDITOR_CHANGE, (type) => { + if (type === emitter_default.events.TEXT_CHANGE) { + this.root.classList.toggle("ql-blank", this.editor.isBlank()); + } + }); + this.emitter.on(emitter_default.events.SCROLL_UPDATE, (source, mutations) => { + const oldRange = this.selection.lastRange; + const [newRange] = this.selection.getRange(); + const selectionInfo = oldRange && newRange ? { + oldRange, + newRange + } : void 0; + modify.call(this, () => this.editor.update(null, mutations, selectionInfo), source); + }); + this.emitter.on(emitter_default.events.SCROLL_EMBED_UPDATE, (blot, delta) => { + const oldRange = this.selection.lastRange; + const [newRange] = this.selection.getRange(); + const selectionInfo = oldRange && newRange ? { + oldRange, + newRange + } : void 0; + modify.call(this, () => { + const change = new import_quill_delta3.default().retain(blot.offset(this)).retain({ + [blot.statics.blotName]: delta + }); + return this.editor.update(change, [], selectionInfo); + }, _Quill.sources.USER); + }); + if (html) { + const contents = this.clipboard.convert({ + html: `${html}


    `, + text: "\n" + }); + this.setContents(contents); + } + this.history.clear(); + if (this.options.placeholder) { + this.root.setAttribute("data-placeholder", this.options.placeholder); + } + if (this.options.readOnly) { + this.disable(); + } + this.allowReadOnlyEdits = false; + } + addContainer(container) { + let refNode = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null; + if (typeof container === "string") { + const className = container; + container = document.createElement("div"); + container.classList.add(className); + } + this.container.insertBefore(container, refNode); + return container; + } + blur() { + this.selection.setRange(null); + } + deleteText(index, length, source) { + [index, length, , source] = overload(index, length, source); + return modify.call(this, () => { + return this.editor.deleteText(index, length); + }, source, index, -1 * length); + } + disable() { + this.enable(false); + } + editReadOnly(modifier) { + this.allowReadOnlyEdits = true; + const value = modifier(); + this.allowReadOnlyEdits = false; + return value; + } + enable() { + let enabled = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; + this.scroll.enable(enabled); + this.container.classList.toggle("ql-disabled", !enabled); + } + focus() { + let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + this.selection.focus(); + if (!options.preventScroll) { + this.scrollSelectionIntoView(); + } + } + format(name, value) { + let source = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : emitter_default.sources.API; + return modify.call(this, () => { + const range = this.getSelection(true); + let change = new import_quill_delta3.default(); + if (range == null) + return change; + if (this.scroll.query(name, Scope.BLOCK)) { + change = this.editor.formatLine(range.index, range.length, { + [name]: value + }); + } else if (range.length === 0) { + this.selection.format(name, value); + return change; + } else { + change = this.editor.formatText(range.index, range.length, { + [name]: value + }); + } + this.setSelection(range, emitter_default.sources.SILENT); + return change; + }, source); + } + formatLine(index, length, name, value, source) { + let formats; + [index, length, formats, source] = overload( + index, + length, + // @ts-expect-error + name, + value, + source + ); + return modify.call(this, () => { + return this.editor.formatLine(index, length, formats); + }, source, index, 0); + } + formatText(index, length, name, value, source) { + let formats; + [index, length, formats, source] = overload( + // @ts-expect-error + index, + length, + name, + value, + source + ); + return modify.call(this, () => { + return this.editor.formatText(index, length, formats); + }, source, index, 0); + } + getBounds(index) { + let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + let bounds = null; + if (typeof index === "number") { + bounds = this.selection.getBounds(index, length); + } else { + bounds = this.selection.getBounds(index.index, index.length); + } + if (!bounds) + return null; + const containerBounds = this.container.getBoundingClientRect(); + return { + bottom: bounds.bottom - containerBounds.top, + height: bounds.height, + left: bounds.left - containerBounds.left, + right: bounds.right - containerBounds.left, + top: bounds.top - containerBounds.top, + width: bounds.width + }; + } + getContents() { + let index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this.getLength() - index; + [index, length] = overload(index, length); + return this.editor.getContents(index, length); + } + getFormat() { + let index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.getSelection(true); + let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + if (typeof index === "number") { + return this.editor.getFormat(index, length); + } + return this.editor.getFormat(index.index, index.length); + } + getIndex(blot) { + return blot.offset(this.scroll); + } + getLength() { + return this.scroll.length(); + } + getLeaf(index) { + return this.scroll.leaf(index); + } + getLine(index) { + return this.scroll.line(index); + } + getLines() { + let index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Number.MAX_VALUE; + if (typeof index !== "number") { + return this.scroll.lines(index.index, index.length); + } + return this.scroll.lines(index, length); + } + getModule(name) { + return this.theme.modules[name]; + } + getSelection() { + let focus = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false; + if (focus) + this.focus(); + this.update(); + return this.selection.getRange()[0]; + } + getSemanticHTML() { + let index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + let length = arguments.length > 1 ? arguments[1] : void 0; + if (typeof index === "number") { + length = length ?? this.getLength() - index; + } + [index, length] = overload(index, length); + return this.editor.getHTML(index, length); + } + getText() { + let index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + let length = arguments.length > 1 ? arguments[1] : void 0; + if (typeof index === "number") { + length = length ?? this.getLength() - index; + } + [index, length] = overload(index, length); + return this.editor.getText(index, length); + } + hasFocus() { + return this.selection.hasFocus(); + } + insertEmbed(index, embed, value) { + let source = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : _Quill.sources.API; + return modify.call(this, () => { + return this.editor.insertEmbed(index, embed, value); + }, source, index); + } + insertText(index, text, name, value, source) { + let formats; + [index, , formats, source] = overload(index, 0, name, value, source); + return modify.call(this, () => { + return this.editor.insertText(index, text, formats); + }, source, index, text.length); + } + isEnabled() { + return this.scroll.isEnabled(); + } + off() { + return this.emitter.off(...arguments); + } + on() { + return this.emitter.on(...arguments); + } + once() { + return this.emitter.once(...arguments); + } + removeFormat(index, length, source) { + [index, length, , source] = overload(index, length, source); + return modify.call(this, () => { + return this.editor.removeFormat(index, length); + }, source, index); + } + scrollRectIntoView(rect) { + scrollRectIntoView_default(this.root, rect); + } + /** + * @deprecated Use Quill#scrollSelectionIntoView() instead. + */ + scrollIntoView() { + console.warn("Quill#scrollIntoView() has been deprecated and will be removed in the near future. Please use Quill#scrollSelectionIntoView() instead."); + this.scrollSelectionIntoView(); + } + /** + * Scroll the current selection into the visible area. + * If the selection is already visible, no scrolling will occur. + */ + scrollSelectionIntoView() { + const range = this.selection.lastRange; + const bounds = range && this.selection.getBounds(range.index, range.length); + if (bounds) { + this.scrollRectIntoView(bounds); + } + } + setContents(delta) { + let source = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : emitter_default.sources.API; + return modify.call(this, () => { + delta = new import_quill_delta3.default(delta); + const length = this.getLength(); + const delete1 = this.editor.deleteText(0, length); + const applied = this.editor.insertContents(0, delta); + const delete2 = this.editor.deleteText(this.getLength() - 1, 1); + return delete1.compose(applied).compose(delete2); + }, source); + } + setSelection(index, length, source) { + if (index == null) { + this.selection.setRange(null, length || _Quill.sources.API); + } else { + [index, length, , source] = overload(index, length, source); + this.selection.setRange(new Range(Math.max(0, index), length), source); + if (source !== emitter_default.sources.SILENT) { + this.scrollSelectionIntoView(); + } + } + } + setText(text) { + let source = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : emitter_default.sources.API; + const delta = new import_quill_delta3.default().insert(text); + return this.setContents(delta, source); + } + update() { + let source = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : emitter_default.sources.USER; + const change = this.scroll.update(source); + this.selection.update(source); + return change; + } + updateContents(delta) { + let source = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : emitter_default.sources.API; + return modify.call(this, () => { + delta = new import_quill_delta3.default(delta); + return this.editor.applyDelta(delta); + }, source, true); + } + }; + function resolveSelector(selector) { + return typeof selector === "string" ? document.querySelector(selector) : selector; + } + function expandModuleConfig(config4) { + return Object.entries(config4 ?? {}).reduce((expanded, _ref) => { + let [key, value] = _ref; + return { + ...expanded, + [key]: value === true ? {} : value + }; + }, {}); + } + function omitUndefinedValuesFromOptions(obj) { + return Object.fromEntries(Object.entries(obj).filter((entry) => entry[1] !== void 0)); + } + function expandConfig(containerOrSelector, options) { + const container = resolveSelector(containerOrSelector); + if (!container) { + throw new Error("Invalid Quill container"); + } + const shouldUseDefaultTheme = !options.theme || options.theme === Quill.DEFAULTS.theme; + const theme = shouldUseDefaultTheme ? theme_default : Quill.import(`themes/${options.theme}`); + if (!theme) { + throw new Error(`Invalid theme ${options.theme}. Did you register it?`); + } + const { + modules: quillModuleDefaults, + ...quillDefaults + } = Quill.DEFAULTS; + const { + modules: themeModuleDefaults, + ...themeDefaults + } = theme.DEFAULTS; + let userModuleOptions = expandModuleConfig(options.modules); + if (userModuleOptions != null && userModuleOptions.toolbar && userModuleOptions.toolbar.constructor !== Object) { + userModuleOptions = { + ...userModuleOptions, + toolbar: { + container: userModuleOptions.toolbar + } + }; + } + const modules = merge_default({}, expandModuleConfig(quillModuleDefaults), expandModuleConfig(themeModuleDefaults), userModuleOptions); + const config4 = { + ...quillDefaults, + ...omitUndefinedValuesFromOptions(themeDefaults), + ...omitUndefinedValuesFromOptions(options) + }; + let registry = options.registry; + if (registry) { + if (options.formats) { + debug4.warn('Ignoring "formats" option because "registry" is specified'); + } + } else { + registry = options.formats ? createRegistryWithFormats_default(options.formats, config4.registry, debug4) : config4.registry; + } + return { + ...config4, + registry, + container, + theme, + modules: Object.entries(modules).reduce((modulesWithDefaults, _ref2) => { + let [name, value] = _ref2; + if (!value) + return modulesWithDefaults; + const moduleClass = Quill.import(`modules/${name}`); + if (moduleClass == null) { + debug4.error(`Cannot load ${name} module. Are you sure you registered it?`); + return modulesWithDefaults; + } + return { + ...modulesWithDefaults, + // @ts-expect-error + [name]: merge_default({}, moduleClass.DEFAULTS || {}, value) + }; + }, {}), + bounds: resolveSelector(config4.bounds) + }; + } + function modify(modifier, source, index, shift) { + if (!this.isEnabled() && source === emitter_default.sources.USER && !this.allowReadOnlyEdits) { + return new import_quill_delta3.default(); + } + let range = index == null ? null : this.getSelection(); + const oldDelta = this.editor.delta; + const change = modifier(); + if (range != null) { + if (index === true) { + index = range.index; + } + if (shift == null) { + range = shiftRange2(range, change, source); + } else if (shift !== 0) { + range = shiftRange2(range, index, shift, source); + } + this.setSelection(range, emitter_default.sources.SILENT); + } + if (change.length() > 0) { + const args = [emitter_default.events.TEXT_CHANGE, change, oldDelta, source]; + this.emitter.emit(emitter_default.events.EDITOR_CHANGE, ...args); + if (source !== emitter_default.sources.SILENT) { + this.emitter.emit(...args); + } + } + return change; + } + function overload(index, length, name, value, source) { + let formats = {}; + if (typeof index.index === "number" && typeof index.length === "number") { + if (typeof length !== "number") { + source = value; + value = name; + name = length; + length = index.length; + index = index.index; + } else { + length = index.length; + index = index.index; + } + } else if (typeof length !== "number") { + source = value; + value = name; + name = length; + length = 0; + } + if (typeof name === "object") { + formats = name; + source = value; + } else if (typeof name === "string") { + if (value != null) { + formats[name] = value; + } else { + source = name; + } + } + source = source || emitter_default.sources.API; + return [index, length, formats, source]; + } + function shiftRange2(range, index, lengthOrSource, source) { + const length = typeof lengthOrSource === "number" ? lengthOrSource : 0; + if (range == null) + return null; + let start3; + let end2; + if (index && typeof index.transformPosition === "function") { + [start3, end2] = [range.index, range.index + range.length].map((pos) => ( + // @ts-expect-error -- TODO: add a better type guard around `index` + index.transformPosition(pos, source !== emitter_default.sources.USER) + )); + } else { + [start3, end2] = [range.index, range.index + range.length].map((pos) => { + if (pos < index || pos === index && source === emitter_default.sources.USER) + return pos; + if (length >= 0) { + return pos + length; + } + return Math.max(index, pos + length); + }); + } + return new Range(start3, end2 - start3); + } + + // node_modules/quill/blots/container.js + var Container = class extends ContainerBlot$1 { + }; + var container_default = Container; + + // node_modules/quill/blots/scroll.js + var import_quill_delta4 = __toESM(require_Delta(), 1); + function isLine(blot) { + return blot instanceof Block || blot instanceof BlockEmbed; + } + function isUpdatable(blot) { + return typeof blot.updateContent === "function"; + } + var Scroll = class extends ScrollBlot$1 { + static blotName = "scroll"; + static className = "ql-editor"; + static tagName = "DIV"; + static defaultChild = Block; + static allowedChildren = [Block, BlockEmbed, container_default]; + constructor(registry, domNode, _ref) { + let { + emitter + } = _ref; + super(registry, domNode); + this.emitter = emitter; + this.batch = false; + this.optimize(); + this.enable(); + this.domNode.addEventListener("dragstart", (e) => this.handleDragStart(e)); + } + batchStart() { + if (!Array.isArray(this.batch)) { + this.batch = []; + } + } + batchEnd() { + if (!this.batch) + return; + const mutations = this.batch; + this.batch = false; + this.update(mutations); + } + emitMount(blot) { + this.emitter.emit(emitter_default.events.SCROLL_BLOT_MOUNT, blot); + } + emitUnmount(blot) { + this.emitter.emit(emitter_default.events.SCROLL_BLOT_UNMOUNT, blot); + } + emitEmbedUpdate(blot, change) { + this.emitter.emit(emitter_default.events.SCROLL_EMBED_UPDATE, blot, change); + } + deleteAt(index, length) { + const [first, offset2] = this.line(index); + const [last] = this.line(index + length); + super.deleteAt(index, length); + if (last != null && first !== last && offset2 > 0) { + if (first instanceof BlockEmbed || last instanceof BlockEmbed) { + this.optimize(); + return; + } + const ref = last.children.head instanceof break_default ? null : last.children.head; + first.moveChildren(last, ref); + first.remove(); + } + this.optimize(); + } + enable() { + let enabled = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; + this.domNode.setAttribute("contenteditable", enabled ? "true" : "false"); + } + formatAt(index, length, format, value) { + super.formatAt(index, length, format, value); + this.optimize(); + } + insertAt(index, value, def) { + if (index >= this.length()) { + if (def == null || this.scroll.query(value, Scope.BLOCK) == null) { + const blot = this.scroll.create(this.statics.defaultChild.blotName); + this.appendChild(blot); + if (def == null && value.endsWith("\n")) { + blot.insertAt(0, value.slice(0, -1), def); + } else { + blot.insertAt(0, value, def); + } + } else { + const embed = this.scroll.create(value, def); + this.appendChild(embed); + } + } else { + super.insertAt(index, value, def); + } + this.optimize(); + } + insertBefore(blot, ref) { + if (blot.statics.scope === Scope.INLINE_BLOT) { + const wrapper = this.scroll.create(this.statics.defaultChild.blotName); + wrapper.appendChild(blot); + super.insertBefore(wrapper, ref); + } else { + super.insertBefore(blot, ref); + } + } + insertContents(index, delta) { + const renderBlocks = this.deltaToRenderBlocks(delta.concat(new import_quill_delta4.default().insert("\n"))); + const last = renderBlocks.pop(); + if (last == null) + return; + this.batchStart(); + const first = renderBlocks.shift(); + if (first) { + const shouldInsertNewlineChar = first.type === "block" && (first.delta.length() === 0 || !this.descendant(BlockEmbed, index)[0] && index < this.length()); + const delta2 = first.type === "block" ? first.delta : new import_quill_delta4.default().insert({ + [first.key]: first.value + }); + insertInlineContents(this, index, delta2); + const newlineCharLength = first.type === "block" ? 1 : 0; + const lineEndIndex = index + delta2.length() + newlineCharLength; + if (shouldInsertNewlineChar) { + this.insertAt(lineEndIndex - 1, "\n"); + } + const formats = bubbleFormats(this.line(index)[0]); + const attributes = import_quill_delta4.AttributeMap.diff(formats, first.attributes) || {}; + Object.keys(attributes).forEach((name) => { + this.formatAt(lineEndIndex - 1, 1, name, attributes[name]); + }); + index = lineEndIndex; + } + let [refBlot, refBlotOffset] = this.children.find(index); + if (renderBlocks.length) { + if (refBlot) { + refBlot = refBlot.split(refBlotOffset); + refBlotOffset = 0; + } + renderBlocks.forEach((renderBlock) => { + if (renderBlock.type === "block") { + const block = this.createBlock(renderBlock.attributes, refBlot || void 0); + insertInlineContents(block, 0, renderBlock.delta); + } else { + const blockEmbed = this.create(renderBlock.key, renderBlock.value); + this.insertBefore(blockEmbed, refBlot || void 0); + Object.keys(renderBlock.attributes).forEach((name) => { + blockEmbed.format(name, renderBlock.attributes[name]); + }); + } + }); + } + if (last.type === "block" && last.delta.length()) { + const offset2 = refBlot ? refBlot.offset(refBlot.scroll) + refBlotOffset : this.length(); + insertInlineContents(this, offset2, last.delta); + } + this.batchEnd(); + this.optimize(); + } + isEnabled() { + return this.domNode.getAttribute("contenteditable") === "true"; + } + leaf(index) { + const last = this.path(index).pop(); + if (!last) { + return [null, -1]; + } + const [blot, offset2] = last; + return blot instanceof LeafBlot$1 ? [blot, offset2] : [null, -1]; + } + line(index) { + if (index === this.length()) { + return this.line(index - 1); + } + return this.descendant(isLine, index); + } + lines() { + let index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Number.MAX_VALUE; + const getLines = (blot, blotIndex, blotLength) => { + let lines = []; + let lengthLeft = blotLength; + blot.children.forEachAt(blotIndex, blotLength, (child, childIndex, childLength) => { + if (isLine(child)) { + lines.push(child); + } else if (child instanceof ContainerBlot$1) { + lines = lines.concat(getLines(child, childIndex, lengthLeft)); + } + lengthLeft -= childLength; + }); + return lines; + }; + return getLines(this, index, length); + } + optimize() { + let mutations = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : []; + let context = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + if (this.batch) + return; + super.optimize(mutations, context); + if (mutations.length > 0) { + this.emitter.emit(emitter_default.events.SCROLL_OPTIMIZE, mutations, context); + } + } + path(index) { + return super.path(index).slice(1); + } + remove() { + } + update(mutations) { + if (this.batch) { + if (Array.isArray(mutations)) { + this.batch = this.batch.concat(mutations); + } + return; + } + let source = emitter_default.sources.USER; + if (typeof mutations === "string") { + source = mutations; + } + if (!Array.isArray(mutations)) { + mutations = this.observer.takeRecords(); + } + mutations = mutations.filter((_ref2) => { + let { + target + } = _ref2; + const blot = this.find(target, true); + return blot && !isUpdatable(blot); + }); + if (mutations.length > 0) { + this.emitter.emit(emitter_default.events.SCROLL_BEFORE_UPDATE, source, mutations); + } + super.update(mutations.concat([])); + if (mutations.length > 0) { + this.emitter.emit(emitter_default.events.SCROLL_UPDATE, source, mutations); + } + } + updateEmbedAt(index, key, change) { + const [blot] = this.descendant((b) => b instanceof BlockEmbed, index); + if (blot && blot.statics.blotName === key && isUpdatable(blot)) { + blot.updateContent(change); + } + } + handleDragStart(event) { + event.preventDefault(); + } + deltaToRenderBlocks(delta) { + const renderBlocks = []; + let currentBlockDelta = new import_quill_delta4.default(); + delta.forEach((op) => { + const insert = op?.insert; + if (!insert) + return; + if (typeof insert === "string") { + const splitted = insert.split("\n"); + splitted.slice(0, -1).forEach((text) => { + currentBlockDelta.insert(text, op.attributes); + renderBlocks.push({ + type: "block", + delta: currentBlockDelta, + attributes: op.attributes ?? {} + }); + currentBlockDelta = new import_quill_delta4.default(); + }); + const last = splitted[splitted.length - 1]; + if (last) { + currentBlockDelta.insert(last, op.attributes); + } + } else { + const key = Object.keys(insert)[0]; + if (!key) + return; + if (this.query(key, Scope.INLINE)) { + currentBlockDelta.push(op); + } else { + if (currentBlockDelta.length()) { + renderBlocks.push({ + type: "block", + delta: currentBlockDelta, + attributes: {} + }); + } + currentBlockDelta = new import_quill_delta4.default(); + renderBlocks.push({ + type: "blockEmbed", + key, + value: insert[key], + attributes: op.attributes ?? {} + }); + } + } + }); + if (currentBlockDelta.length()) { + renderBlocks.push({ + type: "block", + delta: currentBlockDelta, + attributes: {} + }); + } + return renderBlocks; + } + createBlock(attributes, refBlot) { + let blotName; + const formats = {}; + Object.entries(attributes).forEach((_ref3) => { + let [key, value] = _ref3; + const isBlockBlot = this.query(key, Scope.BLOCK & Scope.BLOT) != null; + if (isBlockBlot) { + blotName = key; + } else { + formats[key] = value; + } + }); + const block = this.create(blotName || this.statics.defaultChild.blotName, blotName ? attributes[blotName] : void 0); + this.insertBefore(block, refBlot || void 0); + const length = block.length(); + Object.entries(formats).forEach((_ref4) => { + let [key, value] = _ref4; + block.formatAt(0, length, key, value); + }); + return block; + } + }; + function insertInlineContents(parent, index, inlineContents) { + inlineContents.reduce((index2, op) => { + const length = import_quill_delta4.Op.length(op); + let attributes = op.attributes || {}; + if (op.insert != null) { + if (typeof op.insert === "string") { + const text = op.insert; + parent.insertAt(index2, text); + const [leaf] = parent.descendant(LeafBlot$1, index2); + const formats = bubbleFormats(leaf); + attributes = import_quill_delta4.AttributeMap.diff(formats, attributes) || {}; + } else if (typeof op.insert === "object") { + const key = Object.keys(op.insert)[0]; + if (key == null) + return index2; + parent.insertAt(index2, key, op.insert[key]); + const isInlineEmbed = parent.scroll.query(key, Scope.INLINE) != null; + if (isInlineEmbed) { + const [leaf] = parent.descendant(LeafBlot$1, index2); + const formats = bubbleFormats(leaf); + attributes = import_quill_delta4.AttributeMap.diff(formats, attributes) || {}; + } + } + } + Object.keys(attributes).forEach((key) => { + parent.formatAt(index2, length, key, attributes[key]); + }); + return index2 + length; + }, index); + } + var scroll_default = Scroll; + + // node_modules/quill/modules/clipboard.js + var import_quill_delta6 = __toESM(require_Delta(), 1); + + // node_modules/quill/formats/align.js + var config = { + scope: Scope.BLOCK, + whitelist: ["right", "center", "justify"] + }; + var AlignAttribute = new Attributor("align", "align", config); + var AlignClass = new ClassAttributor$1("align", "ql-align", config); + var AlignStyle = new StyleAttributor$1("align", "text-align", config); + + // node_modules/quill/formats/color.js + var ColorAttributor = class extends StyleAttributor$1 { + value(domNode) { + let value = super.value(domNode); + if (!value.startsWith("rgb(")) + return value; + value = value.replace(/^[^\d]+/, "").replace(/[^\d]+$/, ""); + const hex = value.split(",").map((component) => `00${parseInt(component, 10).toString(16)}`.slice(-2)).join(""); + return `#${hex}`; + } + }; + var ColorClass = new ClassAttributor$1("color", "ql-color", { + scope: Scope.INLINE + }); + var ColorStyle = new ColorAttributor("color", "color", { + scope: Scope.INLINE + }); + + // node_modules/quill/formats/background.js + var BackgroundClass = new ClassAttributor$1("background", "ql-bg", { + scope: Scope.INLINE + }); + var BackgroundStyle = new ColorAttributor("background", "background-color", { + scope: Scope.INLINE + }); + + // node_modules/quill/formats/code.js + var CodeBlockContainer = class extends container_default { + static create(value) { + const domNode = super.create(value); + domNode.setAttribute("spellcheck", "false"); + return domNode; + } + code(index, length) { + return this.children.map((child) => child.length() <= 1 ? "" : child.domNode.innerText).join("\n").slice(index, index + length); + } + html(index, length) { + return `
    +${escapeText(this.code(index, length))}
    +
    `; + } + }; + var CodeBlock = class extends Block { + static TAB = " "; + static register() { + Quill.register(CodeBlockContainer); + } + }; + var Code = class extends inline_default { + }; + Code.blotName = "code"; + Code.tagName = "CODE"; + CodeBlock.blotName = "code-block"; + CodeBlock.className = "ql-code-block"; + CodeBlock.tagName = "DIV"; + CodeBlockContainer.blotName = "code-block-container"; + CodeBlockContainer.className = "ql-code-block-container"; + CodeBlockContainer.tagName = "DIV"; + CodeBlockContainer.allowedChildren = [CodeBlock]; + CodeBlock.allowedChildren = [Text2, break_default, cursor_default]; + CodeBlock.requiredContainer = CodeBlockContainer; + + // node_modules/quill/formats/direction.js + var config2 = { + scope: Scope.BLOCK, + whitelist: ["rtl"] + }; + var DirectionAttribute = new Attributor("direction", "dir", config2); + var DirectionClass = new ClassAttributor$1("direction", "ql-direction", config2); + var DirectionStyle = new StyleAttributor$1("direction", "direction", config2); + + // node_modules/quill/formats/font.js + var config3 = { + scope: Scope.INLINE, + whitelist: ["serif", "monospace"] + }; + var FontClass = new ClassAttributor$1("font", "ql-font", config3); + var FontStyleAttributor = class extends StyleAttributor$1 { + value(node) { + return super.value(node).replace(/["']/g, ""); + } + }; + var FontStyle = new FontStyleAttributor("font", "font-family", config3); + + // node_modules/quill/formats/size.js + var SizeClass = new ClassAttributor$1("size", "ql-size", { + scope: Scope.INLINE, + whitelist: ["small", "large", "huge"] + }); + var SizeStyle = new StyleAttributor$1("size", "font-size", { + scope: Scope.INLINE, + whitelist: ["10px", "18px", "32px"] + }); + + // node_modules/quill/modules/keyboard.js + var import_quill_delta5 = __toESM(require_Delta(), 1); + var debug5 = logger_default("quill:keyboard"); + var SHORTKEY = /Mac/i.test(navigator.platform) ? "metaKey" : "ctrlKey"; + var Keyboard = class _Keyboard extends module_default { + static match(evt, binding) { + if (["altKey", "ctrlKey", "metaKey", "shiftKey"].some((key) => { + return !!binding[key] !== evt[key] && binding[key] !== null; + })) { + return false; + } + return binding.key === evt.key || binding.key === evt.which; + } + constructor(quill, options) { + super(quill, options); + this.bindings = {}; + Object.keys(this.options.bindings).forEach((name) => { + if (this.options.bindings[name]) { + this.addBinding(this.options.bindings[name]); + } + }); + this.addBinding({ + key: "Enter", + shiftKey: null + }, this.handleEnter); + this.addBinding({ + key: "Enter", + metaKey: null, + ctrlKey: null, + altKey: null + }, () => { + }); + if (/Firefox/i.test(navigator.userAgent)) { + this.addBinding({ + key: "Backspace" + }, { + collapsed: true + }, this.handleBackspace); + this.addBinding({ + key: "Delete" + }, { + collapsed: true + }, this.handleDelete); + } else { + this.addBinding({ + key: "Backspace" + }, { + collapsed: true, + prefix: /^.?$/ + }, this.handleBackspace); + this.addBinding({ + key: "Delete" + }, { + collapsed: true, + suffix: /^.?$/ + }, this.handleDelete); + } + this.addBinding({ + key: "Backspace" + }, { + collapsed: false + }, this.handleDeleteRange); + this.addBinding({ + key: "Delete" + }, { + collapsed: false + }, this.handleDeleteRange); + this.addBinding({ + key: "Backspace", + altKey: null, + ctrlKey: null, + metaKey: null, + shiftKey: null + }, { + collapsed: true, + offset: 0 + }, this.handleBackspace); + this.listen(); + } + addBinding(keyBinding) { + let context = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + let handler = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + const binding = normalize(keyBinding); + if (binding == null) { + debug5.warn("Attempted to add invalid keyboard binding", binding); + return; + } + if (typeof context === "function") { + context = { + handler: context + }; + } + if (typeof handler === "function") { + handler = { + handler + }; + } + const keys2 = Array.isArray(binding.key) ? binding.key : [binding.key]; + keys2.forEach((key) => { + const singleBinding = { + ...binding, + key, + ...context, + ...handler + }; + this.bindings[singleBinding.key] = this.bindings[singleBinding.key] || []; + this.bindings[singleBinding.key].push(singleBinding); + }); + } + listen() { + this.quill.root.addEventListener("keydown", (evt) => { + if (evt.defaultPrevented || evt.isComposing) + return; + const isComposing = evt.keyCode === 229 && (evt.key === "Enter" || evt.key === "Backspace"); + if (isComposing) + return; + const bindings = (this.bindings[evt.key] || []).concat(this.bindings[evt.which] || []); + const matches2 = bindings.filter((binding) => _Keyboard.match(evt, binding)); + if (matches2.length === 0) + return; + const blot = Quill.find(evt.target, true); + if (blot && blot.scroll !== this.quill.scroll) + return; + const range = this.quill.getSelection(); + if (range == null || !this.quill.hasFocus()) + return; + const [line, offset2] = this.quill.getLine(range.index); + const [leafStart, offsetStart] = this.quill.getLeaf(range.index); + const [leafEnd, offsetEnd] = range.length === 0 ? [leafStart, offsetStart] : this.quill.getLeaf(range.index + range.length); + const prefixText = leafStart instanceof TextBlot$1 ? leafStart.value().slice(0, offsetStart) : ""; + const suffixText = leafEnd instanceof TextBlot$1 ? leafEnd.value().slice(offsetEnd) : ""; + const curContext = { + collapsed: range.length === 0, + // @ts-expect-error Fix me later + empty: range.length === 0 && line.length() <= 1, + format: this.quill.getFormat(range), + line, + offset: offset2, + prefix: prefixText, + suffix: suffixText, + event: evt + }; + const prevented = matches2.some((binding) => { + if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) { + return false; + } + if (binding.empty != null && binding.empty !== curContext.empty) { + return false; + } + if (binding.offset != null && binding.offset !== curContext.offset) { + return false; + } + if (Array.isArray(binding.format)) { + if (binding.format.every((name) => curContext.format[name] == null)) { + return false; + } + } else if (typeof binding.format === "object") { + if (!Object.keys(binding.format).every((name) => { + if (binding.format[name] === true) + return curContext.format[name] != null; + if (binding.format[name] === false) + return curContext.format[name] == null; + return isEqual_default(binding.format[name], curContext.format[name]); + })) { + return false; + } + } + if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) { + return false; + } + if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) { + return false; + } + return binding.handler.call(this, range, curContext, binding) !== true; + }); + if (prevented) { + evt.preventDefault(); + } + }); + } + handleBackspace(range, context) { + const length = /[\uD800-\uDBFF][\uDC00-\uDFFF]$/.test(context.prefix) ? 2 : 1; + if (range.index === 0 || this.quill.getLength() <= 1) + return; + let formats = {}; + const [line] = this.quill.getLine(range.index); + let delta = new import_quill_delta5.default().retain(range.index - length).delete(length); + if (context.offset === 0) { + const [prev] = this.quill.getLine(range.index - 1); + if (prev) { + const isPrevLineEmpty = prev.statics.blotName === "block" && prev.length() <= 1; + if (!isPrevLineEmpty) { + const curFormats = line.formats(); + const prevFormats = this.quill.getFormat(range.index - 1, 1); + formats = import_quill_delta5.AttributeMap.diff(curFormats, prevFormats) || {}; + if (Object.keys(formats).length > 0) { + const formatDelta = new import_quill_delta5.default().retain(range.index + line.length() - 2).retain(1, formats); + delta = delta.compose(formatDelta); + } + } + } + } + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.focus(); + } + handleDelete(range, context) { + const length = /^[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(context.suffix) ? 2 : 1; + if (range.index >= this.quill.getLength() - length) + return; + let formats = {}; + const [line] = this.quill.getLine(range.index); + let delta = new import_quill_delta5.default().retain(range.index).delete(length); + if (context.offset >= line.length() - 1) { + const [next2] = this.quill.getLine(range.index + 1); + if (next2) { + const curFormats = line.formats(); + const nextFormats = this.quill.getFormat(range.index, 1); + formats = import_quill_delta5.AttributeMap.diff(curFormats, nextFormats) || {}; + if (Object.keys(formats).length > 0) { + delta = delta.retain(next2.length() - 1).retain(1, formats); + } + } + } + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.focus(); + } + handleDeleteRange(range) { + deleteRange({ + range, + quill: this.quill + }); + this.quill.focus(); + } + handleEnter(range, context) { + const lineFormats = Object.keys(context.format).reduce((formats, format) => { + if (this.quill.scroll.query(format, Scope.BLOCK) && !Array.isArray(context.format[format])) { + formats[format] = context.format[format]; + } + return formats; + }, {}); + const delta = new import_quill_delta5.default().retain(range.index).delete(range.length).insert("\n", lineFormats); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.setSelection(range.index + 1, Quill.sources.SILENT); + this.quill.focus(); + } + }; + var defaultOptions = { + bindings: { + bold: makeFormatHandler("bold"), + italic: makeFormatHandler("italic"), + underline: makeFormatHandler("underline"), + indent: { + // highlight tab or tab at beginning of list, indent or blockquote + key: "Tab", + format: ["blockquote", "indent", "list"], + handler(range, context) { + if (context.collapsed && context.offset !== 0) + return true; + this.quill.format("indent", "+1", Quill.sources.USER); + return false; + } + }, + outdent: { + key: "Tab", + shiftKey: true, + format: ["blockquote", "indent", "list"], + // highlight tab or tab at beginning of list, indent or blockquote + handler(range, context) { + if (context.collapsed && context.offset !== 0) + return true; + this.quill.format("indent", "-1", Quill.sources.USER); + return false; + } + }, + "outdent backspace": { + key: "Backspace", + collapsed: true, + shiftKey: null, + metaKey: null, + ctrlKey: null, + altKey: null, + format: ["indent", "list"], + offset: 0, + handler(range, context) { + if (context.format.indent != null) { + this.quill.format("indent", "-1", Quill.sources.USER); + } else if (context.format.list != null) { + this.quill.format("list", false, Quill.sources.USER); + } + } + }, + "indent code-block": makeCodeBlockHandler(true), + "outdent code-block": makeCodeBlockHandler(false), + "remove tab": { + key: "Tab", + shiftKey: true, + collapsed: true, + prefix: /\t$/, + handler(range) { + this.quill.deleteText(range.index - 1, 1, Quill.sources.USER); + } + }, + tab: { + key: "Tab", + handler(range, context) { + if (context.format.table) + return true; + this.quill.history.cutoff(); + const delta = new import_quill_delta5.default().retain(range.index).delete(range.length).insert(" "); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.history.cutoff(); + this.quill.setSelection(range.index + 1, Quill.sources.SILENT); + return false; + } + }, + "blockquote empty enter": { + key: "Enter", + collapsed: true, + format: ["blockquote"], + empty: true, + handler() { + this.quill.format("blockquote", false, Quill.sources.USER); + } + }, + "list empty enter": { + key: "Enter", + collapsed: true, + format: ["list"], + empty: true, + handler(range, context) { + const formats = { + list: false + }; + if (context.format.indent) { + formats.indent = false; + } + this.quill.formatLine(range.index, range.length, formats, Quill.sources.USER); + } + }, + "checklist enter": { + key: "Enter", + collapsed: true, + format: { + list: "checked" + }, + handler(range) { + const [line, offset2] = this.quill.getLine(range.index); + const formats = { + // @ts-expect-error Fix me later + ...line.formats(), + list: "checked" + }; + const delta = new import_quill_delta5.default().retain(range.index).insert("\n", formats).retain(line.length() - offset2 - 1).retain(1, { + list: "unchecked" + }); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.setSelection(range.index + 1, Quill.sources.SILENT); + this.quill.scrollSelectionIntoView(); + } + }, + "header enter": { + key: "Enter", + collapsed: true, + format: ["header"], + suffix: /^$/, + handler(range, context) { + const [line, offset2] = this.quill.getLine(range.index); + const delta = new import_quill_delta5.default().retain(range.index).insert("\n", context.format).retain(line.length() - offset2 - 1).retain(1, { + header: null + }); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.setSelection(range.index + 1, Quill.sources.SILENT); + this.quill.scrollSelectionIntoView(); + } + }, + "table backspace": { + key: "Backspace", + format: ["table"], + collapsed: true, + offset: 0, + handler() { + } + }, + "table delete": { + key: "Delete", + format: ["table"], + collapsed: true, + suffix: /^$/, + handler() { + } + }, + "table enter": { + key: "Enter", + shiftKey: null, + format: ["table"], + handler(range) { + const module2 = this.quill.getModule("table"); + if (module2) { + const [table, row, cell, offset2] = module2.getTable(range); + const shift = tableSide(table, row, cell, offset2); + if (shift == null) + return; + let index = table.offset(); + if (shift < 0) { + const delta = new import_quill_delta5.default().retain(index).insert("\n"); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.setSelection(range.index + 1, range.length, Quill.sources.SILENT); + } else if (shift > 0) { + index += table.length(); + const delta = new import_quill_delta5.default().retain(index).insert("\n"); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.setSelection(index, Quill.sources.USER); + } + } + } + }, + "table tab": { + key: "Tab", + shiftKey: null, + format: ["table"], + handler(range, context) { + const { + event, + line: cell + } = context; + const offset2 = cell.offset(this.quill.scroll); + if (event.shiftKey) { + this.quill.setSelection(offset2 - 1, Quill.sources.USER); + } else { + this.quill.setSelection(offset2 + cell.length(), Quill.sources.USER); + } + } + }, + "list autofill": { + key: " ", + shiftKey: null, + collapsed: true, + format: { + "code-block": false, + blockquote: false, + table: false + }, + prefix: /^\s*?(\d+\.|-|\*|\[ ?\]|\[x\])$/, + handler(range, context) { + if (this.quill.scroll.query("list") == null) + return true; + const { + length + } = context.prefix; + const [line, offset2] = this.quill.getLine(range.index); + if (offset2 > length) + return true; + let value; + switch (context.prefix.trim()) { + case "[]": + case "[ ]": + value = "unchecked"; + break; + case "[x]": + value = "checked"; + break; + case "-": + case "*": + value = "bullet"; + break; + default: + value = "ordered"; + } + this.quill.insertText(range.index, " ", Quill.sources.USER); + this.quill.history.cutoff(); + const delta = new import_quill_delta5.default().retain(range.index - offset2).delete(length + 1).retain(line.length() - 2 - offset2).retain(1, { + list: value + }); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.history.cutoff(); + this.quill.setSelection(range.index - length, Quill.sources.SILENT); + return false; + } + }, + "code exit": { + key: "Enter", + collapsed: true, + format: ["code-block"], + prefix: /^$/, + suffix: /^\s*$/, + handler(range) { + const [line, offset2] = this.quill.getLine(range.index); + let numLines = 2; + let cur = line; + while (cur != null && cur.length() <= 1 && cur.formats()["code-block"]) { + cur = cur.prev; + numLines -= 1; + if (numLines <= 0) { + const delta = new import_quill_delta5.default().retain(range.index + line.length() - offset2 - 2).retain(1, { + "code-block": null + }).delete(1); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.setSelection(range.index - 1, Quill.sources.SILENT); + return false; + } + } + return true; + } + }, + "embed left": makeEmbedArrowHandler("ArrowLeft", false), + "embed left shift": makeEmbedArrowHandler("ArrowLeft", true), + "embed right": makeEmbedArrowHandler("ArrowRight", false), + "embed right shift": makeEmbedArrowHandler("ArrowRight", true), + "table down": makeTableArrowHandler(false), + "table up": makeTableArrowHandler(true) + } + }; + Keyboard.DEFAULTS = defaultOptions; + function makeCodeBlockHandler(indent) { + return { + key: "Tab", + shiftKey: !indent, + format: { + "code-block": true + }, + handler(range, _ref) { + let { + event + } = _ref; + const CodeBlock2 = this.quill.scroll.query("code-block"); + const { + TAB + } = CodeBlock2; + if (range.length === 0 && !event.shiftKey) { + this.quill.insertText(range.index, TAB, Quill.sources.USER); + this.quill.setSelection(range.index + TAB.length, Quill.sources.SILENT); + return; + } + const lines = range.length === 0 ? this.quill.getLines(range.index, 1) : this.quill.getLines(range); + let { + index, + length + } = range; + lines.forEach((line, i) => { + if (indent) { + line.insertAt(0, TAB); + if (i === 0) { + index += TAB.length; + } else { + length += TAB.length; + } + } else if (line.domNode.textContent.startsWith(TAB)) { + line.deleteAt(0, TAB.length); + if (i === 0) { + index -= TAB.length; + } else { + length -= TAB.length; + } + } + }); + this.quill.update(Quill.sources.USER); + this.quill.setSelection(index, length, Quill.sources.SILENT); + } + }; + } + function makeEmbedArrowHandler(key, shiftKey) { + const where = key === "ArrowLeft" ? "prefix" : "suffix"; + return { + key, + shiftKey, + altKey: null, + [where]: /^$/, + handler(range) { + let { + index + } = range; + if (key === "ArrowRight") { + index += range.length + 1; + } + const [leaf] = this.quill.getLeaf(index); + if (!(leaf instanceof EmbedBlot$1)) + return true; + if (key === "ArrowLeft") { + if (shiftKey) { + this.quill.setSelection(range.index - 1, range.length + 1, Quill.sources.USER); + } else { + this.quill.setSelection(range.index - 1, Quill.sources.USER); + } + } else if (shiftKey) { + this.quill.setSelection(range.index, range.length + 1, Quill.sources.USER); + } else { + this.quill.setSelection(range.index + range.length + 1, Quill.sources.USER); + } + return false; + } + }; + } + function makeFormatHandler(format) { + return { + key: format[0], + shortKey: true, + handler(range, context) { + this.quill.format(format, !context.format[format], Quill.sources.USER); + } + }; + } + function makeTableArrowHandler(up) { + return { + key: up ? "ArrowUp" : "ArrowDown", + collapsed: true, + format: ["table"], + handler(range, context) { + const key = up ? "prev" : "next"; + const cell = context.line; + const targetRow = cell.parent[key]; + if (targetRow != null) { + if (targetRow.statics.blotName === "table-row") { + let targetCell = targetRow.children.head; + let cur = cell; + while (cur.prev != null) { + cur = cur.prev; + targetCell = targetCell.next; + } + const index = targetCell.offset(this.quill.scroll) + Math.min(context.offset, targetCell.length() - 1); + this.quill.setSelection(index, 0, Quill.sources.USER); + } + } else { + const targetLine = cell.table()[key]; + if (targetLine != null) { + if (up) { + this.quill.setSelection(targetLine.offset(this.quill.scroll) + targetLine.length() - 1, 0, Quill.sources.USER); + } else { + this.quill.setSelection(targetLine.offset(this.quill.scroll), 0, Quill.sources.USER); + } + } + } + return false; + } + }; + } + function normalize(binding) { + if (typeof binding === "string" || typeof binding === "number") { + binding = { + key: binding + }; + } else if (typeof binding === "object") { + binding = cloneDeep_default(binding); + } else { + return null; + } + if (binding.shortKey) { + binding[SHORTKEY] = binding.shortKey; + delete binding.shortKey; + } + return binding; + } + function deleteRange(_ref2) { + let { + quill, + range + } = _ref2; + const lines = quill.getLines(range); + let formats = {}; + if (lines.length > 1) { + const firstFormats = lines[0].formats(); + const lastFormats = lines[lines.length - 1].formats(); + formats = import_quill_delta5.AttributeMap.diff(lastFormats, firstFormats) || {}; + } + quill.deleteText(range, Quill.sources.USER); + if (Object.keys(formats).length > 0) { + quill.formatLine(range.index, 1, formats, Quill.sources.USER); + } + quill.setSelection(range.index, Quill.sources.SILENT); + } + function tableSide(_table, row, cell, offset2) { + if (row.prev == null && row.next == null) { + if (cell.prev == null && cell.next == null) { + return offset2 === 0 ? -1 : 1; + } + return cell.prev == null ? -1 : 1; + } + if (row.prev == null) { + return -1; + } + if (row.next == null) { + return 1; + } + return null; + } + + // node_modules/quill/modules/normalizeExternalHTML/normalizers/googleDocs.js + var normalWeightRegexp = /font-weight:\s*normal/; + var blockTagNames = ["P", "OL", "UL"]; + var isBlockElement = (element) => { + return element && blockTagNames.includes(element.tagName); + }; + var normalizeEmptyLines = (doc) => { + Array.from(doc.querySelectorAll("br")).filter((br) => isBlockElement(br.previousElementSibling) && isBlockElement(br.nextElementSibling)).forEach((br) => { + br.parentNode?.removeChild(br); + }); + }; + var normalizeFontWeight = (doc) => { + Array.from(doc.querySelectorAll('b[style*="font-weight"]')).filter((node) => node.getAttribute("style")?.match(normalWeightRegexp)).forEach((node) => { + const fragment = doc.createDocumentFragment(); + fragment.append(...node.childNodes); + node.parentNode?.replaceChild(fragment, node); + }); + }; + function normalize2(doc) { + if (doc.querySelector('[id^="docs-internal-guid-"]')) { + normalizeFontWeight(doc); + normalizeEmptyLines(doc); + } + } + + // node_modules/quill/modules/normalizeExternalHTML/normalizers/msWord.js + var ignoreRegexp = /\bmso-list:[^;]*ignore/i; + var idRegexp = /\bmso-list:[^;]*\bl(\d+)/i; + var indentRegexp = /\bmso-list:[^;]*\blevel(\d+)/i; + var parseListItem = (element, html) => { + const style = element.getAttribute("style"); + const idMatch = style?.match(idRegexp); + if (!idMatch) { + return null; + } + const id = Number(idMatch[1]); + const indentMatch = style?.match(indentRegexp); + const indent = indentMatch ? Number(indentMatch[1]) : 1; + const typeRegexp = new RegExp(`@list l${id}:level${indent}\\s*\\{[^\\}]*mso-level-number-format:\\s*([\\w-]+)`, "i"); + const typeMatch = html.match(typeRegexp); + const type = typeMatch && typeMatch[1] === "bullet" ? "bullet" : "ordered"; + return { + id, + indent, + type, + element + }; + }; + var normalizeListItem = (doc) => { + const msoList = Array.from(doc.querySelectorAll("[style*=mso-list]")); + const ignored = []; + const others = []; + msoList.forEach((node) => { + const shouldIgnore = (node.getAttribute("style") || "").match(ignoreRegexp); + if (shouldIgnore) { + ignored.push(node); + } else { + others.push(node); + } + }); + ignored.forEach((node) => node.parentNode?.removeChild(node)); + const html = doc.documentElement.innerHTML; + const listItems = others.map((element) => parseListItem(element, html)).filter((parsed) => parsed); + while (listItems.length) { + const childListItems = []; + let current = listItems.shift(); + while (current) { + childListItems.push(current); + current = listItems.length && listItems[0]?.element === current.element.nextElementSibling && // Different id means the next item doesn't belong to this group. + listItems[0].id === current.id ? listItems.shift() : null; + } + const ul = document.createElement("ul"); + childListItems.forEach((listItem) => { + const li = document.createElement("li"); + li.setAttribute("data-list", listItem.type); + if (listItem.indent > 1) { + li.setAttribute("class", `ql-indent-${listItem.indent - 1}`); + } + li.innerHTML = listItem.element.innerHTML; + ul.appendChild(li); + }); + const element = childListItems[0]?.element; + const { + parentNode + } = element ?? {}; + if (element) { + parentNode?.replaceChild(ul, element); + } + childListItems.slice(1).forEach((_ref) => { + let { + element: e + } = _ref; + parentNode?.removeChild(e); + }); + } + }; + function normalize3(doc) { + if (doc.documentElement.getAttribute("xmlns:w") === "urn:schemas-microsoft-com:office:word") { + normalizeListItem(doc); + } + } + + // node_modules/quill/modules/normalizeExternalHTML/index.js + var NORMALIZERS = [normalize3, normalize2]; + var normalizeExternalHTML = (doc) => { + if (doc.documentElement) { + NORMALIZERS.forEach((normalize4) => { + normalize4(doc); + }); + } + }; + var normalizeExternalHTML_default = normalizeExternalHTML; + + // node_modules/quill/modules/clipboard.js + var debug6 = logger_default("quill:clipboard"); + var CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ["br", matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ["li", matchIndent], ["ol, ul", matchList], ["pre", matchCodeBlock], ["tr", matchTable], ["b", createMatchAlias("bold")], ["i", createMatchAlias("italic")], ["strike", createMatchAlias("strike")], ["style", matchIgnore]]; + var ATTRIBUTE_ATTRIBUTORS = [AlignAttribute, DirectionAttribute].reduce((memo, attr) => { + memo[attr.keyName] = attr; + return memo; + }, {}); + var STYLE_ATTRIBUTORS = [AlignStyle, BackgroundStyle, ColorStyle, DirectionStyle, FontStyle, SizeStyle].reduce((memo, attr) => { + memo[attr.keyName] = attr; + return memo; + }, {}); + var Clipboard = class extends module_default { + static DEFAULTS = { + matchers: [] + }; + constructor(quill, options) { + super(quill, options); + this.quill.root.addEventListener("copy", (e) => this.onCaptureCopy(e, false)); + this.quill.root.addEventListener("cut", (e) => this.onCaptureCopy(e, true)); + this.quill.root.addEventListener("paste", this.onCapturePaste.bind(this)); + this.matchers = []; + CLIPBOARD_CONFIG.concat(this.options.matchers ?? []).forEach((_ref) => { + let [selector, matcher] = _ref; + this.addMatcher(selector, matcher); + }); + } + addMatcher(selector, matcher) { + this.matchers.push([selector, matcher]); + } + convert(_ref2) { + let { + html, + text + } = _ref2; + let formats = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + if (formats[CodeBlock.blotName]) { + return new import_quill_delta6.default().insert(text || "", { + [CodeBlock.blotName]: formats[CodeBlock.blotName] + }); + } + if (!html) { + return new import_quill_delta6.default().insert(text || "", formats); + } + const delta = this.convertHTML(html); + if (deltaEndsWith(delta, "\n") && (delta.ops[delta.ops.length - 1].attributes == null || formats.table)) { + return delta.compose(new import_quill_delta6.default().retain(delta.length() - 1).delete(1)); + } + return delta; + } + normalizeHTML(doc) { + normalizeExternalHTML_default(doc); + } + convertHTML(html) { + const doc = new DOMParser().parseFromString(html, "text/html"); + this.normalizeHTML(doc); + const container = doc.body; + const nodeMatches = /* @__PURE__ */ new WeakMap(); + const [elementMatchers, textMatchers] = this.prepareMatching(container, nodeMatches); + return traverse(this.quill.scroll, container, elementMatchers, textMatchers, nodeMatches); + } + dangerouslyPasteHTML(index, html) { + let source = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Quill.sources.API; + if (typeof index === "string") { + const delta = this.convert({ + html: index, + text: "" + }); + this.quill.setContents(delta, html); + this.quill.setSelection(0, Quill.sources.SILENT); + } else { + const paste = this.convert({ + html, + text: "" + }); + this.quill.updateContents(new import_quill_delta6.default().retain(index).concat(paste), source); + this.quill.setSelection(index + paste.length(), Quill.sources.SILENT); + } + } + onCaptureCopy(e) { + let isCut = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (e.defaultPrevented) + return; + e.preventDefault(); + const [range] = this.quill.selection.getRange(); + if (range == null) + return; + const { + html, + text + } = this.onCopy(range, isCut); + e.clipboardData?.setData("text/plain", text); + e.clipboardData?.setData("text/html", html); + if (isCut) { + deleteRange({ + range, + quill: this.quill + }); + } + } + /* + * https://www.iana.org/assignments/media-types/text/uri-list + */ + normalizeURIList(urlList) { + return urlList.split(/\r?\n/).filter((url) => url[0] !== "#").join("\n"); + } + onCapturePaste(e) { + if (e.defaultPrevented || !this.quill.isEnabled()) + return; + e.preventDefault(); + const range = this.quill.getSelection(true); + if (range == null) + return; + const html = e.clipboardData?.getData("text/html"); + let text = e.clipboardData?.getData("text/plain"); + if (!html && !text) { + const urlList = e.clipboardData?.getData("text/uri-list"); + if (urlList) { + text = this.normalizeURIList(urlList); + } + } + const files = Array.from(e.clipboardData?.files || []); + if (!html && files.length > 0) { + this.quill.uploader.upload(range, files); + return; + } + if (html && files.length > 0) { + const doc = new DOMParser().parseFromString(html, "text/html"); + if (doc.body.childElementCount === 1 && doc.body.firstElementChild?.tagName === "IMG") { + this.quill.uploader.upload(range, files); + return; + } + } + this.onPaste(range, { + html, + text + }); + } + onCopy(range) { + const text = this.quill.getText(range); + const html = this.quill.getSemanticHTML(range); + return { + html, + text + }; + } + onPaste(range, _ref3) { + let { + text, + html + } = _ref3; + const formats = this.quill.getFormat(range.index); + const pastedDelta = this.convert({ + text, + html + }, formats); + debug6.log("onPaste", pastedDelta, { + text, + html + }); + const delta = new import_quill_delta6.default().retain(range.index).delete(range.length).concat(pastedDelta); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.setSelection(delta.length() - range.length, Quill.sources.SILENT); + this.quill.scrollSelectionIntoView(); + } + prepareMatching(container, nodeMatches) { + const elementMatchers = []; + const textMatchers = []; + this.matchers.forEach((pair) => { + const [selector, matcher] = pair; + switch (selector) { + case Node.TEXT_NODE: + textMatchers.push(matcher); + break; + case Node.ELEMENT_NODE: + elementMatchers.push(matcher); + break; + default: + Array.from(container.querySelectorAll(selector)).forEach((node) => { + if (nodeMatches.has(node)) { + const matches2 = nodeMatches.get(node); + matches2?.push(matcher); + } else { + nodeMatches.set(node, [matcher]); + } + }); + break; + } + }); + return [elementMatchers, textMatchers]; + } + }; + function applyFormat(delta, format, value, scroll) { + if (!scroll.query(format)) { + return delta; + } + return delta.reduce((newDelta, op) => { + if (!op.insert) + return newDelta; + if (op.attributes && op.attributes[format]) { + return newDelta.push(op); + } + const formats = value ? { + [format]: value + } : {}; + return newDelta.insert(op.insert, { + ...formats, + ...op.attributes + }); + }, new import_quill_delta6.default()); + } + function deltaEndsWith(delta, text) { + let endText = ""; + for (let i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) { + const op = delta.ops[i]; + if (typeof op.insert !== "string") + break; + endText = op.insert + endText; + } + return endText.slice(-1 * text.length) === text; + } + function isLine2(node, scroll) { + if (!(node instanceof Element)) + return false; + const match2 = scroll.query(node); + if (match2 && match2.prototype instanceof EmbedBlot$1) + return false; + return ["address", "article", "blockquote", "canvas", "dd", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "iframe", "li", "main", "nav", "ol", "output", "p", "pre", "section", "table", "td", "tr", "ul", "video"].includes(node.tagName.toLowerCase()); + } + function isBetweenInlineElements(node, scroll) { + return node.previousElementSibling && node.nextElementSibling && !isLine2(node.previousElementSibling, scroll) && !isLine2(node.nextElementSibling, scroll); + } + var preNodes = /* @__PURE__ */ new WeakMap(); + function isPre(node) { + if (node == null) + return false; + if (!preNodes.has(node)) { + if (node.tagName === "PRE") { + preNodes.set(node, true); + } else { + preNodes.set(node, isPre(node.parentNode)); + } + } + return preNodes.get(node); + } + function traverse(scroll, node, elementMatchers, textMatchers, nodeMatches) { + if (node.nodeType === node.TEXT_NODE) { + return textMatchers.reduce((delta, matcher) => { + return matcher(node, delta, scroll); + }, new import_quill_delta6.default()); + } + if (node.nodeType === node.ELEMENT_NODE) { + return Array.from(node.childNodes || []).reduce((delta, childNode) => { + let childrenDelta = traverse(scroll, childNode, elementMatchers, textMatchers, nodeMatches); + if (childNode.nodeType === node.ELEMENT_NODE) { + childrenDelta = elementMatchers.reduce((reducedDelta, matcher) => { + return matcher(childNode, reducedDelta, scroll); + }, childrenDelta); + childrenDelta = (nodeMatches.get(childNode) || []).reduce((reducedDelta, matcher) => { + return matcher(childNode, reducedDelta, scroll); + }, childrenDelta); + } + return delta.concat(childrenDelta); + }, new import_quill_delta6.default()); + } + return new import_quill_delta6.default(); + } + function createMatchAlias(format) { + return (_node, delta, scroll) => { + return applyFormat(delta, format, true, scroll); + }; + } + function matchAttributor(node, delta, scroll) { + const attributes = Attributor.keys(node); + const classes = ClassAttributor$1.keys(node); + const styles = StyleAttributor$1.keys(node); + const formats = {}; + attributes.concat(classes).concat(styles).forEach((name) => { + let attr = scroll.query(name, Scope.ATTRIBUTE); + if (attr != null) { + formats[attr.attrName] = attr.value(node); + if (formats[attr.attrName]) + return; + } + attr = ATTRIBUTE_ATTRIBUTORS[name]; + if (attr != null && (attr.attrName === name || attr.keyName === name)) { + formats[attr.attrName] = attr.value(node) || void 0; + } + attr = STYLE_ATTRIBUTORS[name]; + if (attr != null && (attr.attrName === name || attr.keyName === name)) { + attr = STYLE_ATTRIBUTORS[name]; + formats[attr.attrName] = attr.value(node) || void 0; + } + }); + return Object.entries(formats).reduce((newDelta, _ref4) => { + let [name, value] = _ref4; + return applyFormat(newDelta, name, value, scroll); + }, delta); + } + function matchBlot(node, delta, scroll) { + const match2 = scroll.query(node); + if (match2 == null) + return delta; + if (match2.prototype instanceof EmbedBlot$1) { + const embed = {}; + const value = match2.value(node); + if (value != null) { + embed[match2.blotName] = value; + return new import_quill_delta6.default().insert(embed, match2.formats(node, scroll)); + } + } else { + if (match2.prototype instanceof BlockBlot$1 && !deltaEndsWith(delta, "\n")) { + delta.insert("\n"); + } + if ("blotName" in match2 && "formats" in match2 && typeof match2.formats === "function") { + return applyFormat(delta, match2.blotName, match2.formats(node, scroll), scroll); + } + } + return delta; + } + function matchBreak(node, delta) { + if (!deltaEndsWith(delta, "\n")) { + delta.insert("\n"); + } + return delta; + } + function matchCodeBlock(node, delta, scroll) { + const match2 = scroll.query("code-block"); + const language = match2 && "formats" in match2 && typeof match2.formats === "function" ? match2.formats(node, scroll) : true; + return applyFormat(delta, "code-block", language, scroll); + } + function matchIgnore() { + return new import_quill_delta6.default(); + } + function matchIndent(node, delta, scroll) { + const match2 = scroll.query(node); + if (match2 == null || // @ts-expect-error + match2.blotName !== "list" || !deltaEndsWith(delta, "\n")) { + return delta; + } + let indent = -1; + let parent = node.parentNode; + while (parent != null) { + if (["OL", "UL"].includes(parent.tagName)) { + indent += 1; + } + parent = parent.parentNode; + } + if (indent <= 0) + return delta; + return delta.reduce((composed, op) => { + if (!op.insert) + return composed; + if (op.attributes && typeof op.attributes.indent === "number") { + return composed.push(op); + } + return composed.insert(op.insert, { + indent, + ...op.attributes || {} + }); + }, new import_quill_delta6.default()); + } + function matchList(node, delta, scroll) { + const element = node; + let list = element.tagName === "OL" ? "ordered" : "bullet"; + const checkedAttr = element.getAttribute("data-checked"); + if (checkedAttr) { + list = checkedAttr === "true" ? "checked" : "unchecked"; + } + return applyFormat(delta, "list", list, scroll); + } + function matchNewline(node, delta, scroll) { + if (!deltaEndsWith(delta, "\n")) { + if (isLine2(node, scroll) && (node.childNodes.length > 0 || node instanceof HTMLParagraphElement)) { + return delta.insert("\n"); + } + if (delta.length() > 0 && node.nextSibling) { + let nextSibling2 = node.nextSibling; + while (nextSibling2 != null) { + if (isLine2(nextSibling2, scroll)) { + return delta.insert("\n"); + } + const match2 = scroll.query(nextSibling2); + if (match2 && match2.prototype instanceof BlockEmbed) { + return delta.insert("\n"); + } + nextSibling2 = nextSibling2.firstChild; + } + } + } + return delta; + } + function matchStyles(node, delta, scroll) { + const formats = {}; + const style = node.style || {}; + if (style.fontStyle === "italic") { + formats.italic = true; + } + if (style.textDecoration === "underline") { + formats.underline = true; + } + if (style.textDecoration === "line-through") { + formats.strike = true; + } + if (style.fontWeight?.startsWith("bold") || // @ts-expect-error Fix me later + parseInt(style.fontWeight, 10) >= 700) { + formats.bold = true; + } + delta = Object.entries(formats).reduce((newDelta, _ref5) => { + let [name, value] = _ref5; + return applyFormat(newDelta, name, value, scroll); + }, delta); + if (parseFloat(style.textIndent || 0) > 0) { + return new import_quill_delta6.default().insert(" ").concat(delta); + } + return delta; + } + function matchTable(node, delta, scroll) { + const table = node.parentElement?.tagName === "TABLE" ? node.parentElement : node.parentElement?.parentElement; + if (table != null) { + const rows = Array.from(table.querySelectorAll("tr")); + const row = rows.indexOf(node) + 1; + return applyFormat(delta, "table", row, scroll); + } + return delta; + } + function matchText(node, delta, scroll) { + let text = node.data; + if (node.parentElement?.tagName === "O:P") { + return delta.insert(text.trim()); + } + if (!isPre(node)) { + if (text.trim().length === 0 && text.includes("\n") && !isBetweenInlineElements(node, scroll)) { + return delta; + } + text = text.replace(/[^\S\u00a0]/g, " "); + text = text.replace(/ {2,}/g, " "); + if (node.previousSibling == null && node.parentElement != null && isLine2(node.parentElement, scroll) || node.previousSibling instanceof Element && isLine2(node.previousSibling, scroll)) { + text = text.replace(/^ /, ""); + } + if (node.nextSibling == null && node.parentElement != null && isLine2(node.parentElement, scroll) || node.nextSibling instanceof Element && isLine2(node.nextSibling, scroll)) { + text = text.replace(/ $/, ""); + } + text = text.replaceAll("\xA0", " "); + } + return delta.insert(text); + } + + // node_modules/quill/modules/history.js + var History = class extends module_default { + static DEFAULTS = { + delay: 1e3, + maxStack: 100, + userOnly: false + }; + lastRecorded = 0; + ignoreChange = false; + stack = { + undo: [], + redo: [] + }; + currentRange = null; + constructor(quill, options) { + super(quill, options); + this.quill.on(Quill.events.EDITOR_CHANGE, (eventName, value, oldValue, source) => { + if (eventName === Quill.events.SELECTION_CHANGE) { + if (value && source !== Quill.sources.SILENT) { + this.currentRange = value; + } + } else if (eventName === Quill.events.TEXT_CHANGE) { + if (!this.ignoreChange) { + if (!this.options.userOnly || source === Quill.sources.USER) { + this.record(value, oldValue); + } else { + this.transform(value); + } + } + this.currentRange = transformRange(this.currentRange, value); + } + }); + this.quill.keyboard.addBinding({ + key: "z", + shortKey: true + }, this.undo.bind(this)); + this.quill.keyboard.addBinding({ + key: ["z", "Z"], + shortKey: true, + shiftKey: true + }, this.redo.bind(this)); + if (/Win/i.test(navigator.platform)) { + this.quill.keyboard.addBinding({ + key: "y", + shortKey: true + }, this.redo.bind(this)); + } + this.quill.root.addEventListener("beforeinput", (event) => { + if (event.inputType === "historyUndo") { + this.undo(); + event.preventDefault(); + } else if (event.inputType === "historyRedo") { + this.redo(); + event.preventDefault(); + } + }); + } + change(source, dest) { + if (this.stack[source].length === 0) + return; + const item = this.stack[source].pop(); + if (!item) + return; + const base = this.quill.getContents(); + const inverseDelta = item.delta.invert(base); + this.stack[dest].push({ + delta: inverseDelta, + range: transformRange(item.range, inverseDelta) + }); + this.lastRecorded = 0; + this.ignoreChange = true; + this.quill.updateContents(item.delta, Quill.sources.USER); + this.ignoreChange = false; + this.restoreSelection(item); + } + clear() { + this.stack = { + undo: [], + redo: [] + }; + } + cutoff() { + this.lastRecorded = 0; + } + record(changeDelta, oldDelta) { + if (changeDelta.ops.length === 0) + return; + this.stack.redo = []; + let undoDelta = changeDelta.invert(oldDelta); + let undoRange = this.currentRange; + const timestamp = Date.now(); + if ( + // @ts-expect-error Fix me later + this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0 + ) { + const item = this.stack.undo.pop(); + if (item) { + undoDelta = undoDelta.compose(item.delta); + undoRange = item.range; + } + } else { + this.lastRecorded = timestamp; + } + if (undoDelta.length() === 0) + return; + this.stack.undo.push({ + delta: undoDelta, + range: undoRange + }); + if (this.stack.undo.length > this.options.maxStack) { + this.stack.undo.shift(); + } + } + redo() { + this.change("redo", "undo"); + } + transform(delta) { + transformStack(this.stack.undo, delta); + transformStack(this.stack.redo, delta); + } + undo() { + this.change("undo", "redo"); + } + restoreSelection(stackItem) { + if (stackItem.range) { + this.quill.setSelection(stackItem.range, Quill.sources.USER); + } else { + const index = getLastChangeIndex(this.quill.scroll, stackItem.delta); + this.quill.setSelection(index, Quill.sources.USER); + } + } + }; + function transformStack(stack, delta) { + let remoteDelta = delta; + for (let i = stack.length - 1; i >= 0; i -= 1) { + const oldItem = stack[i]; + stack[i] = { + delta: remoteDelta.transform(oldItem.delta, true), + range: oldItem.range && transformRange(oldItem.range, remoteDelta) + }; + remoteDelta = oldItem.delta.transform(remoteDelta); + if (stack[i].delta.length() === 0) { + stack.splice(i, 1); + } + } + } + function endsWithNewlineChange(scroll, delta) { + const lastOp = delta.ops[delta.ops.length - 1]; + if (lastOp == null) + return false; + if (lastOp.insert != null) { + return typeof lastOp.insert === "string" && lastOp.insert.endsWith("\n"); + } + if (lastOp.attributes != null) { + return Object.keys(lastOp.attributes).some((attr) => { + return scroll.query(attr, Scope.BLOCK) != null; + }); + } + return false; + } + function getLastChangeIndex(scroll, delta) { + const deleteLength = delta.reduce((length, op) => { + return length + (op.delete || 0); + }, 0); + let changeIndex = delta.length() - deleteLength; + if (endsWithNewlineChange(scroll, delta)) { + changeIndex -= 1; + } + return changeIndex; + } + function transformRange(range, delta) { + if (!range) + return range; + const start3 = delta.transformPosition(range.index); + const end2 = delta.transformPosition(range.index + range.length); + return { + index: start3, + length: end2 - start3 + }; + } + + // node_modules/quill/modules/uploader.js + var import_quill_delta7 = __toESM(require_Delta(), 1); + var Uploader = class extends module_default { + constructor(quill, options) { + super(quill, options); + quill.root.addEventListener("drop", (e) => { + e.preventDefault(); + let native = null; + if (document.caretRangeFromPoint) { + native = document.caretRangeFromPoint(e.clientX, e.clientY); + } else if (document.caretPositionFromPoint) { + const position = document.caretPositionFromPoint(e.clientX, e.clientY); + native = document.createRange(); + native.setStart(position.offsetNode, position.offset); + native.setEnd(position.offsetNode, position.offset); + } + const normalized = native && quill.selection.normalizeNative(native); + if (normalized) { + const range = quill.selection.normalizedToRange(normalized); + if (e.dataTransfer?.files) { + this.upload(range, e.dataTransfer.files); + } + } + }); + } + upload(range, files) { + const uploads = []; + Array.from(files).forEach((file) => { + if (file && this.options.mimetypes?.includes(file.type)) { + uploads.push(file); + } + }); + if (uploads.length > 0) { + this.options.handler.call(this, range, uploads); + } + } + }; + Uploader.DEFAULTS = { + mimetypes: ["image/png", "image/jpeg"], + handler(range, files) { + if (!this.quill.scroll.query("image")) { + return; + } + const promises = files.map((file) => { + return new Promise((resolve) => { + const reader = new FileReader(); + reader.onload = () => { + resolve(reader.result); + }; + reader.readAsDataURL(file); + }); + }); + Promise.all(promises).then((images) => { + const update = images.reduce((delta, image) => { + return delta.insert({ + image + }); + }, new import_quill_delta7.default().retain(range.index).delete(range.length)); + this.quill.updateContents(update, emitter_default.sources.USER); + this.quill.setSelection(range.index + images.length, emitter_default.sources.SILENT); + }); + } + }; + var uploader_default = Uploader; + + // node_modules/quill/core.js + var import_quill_delta9 = __toESM(require_Delta(), 1); + + // node_modules/quill/modules/input.js + var import_quill_delta8 = __toESM(require_Delta(), 1); + var INSERT_TYPES = ["insertText", "insertReplacementText"]; + var Input = class extends module_default { + constructor(quill, options) { + super(quill, options); + quill.root.addEventListener("beforeinput", (event) => { + this.handleBeforeInput(event); + }); + if (!/Android/i.test(navigator.userAgent)) { + quill.on(Quill.events.COMPOSITION_BEFORE_START, () => { + this.handleCompositionStart(); + }); + } + } + deleteRange(range) { + deleteRange({ + range, + quill: this.quill + }); + } + replaceText(range) { + let text = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ""; + if (range.length === 0) + return false; + if (text) { + const formats = this.quill.getFormat(range.index, 1); + this.deleteRange(range); + this.quill.updateContents(new import_quill_delta8.default().retain(range.index).insert(text, formats), Quill.sources.USER); + } else { + this.deleteRange(range); + } + this.quill.setSelection(range.index + text.length, 0, Quill.sources.SILENT); + return true; + } + handleBeforeInput(event) { + if (this.quill.composition.isComposing || event.defaultPrevented || !INSERT_TYPES.includes(event.inputType)) { + return; + } + const staticRange = event.getTargetRanges ? event.getTargetRanges()[0] : null; + if (!staticRange || staticRange.collapsed === true) { + return; + } + const text = getPlainTextFromInputEvent(event); + if (text == null) { + return; + } + const normalized = this.quill.selection.normalizeNative(staticRange); + const range = normalized ? this.quill.selection.normalizedToRange(normalized) : null; + if (range && this.replaceText(range, text)) { + event.preventDefault(); + } + } + handleCompositionStart() { + const range = this.quill.getSelection(); + if (range) { + this.replaceText(range); + } + } + }; + function getPlainTextFromInputEvent(event) { + if (typeof event.data === "string") { + return event.data; + } + if (event.dataTransfer?.types.includes("text/plain")) { + return event.dataTransfer.getData("text/plain"); + } + return null; + } + var input_default = Input; + + // node_modules/quill/modules/uiNode.js + var isMac = /Mac/i.test(navigator.platform); + var TTL_FOR_VALID_SELECTION_CHANGE = 100; + var canMoveCaretBeforeUINode = (event) => { + if (event.key === "ArrowLeft" || event.key === "ArrowRight" || // RTL scripts or moving from the end of the previous line + event.key === "ArrowUp" || event.key === "ArrowDown" || event.key === "Home") { + return true; + } + if (isMac && event.key === "a" && event.ctrlKey === true) { + return true; + } + return false; + }; + var UINode = class extends module_default { + isListening = false; + selectionChangeDeadline = 0; + constructor(quill, options) { + super(quill, options); + this.handleArrowKeys(); + this.handleNavigationShortcuts(); + } + handleArrowKeys() { + this.quill.keyboard.addBinding({ + key: ["ArrowLeft", "ArrowRight"], + offset: 0, + shiftKey: null, + handler(range, _ref) { + let { + line, + event + } = _ref; + if (!(line instanceof ParentBlot$1) || !line.uiNode) { + return true; + } + const isRTL = getComputedStyle(line.domNode)["direction"] === "rtl"; + if (isRTL && event.key !== "ArrowRight" || !isRTL && event.key !== "ArrowLeft") { + return true; + } + this.quill.setSelection(range.index - 1, range.length + (event.shiftKey ? 1 : 0), Quill.sources.USER); + return false; + } + }); + } + handleNavigationShortcuts() { + this.quill.root.addEventListener("keydown", (event) => { + if (!event.defaultPrevented && canMoveCaretBeforeUINode(event)) { + this.ensureListeningToSelectionChange(); + } + }); + } + /** + * We only listen to the `selectionchange` event when + * there is an intention of moving the caret to the beginning using shortcuts. + * This is primarily implemented to prevent infinite loops, as we are changing + * the selection within the handler of a `selectionchange` event. + */ + ensureListeningToSelectionChange() { + this.selectionChangeDeadline = Date.now() + TTL_FOR_VALID_SELECTION_CHANGE; + if (this.isListening) + return; + this.isListening = true; + const listener = () => { + this.isListening = false; + if (Date.now() <= this.selectionChangeDeadline) { + this.handleSelectionChange(); + } + }; + document.addEventListener("selectionchange", listener, { + once: true + }); + } + handleSelectionChange() { + const selection = document.getSelection(); + if (!selection) + return; + const range = selection.getRangeAt(0); + if (range.collapsed !== true || range.startOffset !== 0) + return; + const line = this.quill.scroll.find(range.startContainer); + if (!(line instanceof ParentBlot$1) || !line.uiNode) + return; + const newRange = document.createRange(); + newRange.setStartAfter(line.uiNode); + newRange.setEndAfter(line.uiNode); + selection.removeAllRanges(); + selection.addRange(newRange); + } + }; + var uiNode_default = UINode; + + // node_modules/quill/core.js + Quill.register({ + "blots/block": Block, + "blots/block/embed": BlockEmbed, + "blots/break": break_default, + "blots/container": container_default, + "blots/cursor": cursor_default, + "blots/embed": embed_default, + "blots/inline": inline_default, + "blots/scroll": scroll_default, + "blots/text": Text2, + "modules/clipboard": Clipboard, + "modules/history": History, + "modules/keyboard": Keyboard, + "modules/uploader": uploader_default, + "modules/input": input_default, + "modules/uiNode": uiNode_default + }); + var core_default = Quill; + + // node_modules/quill/formats/indent.js + var IndentAttributor = class extends ClassAttributor$1 { + add(node, value) { + let normalizedValue = 0; + if (value === "+1" || value === "-1") { + const indent = this.value(node) || 0; + normalizedValue = value === "+1" ? indent + 1 : indent - 1; + } else if (typeof value === "number") { + normalizedValue = value; + } + if (normalizedValue === 0) { + this.remove(node); + return true; + } + return super.add(node, normalizedValue.toString()); + } + canAdd(node, value) { + return super.canAdd(node, value) || super.canAdd(node, parseInt(value, 10)); + } + value(node) { + return parseInt(super.value(node), 10) || void 0; + } + }; + var IndentClass = new IndentAttributor("indent", "ql-indent", { + scope: Scope.BLOCK, + // @ts-expect-error + whitelist: [1, 2, 3, 4, 5, 6, 7, 8] + }); + var indent_default = IndentClass; + + // node_modules/quill/formats/blockquote.js + var Blockquote = class extends Block { + static blotName = "blockquote"; + static tagName = "blockquote"; + }; + var blockquote_default = Blockquote; + + // node_modules/quill/formats/header.js + var Header = class extends Block { + static blotName = "header"; + static tagName = ["H1", "H2", "H3", "H4", "H5", "H6"]; + static formats(domNode) { + return this.tagName.indexOf(domNode.tagName) + 1; + } + }; + var header_default = Header; + + // node_modules/quill/formats/list.js + var ListContainer = class extends container_default { + }; + ListContainer.blotName = "list-container"; + ListContainer.tagName = "OL"; + var ListItem = class extends Block { + static create(value) { + const node = super.create(); + node.setAttribute("data-list", value); + return node; + } + static formats(domNode) { + return domNode.getAttribute("data-list") || void 0; + } + static register() { + Quill.register(ListContainer); + } + constructor(scroll, domNode) { + super(scroll, domNode); + const ui = domNode.ownerDocument.createElement("span"); + const listEventHandler = (e) => { + if (!scroll.isEnabled()) + return; + const format = this.statics.formats(domNode, scroll); + if (format === "checked") { + this.format("list", "unchecked"); + e.preventDefault(); + } else if (format === "unchecked") { + this.format("list", "checked"); + e.preventDefault(); + } + }; + ui.addEventListener("mousedown", listEventHandler); + ui.addEventListener("touchstart", listEventHandler); + this.attachUI(ui); + } + format(name, value) { + if (name === this.statics.blotName && value) { + this.domNode.setAttribute("data-list", value); + } else { + super.format(name, value); + } + } + }; + ListItem.blotName = "list"; + ListItem.tagName = "LI"; + ListContainer.allowedChildren = [ListItem]; + ListItem.requiredContainer = ListContainer; + + // node_modules/quill/formats/bold.js + var Bold = class extends inline_default { + static blotName = "bold"; + static tagName = ["STRONG", "B"]; + static create() { + return super.create(); + } + static formats() { + return true; + } + optimize(context) { + super.optimize(context); + if (this.domNode.tagName !== this.statics.tagName[0]) { + this.replaceWith(this.statics.blotName); + } + } + }; + var bold_default = Bold; + + // node_modules/quill/formats/italic.js + var Italic = class extends bold_default { + static blotName = "italic"; + static tagName = ["EM", "I"]; + }; + var italic_default = Italic; + + // node_modules/quill/formats/link.js + var Link = class extends inline_default { + static blotName = "link"; + static tagName = "A"; + static SANITIZED_URL = "about:blank"; + static PROTOCOL_WHITELIST = ["http", "https", "mailto", "tel", "sms"]; + static create(value) { + const node = super.create(value); + node.setAttribute("href", this.sanitize(value)); + node.setAttribute("rel", "noopener noreferrer"); + node.setAttribute("target", "_blank"); + return node; + } + static formats(domNode) { + return domNode.getAttribute("href"); + } + static sanitize(url) { + return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL; + } + format(name, value) { + if (name !== this.statics.blotName || !value) { + super.format(name, value); + } else { + this.domNode.setAttribute("href", this.constructor.sanitize(value)); + } + } + }; + function sanitize(url, protocols) { + const anchor = document.createElement("a"); + anchor.href = url; + const protocol = anchor.href.slice(0, anchor.href.indexOf(":")); + return protocols.indexOf(protocol) > -1; + } + + // node_modules/quill/formats/script.js + var Script = class extends inline_default { + static blotName = "script"; + static tagName = ["SUB", "SUP"]; + static create(value) { + if (value === "super") { + return document.createElement("sup"); + } + if (value === "sub") { + return document.createElement("sub"); + } + return super.create(value); + } + static formats(domNode) { + if (domNode.tagName === "SUB") + return "sub"; + if (domNode.tagName === "SUP") + return "super"; + return void 0; + } + }; + var script_default = Script; + + // node_modules/quill/formats/strike.js + var Strike = class extends bold_default { + static blotName = "strike"; + static tagName = ["S", "STRIKE"]; + }; + var strike_default = Strike; + + // node_modules/quill/formats/underline.js + var Underline = class extends inline_default { + static blotName = "underline"; + static tagName = "U"; + }; + var underline_default = Underline; + + // node_modules/quill/formats/formula.js + var Formula = class extends embed_default { + static blotName = "formula"; + static className = "ql-formula"; + static tagName = "SPAN"; + static create(value) { + if (window.katex == null) { + throw new Error("Formula module requires KaTeX."); + } + const node = super.create(value); + if (typeof value === "string") { + window.katex.render(value, node, { + throwOnError: false, + errorColor: "#f00" + }); + node.setAttribute("data-value", value); + } + return node; + } + static value(domNode) { + return domNode.getAttribute("data-value"); + } + html() { + const { + formula + } = this.value(); + return `${formula}`; + } + }; + var formula_default = Formula; + + // node_modules/quill/formats/image.js + var ATTRIBUTES = ["alt", "height", "width"]; + var Image = class extends EmbedBlot$1 { + static blotName = "image"; + static tagName = "IMG"; + static create(value) { + const node = super.create(value); + if (typeof value === "string") { + node.setAttribute("src", this.sanitize(value)); + } + return node; + } + static formats(domNode) { + return ATTRIBUTES.reduce((formats, attribute) => { + if (domNode.hasAttribute(attribute)) { + formats[attribute] = domNode.getAttribute(attribute); + } + return formats; + }, {}); + } + static match(url) { + return /\.(jpe?g|gif|png)$/.test(url) || /^data:image\/.+;base64/.test(url); + } + static sanitize(url) { + return sanitize(url, ["http", "https", "data"]) ? url : "//:0"; + } + static value(domNode) { + return domNode.getAttribute("src"); + } + format(name, value) { + if (ATTRIBUTES.indexOf(name) > -1) { + if (value) { + this.domNode.setAttribute(name, value); + } else { + this.domNode.removeAttribute(name); + } + } else { + super.format(name, value); + } + } + }; + var image_default = Image; + + // node_modules/quill/formats/video.js + var ATTRIBUTES2 = ["height", "width"]; + var Video = class extends BlockEmbed { + static blotName = "video"; + static className = "ql-video"; + static tagName = "IFRAME"; + static create(value) { + const node = super.create(value); + node.setAttribute("frameborder", "0"); + node.setAttribute("allowfullscreen", "true"); + node.setAttribute("src", this.sanitize(value)); + return node; + } + static formats(domNode) { + return ATTRIBUTES2.reduce((formats, attribute) => { + if (domNode.hasAttribute(attribute)) { + formats[attribute] = domNode.getAttribute(attribute); + } + return formats; + }, {}); + } + static sanitize(url) { + return Link.sanitize(url); + } + static value(domNode) { + return domNode.getAttribute("src"); + } + format(name, value) { + if (ATTRIBUTES2.indexOf(name) > -1) { + if (value) { + this.domNode.setAttribute(name, value); + } else { + this.domNode.removeAttribute(name); + } + } else { + super.format(name, value); + } + } + html() { + const { + video + } = this.value(); + return `${video}`; + } + }; + var video_default = Video; + + // node_modules/quill/modules/syntax.js + var import_quill_delta10 = __toESM(require_Delta(), 1); + var TokenAttributor = new ClassAttributor$1("code-token", "hljs", { + scope: Scope.INLINE + }); + var CodeToken = class _CodeToken extends inline_default { + static formats(node, scroll) { + while (node != null && node !== scroll.domNode) { + if (node.classList && node.classList.contains(CodeBlock.className)) { + return super.formats(node, scroll); + } + node = node.parentNode; + } + return void 0; + } + constructor(scroll, domNode, value) { + super(scroll, domNode, value); + TokenAttributor.add(this.domNode, value); + } + format(format, value) { + if (format !== _CodeToken.blotName) { + super.format(format, value); + } else if (value) { + TokenAttributor.add(this.domNode, value); + } else { + TokenAttributor.remove(this.domNode); + this.domNode.classList.remove(this.statics.className); + } + } + optimize() { + super.optimize(...arguments); + if (!TokenAttributor.value(this.domNode)) { + this.unwrap(); + } + } + }; + CodeToken.blotName = "code-token"; + CodeToken.className = "ql-token"; + var SyntaxCodeBlock = class extends CodeBlock { + static create(value) { + const domNode = super.create(value); + if (typeof value === "string") { + domNode.setAttribute("data-language", value); + } + return domNode; + } + static formats(domNode) { + return domNode.getAttribute("data-language") || "plain"; + } + static register() { + } + // Syntax module will register + format(name, value) { + if (name === this.statics.blotName && value) { + this.domNode.setAttribute("data-language", value); + } else { + super.format(name, value); + } + } + replaceWith(name, value) { + this.formatAt(0, this.length(), CodeToken.blotName, false); + return super.replaceWith(name, value); + } + }; + var SyntaxCodeBlockContainer = class extends CodeBlockContainer { + attach() { + super.attach(); + this.forceNext = false; + this.scroll.emitMount(this); + } + format(name, value) { + if (name === SyntaxCodeBlock.blotName) { + this.forceNext = true; + this.children.forEach((child) => { + child.format(name, value); + }); + } + } + formatAt(index, length, name, value) { + if (name === SyntaxCodeBlock.blotName) { + this.forceNext = true; + } + super.formatAt(index, length, name, value); + } + highlight(highlight2) { + let forced = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (this.children.head == null) + return; + const nodes = Array.from(this.domNode.childNodes).filter((node) => node !== this.uiNode); + const text = `${nodes.map((node) => node.textContent).join("\n")} +`; + const language = SyntaxCodeBlock.formats(this.children.head.domNode); + if (forced || this.forceNext || this.cachedText !== text) { + if (text.trim().length > 0 || this.cachedText == null) { + const oldDelta = this.children.reduce((delta2, child) => { + return delta2.concat(blockDelta(child, false)); + }, new import_quill_delta10.default()); + const delta = highlight2(text, language); + oldDelta.diff(delta).reduce((index, _ref) => { + let { + retain, + attributes + } = _ref; + if (!retain) + return index; + if (attributes) { + Object.keys(attributes).forEach((format) => { + if ([SyntaxCodeBlock.blotName, CodeToken.blotName].includes(format)) { + this.formatAt(index, retain, format, attributes[format]); + } + }); + } + return index + retain; + }, 0); + } + this.cachedText = text; + this.forceNext = false; + } + } + html(index, length) { + const [codeBlock] = this.children.find(index); + const language = codeBlock ? SyntaxCodeBlock.formats(codeBlock.domNode) : "plain"; + return `
    +${escapeText(this.code(index, length))}
    +
    `; + } + optimize(context) { + super.optimize(context); + if (this.parent != null && this.children.head != null && this.uiNode != null) { + const language = SyntaxCodeBlock.formats(this.children.head.domNode); + if (language !== this.uiNode.value) { + this.uiNode.value = language; + } + } + } + }; + SyntaxCodeBlockContainer.allowedChildren = [SyntaxCodeBlock]; + SyntaxCodeBlock.requiredContainer = SyntaxCodeBlockContainer; + SyntaxCodeBlock.allowedChildren = [CodeToken, cursor_default, Text2, break_default]; + var highlight = (lib, language, text) => { + if (typeof lib.versionString === "string") { + const majorVersion = lib.versionString.split(".")[0]; + if (parseInt(majorVersion, 10) >= 11) { + return lib.highlight(text, { + language + }).value; + } + } + return lib.highlight(language, text).value; + }; + var Syntax = class extends module_default { + static register() { + Quill.register(CodeToken, true); + Quill.register(SyntaxCodeBlock, true); + Quill.register(SyntaxCodeBlockContainer, true); + } + constructor(quill, options) { + super(quill, options); + if (this.options.hljs == null) { + throw new Error("Syntax module requires highlight.js. Please include the library on the page before Quill."); + } + this.languages = this.options.languages.reduce((memo, _ref2) => { + let { + key + } = _ref2; + memo[key] = true; + return memo; + }, {}); + this.highlightBlot = this.highlightBlot.bind(this); + this.initListener(); + this.initTimer(); + } + initListener() { + this.quill.on(Quill.events.SCROLL_BLOT_MOUNT, (blot) => { + if (!(blot instanceof SyntaxCodeBlockContainer)) + return; + const select = this.quill.root.ownerDocument.createElement("select"); + this.options.languages.forEach((_ref3) => { + let { + key, + label + } = _ref3; + const option = select.ownerDocument.createElement("option"); + option.textContent = label; + option.setAttribute("value", key); + select.appendChild(option); + }); + select.addEventListener("change", () => { + blot.format(SyntaxCodeBlock.blotName, select.value); + this.quill.root.focus(); + this.highlight(blot, true); + }); + if (blot.uiNode == null) { + blot.attachUI(select); + if (blot.children.head) { + select.value = SyntaxCodeBlock.formats(blot.children.head.domNode); + } + } + }); + } + initTimer() { + let timer = null; + this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => { + if (timer) { + clearTimeout(timer); + } + timer = setTimeout(() => { + this.highlight(); + timer = null; + }, this.options.interval); + }); + } + highlight() { + let blot = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null; + let force = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (this.quill.selection.composing) + return; + this.quill.update(Quill.sources.USER); + const range = this.quill.getSelection(); + const blots = blot == null ? this.quill.scroll.descendants(SyntaxCodeBlockContainer) : [blot]; + blots.forEach((container) => { + container.highlight(this.highlightBlot, force); + }); + this.quill.update(Quill.sources.SILENT); + if (range != null) { + this.quill.setSelection(range, Quill.sources.SILENT); + } + } + highlightBlot(text) { + let language = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "plain"; + language = this.languages[language] ? language : "plain"; + if (language === "plain") { + return escapeText(text).split("\n").reduce((delta, line, i) => { + if (i !== 0) { + delta.insert("\n", { + [CodeBlock.blotName]: language + }); + } + return delta.insert(line); + }, new import_quill_delta10.default()); + } + const container = this.quill.root.ownerDocument.createElement("div"); + container.classList.add(CodeBlock.className); + container.innerHTML = highlight(this.options.hljs, language, text); + return traverse(this.quill.scroll, container, [(node, delta) => { + const value = TokenAttributor.value(node); + if (value) { + return delta.compose(new import_quill_delta10.default().retain(delta.length(), { + [CodeToken.blotName]: value + })); + } + return delta; + }], [(node, delta) => { + return node.data.split("\n").reduce((memo, nodeText, i) => { + if (i !== 0) + memo.insert("\n", { + [CodeBlock.blotName]: language + }); + return memo.insert(nodeText); + }, delta); + }], /* @__PURE__ */ new WeakMap()); + } + }; + Syntax.DEFAULTS = { + hljs: (() => { + return window.hljs; + })(), + interval: 1e3, + languages: [{ + key: "plain", + label: "Plain" + }, { + key: "bash", + label: "Bash" + }, { + key: "cpp", + label: "C++" + }, { + key: "cs", + label: "C#" + }, { + key: "css", + label: "CSS" + }, { + key: "diff", + label: "Diff" + }, { + key: "xml", + label: "HTML/XML" + }, { + key: "java", + label: "Java" + }, { + key: "javascript", + label: "JavaScript" + }, { + key: "markdown", + label: "Markdown" + }, { + key: "php", + label: "PHP" + }, { + key: "python", + label: "Python" + }, { + key: "ruby", + label: "Ruby" + }, { + key: "sql", + label: "SQL" + }] + }; + + // node_modules/quill/modules/table.js + var import_quill_delta11 = __toESM(require_Delta(), 1); + + // node_modules/quill/formats/table.js + var TableCell = class _TableCell extends Block { + static blotName = "table"; + static tagName = "TD"; + static create(value) { + const node = super.create(); + if (value) { + node.setAttribute("data-row", value); + } else { + node.setAttribute("data-row", tableId()); + } + return node; + } + static formats(domNode) { + if (domNode.hasAttribute("data-row")) { + return domNode.getAttribute("data-row"); + } + return void 0; + } + cellOffset() { + if (this.parent) { + return this.parent.children.indexOf(this); + } + return -1; + } + format(name, value) { + if (name === _TableCell.blotName && value) { + this.domNode.setAttribute("data-row", value); + } else { + super.format(name, value); + } + } + row() { + return this.parent; + } + rowOffset() { + if (this.row()) { + return this.row().rowOffset(); + } + return -1; + } + table() { + return this.row() && this.row().table(); + } + }; + var TableRow = class extends container_default { + static blotName = "table-row"; + static tagName = "TR"; + checkMerge() { + if (super.checkMerge() && this.next.children.head != null) { + const thisHead = this.children.head.formats(); + const thisTail = this.children.tail.formats(); + const nextHead = this.next.children.head.formats(); + const nextTail = this.next.children.tail.formats(); + return thisHead.table === thisTail.table && thisHead.table === nextHead.table && thisHead.table === nextTail.table; + } + return false; + } + optimize(context) { + super.optimize(context); + this.children.forEach((child) => { + if (child.next == null) + return; + const childFormats = child.formats(); + const nextFormats = child.next.formats(); + if (childFormats.table !== nextFormats.table) { + const next2 = this.splitAfter(child); + if (next2) { + next2.optimize(); + } + if (this.prev) { + this.prev.optimize(); + } + } + }); + } + rowOffset() { + if (this.parent) { + return this.parent.children.indexOf(this); + } + return -1; + } + table() { + return this.parent && this.parent.parent; + } + }; + var TableBody = class extends container_default { + static blotName = "table-body"; + static tagName = "TBODY"; + }; + var TableContainer = class extends container_default { + static blotName = "table-container"; + static tagName = "TABLE"; + balanceCells() { + const rows = this.descendants(TableRow); + const maxColumns = rows.reduce((max2, row) => { + return Math.max(row.children.length, max2); + }, 0); + rows.forEach((row) => { + new Array(maxColumns - row.children.length).fill(0).forEach(() => { + let value; + if (row.children.head != null) { + value = TableCell.formats(row.children.head.domNode); + } + const blot = this.scroll.create(TableCell.blotName, value); + row.appendChild(blot); + blot.optimize(); + }); + }); + } + cells(column) { + return this.rows().map((row) => row.children.at(column)); + } + deleteColumn(index) { + const [body] = this.descendant(TableBody); + if (body == null || body.children.head == null) + return; + body.children.forEach((row) => { + const cell = row.children.at(index); + if (cell != null) { + cell.remove(); + } + }); + } + insertColumn(index) { + const [body] = this.descendant(TableBody); + if (body == null || body.children.head == null) + return; + body.children.forEach((row) => { + const ref = row.children.at(index); + const value = TableCell.formats(row.children.head.domNode); + const cell = this.scroll.create(TableCell.blotName, value); + row.insertBefore(cell, ref); + }); + } + insertRow(index) { + const [body] = this.descendant(TableBody); + if (body == null || body.children.head == null) + return; + const id = tableId(); + const row = this.scroll.create(TableRow.blotName); + body.children.head.children.forEach(() => { + const cell = this.scroll.create(TableCell.blotName, id); + row.appendChild(cell); + }); + const ref = body.children.at(index); + body.insertBefore(row, ref); + } + rows() { + const body = this.children.head; + if (body == null) + return []; + return body.children.map((row) => row); + } + }; + TableContainer.allowedChildren = [TableBody]; + TableBody.requiredContainer = TableContainer; + TableBody.allowedChildren = [TableRow]; + TableRow.requiredContainer = TableBody; + TableRow.allowedChildren = [TableCell]; + TableCell.requiredContainer = TableRow; + function tableId() { + const id = Math.random().toString(36).slice(2, 6); + return `row-${id}`; + } + + // node_modules/quill/modules/table.js + var Table = class extends module_default { + static register() { + Quill.register(TableCell); + Quill.register(TableRow); + Quill.register(TableBody); + Quill.register(TableContainer); + } + constructor() { + super(...arguments); + this.listenBalanceCells(); + } + balanceTables() { + this.quill.scroll.descendants(TableContainer).forEach((table) => { + table.balanceCells(); + }); + } + deleteColumn() { + const [table, , cell] = this.getTable(); + if (cell == null) + return; + table.deleteColumn(cell.cellOffset()); + this.quill.update(Quill.sources.USER); + } + deleteRow() { + const [, row] = this.getTable(); + if (row == null) + return; + row.remove(); + this.quill.update(Quill.sources.USER); + } + deleteTable() { + const [table] = this.getTable(); + if (table == null) + return; + const offset2 = table.offset(); + table.remove(); + this.quill.update(Quill.sources.USER); + this.quill.setSelection(offset2, Quill.sources.SILENT); + } + getTable() { + let range = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.quill.getSelection(); + if (range == null) + return [null, null, null, -1]; + const [cell, offset2] = this.quill.getLine(range.index); + if (cell == null || cell.statics.blotName !== TableCell.blotName) { + return [null, null, null, -1]; + } + const row = cell.parent; + const table = row.parent.parent; + return [table, row, cell, offset2]; + } + insertColumn(offset2) { + const range = this.quill.getSelection(); + if (!range) + return; + const [table, row, cell] = this.getTable(range); + if (cell == null) + return; + const column = cell.cellOffset(); + table.insertColumn(column + offset2); + this.quill.update(Quill.sources.USER); + let shift = row.rowOffset(); + if (offset2 === 0) { + shift += 1; + } + this.quill.setSelection(range.index + shift, range.length, Quill.sources.SILENT); + } + insertColumnLeft() { + this.insertColumn(0); + } + insertColumnRight() { + this.insertColumn(1); + } + insertRow(offset2) { + const range = this.quill.getSelection(); + if (!range) + return; + const [table, row, cell] = this.getTable(range); + if (cell == null) + return; + const index = row.rowOffset(); + table.insertRow(index + offset2); + this.quill.update(Quill.sources.USER); + if (offset2 > 0) { + this.quill.setSelection(range, Quill.sources.SILENT); + } else { + this.quill.setSelection(range.index + row.children.length, range.length, Quill.sources.SILENT); + } + } + insertRowAbove() { + this.insertRow(0); + } + insertRowBelow() { + this.insertRow(1); + } + insertTable(rows, columns) { + const range = this.quill.getSelection(); + if (range == null) + return; + const delta = new Array(rows).fill(0).reduce((memo) => { + const text = new Array(columns).fill("\n").join(""); + return memo.insert(text, { + table: tableId() + }); + }, new import_quill_delta11.default().retain(range.index)); + this.quill.updateContents(delta, Quill.sources.USER); + this.quill.setSelection(range.index, Quill.sources.SILENT); + this.balanceTables(); + } + listenBalanceCells() { + this.quill.on(Quill.events.SCROLL_OPTIMIZE, (mutations) => { + mutations.some((mutation) => { + if (["TD", "TR", "TBODY", "TABLE"].includes(mutation.target.tagName)) { + this.quill.once(Quill.events.TEXT_CHANGE, (delta, old, source) => { + if (source !== Quill.sources.USER) + return; + this.balanceTables(); + }); + return true; + } + return false; + }); + }); + } + }; + var table_default = Table; + + // node_modules/quill/modules/toolbar.js + var import_quill_delta12 = __toESM(require_Delta(), 1); + var debug7 = logger_default("quill:toolbar"); + var Toolbar = class extends module_default { + constructor(quill, options) { + super(quill, options); + if (Array.isArray(this.options.container)) { + const container = document.createElement("div"); + container.setAttribute("role", "toolbar"); + addControls(container, this.options.container); + quill.container?.parentNode?.insertBefore(container, quill.container); + this.container = container; + } else if (typeof this.options.container === "string") { + this.container = document.querySelector(this.options.container); + } else { + this.container = this.options.container; + } + if (!(this.container instanceof HTMLElement)) { + debug7.error("Container required for toolbar", this.options); + return; + } + this.container.classList.add("ql-toolbar"); + this.controls = []; + this.handlers = {}; + if (this.options.handlers) { + Object.keys(this.options.handlers).forEach((format) => { + const handler = this.options.handlers?.[format]; + if (handler) { + this.addHandler(format, handler); + } + }); + } + Array.from(this.container.querySelectorAll("button, select")).forEach((input) => { + this.attach(input); + }); + this.quill.on(Quill.events.EDITOR_CHANGE, () => { + const [range] = this.quill.selection.getRange(); + this.update(range); + }); + } + addHandler(format, handler) { + this.handlers[format] = handler; + } + attach(input) { + let format = Array.from(input.classList).find((className) => { + return className.indexOf("ql-") === 0; + }); + if (!format) + return; + format = format.slice("ql-".length); + if (input.tagName === "BUTTON") { + input.setAttribute("type", "button"); + } + if (this.handlers[format] == null && this.quill.scroll.query(format) == null) { + debug7.warn("ignoring attaching to nonexistent format", format, input); + return; + } + const eventName = input.tagName === "SELECT" ? "change" : "click"; + input.addEventListener(eventName, (e) => { + let value; + if (input.tagName === "SELECT") { + if (input.selectedIndex < 0) + return; + const selected = input.options[input.selectedIndex]; + if (selected.hasAttribute("selected")) { + value = false; + } else { + value = selected.value || false; + } + } else { + if (input.classList.contains("ql-active")) { + value = false; + } else { + value = input.value || !input.hasAttribute("value"); + } + e.preventDefault(); + } + this.quill.focus(); + const [range] = this.quill.selection.getRange(); + if (this.handlers[format] != null) { + this.handlers[format].call(this, value); + } else if ( + // @ts-expect-error + this.quill.scroll.query(format).prototype instanceof EmbedBlot$1 + ) { + value = prompt(`Enter ${format}`); + if (!value) + return; + this.quill.updateContents(new import_quill_delta12.default().retain(range.index).delete(range.length).insert({ + [format]: value + }), Quill.sources.USER); + } else { + this.quill.format(format, value, Quill.sources.USER); + } + this.update(range); + }); + this.controls.push([format, input]); + } + update(range) { + const formats = range == null ? {} : this.quill.getFormat(range); + this.controls.forEach((pair) => { + const [format, input] = pair; + if (input.tagName === "SELECT") { + let option = null; + if (range == null) { + option = null; + } else if (formats[format] == null) { + option = input.querySelector("option[selected]"); + } else if (!Array.isArray(formats[format])) { + let value = formats[format]; + if (typeof value === "string") { + value = value.replace(/"/g, '\\"'); + } + option = input.querySelector(`option[value="${value}"]`); + } + if (option == null) { + input.value = ""; + input.selectedIndex = -1; + } else { + option.selected = true; + } + } else if (range == null) { + input.classList.remove("ql-active"); + input.setAttribute("aria-pressed", "false"); + } else if (input.hasAttribute("value")) { + const value = formats[format]; + const isActive = value === input.getAttribute("value") || value != null && value.toString() === input.getAttribute("value") || value == null && !input.getAttribute("value"); + input.classList.toggle("ql-active", isActive); + input.setAttribute("aria-pressed", isActive.toString()); + } else { + const isActive = formats[format] != null; + input.classList.toggle("ql-active", isActive); + input.setAttribute("aria-pressed", isActive.toString()); + } + }); + } + }; + Toolbar.DEFAULTS = {}; + function addButton(container, format, value) { + const input = document.createElement("button"); + input.setAttribute("type", "button"); + input.classList.add(`ql-${format}`); + input.setAttribute("aria-pressed", "false"); + if (value != null) { + input.value = value; + input.setAttribute("aria-label", `${format}: ${value}`); + } else { + input.setAttribute("aria-label", format); + } + container.appendChild(input); + } + function addControls(container, groups) { + if (!Array.isArray(groups[0])) { + groups = [groups]; + } + groups.forEach((controls) => { + const group = document.createElement("span"); + group.classList.add("ql-formats"); + controls.forEach((control) => { + if (typeof control === "string") { + addButton(group, control); + } else { + const format = Object.keys(control)[0]; + const value = control[format]; + if (Array.isArray(value)) { + addSelect(group, format, value); + } else { + addButton(group, format, value); + } + } + }); + container.appendChild(group); + }); + } + function addSelect(container, format, values) { + const input = document.createElement("select"); + input.classList.add(`ql-${format}`); + values.forEach((value) => { + const option = document.createElement("option"); + if (value !== false) { + option.setAttribute("value", String(value)); + } else { + option.setAttribute("selected", "selected"); + } + input.appendChild(option); + }); + container.appendChild(input); + } + Toolbar.DEFAULTS = { + container: null, + handlers: { + clean() { + const range = this.quill.getSelection(); + if (range == null) + return; + if (range.length === 0) { + const formats = this.quill.getFormat(); + Object.keys(formats).forEach((name) => { + if (this.quill.scroll.query(name, Scope.INLINE) != null) { + this.quill.format(name, false, Quill.sources.USER); + } + }); + } else { + this.quill.removeFormat(range.index, range.length, Quill.sources.USER); + } + }, + direction(value) { + const { + align + } = this.quill.getFormat(); + if (value === "rtl" && align == null) { + this.quill.format("align", "right", Quill.sources.USER); + } else if (!value && align === "right") { + this.quill.format("align", false, Quill.sources.USER); + } + this.quill.format("direction", value, Quill.sources.USER); + }, + indent(value) { + const range = this.quill.getSelection(); + const formats = this.quill.getFormat(range); + const indent = parseInt(formats.indent || 0, 10); + if (value === "+1" || value === "-1") { + let modifier = value === "+1" ? 1 : -1; + if (formats.direction === "rtl") + modifier *= -1; + this.quill.format("indent", indent + modifier, Quill.sources.USER); + } + }, + link(value) { + if (value === true) { + value = prompt("Enter link URL:"); + } + this.quill.format("link", value, Quill.sources.USER); + }, + list(value) { + const range = this.quill.getSelection(); + const formats = this.quill.getFormat(range); + if (value === "check") { + if (formats.list === "checked" || formats.list === "unchecked") { + this.quill.format("list", false, Quill.sources.USER); + } else { + this.quill.format("list", "unchecked", Quill.sources.USER); + } + } else { + this.quill.format("list", value, Quill.sources.USER); + } + } + } + }; + + // node_modules/quill/ui/icons.js + var alignLeftIcon = ''; + var alignCenterIcon = ''; + var alignRightIcon = ''; + var alignJustifyIcon = ''; + var backgroundIcon = ''; + var blockquoteIcon = ''; + var boldIcon = ''; + var cleanIcon = ''; + var codeIcon = ''; + var colorIcon = ''; + var directionLeftToRightIcon = ''; + var directionRightToLeftIcon = ''; + var formulaIcon = ''; + var headerIcon = ''; + var header2Icon = ''; + var header3Icon = ''; + var header4Icon = ''; + var header5Icon = ''; + var header6Icon = ''; + var italicIcon = ''; + var imageIcon = ''; + var indentIcon = ''; + var outdentIcon = ''; + var linkIcon = ''; + var listBulletIcon = ''; + var listCheckIcon = ''; + var listOrderedIcon = ''; + var subscriptIcon = ''; + var superscriptIcon = ''; + var strikeIcon = ''; + var tableIcon = ''; + var underlineIcon = ''; + var videoIcon = ''; + var icons_default = { + align: { + "": alignLeftIcon, + center: alignCenterIcon, + right: alignRightIcon, + justify: alignJustifyIcon + }, + background: backgroundIcon, + blockquote: blockquoteIcon, + bold: boldIcon, + clean: cleanIcon, + code: codeIcon, + "code-block": codeIcon, + color: colorIcon, + direction: { + "": directionLeftToRightIcon, + rtl: directionRightToLeftIcon + }, + formula: formulaIcon, + header: { + "1": headerIcon, + "2": header2Icon, + "3": header3Icon, + "4": header4Icon, + "5": header5Icon, + "6": header6Icon + }, + italic: italicIcon, + image: imageIcon, + indent: { + "+1": indentIcon, + "-1": outdentIcon + }, + link: linkIcon, + list: { + bullet: listBulletIcon, + check: listCheckIcon, + ordered: listOrderedIcon + }, + script: { + sub: subscriptIcon, + super: superscriptIcon + }, + strike: strikeIcon, + table: tableIcon, + underline: underlineIcon, + video: videoIcon + }; + + // node_modules/quill/ui/picker.js + var DropdownIcon = ''; + var optionsCounter = 0; + function toggleAriaAttribute(element, attribute) { + element.setAttribute(attribute, `${!(element.getAttribute(attribute) === "true")}`); + } + var Picker = class { + constructor(select) { + this.select = select; + this.container = document.createElement("span"); + this.buildPicker(); + this.select.style.display = "none"; + this.select.parentNode.insertBefore(this.container, this.select); + this.label.addEventListener("mousedown", () => { + this.togglePicker(); + }); + this.label.addEventListener("keydown", (event) => { + switch (event.key) { + case "Enter": + this.togglePicker(); + break; + case "Escape": + this.escape(); + event.preventDefault(); + break; + default: + } + }); + this.select.addEventListener("change", this.update.bind(this)); + } + togglePicker() { + this.container.classList.toggle("ql-expanded"); + toggleAriaAttribute(this.label, "aria-expanded"); + toggleAriaAttribute(this.options, "aria-hidden"); + } + buildItem(option) { + const item = document.createElement("span"); + item.tabIndex = "0"; + item.setAttribute("role", "button"); + item.classList.add("ql-picker-item"); + const value = option.getAttribute("value"); + if (value) { + item.setAttribute("data-value", value); + } + if (option.textContent) { + item.setAttribute("data-label", option.textContent); + } + item.addEventListener("click", () => { + this.selectItem(item, true); + }); + item.addEventListener("keydown", (event) => { + switch (event.key) { + case "Enter": + this.selectItem(item, true); + event.preventDefault(); + break; + case "Escape": + this.escape(); + event.preventDefault(); + break; + default: + } + }); + return item; + } + buildLabel() { + const label = document.createElement("span"); + label.classList.add("ql-picker-label"); + label.innerHTML = DropdownIcon; + label.tabIndex = "0"; + label.setAttribute("role", "button"); + label.setAttribute("aria-expanded", "false"); + this.container.appendChild(label); + return label; + } + buildOptions() { + const options = document.createElement("span"); + options.classList.add("ql-picker-options"); + options.setAttribute("aria-hidden", "true"); + options.tabIndex = "-1"; + options.id = `ql-picker-options-${optionsCounter}`; + optionsCounter += 1; + this.label.setAttribute("aria-controls", options.id); + this.options = options; + Array.from(this.select.options).forEach((option) => { + const item = this.buildItem(option); + options.appendChild(item); + if (option.selected === true) { + this.selectItem(item); + } + }); + this.container.appendChild(options); + } + buildPicker() { + Array.from(this.select.attributes).forEach((item) => { + this.container.setAttribute(item.name, item.value); + }); + this.container.classList.add("ql-picker"); + this.label = this.buildLabel(); + this.buildOptions(); + } + escape() { + this.close(); + setTimeout(() => this.label.focus(), 1); + } + close() { + this.container.classList.remove("ql-expanded"); + this.label.setAttribute("aria-expanded", "false"); + this.options.setAttribute("aria-hidden", "true"); + } + selectItem(item) { + let trigger = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + const selected = this.container.querySelector(".ql-selected"); + if (item === selected) + return; + if (selected != null) { + selected.classList.remove("ql-selected"); + } + if (item == null) + return; + item.classList.add("ql-selected"); + this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item); + if (item.hasAttribute("data-value")) { + this.label.setAttribute("data-value", item.getAttribute("data-value")); + } else { + this.label.removeAttribute("data-value"); + } + if (item.hasAttribute("data-label")) { + this.label.setAttribute("data-label", item.getAttribute("data-label")); + } else { + this.label.removeAttribute("data-label"); + } + if (trigger) { + this.select.dispatchEvent(new Event("change")); + this.close(); + } + } + update() { + let option; + if (this.select.selectedIndex > -1) { + const item = ( + // @ts-expect-error Fix me later + this.container.querySelector(".ql-picker-options").children[this.select.selectedIndex] + ); + option = this.select.options[this.select.selectedIndex]; + this.selectItem(item); + } else { + this.selectItem(null); + } + const isActive = option != null && option !== this.select.querySelector("option[selected]"); + this.label.classList.toggle("ql-active", isActive); + } + }; + var picker_default = Picker; + + // node_modules/quill/ui/color-picker.js + var ColorPicker = class extends picker_default { + constructor(select, label) { + super(select); + this.label.innerHTML = label; + this.container.classList.add("ql-color-picker"); + Array.from(this.container.querySelectorAll(".ql-picker-item")).slice(0, 7).forEach((item) => { + item.classList.add("ql-primary"); + }); + } + buildItem(option) { + const item = super.buildItem(option); + item.style.backgroundColor = option.getAttribute("value") || ""; + return item; + } + selectItem(item, trigger) { + super.selectItem(item, trigger); + const colorLabel = this.label.querySelector(".ql-color-label"); + const value = item ? item.getAttribute("data-value") || "" : ""; + if (colorLabel) { + if (colorLabel.tagName === "line") { + colorLabel.style.stroke = value; + } else { + colorLabel.style.fill = value; + } + } + } + }; + var color_picker_default = ColorPicker; + + // node_modules/quill/ui/icon-picker.js + var IconPicker = class extends picker_default { + constructor(select, icons) { + super(select); + this.container.classList.add("ql-icon-picker"); + Array.from(this.container.querySelectorAll(".ql-picker-item")).forEach((item) => { + item.innerHTML = icons[item.getAttribute("data-value") || ""]; + }); + this.defaultItem = this.container.querySelector(".ql-selected"); + this.selectItem(this.defaultItem); + } + selectItem(target, trigger) { + super.selectItem(target, trigger); + const item = target || this.defaultItem; + if (item != null) { + if (this.label.innerHTML === item.innerHTML) + return; + this.label.innerHTML = item.innerHTML; + } + } + }; + var icon_picker_default = IconPicker; + + // node_modules/quill/ui/tooltip.js + var isScrollable = (el) => { + const { + overflowY + } = getComputedStyle(el, null); + return overflowY !== "visible" && overflowY !== "clip"; + }; + var Tooltip2 = class { + constructor(quill, boundsContainer) { + this.quill = quill; + this.boundsContainer = boundsContainer || document.body; + this.root = quill.addContainer("ql-tooltip"); + this.root.innerHTML = this.constructor.TEMPLATE; + if (isScrollable(this.quill.root)) { + this.quill.root.addEventListener("scroll", () => { + this.root.style.marginTop = `${-1 * this.quill.root.scrollTop}px`; + }); + } + this.hide(); + } + hide() { + this.root.classList.add("ql-hidden"); + } + position(reference2) { + const left2 = reference2.left + reference2.width / 2 - this.root.offsetWidth / 2; + const top2 = reference2.bottom + this.quill.root.scrollTop; + this.root.style.left = `${left2}px`; + this.root.style.top = `${top2}px`; + this.root.classList.remove("ql-flip"); + const containerBounds = this.boundsContainer.getBoundingClientRect(); + const rootBounds = this.root.getBoundingClientRect(); + let shift = 0; + if (rootBounds.right > containerBounds.right) { + shift = containerBounds.right - rootBounds.right; + this.root.style.left = `${left2 + shift}px`; + } + if (rootBounds.left < containerBounds.left) { + shift = containerBounds.left - rootBounds.left; + this.root.style.left = `${left2 + shift}px`; + } + if (rootBounds.bottom > containerBounds.bottom) { + const height = rootBounds.bottom - rootBounds.top; + const verticalShift = reference2.bottom - reference2.top + height; + this.root.style.top = `${top2 - verticalShift}px`; + this.root.classList.add("ql-flip"); + } + return shift; + } + show() { + this.root.classList.remove("ql-editing"); + this.root.classList.remove("ql-hidden"); + } + }; + var tooltip_default2 = Tooltip2; + + // node_modules/quill/themes/base.js + var ALIGNS = [false, "center", "right", "justify"]; + var COLORS = ["#000000", "#e60000", "#ff9900", "#ffff00", "#008a00", "#0066cc", "#9933ff", "#ffffff", "#facccc", "#ffebcc", "#ffffcc", "#cce8cc", "#cce0f5", "#ebd6ff", "#bbbbbb", "#f06666", "#ffc266", "#ffff66", "#66b966", "#66a3e0", "#c285ff", "#888888", "#a10000", "#b26b00", "#b2b200", "#006100", "#0047b2", "#6b24b2", "#444444", "#5c0000", "#663d00", "#666600", "#003700", "#002966", "#3d1466"]; + var FONTS = [false, "serif", "monospace"]; + var HEADERS = ["1", "2", "3", false]; + var SIZES = ["small", false, "large", "huge"]; + var BaseTheme = class extends theme_default { + constructor(quill, options) { + super(quill, options); + const listener = (e) => { + if (!document.body.contains(quill.root)) { + document.body.removeEventListener("click", listener); + return; + } + if (this.tooltip != null && // @ts-expect-error + !this.tooltip.root.contains(e.target) && // @ts-expect-error + document.activeElement !== this.tooltip.textbox && !this.quill.hasFocus()) { + this.tooltip.hide(); + } + if (this.pickers != null) { + this.pickers.forEach((picker) => { + if (!picker.container.contains(e.target)) { + picker.close(); + } + }); + } + }; + quill.emitter.listenDOM("click", document.body, listener); + } + addModule(name) { + const module2 = super.addModule(name); + if (name === "toolbar") { + this.extendToolbar(module2); + } + return module2; + } + buildButtons(buttons, icons) { + Array.from(buttons).forEach((button) => { + const className = button.getAttribute("class") || ""; + className.split(/\s+/).forEach((name) => { + if (!name.startsWith("ql-")) + return; + name = name.slice("ql-".length); + if (icons[name] == null) + return; + if (name === "direction") { + button.innerHTML = icons[name][""] + icons[name].rtl; + } else if (typeof icons[name] === "string") { + button.innerHTML = icons[name]; + } else { + const value = button.value || ""; + if (value != null && icons[name][value]) { + button.innerHTML = icons[name][value]; + } + } + }); + }); + } + buildPickers(selects, icons) { + this.pickers = Array.from(selects).map((select) => { + if (select.classList.contains("ql-align")) { + if (select.querySelector("option") == null) { + fillSelect(select, ALIGNS); + } + if (typeof icons.align === "object") { + return new icon_picker_default(select, icons.align); + } + } + if (select.classList.contains("ql-background") || select.classList.contains("ql-color")) { + const format = select.classList.contains("ql-background") ? "background" : "color"; + if (select.querySelector("option") == null) { + fillSelect(select, COLORS, format === "background" ? "#ffffff" : "#000000"); + } + return new color_picker_default(select, icons[format]); + } + if (select.querySelector("option") == null) { + if (select.classList.contains("ql-font")) { + fillSelect(select, FONTS); + } else if (select.classList.contains("ql-header")) { + fillSelect(select, HEADERS); + } else if (select.classList.contains("ql-size")) { + fillSelect(select, SIZES); + } + } + return new picker_default(select); + }); + const update = () => { + this.pickers.forEach((picker) => { + picker.update(); + }); + }; + this.quill.on(emitter_default.events.EDITOR_CHANGE, update); + } + }; + BaseTheme.DEFAULTS = merge_default({}, theme_default.DEFAULTS, { + modules: { + toolbar: { + handlers: { + formula() { + this.quill.theme.tooltip.edit("formula"); + }, + image() { + let fileInput = this.container.querySelector("input.ql-image[type=file]"); + if (fileInput == null) { + fileInput = document.createElement("input"); + fileInput.setAttribute("type", "file"); + fileInput.setAttribute("accept", this.quill.uploader.options.mimetypes.join(", ")); + fileInput.classList.add("ql-image"); + fileInput.addEventListener("change", () => { + const range = this.quill.getSelection(true); + this.quill.uploader.upload(range, fileInput.files); + fileInput.value = ""; + }); + this.container.appendChild(fileInput); + } + fileInput.click(); + }, + video() { + this.quill.theme.tooltip.edit("video"); + } + } + } + } + }); + var BaseTooltip = class extends tooltip_default2 { + constructor(quill, boundsContainer) { + super(quill, boundsContainer); + this.textbox = this.root.querySelector('input[type="text"]'); + this.listen(); + } + listen() { + this.textbox.addEventListener("keydown", (event) => { + if (event.key === "Enter") { + this.save(); + event.preventDefault(); + } else if (event.key === "Escape") { + this.cancel(); + event.preventDefault(); + } + }); + } + cancel() { + this.hide(); + this.restoreFocus(); + } + edit() { + let mode = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "link"; + let preview = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null; + this.root.classList.remove("ql-hidden"); + this.root.classList.add("ql-editing"); + if (this.textbox == null) + return; + if (preview != null) { + this.textbox.value = preview; + } else if (mode !== this.root.getAttribute("data-mode")) { + this.textbox.value = ""; + } + const bounds = this.quill.getBounds(this.quill.selection.savedRange); + if (bounds != null) { + this.position(bounds); + } + this.textbox.select(); + this.textbox.setAttribute("placeholder", this.textbox.getAttribute(`data-${mode}`) || ""); + this.root.setAttribute("data-mode", mode); + } + restoreFocus() { + this.quill.focus({ + preventScroll: true + }); + } + save() { + let { + value + } = this.textbox; + switch (this.root.getAttribute("data-mode")) { + case "link": { + const { + scrollTop + } = this.quill.root; + if (this.linkRange) { + this.quill.formatText(this.linkRange, "link", value, emitter_default.sources.USER); + delete this.linkRange; + } else { + this.restoreFocus(); + this.quill.format("link", value, emitter_default.sources.USER); + } + this.quill.root.scrollTop = scrollTop; + break; + } + case "video": { + value = extractVideoUrl(value); + } + case "formula": { + if (!value) + break; + const range = this.quill.getSelection(true); + if (range != null) { + const index = range.index + range.length; + this.quill.insertEmbed( + index, + // @ts-expect-error Fix me later + this.root.getAttribute("data-mode"), + value, + emitter_default.sources.USER + ); + if (this.root.getAttribute("data-mode") === "formula") { + this.quill.insertText(index + 1, " ", emitter_default.sources.USER); + } + this.quill.setSelection(index + 2, emitter_default.sources.USER); + } + break; + } + default: + } + this.textbox.value = ""; + this.hide(); + } + }; + function extractVideoUrl(url) { + let match2 = url.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtube\.com\/watch.*v=([a-zA-Z0-9_-]+)/) || url.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtu\.be\/([a-zA-Z0-9_-]+)/); + if (match2) { + return `${match2[1] || "https"}://www.youtube.com/embed/${match2[2]}?showinfo=0`; + } + if (match2 = url.match(/^(?:(https?):\/\/)?(?:www\.)?vimeo\.com\/(\d+)/)) { + return `${match2[1] || "https"}://player.vimeo.com/video/${match2[2]}/`; + } + return url; + } + function fillSelect(select, values) { + let defaultValue = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false; + values.forEach((value) => { + const option = document.createElement("option"); + if (value === defaultValue) { + option.setAttribute("selected", "selected"); + } else { + option.setAttribute("value", String(value)); + } + select.appendChild(option); + }); + } + + // node_modules/quill/themes/bubble.js + var TOOLBAR_CONFIG = [["bold", "italic", "link"], [{ + header: 1 + }, { + header: 2 + }, "blockquote"]]; + var BubbleTooltip = class extends BaseTooltip { + static TEMPLATE = ['', '
    ', '', '', "
    "].join(""); + constructor(quill, bounds) { + super(quill, bounds); + this.quill.on(emitter_default.events.EDITOR_CHANGE, (type, range, oldRange, source) => { + if (type !== emitter_default.events.SELECTION_CHANGE) + return; + if (range != null && range.length > 0 && source === emitter_default.sources.USER) { + this.show(); + this.root.style.left = "0px"; + this.root.style.width = ""; + this.root.style.width = `${this.root.offsetWidth}px`; + const lines = this.quill.getLines(range.index, range.length); + if (lines.length === 1) { + const bounds2 = this.quill.getBounds(range); + if (bounds2 != null) { + this.position(bounds2); + } + } else { + const lastLine = lines[lines.length - 1]; + const index = this.quill.getIndex(lastLine); + const length = Math.min(lastLine.length() - 1, range.index + range.length - index); + const indexBounds = this.quill.getBounds(new Range(index, length)); + if (indexBounds != null) { + this.position(indexBounds); + } + } + } else if (document.activeElement !== this.textbox && this.quill.hasFocus()) { + this.hide(); + } + }); + } + listen() { + super.listen(); + this.root.querySelector(".ql-close").addEventListener("click", () => { + this.root.classList.remove("ql-editing"); + }); + this.quill.on(emitter_default.events.SCROLL_OPTIMIZE, () => { + setTimeout(() => { + if (this.root.classList.contains("ql-hidden")) + return; + const range = this.quill.getSelection(); + if (range != null) { + const bounds = this.quill.getBounds(range); + if (bounds != null) { + this.position(bounds); + } + } + }, 1); + }); + } + cancel() { + this.show(); + } + position(reference2) { + const shift = super.position(reference2); + const arrow2 = this.root.querySelector(".ql-tooltip-arrow"); + arrow2.style.marginLeft = ""; + if (shift !== 0) { + arrow2.style.marginLeft = `${-1 * shift - arrow2.offsetWidth / 2}px`; + } + return shift; + } + }; + var BubbleTheme = class extends BaseTheme { + constructor(quill, options) { + if (options.modules.toolbar != null && options.modules.toolbar.container == null) { + options.modules.toolbar.container = TOOLBAR_CONFIG; + } + super(quill, options); + this.quill.container.classList.add("ql-bubble"); + } + extendToolbar(toolbar) { + this.tooltip = new BubbleTooltip(this.quill, this.options.bounds); + if (toolbar.container != null) { + this.tooltip.root.appendChild(toolbar.container); + this.buildButtons(toolbar.container.querySelectorAll("button"), icons_default); + this.buildPickers(toolbar.container.querySelectorAll("select"), icons_default); + } + } + }; + BubbleTheme.DEFAULTS = merge_default({}, BaseTheme.DEFAULTS, { + modules: { + toolbar: { + handlers: { + link(value) { + if (!value) { + this.quill.format("link", false, Quill.sources.USER); + } else { + this.quill.theme.tooltip.edit(); + } + } + } + } + } + }); + + // node_modules/quill/themes/snow.js + var TOOLBAR_CONFIG2 = [[{ + header: ["1", "2", "3", false] + }], ["bold", "italic", "underline", "link"], [{ + list: "ordered" + }, { + list: "bullet" + }], ["clean"]]; + var SnowTooltip = class extends BaseTooltip { + static TEMPLATE = ['', '', '', ''].join(""); + preview = this.root.querySelector("a.ql-preview"); + listen() { + super.listen(); + this.root.querySelector("a.ql-action").addEventListener("click", (event) => { + if (this.root.classList.contains("ql-editing")) { + this.save(); + } else { + this.edit("link", this.preview.textContent); + } + event.preventDefault(); + }); + this.root.querySelector("a.ql-remove").addEventListener("click", (event) => { + if (this.linkRange != null) { + const range = this.linkRange; + this.restoreFocus(); + this.quill.formatText(range, "link", false, emitter_default.sources.USER); + delete this.linkRange; + } + event.preventDefault(); + this.hide(); + }); + this.quill.on(emitter_default.events.SELECTION_CHANGE, (range, oldRange, source) => { + if (range == null) + return; + if (range.length === 0 && source === emitter_default.sources.USER) { + const [link, offset2] = this.quill.scroll.descendant(Link, range.index); + if (link != null) { + this.linkRange = new Range(range.index - offset2, link.length()); + const preview = Link.formats(link.domNode); + this.preview.textContent = preview; + this.preview.setAttribute("href", preview); + this.show(); + const bounds = this.quill.getBounds(this.linkRange); + if (bounds != null) { + this.position(bounds); + } + return; + } + } else { + delete this.linkRange; + } + this.hide(); + }); + } + show() { + super.show(); + this.root.removeAttribute("data-mode"); + } + }; + var SnowTheme = class extends BaseTheme { + constructor(quill, options) { + if (options.modules.toolbar != null && options.modules.toolbar.container == null) { + options.modules.toolbar.container = TOOLBAR_CONFIG2; + } + super(quill, options); + this.quill.container.classList.add("ql-snow"); + } + extendToolbar(toolbar) { + if (toolbar.container != null) { + toolbar.container.classList.add("ql-snow"); + this.buildButtons(toolbar.container.querySelectorAll("button"), icons_default); + this.buildPickers(toolbar.container.querySelectorAll("select"), icons_default); + this.tooltip = new SnowTooltip(this.quill, this.options.bounds); + if (toolbar.container.querySelector(".ql-link")) { + this.quill.keyboard.addBinding({ + key: "k", + shortKey: true + }, (_range, context) => { + toolbar.handlers.link.call(toolbar, !context.format.link); + }); + } + } + } + }; + SnowTheme.DEFAULTS = merge_default({}, BaseTheme.DEFAULTS, { + modules: { + toolbar: { + handlers: { + link(value) { + if (value) { + const range = this.quill.getSelection(); + if (range == null || range.length === 0) + return; + let preview = this.quill.getText(range); + if (/^\S+@\S+\.\S+$/.test(preview) && preview.indexOf("mailto:") !== 0) { + preview = `mailto:${preview}`; + } + const { + tooltip + } = this.quill.theme; + tooltip.edit("link", preview); + } else { + this.quill.format("link", false, Quill.sources.USER); + } + } + } + } + } + }); + var snow_default = SnowTheme; + + // node_modules/quill/quill.js + core_default.register({ + "attributors/attribute/direction": DirectionAttribute, + "attributors/class/align": AlignClass, + "attributors/class/background": BackgroundClass, + "attributors/class/color": ColorClass, + "attributors/class/direction": DirectionClass, + "attributors/class/font": FontClass, + "attributors/class/size": SizeClass, + "attributors/style/align": AlignStyle, + "attributors/style/background": BackgroundStyle, + "attributors/style/color": ColorStyle, + "attributors/style/direction": DirectionStyle, + "attributors/style/font": FontStyle, + "attributors/style/size": SizeStyle + }, true); + core_default.register({ + "formats/align": AlignClass, + "formats/direction": DirectionClass, + "formats/indent": indent_default, + "formats/background": BackgroundStyle, + "formats/color": ColorStyle, + "formats/font": FontClass, + "formats/size": SizeClass, + "formats/blockquote": blockquote_default, + "formats/code-block": CodeBlock, + "formats/header": header_default, + "formats/list": ListItem, + "formats/bold": bold_default, + "formats/code": Code, + "formats/italic": italic_default, + "formats/link": Link, + "formats/script": script_default, + "formats/strike": strike_default, + "formats/underline": underline_default, + "formats/formula": formula_default, + "formats/image": image_default, + "formats/video": video_default, + "modules/syntax": Syntax, + "modules/table": table_default, + "modules/toolbar": Toolbar, + "themes/bubble": BubbleTheme, + "themes/snow": snow_default, + "ui/icons": icons_default, + "ui/picker": picker_default, + "ui/icon-picker": icon_picker_default, + "ui/color-picker": color_picker_default, + "ui/tooltip": tooltip_default2 + }, true); + var quill_default = core_default; + + // app/javascript/active_admin.js + var import_activeadmin_quill_editor = __toESM(require_activeadmin_quill_editor()); + window.Quill = quill_default; + try { + const ImageUploader = __require("quill-image-uploader"); + window.ImageUploader = ImageUploader.default || ImageUploader; + } catch (e) { + } + if (window.QuillEditor && window.QuillEditor.init) { + window.QuillEditor.init(); + } else if (import_activeadmin_quill_editor.default && import_activeadmin_quill_editor.default.init) { + import_activeadmin_quill_editor.default.init(); + } +})(); +/*! Bundled license information: + +lodash-es/lodash.js: + (** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) +*/ +//# sourceMappingURL=/assets/active_admin.js.map diff --git a/spec/dummy/app/assets/builds/active_admin.js.map b/spec/dummy/app/assets/builds/active_admin.js.map new file mode 100644 index 0000000..eb226a8 --- /dev/null +++ b/spec/dummy/app/assets/builds/active_admin.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../node_modules/fast-diff/diff.js", "../../../node_modules/lodash.clonedeep/index.js", "../../../node_modules/lodash.isequal/index.js", "../../../node_modules/quill-delta/src/AttributeMap.ts", "../../../node_modules/quill-delta/src/Op.ts", "../../../node_modules/quill-delta/src/OpIterator.ts", "../../../node_modules/quill-delta/src/Delta.ts", "../../../node_modules/eventemitter3/index.js", "../../../../../vendor/assets/javascripts/activeadmin_quill_editor.js", "../../../node_modules/flowbite/src/dom/events.ts", "../../../node_modules/flowbite/src/dom/instances.ts", "../../../node_modules/flowbite/src/components/accordion/index.ts", "../../../node_modules/flowbite/src/components/collapse/index.ts", "../../../node_modules/flowbite/src/components/carousel/index.ts", "../../../node_modules/flowbite/src/components/dismiss/index.ts", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/flowbite/src/components/dropdown/index.ts", "../../../node_modules/flowbite/src/components/modal/index.ts", "../../../node_modules/flowbite/src/components/drawer/index.ts", "../../../node_modules/flowbite/src/components/tabs/index.ts", "../../../node_modules/flowbite/src/components/tooltip/index.ts", "../../../node_modules/flowbite/src/components/popover/index.ts", "../../../node_modules/flowbite/src/components/dial/index.ts", "../../../node_modules/flowbite/src/components/input-counter/index.ts", "../../../node_modules/flowbite/src/components/clipboard/index.ts", "../../../node_modules/flowbite/src/components/index.ts", "../../../node_modules/flowbite/src/index.ts", "../../../node_modules/@activeadmin/activeadmin/node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js", "../../../node_modules/@activeadmin/activeadmin/dist/active_admin/features/batch_actions.js", "../../../node_modules/@activeadmin/activeadmin/dist/active_admin/features/dark_mode_toggle.js", "../../../node_modules/@activeadmin/activeadmin/dist/active_admin/features/has_many.js", "../../../node_modules/@activeadmin/activeadmin/dist/active_admin/utils/dom.js", "../../../node_modules/@activeadmin/activeadmin/dist/active_admin/features/filters.js", "../../../node_modules/@activeadmin/activeadmin/dist/active_admin/features/main_menu.js", "../../../node_modules/@activeadmin/activeadmin/dist/active_admin/features/per_page.js", "../../../node_modules/@activeadmin/activeadmin/dist/active_admin.js", "../../../node_modules/lodash-es/_freeGlobal.js", "../../../node_modules/lodash-es/_root.js", "../../../node_modules/lodash-es/_Symbol.js", "../../../node_modules/lodash-es/_getRawTag.js", "../../../node_modules/lodash-es/_objectToString.js", "../../../node_modules/lodash-es/_baseGetTag.js", "../../../node_modules/lodash-es/isObjectLike.js", "../../../node_modules/lodash-es/isArray.js", "../../../node_modules/lodash-es/isObject.js", "../../../node_modules/lodash-es/identity.js", "../../../node_modules/lodash-es/isFunction.js", "../../../node_modules/lodash-es/_coreJsData.js", "../../../node_modules/lodash-es/_isMasked.js", "../../../node_modules/lodash-es/_toSource.js", "../../../node_modules/lodash-es/_baseIsNative.js", "../../../node_modules/lodash-es/_getValue.js", "../../../node_modules/lodash-es/_getNative.js", "../../../node_modules/lodash-es/_WeakMap.js", "../../../node_modules/lodash-es/_baseCreate.js", "../../../node_modules/lodash-es/_apply.js", "../../../node_modules/lodash-es/_copyArray.js", "../../../node_modules/lodash-es/_shortOut.js", "../../../node_modules/lodash-es/constant.js", "../../../node_modules/lodash-es/_defineProperty.js", "../../../node_modules/lodash-es/_baseSetToString.js", "../../../node_modules/lodash-es/_setToString.js", "../../../node_modules/lodash-es/_arrayEach.js", "../../../node_modules/lodash-es/_isIndex.js", "../../../node_modules/lodash-es/_baseAssignValue.js", "../../../node_modules/lodash-es/eq.js", "../../../node_modules/lodash-es/_assignValue.js", "../../../node_modules/lodash-es/_copyObject.js", "../../../node_modules/lodash-es/_overRest.js", "../../../node_modules/lodash-es/_baseRest.js", "../../../node_modules/lodash-es/isLength.js", "../../../node_modules/lodash-es/isArrayLike.js", "../../../node_modules/lodash-es/_isIterateeCall.js", "../../../node_modules/lodash-es/_createAssigner.js", "../../../node_modules/lodash-es/_isPrototype.js", "../../../node_modules/lodash-es/_baseTimes.js", "../../../node_modules/lodash-es/_baseIsArguments.js", "../../../node_modules/lodash-es/isArguments.js", "../../../node_modules/lodash-es/stubFalse.js", "../../../node_modules/lodash-es/isBuffer.js", "../../../node_modules/lodash-es/_baseIsTypedArray.js", "../../../node_modules/lodash-es/_baseUnary.js", "../../../node_modules/lodash-es/_nodeUtil.js", "../../../node_modules/lodash-es/isTypedArray.js", "../../../node_modules/lodash-es/_arrayLikeKeys.js", "../../../node_modules/lodash-es/_overArg.js", "../../../node_modules/lodash-es/_nativeKeys.js", "../../../node_modules/lodash-es/_baseKeys.js", "../../../node_modules/lodash-es/keys.js", "../../../node_modules/lodash-es/_nativeKeysIn.js", "../../../node_modules/lodash-es/_baseKeysIn.js", "../../../node_modules/lodash-es/keysIn.js", "../../../node_modules/lodash-es/_nativeCreate.js", "../../../node_modules/lodash-es/_hashClear.js", "../../../node_modules/lodash-es/_hashDelete.js", "../../../node_modules/lodash-es/_hashGet.js", "../../../node_modules/lodash-es/_hashHas.js", "../../../node_modules/lodash-es/_hashSet.js", "../../../node_modules/lodash-es/_Hash.js", "../../../node_modules/lodash-es/_listCacheClear.js", "../../../node_modules/lodash-es/_assocIndexOf.js", "../../../node_modules/lodash-es/_listCacheDelete.js", "../../../node_modules/lodash-es/_listCacheGet.js", "../../../node_modules/lodash-es/_listCacheHas.js", "../../../node_modules/lodash-es/_listCacheSet.js", "../../../node_modules/lodash-es/_ListCache.js", "../../../node_modules/lodash-es/_Map.js", "../../../node_modules/lodash-es/_mapCacheClear.js", "../../../node_modules/lodash-es/_isKeyable.js", "../../../node_modules/lodash-es/_getMapData.js", "../../../node_modules/lodash-es/_mapCacheDelete.js", "../../../node_modules/lodash-es/_mapCacheGet.js", "../../../node_modules/lodash-es/_mapCacheHas.js", "../../../node_modules/lodash-es/_mapCacheSet.js", "../../../node_modules/lodash-es/_MapCache.js", "../../../node_modules/lodash-es/_arrayPush.js", "../../../node_modules/lodash-es/_getPrototype.js", "../../../node_modules/lodash-es/isPlainObject.js", "../../../node_modules/lodash-es/_stackClear.js", "../../../node_modules/lodash-es/_stackDelete.js", "../../../node_modules/lodash-es/_stackGet.js", "../../../node_modules/lodash-es/_stackHas.js", "../../../node_modules/lodash-es/_stackSet.js", "../../../node_modules/lodash-es/_Stack.js", "../../../node_modules/lodash-es/_baseAssign.js", "../../../node_modules/lodash-es/_baseAssignIn.js", "../../../node_modules/lodash-es/_cloneBuffer.js", "../../../node_modules/lodash-es/_arrayFilter.js", "../../../node_modules/lodash-es/stubArray.js", "../../../node_modules/lodash-es/_getSymbols.js", "../../../node_modules/lodash-es/_copySymbols.js", "../../../node_modules/lodash-es/_getSymbolsIn.js", "../../../node_modules/lodash-es/_copySymbolsIn.js", "../../../node_modules/lodash-es/_baseGetAllKeys.js", "../../../node_modules/lodash-es/_getAllKeys.js", "../../../node_modules/lodash-es/_getAllKeysIn.js", "../../../node_modules/lodash-es/_DataView.js", "../../../node_modules/lodash-es/_Promise.js", "../../../node_modules/lodash-es/_Set.js", "../../../node_modules/lodash-es/_getTag.js", "../../../node_modules/lodash-es/_initCloneArray.js", "../../../node_modules/lodash-es/_Uint8Array.js", "../../../node_modules/lodash-es/_cloneArrayBuffer.js", "../../../node_modules/lodash-es/_cloneDataView.js", "../../../node_modules/lodash-es/_cloneRegExp.js", "../../../node_modules/lodash-es/_cloneSymbol.js", "../../../node_modules/lodash-es/_cloneTypedArray.js", "../../../node_modules/lodash-es/_initCloneByTag.js", "../../../node_modules/lodash-es/_initCloneObject.js", "../../../node_modules/lodash-es/_baseIsMap.js", "../../../node_modules/lodash-es/isMap.js", "../../../node_modules/lodash-es/_baseIsSet.js", "../../../node_modules/lodash-es/isSet.js", "../../../node_modules/lodash-es/_baseClone.js", "../../../node_modules/lodash-es/cloneDeep.js", "../../../node_modules/lodash-es/_setCacheAdd.js", "../../../node_modules/lodash-es/_setCacheHas.js", "../../../node_modules/lodash-es/_SetCache.js", "../../../node_modules/lodash-es/_arraySome.js", "../../../node_modules/lodash-es/_cacheHas.js", "../../../node_modules/lodash-es/_equalArrays.js", "../../../node_modules/lodash-es/_mapToArray.js", "../../../node_modules/lodash-es/_setToArray.js", "../../../node_modules/lodash-es/_equalByTag.js", "../../../node_modules/lodash-es/_equalObjects.js", "../../../node_modules/lodash-es/_baseIsEqualDeep.js", "../../../node_modules/lodash-es/_baseIsEqual.js", "../../../node_modules/lodash-es/_createBaseFor.js", "../../../node_modules/lodash-es/_baseFor.js", "../../../node_modules/lodash-es/_assignMergeValue.js", "../../../node_modules/lodash-es/isArrayLikeObject.js", "../../../node_modules/lodash-es/_safeGet.js", "../../../node_modules/lodash-es/toPlainObject.js", "../../../node_modules/lodash-es/_baseMergeDeep.js", "../../../node_modules/lodash-es/_baseMerge.js", "../../../node_modules/lodash-es/isEqual.js", "../../../node_modules/lodash-es/merge.js", "../../../node_modules/parchment/src/scope.ts", "../../../node_modules/parchment/src/attributor/attributor.ts", "../../../node_modules/parchment/src/error.ts", "../../../node_modules/parchment/src/registry.ts", "../../../node_modules/parchment/src/attributor/class.ts", "../../../node_modules/parchment/src/attributor/style.ts", "../../../node_modules/parchment/src/attributor/store.ts", "../../../node_modules/parchment/src/blot/abstract/shadow.ts", "../../../node_modules/parchment/src/blot/abstract/leaf.ts", "../../../node_modules/parchment/src/collection/linked-list.ts", "../../../node_modules/parchment/src/blot/abstract/parent.ts", "../../../node_modules/parchment/src/blot/inline.ts", "../../../node_modules/parchment/src/blot/block.ts", "../../../node_modules/parchment/src/blot/abstract/container.ts", "../../../node_modules/parchment/src/blot/embed.ts", "../../../node_modules/parchment/src/blot/scroll.ts", "../../../node_modules/parchment/src/blot/text.ts", "../../../node_modules/src/core/quill.ts", "../../../node_modules/src/core/editor.ts", "../../../node_modules/src/blots/block.ts", "../../../node_modules/src/blots/break.ts", "../../../node_modules/src/blots/text.ts", "../../../node_modules/src/blots/inline.ts", "../../../node_modules/src/blots/cursor.ts", "../../../node_modules/eventemitter3/index.mjs", "../../../node_modules/src/core/instances.ts", "../../../node_modules/src/core/logger.ts", "../../../node_modules/src/core/emitter.ts", "../../../node_modules/src/core/selection.ts", "../../../node_modules/src/core/module.ts", "../../../node_modules/src/blots/embed.ts", "../../../node_modules/src/core/composition.ts", "../../../node_modules/src/core/theme.ts", "../../../node_modules/src/core/utils/scrollRectIntoView.ts", "../../../node_modules/src/core/utils/createRegistryWithFormats.ts", "../../../node_modules/src/blots/container.ts", "../../../node_modules/src/blots/scroll.ts", "../../../node_modules/src/modules/clipboard.ts", "../../../node_modules/src/formats/align.ts", "../../../node_modules/src/formats/color.ts", "../../../node_modules/src/formats/background.ts", "../../../node_modules/src/formats/code.ts", "../../../node_modules/src/formats/direction.ts", "../../../node_modules/src/formats/font.ts", "../../../node_modules/src/formats/size.ts", "../../../node_modules/src/modules/keyboard.ts", "../../../node_modules/src/modules/normalizeExternalHTML/normalizers/googleDocs.ts", "../../../node_modules/src/modules/normalizeExternalHTML/normalizers/msWord.ts", "../../../node_modules/src/modules/normalizeExternalHTML/index.ts", "../../../node_modules/src/modules/history.ts", "../../../node_modules/src/modules/uploader.ts", "../../../node_modules/src/core.ts", "../../../node_modules/src/modules/input.ts", "../../../node_modules/src/modules/uiNode.ts", "../../../node_modules/src/formats/indent.ts", "../../../node_modules/src/formats/blockquote.ts", "../../../node_modules/src/formats/header.ts", "../../../node_modules/src/formats/list.ts", "../../../node_modules/src/formats/bold.ts", "../../../node_modules/src/formats/italic.ts", "../../../node_modules/src/formats/link.ts", "../../../node_modules/src/formats/script.ts", "../../../node_modules/src/formats/strike.ts", "../../../node_modules/src/formats/underline.ts", "../../../node_modules/src/formats/formula.ts", "../../../node_modules/src/formats/image.ts", "../../../node_modules/src/formats/video.ts", "../../../node_modules/src/modules/syntax.ts", "../../../node_modules/src/modules/table.ts", "../../../node_modules/src/formats/table.ts", "../../../node_modules/src/modules/toolbar.ts", "../../../node_modules/src/ui/icons.ts", "../../../node_modules/src/ui/picker.ts", "../../../node_modules/src/ui/color-picker.ts", "../../../node_modules/src/ui/icon-picker.ts", "../../../node_modules/src/ui/tooltip.ts", "../../../node_modules/src/themes/base.ts", "../../../node_modules/src/themes/bubble.ts", "../../../node_modules/src/themes/snow.ts", "../../../node_modules/src/quill.ts", "../../javascript/active_admin.js"], + "sourcesContent": ["/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int|Object} [cursor_pos] Edit position in text1 or object with more info\n * @param {boolean} [cleanup] Apply semantic cleanup before returning.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos, cleanup, _fix_unicode) {\n // Check for equality\n if (text1 === text2) {\n if (text1) {\n return [[DIFF_EQUAL, text1]];\n }\n return [];\n }\n\n if (cursor_pos != null) {\n var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n if (editdiff) {\n return editdiff;\n }\n }\n\n // Trim off common prefix (speedup).\n var commonlength = diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = diff_compute_(text1, text2);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n diff_cleanupMerge(diffs, _fix_unicode);\n if (cleanup) {\n diff_cleanupSemantic(diffs);\n }\n return diffs;\n}\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i !== -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [\n [DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)],\n ];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length === 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2],\n ];\n }\n\n // Check to see if the problem can be split in two.\n var hm = diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = diff_main(text1_a, text2_a);\n var diffs_b = diff_main(text1_b, text2_b);\n // Merge the results.\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n return diff_bisect_(text1, text2);\n}\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = delta % 2 !== 0;\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 === -d || (k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (\n x1 < text1_length &&\n y1 < text2_length &&\n text1.charAt(x1) === text2.charAt(y1)\n ) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 === -d || (k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (\n x2 < text1_length &&\n y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ===\n text2.charAt(text2_length - y2 - 1)\n ) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2],\n ];\n}\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = diff_main(text1a, text2a);\n var diffsb = diff_main(text1b, text2b);\n\n return diffs.concat(diffsb);\n}\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\nfunction diff_commonPrefix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)\n ) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n pointermid--;\n }\n\n return pointermid;\n}\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\nfunction diff_commonOverlap_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: http://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (\n found == 0 ||\n text1.substring(text_length - length) == text2.substring(0, length)\n ) {\n best = length;\n length++;\n }\n }\n}\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)\n ) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n pointermid--;\n }\n\n return pointermid;\n}\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = \"\";\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {\n var prefixLength = diff_commonPrefix(\n longtext.substring(i),\n shorttext.substring(j)\n );\n var suffixLength = diff_commonSuffix(\n longtext.substring(0, i),\n shorttext.substring(0, j)\n );\n if (best_common.length < suffixLength + prefixLength) {\n best_common =\n shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [\n best_longtext_a,\n best_longtext_b,\n best_shorttext_a,\n best_shorttext_b,\n best_common,\n ];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(\n longtext,\n shorttext,\n Math.ceil(longtext.length / 4)\n );\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(\n longtext,\n shorttext,\n Math.ceil(longtext.length / 2)\n );\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n}\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemantic(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastequality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) {\n // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = diffs[pointer][1];\n } else {\n // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (\n lastequality &&\n lastequality.length <=\n Math.max(length_insertions1, length_deletions1) &&\n lastequality.length <= Math.max(length_insertions2, length_deletions2)\n ) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0, [\n DIFF_DELETE,\n lastequality,\n ]);\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n diff_cleanupMerge(diffs);\n }\n diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: abcxxxxxxdef\n // -> abcxxxdef\n // e.g: xxxabcdefxxx\n // -> defxxxabc\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (\n diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT\n ) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (\n overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2\n ) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, [\n DIFF_EQUAL,\n insertion.substring(0, overlap_length1),\n ]);\n diffs[pointer - 1][1] = deletion.substring(\n 0,\n deletion.length - overlap_length1\n );\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (\n overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2\n ) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, [\n DIFF_EQUAL,\n deletion.substring(0, overlap_length2),\n ]);\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] = insertion.substring(\n 0,\n insertion.length - overlap_length2\n );\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n}\n\nvar nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\nvar whitespaceRegex_ = /\\s/;\nvar linebreakRegex_ = /[\\r\\n]/;\nvar blanklineEndRegex_ = /\\n\\r?\\n$/;\nvar blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The cat came. -> The cat came.\n * @param {!Array.} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemanticLossless(diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);\n var lineBreak1 = whitespace1 && char1.match(linebreakRegex_);\n var lineBreak2 = whitespace2 && char2.match(linebreakRegex_);\n var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);\n var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n}\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n * @param {boolean} fix_unicode Whether to normalize to a unicode-correct diff\n */\nfunction diff_cleanupMerge(diffs, fix_unicode) {\n diffs.push([DIFF_EQUAL, \"\"]); // Add a dummy entry at the end.\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = \"\";\n var text_insert = \"\";\n var commonlength;\n while (pointer < diffs.length) {\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n diffs.splice(pointer, 1);\n continue;\n }\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n var previous_equality = pointer - count_insert - count_delete - 1;\n if (fix_unicode) {\n // prevent splitting of unicode surrogate pairs. when fix_unicode is true,\n // we assume that the old and new text in the diff are complete and correct\n // unicode-encoded JS strings, but the tuple boundaries may fall between\n // surrogate pairs. we fix this by shaving off stray surrogates from the end\n // of the previous equality and the beginning of this equality. this may create\n // empty equalities or a common prefix or suffix. for example, if AB and AC are\n // emojis, `[[0, 'A'], [-1, 'BA'], [0, 'C']]` would turn into deleting 'ABAC' and\n // inserting 'AC', and then the common suffix 'AC' will be eliminated. in this\n // particular case, both equalities go away, we absorb any previous inequalities,\n // and we keep scanning for the next equality before rewriting the tuples.\n if (\n previous_equality >= 0 &&\n ends_with_pair_start(diffs[previous_equality][1])\n ) {\n var stray = diffs[previous_equality][1].slice(-1);\n diffs[previous_equality][1] = diffs[previous_equality][1].slice(\n 0,\n -1\n );\n text_delete = stray + text_delete;\n text_insert = stray + text_insert;\n if (!diffs[previous_equality][1]) {\n // emptied out previous equality, so delete it and include previous delete/insert\n diffs.splice(previous_equality, 1);\n pointer--;\n var k = previous_equality - 1;\n if (diffs[k] && diffs[k][0] === DIFF_INSERT) {\n count_insert++;\n text_insert = diffs[k][1] + text_insert;\n k--;\n }\n if (diffs[k] && diffs[k][0] === DIFF_DELETE) {\n count_delete++;\n text_delete = diffs[k][1] + text_delete;\n k--;\n }\n previous_equality = k;\n }\n }\n if (starts_with_pair_end(diffs[pointer][1])) {\n var stray = diffs[pointer][1].charAt(0);\n diffs[pointer][1] = diffs[pointer][1].slice(1);\n text_delete += stray;\n text_insert += stray;\n }\n }\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n // for empty equality not at end, wait for next equality\n diffs.splice(pointer, 1);\n break;\n }\n if (text_delete.length > 0 || text_insert.length > 0) {\n // note that diff_commonPrefix and diff_commonSuffix are unicode-aware\n if (text_delete.length > 0 && text_insert.length > 0) {\n // Factor out any common prefixes.\n commonlength = diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if (previous_equality >= 0) {\n diffs[previous_equality][1] += text_insert.substring(\n 0,\n commonlength\n );\n } else {\n diffs.splice(0, 0, [\n DIFF_EQUAL,\n text_insert.substring(0, commonlength),\n ]);\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixes.\n commonlength = diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] =\n text_insert.substring(text_insert.length - commonlength) +\n diffs[pointer][1];\n text_insert = text_insert.substring(\n 0,\n text_insert.length - commonlength\n );\n text_delete = text_delete.substring(\n 0,\n text_delete.length - commonlength\n );\n }\n }\n // Delete the offending records and add the merged ones.\n var n = count_insert + count_delete;\n if (text_delete.length === 0 && text_insert.length === 0) {\n diffs.splice(pointer - n, n);\n pointer = pointer - n;\n } else if (text_delete.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);\n pointer = pointer - n + 1;\n } else if (text_insert.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);\n pointer = pointer - n + 1;\n } else {\n diffs.splice(\n pointer - n,\n n,\n [DIFF_DELETE, text_delete],\n [DIFF_INSERT, text_insert]\n );\n pointer = pointer - n + 2;\n }\n }\n if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = \"\";\n text_insert = \"\";\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === \"\") {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: ABAC -> ABAC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] === DIFF_EQUAL &&\n diffs[pointer + 1][0] === DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n if (\n diffs[pointer][1].substring(\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n ) === diffs[pointer - 1][1]\n ) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] =\n diffs[pointer - 1][1] +\n diffs[pointer][1].substring(\n 0,\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n );\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (\n diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]\n ) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n diff_cleanupMerge(diffs, fix_unicode);\n }\n}\n\nfunction is_surrogate_pair_start(charCode) {\n return charCode >= 0xd800 && charCode <= 0xdbff;\n}\n\nfunction is_surrogate_pair_end(charCode) {\n return charCode >= 0xdc00 && charCode <= 0xdfff;\n}\n\nfunction starts_with_pair_end(str) {\n return is_surrogate_pair_end(str.charCodeAt(0));\n}\n\nfunction ends_with_pair_start(str) {\n return is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n}\n\nfunction remove_empty_tuples(tuples) {\n var ret = [];\n for (var i = 0; i < tuples.length; i++) {\n if (tuples[i][1].length > 0) {\n ret.push(tuples[i]);\n }\n }\n return ret;\n}\n\nfunction make_edit_splice(before, oldMiddle, newMiddle, after) {\n if (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n return null;\n }\n return remove_empty_tuples([\n [DIFF_EQUAL, before],\n [DIFF_DELETE, oldMiddle],\n [DIFF_INSERT, newMiddle],\n [DIFF_EQUAL, after],\n ]);\n}\n\nfunction find_cursor_edit_diff(oldText, newText, cursor_pos) {\n // note: this runs after equality check has ruled out exact equality\n var oldRange =\n typeof cursor_pos === \"number\"\n ? { index: cursor_pos, length: 0 }\n : cursor_pos.oldRange;\n var newRange = typeof cursor_pos === \"number\" ? null : cursor_pos.newRange;\n // take into account the old and new selection to generate the best diff\n // possible for a text edit. for example, a text change from \"xxx\" to \"xx\"\n // could be a delete or forwards-delete of any one of the x's, or the\n // result of selecting two of the x's and typing \"x\".\n var oldLength = oldText.length;\n var newLength = newText.length;\n if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n // see if we have an insert or delete before or after cursor\n var oldCursor = oldRange.index;\n var oldBefore = oldText.slice(0, oldCursor);\n var oldAfter = oldText.slice(oldCursor);\n var maybeNewCursor = newRange ? newRange.index : null;\n editBefore: {\n // is this an insert or delete right before oldCursor?\n var newCursor = oldCursor + newLength - oldLength;\n if (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n break editBefore;\n }\n if (newCursor < 0 || newCursor > newLength) {\n break editBefore;\n }\n var newBefore = newText.slice(0, newCursor);\n var newAfter = newText.slice(newCursor);\n if (newAfter !== oldAfter) {\n break editBefore;\n }\n var prefixLength = Math.min(oldCursor, newCursor);\n var oldPrefix = oldBefore.slice(0, prefixLength);\n var newPrefix = newBefore.slice(0, prefixLength);\n if (oldPrefix !== newPrefix) {\n break editBefore;\n }\n var oldMiddle = oldBefore.slice(prefixLength);\n var newMiddle = newBefore.slice(prefixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n }\n editAfter: {\n // is this an insert or delete right after oldCursor?\n if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n break editAfter;\n }\n var cursor = oldCursor;\n var newBefore = newText.slice(0, cursor);\n var newAfter = newText.slice(cursor);\n if (newBefore !== oldBefore) {\n break editAfter;\n }\n var suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n var newSuffix = newAfter.slice(newAfter.length - suffixLength);\n if (oldSuffix !== newSuffix) {\n break editAfter;\n }\n var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n }\n }\n if (oldRange.length > 0 && newRange && newRange.length === 0) {\n replaceRange: {\n // see if diff could be a splice of the old selection range\n var oldPrefix = oldText.slice(0, oldRange.index);\n var oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n var prefixLength = oldPrefix.length;\n var suffixLength = oldSuffix.length;\n if (newLength < prefixLength + suffixLength) {\n break replaceRange;\n }\n var newPrefix = newText.slice(0, prefixLength);\n var newSuffix = newText.slice(newLength - suffixLength);\n if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n break replaceRange;\n }\n var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n var newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n }\n }\n\n return null;\n}\n\nfunction diff(text1, text2, cursor_pos, cleanup) {\n // only pass fix_unicode=true at the top level, not when diff_main is\n // recursively invoked\n return diff_main(text1, text2, cursor_pos, cleanup, true);\n}\n\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n", "/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = cloneDeep;\n", "/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n", "import cloneDeep = require('lodash.clonedeep');\nimport isEqual = require('lodash.isequal');\n\ninterface AttributeMap {\n [key: string]: unknown;\n}\n\nnamespace AttributeMap {\n export function compose(\n a: AttributeMap = {},\n b: AttributeMap = {},\n keepNull = false,\n ): AttributeMap | undefined {\n if (typeof a !== 'object') {\n a = {};\n }\n if (typeof b !== 'object') {\n b = {};\n }\n let attributes = cloneDeep(b);\n if (!keepNull) {\n attributes = Object.keys(attributes).reduce((copy, key) => {\n if (attributes[key] != null) {\n copy[key] = attributes[key];\n }\n return copy;\n }, {});\n }\n for (const key in a) {\n if (a[key] !== undefined && b[key] === undefined) {\n attributes[key] = a[key];\n }\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n\n export function diff(\n a: AttributeMap = {},\n b: AttributeMap = {},\n ): AttributeMap | undefined {\n if (typeof a !== 'object') {\n a = {};\n }\n if (typeof b !== 'object') {\n b = {};\n }\n const attributes = Object.keys(a)\n .concat(Object.keys(b))\n .reduce((attrs, key) => {\n if (!isEqual(a[key], b[key])) {\n attrs[key] = b[key] === undefined ? null : b[key];\n }\n return attrs;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n\n export function invert(\n attr: AttributeMap = {},\n base: AttributeMap = {},\n ): AttributeMap {\n attr = attr || {};\n const baseInverted = Object.keys(base).reduce((memo, key) => {\n if (base[key] !== attr[key] && attr[key] !== undefined) {\n memo[key] = base[key];\n }\n return memo;\n }, {});\n return Object.keys(attr).reduce((memo, key) => {\n if (attr[key] !== base[key] && base[key] === undefined) {\n memo[key] = null;\n }\n return memo;\n }, baseInverted);\n }\n\n export function transform(\n a: AttributeMap | undefined,\n b: AttributeMap | undefined,\n priority = false,\n ): AttributeMap | undefined {\n if (typeof a !== 'object') {\n return b;\n }\n if (typeof b !== 'object') {\n return undefined;\n }\n if (!priority) {\n return b; // b simply overwrites us without priority\n }\n const attributes = Object.keys(b).reduce((attrs, key) => {\n if (a[key] === undefined) {\n attrs[key] = b[key]; // null is a valid value\n }\n return attrs;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n}\n\nexport default AttributeMap;\n", "import AttributeMap from './AttributeMap';\n\ninterface Op {\n // only one property out of {insert, delete, retain} will be present\n insert?: string | Record;\n delete?: number;\n retain?: number | Record;\n\n attributes?: AttributeMap;\n}\n\nnamespace Op {\n export function length(op: Op): number {\n if (typeof op.delete === 'number') {\n return op.delete;\n } else if (typeof op.retain === 'number') {\n return op.retain;\n } else if (typeof op.retain === 'object' && op.retain !== null) {\n return 1;\n } else {\n return typeof op.insert === 'string' ? op.insert.length : 1;\n }\n }\n}\n\nexport default Op;\n", "import Op from './Op';\n\nexport default class Iterator {\n ops: Op[];\n index: number;\n offset: number;\n\n constructor(ops: Op[]) {\n this.ops = ops;\n this.index = 0;\n this.offset = 0;\n }\n\n hasNext(): boolean {\n return this.peekLength() < Infinity;\n }\n\n next(length?: number): Op {\n if (!length) {\n length = Infinity;\n }\n const nextOp = this.ops[this.index];\n if (nextOp) {\n const offset = this.offset;\n const opLength = Op.length(nextOp);\n if (length >= opLength - offset) {\n length = opLength - offset;\n this.index += 1;\n this.offset = 0;\n } else {\n this.offset += length;\n }\n if (typeof nextOp.delete === 'number') {\n return { delete: length };\n } else {\n const retOp: Op = {};\n if (nextOp.attributes) {\n retOp.attributes = nextOp.attributes;\n }\n if (typeof nextOp.retain === 'number') {\n retOp.retain = length;\n } else if (\n typeof nextOp.retain === 'object' &&\n nextOp.retain !== null\n ) {\n // offset should === 0, length should === 1\n retOp.retain = nextOp.retain;\n } else if (typeof nextOp.insert === 'string') {\n retOp.insert = nextOp.insert.substr(offset, length);\n } else {\n // offset should === 0, length should === 1\n retOp.insert = nextOp.insert;\n }\n return retOp;\n }\n } else {\n return { retain: Infinity };\n }\n }\n\n peek(): Op {\n return this.ops[this.index];\n }\n\n peekLength(): number {\n if (this.ops[this.index]) {\n // Should never return 0 if our index is being managed correctly\n return Op.length(this.ops[this.index]) - this.offset;\n } else {\n return Infinity;\n }\n }\n\n peekType(): string {\n const op = this.ops[this.index];\n if (op) {\n if (typeof op.delete === 'number') {\n return 'delete';\n } else if (\n typeof op.retain === 'number' ||\n (typeof op.retain === 'object' && op.retain !== null)\n ) {\n return 'retain';\n } else {\n return 'insert';\n }\n }\n return 'retain';\n }\n\n rest(): Op[] {\n if (!this.hasNext()) {\n return [];\n } else if (this.offset === 0) {\n return this.ops.slice(this.index);\n } else {\n const offset = this.offset;\n const index = this.index;\n const next = this.next();\n const rest = this.ops.slice(this.index);\n this.offset = offset;\n this.index = index;\n return [next].concat(rest);\n }\n }\n}\n", "import * as diff from 'fast-diff';\nimport cloneDeep = require('lodash.clonedeep');\nimport isEqual = require('lodash.isequal');\nimport AttributeMap from './AttributeMap';\nimport Op from './Op';\nimport OpIterator from './OpIterator';\n\nconst NULL_CHARACTER = String.fromCharCode(0); // Placeholder char for embed in diff()\n\ninterface EmbedHandler {\n compose(a: T, b: T, keepNull: boolean): T;\n invert(a: T, b: T): T;\n transform(a: T, b: T, priority: boolean): T;\n}\n\nconst getEmbedTypeAndData = (\n a: Op['insert'] | Op['retain'],\n b: Op['insert'],\n): [string, unknown, unknown] => {\n if (typeof a !== 'object' || a === null) {\n throw new Error(`cannot retain a ${typeof a}`);\n }\n if (typeof b !== 'object' || b === null) {\n throw new Error(`cannot retain a ${typeof b}`);\n }\n const embedType = Object.keys(a)[0];\n if (!embedType || embedType !== Object.keys(b)[0]) {\n throw new Error(\n `embed types not matched: ${embedType} != ${Object.keys(b)[0]}`,\n );\n }\n return [embedType, a[embedType], b[embedType]];\n};\n\nclass Delta {\n static Op = Op;\n static OpIterator = OpIterator;\n static AttributeMap = AttributeMap;\n private static handlers: { [embedType: string]: EmbedHandler } = {};\n\n static registerEmbed(embedType: string, handler: EmbedHandler): void {\n this.handlers[embedType] = handler;\n }\n\n static unregisterEmbed(embedType: string): void {\n delete this.handlers[embedType];\n }\n\n private static getHandler(embedType: string): EmbedHandler {\n const handler = this.handlers[embedType];\n if (!handler) {\n throw new Error(`no handlers for embed type \"${embedType}\"`);\n }\n return handler;\n }\n\n ops: Op[];\n constructor(ops?: Op[] | { ops: Op[] }) {\n // Assume we are given a well formed ops\n if (Array.isArray(ops)) {\n this.ops = ops;\n } else if (ops != null && Array.isArray(ops.ops)) {\n this.ops = ops.ops;\n } else {\n this.ops = [];\n }\n }\n\n insert(\n arg: string | Record,\n attributes?: AttributeMap | null,\n ): this {\n const newOp: Op = {};\n if (typeof arg === 'string' && arg.length === 0) {\n return this;\n }\n newOp.insert = arg;\n if (\n attributes != null &&\n typeof attributes === 'object' &&\n Object.keys(attributes).length > 0\n ) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n }\n\n delete(length: number): this {\n if (length <= 0) {\n return this;\n }\n return this.push({ delete: length });\n }\n\n retain(\n length: number | Record,\n attributes?: AttributeMap | null,\n ): this {\n if (typeof length === 'number' && length <= 0) {\n return this;\n }\n const newOp: Op = { retain: length };\n if (\n attributes != null &&\n typeof attributes === 'object' &&\n Object.keys(attributes).length > 0\n ) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n }\n\n push(newOp: Op): this {\n let index = this.ops.length;\n let lastOp = this.ops[index - 1];\n newOp = cloneDeep(newOp);\n if (typeof lastOp === 'object') {\n if (\n typeof newOp.delete === 'number' &&\n typeof lastOp.delete === 'number'\n ) {\n this.ops[index - 1] = { delete: lastOp.delete + newOp.delete };\n return this;\n }\n // Since it does not matter if we insert before or after deleting at the same index,\n // always prefer to insert first\n if (typeof lastOp.delete === 'number' && newOp.insert != null) {\n index -= 1;\n lastOp = this.ops[index - 1];\n if (typeof lastOp !== 'object') {\n this.ops.unshift(newOp);\n return this;\n }\n }\n if (isEqual(newOp.attributes, lastOp.attributes)) {\n if (\n typeof newOp.insert === 'string' &&\n typeof lastOp.insert === 'string'\n ) {\n this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n if (typeof newOp.attributes === 'object') {\n this.ops[index - 1].attributes = newOp.attributes;\n }\n return this;\n } else if (\n typeof newOp.retain === 'number' &&\n typeof lastOp.retain === 'number'\n ) {\n this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n if (typeof newOp.attributes === 'object') {\n this.ops[index - 1].attributes = newOp.attributes;\n }\n return this;\n }\n }\n }\n if (index === this.ops.length) {\n this.ops.push(newOp);\n } else {\n this.ops.splice(index, 0, newOp);\n }\n return this;\n }\n\n chop(): this {\n const lastOp = this.ops[this.ops.length - 1];\n if (lastOp && typeof lastOp.retain === 'number' && !lastOp.attributes) {\n this.ops.pop();\n }\n return this;\n }\n\n filter(predicate: (op: Op, index: number) => boolean): Op[] {\n return this.ops.filter(predicate);\n }\n\n forEach(predicate: (op: Op, index: number) => void): void {\n this.ops.forEach(predicate);\n }\n\n map(predicate: (op: Op, index: number) => T): T[] {\n return this.ops.map(predicate);\n }\n\n partition(predicate: (op: Op) => boolean): [Op[], Op[]] {\n const passed: Op[] = [];\n const failed: Op[] = [];\n this.forEach((op) => {\n const target = predicate(op) ? passed : failed;\n target.push(op);\n });\n return [passed, failed];\n }\n\n reduce(\n predicate: (accum: T, curr: Op, index: number) => T,\n initialValue: T,\n ): T {\n return this.ops.reduce(predicate, initialValue);\n }\n\n changeLength(): number {\n return this.reduce((length, elem) => {\n if (elem.insert) {\n return length + Op.length(elem);\n } else if (elem.delete) {\n return length - elem.delete;\n }\n return length;\n }, 0);\n }\n\n length(): number {\n return this.reduce((length, elem) => {\n return length + Op.length(elem);\n }, 0);\n }\n\n slice(start = 0, end = Infinity): Delta {\n const ops = [];\n const iter = new OpIterator(this.ops);\n let index = 0;\n while (index < end && iter.hasNext()) {\n let nextOp;\n if (index < start) {\n nextOp = iter.next(start - index);\n } else {\n nextOp = iter.next(end - index);\n ops.push(nextOp);\n }\n index += Op.length(nextOp);\n }\n return new Delta(ops);\n }\n\n compose(other: Delta): Delta {\n const thisIter = new OpIterator(this.ops);\n const otherIter = new OpIterator(other.ops);\n const ops = [];\n const firstOther = otherIter.peek();\n if (\n firstOther != null &&\n typeof firstOther.retain === 'number' &&\n firstOther.attributes == null\n ) {\n let firstLeft = firstOther.retain;\n while (\n thisIter.peekType() === 'insert' &&\n thisIter.peekLength() <= firstLeft\n ) {\n firstLeft -= thisIter.peekLength();\n ops.push(thisIter.next());\n }\n if (firstOther.retain - firstLeft > 0) {\n otherIter.next(firstOther.retain - firstLeft);\n }\n }\n const delta = new Delta(ops);\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n } else if (thisIter.peekType() === 'delete') {\n delta.push(thisIter.next());\n } else {\n const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n const thisOp = thisIter.next(length);\n const otherOp = otherIter.next(length);\n if (otherOp.retain) {\n const newOp: Op = {};\n if (typeof thisOp.retain === 'number') {\n newOp.retain =\n typeof otherOp.retain === 'number' ? length : otherOp.retain;\n } else {\n if (typeof otherOp.retain === 'number') {\n if (thisOp.retain == null) {\n newOp.insert = thisOp.insert;\n } else {\n newOp.retain = thisOp.retain;\n }\n } else {\n const action = thisOp.retain == null ? 'insert' : 'retain';\n const [embedType, thisData, otherData] = getEmbedTypeAndData(\n thisOp[action],\n otherOp.retain,\n );\n const handler = Delta.getHandler(embedType);\n newOp[action] = {\n [embedType]: handler.compose(\n thisData,\n otherData,\n action === 'retain',\n ),\n };\n }\n }\n // Preserve null when composing with a retain, otherwise remove it for inserts\n const attributes = AttributeMap.compose(\n thisOp.attributes,\n otherOp.attributes,\n typeof thisOp.retain === 'number',\n );\n if (attributes) {\n newOp.attributes = attributes;\n }\n delta.push(newOp);\n\n // Optimization if rest of other is just retain\n if (\n !otherIter.hasNext() &&\n isEqual(delta.ops[delta.ops.length - 1], newOp)\n ) {\n const rest = new Delta(thisIter.rest());\n return delta.concat(rest).chop();\n }\n\n // Other op should be delete, we could be an insert or retain\n // Insert + delete cancels out\n } else if (\n typeof otherOp.delete === 'number' &&\n (typeof thisOp.retain === 'number' ||\n (typeof thisOp.retain === 'object' && thisOp.retain !== null))\n ) {\n delta.push(otherOp);\n }\n }\n }\n return delta.chop();\n }\n\n concat(other: Delta): Delta {\n const delta = new Delta(this.ops.slice());\n if (other.ops.length > 0) {\n delta.push(other.ops[0]);\n delta.ops = delta.ops.concat(other.ops.slice(1));\n }\n return delta;\n }\n\n diff(other: Delta, cursor?: number | diff.CursorInfo): Delta {\n if (this.ops === other.ops) {\n return new Delta();\n }\n const strings = [this, other].map((delta) => {\n return delta\n .map((op) => {\n if (op.insert != null) {\n return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n }\n const prep = delta === other ? 'on' : 'with';\n throw new Error('diff() called ' + prep + ' non-document');\n })\n .join('');\n });\n const retDelta = new Delta();\n const diffResult = diff(strings[0], strings[1], cursor, true);\n const thisIter = new OpIterator(this.ops);\n const otherIter = new OpIterator(other.ops);\n diffResult.forEach((component: diff.Diff) => {\n let length = component[1].length;\n while (length > 0) {\n let opLength = 0;\n switch (component[0]) {\n case diff.INSERT:\n opLength = Math.min(otherIter.peekLength(), length);\n retDelta.push(otherIter.next(opLength));\n break;\n case diff.DELETE:\n opLength = Math.min(length, thisIter.peekLength());\n thisIter.next(opLength);\n retDelta.delete(opLength);\n break;\n case diff.EQUAL:\n opLength = Math.min(\n thisIter.peekLength(),\n otherIter.peekLength(),\n length,\n );\n const thisOp = thisIter.next(opLength);\n const otherOp = otherIter.next(opLength);\n if (isEqual(thisOp.insert, otherOp.insert)) {\n retDelta.retain(\n opLength,\n AttributeMap.diff(thisOp.attributes, otherOp.attributes),\n );\n } else {\n retDelta.push(otherOp).delete(opLength);\n }\n break;\n }\n length -= opLength;\n }\n });\n return retDelta.chop();\n }\n\n eachLine(\n predicate: (\n line: Delta,\n attributes: AttributeMap,\n index: number,\n ) => boolean | void,\n newline = '\\n',\n ): void {\n const iter = new OpIterator(this.ops);\n let line = new Delta();\n let i = 0;\n while (iter.hasNext()) {\n if (iter.peekType() !== 'insert') {\n return;\n }\n const thisOp = iter.peek();\n const start = Op.length(thisOp) - iter.peekLength();\n const index =\n typeof thisOp.insert === 'string'\n ? thisOp.insert.indexOf(newline, start) - start\n : -1;\n if (index < 0) {\n line.push(iter.next());\n } else if (index > 0) {\n line.push(iter.next(index));\n } else {\n if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n return;\n }\n i += 1;\n line = new Delta();\n }\n }\n if (line.length() > 0) {\n predicate(line, {}, i);\n }\n }\n\n invert(base: Delta): Delta {\n const inverted = new Delta();\n this.reduce((baseIndex, op) => {\n if (op.insert) {\n inverted.delete(Op.length(op));\n } else if (typeof op.retain === 'number' && op.attributes == null) {\n inverted.retain(op.retain);\n return baseIndex + op.retain;\n } else if (op.delete || typeof op.retain === 'number') {\n const length = (op.delete || op.retain) as number;\n const slice = base.slice(baseIndex, baseIndex + length);\n slice.forEach((baseOp) => {\n if (op.delete) {\n inverted.push(baseOp);\n } else if (op.retain && op.attributes) {\n inverted.retain(\n Op.length(baseOp),\n AttributeMap.invert(op.attributes, baseOp.attributes),\n );\n }\n });\n return baseIndex + length;\n } else if (typeof op.retain === 'object' && op.retain !== null) {\n const slice = base.slice(baseIndex, baseIndex + 1);\n const baseOp = new OpIterator(slice.ops).next();\n const [embedType, opData, baseOpData] = getEmbedTypeAndData(\n op.retain,\n baseOp.insert,\n );\n const handler = Delta.getHandler(embedType);\n inverted.retain(\n { [embedType]: handler.invert(opData, baseOpData) },\n AttributeMap.invert(op.attributes, baseOp.attributes),\n );\n return baseIndex + 1;\n }\n return baseIndex;\n }, 0);\n return inverted.chop();\n }\n\n transform(index: number, priority?: boolean): number;\n transform(other: Delta, priority?: boolean): Delta;\n transform(arg: number | Delta, priority = false): typeof arg {\n priority = !!priority;\n if (typeof arg === 'number') {\n return this.transformPosition(arg, priority);\n }\n const other: Delta = arg;\n const thisIter = new OpIterator(this.ops);\n const otherIter = new OpIterator(other.ops);\n const delta = new Delta();\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (\n thisIter.peekType() === 'insert' &&\n (priority || otherIter.peekType() !== 'insert')\n ) {\n delta.retain(Op.length(thisIter.next()));\n } else if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n } else {\n const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n const thisOp = thisIter.next(length);\n const otherOp = otherIter.next(length);\n if (thisOp.delete) {\n // Our delete either makes their delete redundant or removes their retain\n continue;\n } else if (otherOp.delete) {\n delta.push(otherOp);\n } else {\n const thisData = thisOp.retain;\n const otherData = otherOp.retain;\n let transformedData: Op['retain'] =\n typeof otherData === 'object' && otherData !== null\n ? otherData\n : length;\n if (\n typeof thisData === 'object' &&\n thisData !== null &&\n typeof otherData === 'object' &&\n otherData !== null\n ) {\n const embedType = Object.keys(thisData)[0];\n if (embedType === Object.keys(otherData)[0]) {\n const handler = Delta.getHandler(embedType);\n if (handler) {\n transformedData = {\n [embedType]: handler.transform(\n thisData[embedType],\n otherData[embedType],\n priority,\n ),\n };\n }\n }\n }\n\n // We retain either their retain or insert\n delta.retain(\n transformedData,\n AttributeMap.transform(\n thisOp.attributes,\n otherOp.attributes,\n priority,\n ),\n );\n }\n }\n }\n return delta.chop();\n }\n\n transformPosition(index: number, priority = false): number {\n priority = !!priority;\n const thisIter = new OpIterator(this.ops);\n let offset = 0;\n while (thisIter.hasNext() && offset <= index) {\n const length = thisIter.peekLength();\n const nextType = thisIter.peekType();\n thisIter.next();\n if (nextType === 'delete') {\n index -= Math.min(length, index - offset);\n continue;\n } else if (nextType === 'insert' && (offset < index || !priority)) {\n index += length;\n }\n offset += length;\n }\n return index;\n }\n}\n\nexport default Delta;\n\nexport { Op, OpIterator, AttributeMap };\n\nif (typeof module === 'object') {\n module.exports = Delta;\n module.exports.default = Delta;\n}\n", "'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n", "(function() {\n 'use strict';\n\n // Default configuration\n const defaultTheme = 'snow';\n const defaultToolbar = [\n ['bold', 'italic', 'underline'],\n ['link', 'blockquote', 'code-block'],\n [{ 'script': 'sub' }, { 'script': 'super' }],\n [{ 'align': [] }, { list: 'ordered' }, { list: 'bullet' }],\n [{ 'color': [] }, { 'background': [] }],\n ['image'],\n ['clean'],\n ];\n\n let registeredPlugins = {};\n\n // Initialize a single Quill editor\n function initQuillEditor(container) {\n // Check if Quill is available\n if (typeof window.Quill === 'undefined') {\n return;\n }\n\n // Check if already initialized\n if (!container || container.classList.contains('quill-editor--active')) {\n return;\n }\n\n const content = container.querySelector('[data-aa-quill-content]');\n if (!content) return;\n\n // Setup editor options\n const options = container.getAttribute('data-options') ?\n JSON.parse(container.getAttribute('data-options')) : {};\n\n if (!options.theme) options.theme = defaultTheme;\n if (!options.modules) options.modules = {};\n if (!options.modules.toolbar) options.modules.toolbar = defaultToolbar;\n\n // Setup plugin options\n const pluginOptions = container.getAttribute('data-plugins') ?\n JSON.parse(container.getAttribute('data-plugins')) : {};\n\n // Handle image uploader plugin if configured\n if (pluginOptions.image_uploader && pluginOptions.image_uploader.server_url) {\n if (!registeredPlugins.image_uploader && typeof window.ImageUploader !== 'undefined') {\n window.Quill.register('modules/imageUploader', window.ImageUploader);\n registeredPlugins.image_uploader = true;\n }\n const opts = pluginOptions.image_uploader;\n options.modules.imageUploader = setupImageUploader(opts.server_url, opts.field_name);\n }\n\n // Initialize Quill editor\n const editor = new window.Quill(content, options);\n container._quillEditor = editor;\n container.classList.add('quill-editor--active');\n\n // Store reference for form submission\n const input = container.querySelector('input[type=\"hidden\"]');\n if (input) {\n container._quillInput = input;\n }\n\n return editor;\n }\n\n // Initialize all Quill editors on the page\n function initQuillEditors() {\n // Don't retry here - expect Quill to be available when called\n if (typeof window.Quill === 'undefined') {\n console.error('Quill is not available. Please ensure Quill is loaded before initializing editors.');\n return;\n }\n\n const editors = document.querySelectorAll('[data-aa-quill-editor]');\n editors.forEach(initQuillEditor);\n\n // Setup form submission handler\n setupFormSubmission();\n }\n\n // Setup form submission to update hidden inputs\n function setupFormSubmission() {\n const forms = document.querySelectorAll('form.formtastic');\n\n forms.forEach(function(form) {\n // Check if already setup\n if (form._quillSubmitHandler) return;\n\n form._quillSubmitHandler = true;\n form.addEventListener('submit', function(e) {\n updateQuillInputs(form);\n });\n });\n }\n\n // Update hidden inputs with editor content before form submission\n function updateQuillInputs(form) {\n const editors = form.querySelectorAll('[data-aa-quill-editor]');\n\n editors.forEach(function(container) {\n const editor = container._quillEditor;\n const input = container._quillInput;\n\n if (editor && input) {\n if (editor.getText().trim() === '') {\n input.value = '';\n } else {\n input.value = editor.root.innerHTML;\n }\n }\n });\n }\n\n // Setup image uploader module\n function setupImageUploader(serverUrl, fieldName) {\n return {\n upload: function(file) {\n return new Promise(function(resolve, reject) {\n const formData = new FormData();\n formData.append(fieldName || 'file_upload', file);\n\n const csrfToken = document.querySelector('meta[name=\"csrf-token\"]');\n const headers = {};\n\n if (csrfToken) {\n headers['X-CSRF-Token'] = csrfToken.getAttribute('content');\n }\n\n fetch(serverUrl, {\n method: 'POST',\n body: formData,\n headers: headers\n })\n .then(function(response) { return response.json(); })\n .then(function(result) {\n if (!result.url) {\n reject('Upload failed');\n return;\n }\n resolve(result.url);\n })\n .catch(function(error) {\n reject('Upload failed');\n console.error('Error:', error);\n });\n });\n }\n };\n }\n\n // Public API\n window.getQuillEditors = function() {\n const editors = document.querySelectorAll('[data-aa-quill-editor]');\n const list = [];\n editors.forEach(function(editor) {\n if (editor._quillEditor) {\n list.push(editor._quillEditor);\n }\n });\n return list;\n };\n\n window.getQuillEditorByIndex = function(index) {\n const editors = document.querySelectorAll('[data-aa-quill-editor]');\n return (index >= 0 && index < editors.length) ? editors[index]._quillEditor : null;\n };\n\n window.getQuillEditorByElementId = function(id) {\n const editor = document.querySelector('[data-aa-quill-editor]#' + id);\n return editor ? editor._quillEditor : null;\n };\n\n // Initialize on various events\n function setupAutoInit() {\n // Initialize on DOMContentLoaded\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initQuillEditors);\n } else {\n initQuillEditors();\n }\n\n // Support for Turbo\n document.addEventListener('turbo:load', initQuillEditors);\n document.addEventListener('turbo:render', initQuillEditors);\n\n // Support for Turbolinks\n document.addEventListener('turbolinks:load', initQuillEditors);\n\n // Support for ActiveAdmin has_many fields\n document.addEventListener('has_many_add:after', function(event) {\n const newFields = event.target.querySelectorAll('[data-aa-quill-editor]');\n newFields.forEach(initQuillEditor);\n setupFormSubmission();\n });\n }\n\n // Export the main initialization function\n const QuillEditor = {\n init: setupAutoInit,\n initEditor: initQuillEditor,\n initEditors: initQuillEditors,\n getEditors: window.getQuillEditors,\n getEditorByIndex: window.getQuillEditorByIndex,\n getEditorByElementId: window.getQuillEditorByElementId\n };\n\n // Make available globally\n window.QuillEditor = QuillEditor;\n\n // Don't auto-initialize when used as a module - let the importing code decide\n // This allows the importing module to ensure Quill is loaded first\n\n // Export for module usage\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = QuillEditor;\n }\n})();", null, null, null, null, null, null, "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};", "var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}", "var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases \u2013 research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};", "export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}", "export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}", "export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update \u2013 it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update \u2013 it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", null, null, null, null, null, null, null, null, null, null, null, "/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\nconst linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n\nconst buttonClickSelector = {\n selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n exclude: \"form button\"\n};\n\nconst inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n\nconst formSubmitSelector = \"form:not([data-turbo=true])\";\n\nconst formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n\nconst formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n\nconst formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n\nconst fileInputSelector = \"input[name][type=file]:not([disabled])\";\n\nconst linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n\nconst buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n\nlet nonce = null;\n\nconst loadCSPNonce = () => {\n const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n return nonce = metaTag && metaTag.content;\n};\n\nconst cspNonce = () => nonce || loadCSPNonce();\n\nconst m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nconst matches = function(element, selector) {\n if (selector.exclude) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n};\n\nconst EXPANDO = \"_ujsData\";\n\nconst getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n\nconst setData = function(element, key, value) {\n if (!element[EXPANDO]) {\n element[EXPANDO] = {};\n }\n return element[EXPANDO][key] = value;\n};\n\nconst $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n\nconst isContentEditable = function(element) {\n var isEditable = false;\n do {\n if (element.isContentEditable) {\n isEditable = true;\n break;\n }\n element = element.parentElement;\n } while (element);\n return isEditable;\n};\n\nconst csrfToken = () => {\n const meta = document.querySelector(\"meta[name=csrf-token]\");\n return meta && meta.content;\n};\n\nconst csrfParam = () => {\n const meta = document.querySelector(\"meta[name=csrf-param]\");\n return meta && meta.content;\n};\n\nconst CSRFProtection = xhr => {\n const token = csrfToken();\n if (token) {\n return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n }\n};\n\nconst refreshCSRFTokens = () => {\n const token = csrfToken();\n const param = csrfParam();\n if (token && param) {\n return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n }\n};\n\nconst AcceptHeaders = {\n \"*\": \"*/*\",\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\",\n script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n};\n\nconst ajax = options => {\n options = prepareOptions(options);\n var xhr = createXHR(options, (function() {\n const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n }));\n if (options.beforeSend && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n};\n\nvar prepareOptions = function(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === \"GET\" && options.data) {\n if (options.url.indexOf(\"?\") < 0) {\n options.url += \"?\" + options.data;\n } else {\n options.url += \"&\" + options.data;\n }\n }\n if (!(options.dataType in AcceptHeaders)) {\n options.dataType = \"*\";\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== \"*\") {\n options.accept += \", */*; q=0.01\";\n }\n return options;\n};\n\nvar createXHR = function(options, done) {\n const xhr = new XMLHttpRequest;\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader(\"Accept\", options.accept);\n if (typeof options.data === \"string\") {\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function() {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n};\n\nvar processResponse = function(response, type) {\n if (typeof response === \"string\" && typeof type === \"string\") {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n const script = document.createElement(\"script\");\n script.setAttribute(\"nonce\", cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n const parser = new DOMParser;\n type = type.replace(/;.+/, \"\");\n try {\n response = parser.parseFromString(response, type);\n } catch (error1) {}\n }\n }\n return response;\n};\n\nconst href = element => element.href;\n\nconst isCrossDomain = function(url) {\n const originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href;\n const urlAnchor = document.createElement(\"a\");\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n } catch (e) {\n return true;\n }\n};\n\nlet preventDefault;\n\nlet {CustomEvent: CustomEvent} = window;\n\nif (typeof CustomEvent !== \"function\") {\n CustomEvent = function(event, params) {\n const evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n ({preventDefault: preventDefault} = CustomEvent.prototype);\n CustomEvent.prototype.preventDefault = function() {\n const result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, \"defaultPrevented\", {\n get() {\n return true;\n }\n });\n }\n return result;\n };\n}\n\nconst fire = (obj, name, data) => {\n const event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n};\n\nconst stopEverything = e => {\n fire(e.target, \"ujs:everythingStopped\");\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n};\n\nconst delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n let {target: target} = e;\n while (!!(target instanceof Element) && !matches(target, selector)) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n}));\n\nconst toArray = e => Array.prototype.slice.call(e);\n\nconst serializeElement = (element, additionalParam) => {\n let inputs = [ element ];\n if (matches(element, \"form\")) {\n inputs = toArray(element.elements);\n }\n const params = [];\n inputs.forEach((function(input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, \"fieldset[disabled] *\")) {\n return;\n }\n if (matches(input, \"select\")) {\n toArray(input.options).forEach((function(option) {\n if (option.selected) {\n params.push({\n name: input.name,\n value: option.value\n });\n }\n }));\n } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n params.push({\n name: input.name,\n value: input.value\n });\n }\n }));\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map((function(param) {\n if (param.name) {\n return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n } else {\n return param;\n }\n })).join(\"&\");\n};\n\nconst formElements = (form, selector) => {\n if (matches(form, \"form\")) {\n return toArray(form.elements).filter((el => matches(el, selector)));\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n};\n\nconst handleConfirmWithRails = rails => function(e) {\n if (!allowAction(this, rails)) {\n stopEverything(e);\n }\n};\n\nconst confirm = (message, element) => window.confirm(message);\n\nvar allowAction = function(element, rails) {\n let callback;\n const message = element.getAttribute(\"data-confirm\");\n if (!message) {\n return true;\n }\n let answer = false;\n if (fire(element, \"confirm\")) {\n try {\n answer = rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, \"confirm:complete\", [ answer ]);\n }\n return answer && callback;\n};\n\nconst handleDisabledElement = function(e) {\n const element = this;\n if (element.disabled) {\n stopEverything(e);\n }\n};\n\nconst enableElement = e => {\n let element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return enableFormElements(element);\n }\n};\n\nconst disableElement = e => {\n const element = e instanceof Event ? e.target : e;\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return disableFormElements(element);\n }\n};\n\nvar disableLinkElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableLinkElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, \"ujs:enable-with\", null);\n }\n element.removeEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n\nvar disableFormElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n if (matches(element, \"button\")) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, \"ujs:enable-with\", element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n\nvar enableFormElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n if (matches(element, \"button\")) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, \"ujs:enable-with\", null);\n }\n element.disabled = false;\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar isXhrRedirect = function(event) {\n const xhr = event.detail ? event.detail[0] : undefined;\n return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n};\n\nconst handleMethodWithRails = rails => function(e) {\n const link = this;\n const method = link.getAttribute(\"data-method\");\n if (!method) {\n return;\n }\n if (isContentEditable(this)) {\n return;\n }\n const href = rails.href(link);\n const csrfToken$1 = csrfToken();\n const csrfParam$1 = csrfParam();\n const form = document.createElement(\"form\");\n let formContent = ``;\n if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n formContent += ``;\n }\n formContent += '';\n form.method = \"post\";\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = \"none\";\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n stopEverything(e);\n};\n\nconst isRemote = function(element) {\n const value = element.getAttribute(\"data-remote\");\n return value != null && value !== \"false\";\n};\n\nconst handleRemoteWithRails = rails => function(e) {\n let data, method, url;\n const element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, \"ajax:before\")) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n if (isContentEditable(element)) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n const withCredentials = element.getAttribute(\"data-with-credentials\");\n const dataType = element.getAttribute(\"data-type\") || \"script\";\n if (matches(element, formSubmitSelector)) {\n const button = getData(element, \"ujs:submit-button\");\n method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n if (method.toUpperCase() === \"GET\") {\n url = url.replace(/\\?.*$/, \"\");\n }\n if (element.enctype === \"multipart/form-data\") {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, \"ujs:submit-button\", null);\n setData(element, \"ujs:submit-button-formmethod\", null);\n setData(element, \"ujs:submit-button-formaction\", null);\n } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n method = element.getAttribute(\"data-method\");\n url = element.getAttribute(\"data-url\");\n data = serializeElement(element, element.getAttribute(\"data-params\"));\n } else {\n method = element.getAttribute(\"data-method\");\n url = rails.href(element);\n data = element.getAttribute(\"data-params\");\n }\n ajax({\n type: method || \"GET\",\n url: url,\n data: data,\n dataType: dataType,\n beforeSend(xhr, options) {\n if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n return fire(element, \"ajax:send\", [ xhr ]);\n } else {\n fire(element, \"ajax:stopped\");\n return false;\n }\n },\n success(...args) {\n return fire(element, \"ajax:success\", args);\n },\n error(...args) {\n return fire(element, \"ajax:error\", args);\n },\n complete(...args) {\n return fire(element, \"ajax:complete\", args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== \"false\"\n });\n stopEverything(e);\n};\n\nconst formSubmitButtonClick = function(e) {\n const button = this;\n const {form: form} = button;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, \"ujs:submit-button\", {\n name: button.name,\n value: button.value\n });\n }\n setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n};\n\nconst preventInsignificantClick = function(e) {\n const link = this;\n const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n const data = link.getAttribute(\"data-params\");\n const metaClick = e.metaKey || e.ctrlKey;\n const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n e.stopImmediatePropagation();\n }\n};\n\nconst Rails = {\n $: $,\n ajax: ajax,\n buttonClickSelector: buttonClickSelector,\n buttonDisableSelector: buttonDisableSelector,\n confirm: confirm,\n cspNonce: cspNonce,\n csrfToken: csrfToken,\n csrfParam: csrfParam,\n CSRFProtection: CSRFProtection,\n delegate: delegate,\n disableElement: disableElement,\n enableElement: enableElement,\n fileInputSelector: fileInputSelector,\n fire: fire,\n formElements: formElements,\n formEnableSelector: formEnableSelector,\n formDisableSelector: formDisableSelector,\n formInputClickSelector: formInputClickSelector,\n formSubmitButtonClick: formSubmitButtonClick,\n formSubmitSelector: formSubmitSelector,\n getData: getData,\n handleDisabledElement: handleDisabledElement,\n href: href,\n inputChangeSelector: inputChangeSelector,\n isCrossDomain: isCrossDomain,\n linkClickSelector: linkClickSelector,\n linkDisableSelector: linkDisableSelector,\n loadCSPNonce: loadCSPNonce,\n matches: matches,\n preventInsignificantClick: preventInsignificantClick,\n refreshCSRFTokens: refreshCSRFTokens,\n serializeElement: serializeElement,\n setData: setData,\n stopEverything: stopEverything\n};\n\nconst handleConfirm = handleConfirmWithRails(Rails);\n\nRails.handleConfirm = handleConfirm;\n\nconst handleMethod = handleMethodWithRails(Rails);\n\nRails.handleMethod = handleMethod;\n\nconst handleRemote = handleRemoteWithRails(Rails);\n\nRails.handleRemote = handleRemote;\n\nconst start = function() {\n if (window._rails_loaded) {\n throw new Error(\"rails-ujs has already been loaded!\");\n }\n window.addEventListener(\"pageshow\", (function() {\n $(formEnableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n $(linkDisableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n }));\n delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n delegate(document, linkClickSelector, \"click\", handleConfirm);\n delegate(document, linkClickSelector, \"click\", disableElement);\n delegate(document, linkClickSelector, \"click\", handleRemote);\n delegate(document, linkClickSelector, \"click\", handleMethod);\n delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n delegate(document, buttonClickSelector, \"click\", handleConfirm);\n delegate(document, buttonClickSelector, \"click\", disableElement);\n delegate(document, buttonClickSelector, \"click\", handleRemote);\n delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n delegate(document, inputChangeSelector, \"change\", handleConfirm);\n delegate(document, inputChangeSelector, \"change\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n delegate(document, formSubmitSelector, \"submit\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n delegate(document, formInputClickSelector, \"click\", handleConfirm);\n delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n return window._rails_loaded = true;\n};\n\nRails.start = start;\n\nif (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n if (jQuery.rails) {\n throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n }));\n}\n\nexport { Rails as default };\n", "import Rails from '@rails/ujs';\n\nconst submitForm = function() {\n let form = document.getElementById(\"collection_selection\");\n if (form) {\n form.submit();\n }\n};\n\nconst batchActionClick = function(event) {\n event.preventDefault();\n let batchAction = document.getElementById(\"batch_action\");\n if (batchAction) {\n batchAction.value = this.dataset.action;\n }\n\n if (!event.target.dataset.confirm) { submitForm(); }\n};\n\nconst batchActionConfirmComplete = function(event) {\n event.preventDefault();\n if (event.detail[0] === true) {\n let batchAction = document.getElementById(\"batch_action\");\n if (batchAction) {\n batchAction.value = this.dataset.action;\n }\n submitForm();\n }\n};\n\nconst batchActionFormSubmit = function(event) {\n event.preventDefault();\n let json = JSON.stringify(Object.fromEntries(new FormData(this).entries()));\n let inputsField = document.getElementById('batch_action_inputs');\n let form = document.getElementById(\"collection_selection\");\n if (json && inputsField && form) {\n inputsField.value = json;\n form.submit();\n }\n};\n\nRails.delegate(document, \"[data-batch-action-item]\", \"confirm:complete\", batchActionConfirmComplete);\nRails.delegate(document, \"[data-batch-action-item]\", \"click\", batchActionClick);\nRails.delegate(document, \"form[data-batch-action-form]\", \"submit\", batchActionFormSubmit);\n\nconst disableDropdown = function(condition) {\n const button = document.querySelector(\".batch-actions-dropdown-toggle\");\n if (button) {\n button.disabled = condition;\n }\n};\n\nconst toggleAllChange = function(event) {\n const checkboxes = document.querySelectorAll(\".batch-actions-resource-selection\");\n for (const checkbox of checkboxes) {\n checkbox.checked = this.checked;\n }\n\n const rows = document.querySelectorAll(\".paginated-collection tbody tr\");\n for (const row of rows) {\n row.classList.toggle(\"selected\", this.checked);\n }\n\n disableDropdown(!this.checked);\n};\n\nRails.delegate(document, \".batch-actions-toggle-all\", \"change\", toggleAllChange);\n\nconst toggleCheckboxChange = function(event) {\n const numChecked = document.querySelectorAll(\".batch-actions-resource-selection:checked\").length;\n const allChecked = numChecked === document.querySelectorAll(\".batch-actions-resource-selection\").length;\n const someChecked = (numChecked > 0) && (numChecked < document.querySelectorAll(\".batch-actions-resource-selection\").length);\n\n const toggleAll = document.querySelector(\".batch-actions-toggle-all\");\n if (toggleAll) {\n toggleAll.checked = allChecked;\n toggleAll.indeterminate = someChecked;\n }\n\n disableDropdown(numChecked === 0);\n};\n\nRails.delegate(document, \".batch-actions-resource-selection\", \"change\", toggleCheckboxChange);\n\nconst tableRowClick = function(event) {\n const type = event.target.type;\n if (typeof type === \"undefined\" || (type !== \"checkbox\" && type !== \"button\" && type !== \"\")) {\n const checkbox = event.target.closest(\"tr\").querySelector(\"input[type=checkbox]\");\n if (checkbox) {\n checkbox.click();\n }\n }\n};\n\nRails.delegate(document, \".paginated-collection tbody td\", \"click\", tableRowClick);\n", "import Rails from '@rails/ujs';\n\nconst THEME_KEY = \"theme\";\nconst darkModeMedia = window.matchMedia('(prefers-color-scheme: dark)');\n\nconst setTheme = () => {\n // On page load or when changing themes, best to add inline in `head` to avoid FOUC\n if (localStorage.getItem(THEME_KEY) === 'dark' || (!(THEME_KEY in localStorage) && darkModeMedia.matches)) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n};\n\n// Detect when user changes their system level preference to set theme.\ndarkModeMedia.addEventListener(\"change\", setTheme);\n\n// When the page loads, set theme. By default, uses the system preference.\ndocument.addEventListener(\"DOMContentLoaded\", setTheme);\n\n// If user deletes the Local Storage key, then re-apply theme.\nwindow.addEventListener(\"storage\", (event) => {\n if (event.key === THEME_KEY) {\n setTheme();\n }\n});\n\nconst toggleTheme = () => {\n if (localStorage.getItem(THEME_KEY) === 'dark' || (!(THEME_KEY in localStorage) && darkModeMedia.matches)) {\n localStorage.setItem(THEME_KEY, 'light');\n } else {\n localStorage.setItem(THEME_KEY, 'dark');\n }\n setTheme();\n};\n\nRails.delegate(document, \".dark-mode-toggle\", \"click\", toggleTheme);\n", "import Rails from '@rails/ujs';\n\nconst hasManyRemoveClick = function(event) {\n event.preventDefault();\n const oldGroup = this.closest(\"fieldset\");\n if (oldGroup) {\n oldGroup.remove();\n }\n};\n\nRails.delegate(document, \"form .has-many-remove\", \"click\", hasManyRemoveClick);\n\nconst hasManyAddClick = function(event) {\n event.preventDefault();\n const parent = this.closest(\".has-many-container\");\n\n let index = parseInt(parent.dataset.has_many_index || (parent.querySelectorAll('fieldset').length - 1), 10);\n parent.dataset.has_many_index = ++index;\n\n const regex = new RegExp(this.dataset.placeholder, 'g');\n const html = this.dataset.html.replace(regex, index);\n\n const tempEl = document.createElement(\"div\");\n tempEl.innerHTML = html;\n this.before(tempEl.firstChild);\n};\n\nRails.delegate(document, \"form .has-many-add\", \"click\", hasManyAddClick);\n", "const nextSibling = function next(element, selector) {\n let sibling = element.nextElementSibling;\n\n while (sibling) {\n if (sibling && sibling.matches(selector)) {\n return sibling;\n }\n\n sibling = sibling.nextElementSibling;\n }\n};\n\nexport { nextSibling };\n", "import Rails from '@rails/ujs';\nimport { nextSibling } from '../utils/dom.js';\n\nconst disableEmptyFields = function(event) {\n Array.from(this.querySelectorAll(\"input, select, textarea\"))\n .filter((el) => el.value === \"\")\n .forEach((el) => el.disabled = true);\n};\n\nRails.delegate(document, \".filters-form\", \"submit\", disableEmptyFields);\n\nconst setSearchType = function(event) {\n const input = nextSibling(this, \"input\");\n if (input) {\n input.name = `q[${this.value}]`;\n }\n};\n\nRails.delegate(document, \".filters-form-field [data-search-methods]\", \"change\", setSearchType);\n\nconst clearFiltersForm = function(event) {\n event.preventDefault();\n\n const regex = /^(q\\[|page|utf8|commit)/;\n const params = new URLSearchParams(window.location.search);\n\n Array.from(params.keys())\n .filter(k => k.match(regex))\n .forEach(k => params.delete(k));\n\n window.location.search = params.toString();\n};\n\nRails.delegate(document, \".filters-form-clear\", \"click\", clearFiltersForm);\n", "import Rails from '@rails/ujs';\n\nconst toggleMenu = function(event) {\n const parent = this.parentNode;\n if (!(\"open\" in parent.dataset)) {\n parent.dataset.open = \"\";\n } else {\n delete parent.dataset.open;\n }\n};\n\nRails.delegate(document, \"#main-menu [data-menu-button]\", \"click\", toggleMenu);\n", "import Rails from '@rails/ujs';\n\nconst setPerPage = function(event) {\n const params = new URLSearchParams(window.location.search);\n params.set(\"per_page\", this.value);\n window.location.search = params;\n};\n\nRails.delegate(document, \".pagination-per-page\", \"change\", setPerPage);\n", "import 'flowbite';\nimport Rails from '@rails/ujs';\nimport './active_admin/features/batch_actions.js';\nimport './active_admin/features/dark_mode_toggle.js';\nimport './active_admin/features/has_many.js';\nimport './active_admin/features/filters.js';\nimport './active_admin/features/main_menu.js';\nimport './active_admin/features/per_page.js';\n\nRails.start();\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n", "import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n", "import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n", "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n", "import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n", "import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n", "import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n", "import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n", "import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n", "/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n", "/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n", "/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n", "import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n", "import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n", "import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n", "/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n", "import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n", "import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n", "import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n", "import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n", "import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n", "import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n", "import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n", "import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n", "import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n", "import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n", "import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n", "import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n", "import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n", "import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n", "import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n", "import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n", "import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n", "import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n", "import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n", "import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n", "import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n", "import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n", "import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n", "import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n", "import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n", "import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n", "import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n", "import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n", "import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n", "import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n", "import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n", "import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n", "import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n", "import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n", "import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n", "import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n", "import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n", "/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n", "import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n", "import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n", "import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n", "import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n", "import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n", "import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n", "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n", "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n", "import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n", "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n", "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n", "import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n", "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n", "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n", "import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n", "import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n", "import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n", "import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n", "import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n", "import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n", "/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n", "import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n", "import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n", "import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n", "import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n", "enum Scope {\n TYPE = (1 << 2) - 1, // 0011 Lower two bits\n LEVEL = ((1 << 2) - 1) << 2, // 1100 Higher two bits\n\n ATTRIBUTE = (1 << 0) | LEVEL, // 1101\n BLOT = (1 << 1) | LEVEL, // 1110\n INLINE = (1 << 2) | TYPE, // 0111\n BLOCK = (1 << 3) | TYPE, // 1011\n\n BLOCK_BLOT = BLOCK & BLOT, // 1010\n INLINE_BLOT = INLINE & BLOT, // 0110\n BLOCK_ATTRIBUTE = BLOCK & ATTRIBUTE, // 1001\n INLINE_ATTRIBUTE = INLINE & ATTRIBUTE, // 0101\n\n ANY = TYPE | LEVEL,\n}\n\nexport default Scope;\n", "import Scope from '../scope.js';\n\nexport interface AttributorOptions {\n scope?: Scope;\n whitelist?: string[];\n}\n\nexport default class Attributor {\n public static keys(node: HTMLElement): string[] {\n return Array.from(node.attributes).map((item: Attr) => item.name);\n }\n\n public scope: Scope;\n public whitelist: string[] | undefined;\n\n constructor(\n public readonly attrName: string,\n public readonly keyName: string,\n options: AttributorOptions = {},\n ) {\n const attributeBit = Scope.TYPE & Scope.ATTRIBUTE;\n this.scope =\n options.scope != null\n ? // Ignore type bits, force attribute bit\n (options.scope & Scope.LEVEL) | attributeBit\n : Scope.ATTRIBUTE;\n if (options.whitelist != null) {\n this.whitelist = options.whitelist;\n }\n }\n\n public add(node: HTMLElement, value: any): boolean {\n if (!this.canAdd(node, value)) {\n return false;\n }\n node.setAttribute(this.keyName, value);\n return true;\n }\n\n public canAdd(_node: HTMLElement, value: any): boolean {\n if (this.whitelist == null) {\n return true;\n }\n if (typeof value === 'string') {\n return this.whitelist.indexOf(value.replace(/[\"']/g, '')) > -1;\n } else {\n return this.whitelist.indexOf(value) > -1;\n }\n }\n\n public remove(node: HTMLElement): void {\n node.removeAttribute(this.keyName);\n }\n\n public value(node: HTMLElement): any {\n const value = node.getAttribute(this.keyName);\n if (this.canAdd(node, value) && value) {\n return value;\n }\n return '';\n }\n}\n", "export default class ParchmentError extends Error {\n public message: string;\n public name: string;\n public stack!: string;\n\n constructor(message: string) {\n message = '[Parchment] ' + message;\n super(message);\n this.message = message;\n this.name = this.constructor.name;\n }\n}\n", "import Attributor from './attributor/attributor.js';\nimport {\n type Blot,\n type BlotConstructor,\n type Root,\n} from './blot/abstract/blot.js';\nimport ParchmentError from './error.js';\nimport Scope from './scope.js';\n\nexport type RegistryDefinition = Attributor | BlotConstructor;\n\nexport interface RegistryInterface {\n create(scroll: Root, input: Node | string | Scope, value?: any): Blot;\n query(query: string | Node | Scope, scope: Scope): RegistryDefinition | null;\n register(...definitions: any[]): any;\n}\n\nexport default class Registry implements RegistryInterface {\n public static blots = new WeakMap();\n\n public static find(node?: Node | null, bubble = false): Blot | null {\n if (node == null) {\n return null;\n }\n if (this.blots.has(node)) {\n return this.blots.get(node) || null;\n }\n if (bubble) {\n let parentNode: Node | null = null;\n try {\n parentNode = node.parentNode;\n } catch (err) {\n // Probably hit a permission denied error.\n // A known case is in Firefox, event targets can be anonymous DIVs\n // inside an input element.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n return null;\n }\n return this.find(parentNode, bubble);\n }\n return null;\n }\n\n private attributes: { [key: string]: Attributor } = {};\n private classes: { [key: string]: BlotConstructor } = {};\n private tags: { [key: string]: BlotConstructor } = {};\n private types: { [key: string]: RegistryDefinition } = {};\n\n public create(scroll: Root, input: Node | string | Scope, value?: any): Blot {\n const match = this.query(input);\n if (match == null) {\n throw new ParchmentError(`Unable to create ${input} blot`);\n }\n const blotClass = match as BlotConstructor;\n const node =\n // @ts-expect-error Fix me later\n input instanceof Node || input.nodeType === Node.TEXT_NODE\n ? input\n : blotClass.create(value);\n\n const blot = new blotClass(scroll, node as Node, value);\n Registry.blots.set(blot.domNode, blot);\n return blot;\n }\n\n public find(node: Node | null, bubble = false): Blot | null {\n return Registry.find(node, bubble);\n }\n\n public query(\n query: string | Node | Scope,\n scope: Scope = Scope.ANY,\n ): RegistryDefinition | null {\n let match;\n if (typeof query === 'string') {\n match = this.types[query] || this.attributes[query];\n // @ts-expect-error Fix me later\n } else if (query instanceof Text || query.nodeType === Node.TEXT_NODE) {\n match = this.types.text;\n } else if (typeof query === 'number') {\n if (query & Scope.LEVEL & Scope.BLOCK) {\n match = this.types.block;\n } else if (query & Scope.LEVEL & Scope.INLINE) {\n match = this.types.inline;\n }\n } else if (query instanceof Element) {\n const names = (query.getAttribute('class') || '').split(/\\s+/);\n names.some((name) => {\n match = this.classes[name];\n if (match) {\n return true;\n }\n return false;\n });\n match = match || this.tags[query.tagName];\n }\n if (match == null) {\n return null;\n }\n if (\n 'scope' in match &&\n scope & Scope.LEVEL & match.scope &&\n scope & Scope.TYPE & match.scope\n ) {\n return match;\n }\n return null;\n }\n\n public register(...definitions: RegistryDefinition[]): RegistryDefinition[] {\n return definitions.map((definition) => {\n const isBlot = 'blotName' in definition;\n const isAttr = 'attrName' in definition;\n if (!isBlot && !isAttr) {\n throw new ParchmentError('Invalid definition');\n } else if (isBlot && definition.blotName === 'abstract') {\n throw new ParchmentError('Cannot register abstract class');\n }\n const key = isBlot\n ? definition.blotName\n : isAttr\n ? definition.attrName\n : (undefined as never); // already handled by above checks\n this.types[key] = definition;\n\n if (isAttr) {\n if (typeof definition.keyName === 'string') {\n this.attributes[definition.keyName] = definition;\n }\n } else if (isBlot) {\n if (definition.className) {\n this.classes[definition.className] = definition;\n }\n if (definition.tagName) {\n if (Array.isArray(definition.tagName)) {\n definition.tagName = definition.tagName.map((tagName: string) => {\n return tagName.toUpperCase();\n });\n } else {\n definition.tagName = definition.tagName.toUpperCase();\n }\n const tagNames = Array.isArray(definition.tagName)\n ? definition.tagName\n : [definition.tagName];\n tagNames.forEach((tag: string) => {\n if (this.tags[tag] == null || definition.className == null) {\n this.tags[tag] = definition;\n }\n });\n }\n }\n return definition;\n });\n }\n}\n", "import Attributor from './attributor.js';\n\nfunction match(node: HTMLElement, prefix: string): string[] {\n const className = node.getAttribute('class') || '';\n return className\n .split(/\\s+/)\n .filter((name) => name.indexOf(`${prefix}-`) === 0);\n}\n\nclass ClassAttributor extends Attributor {\n public static keys(node: HTMLElement): string[] {\n return (node.getAttribute('class') || '')\n .split(/\\s+/)\n .map((name) => name.split('-').slice(0, -1).join('-'));\n }\n\n public add(node: HTMLElement, value: any): boolean {\n if (!this.canAdd(node, value)) {\n return false;\n }\n this.remove(node);\n node.classList.add(`${this.keyName}-${value}`);\n return true;\n }\n\n public remove(node: HTMLElement): void {\n const matches = match(node, this.keyName);\n matches.forEach((name) => {\n node.classList.remove(name);\n });\n if (node.classList.length === 0) {\n node.removeAttribute('class');\n }\n }\n\n public value(node: HTMLElement): any {\n const result = match(node, this.keyName)[0] || '';\n const value = result.slice(this.keyName.length + 1); // +1 for hyphen\n return this.canAdd(node, value) ? value : '';\n }\n}\n\nexport default ClassAttributor;\n", "import Attributor from './attributor.js';\n\nfunction camelize(name: string): string {\n const parts = name.split('-');\n const rest = parts\n .slice(1)\n .map((part: string) => part[0].toUpperCase() + part.slice(1))\n .join('');\n return parts[0] + rest;\n}\n\nclass StyleAttributor extends Attributor {\n public static keys(node: HTMLElement): string[] {\n return (node.getAttribute('style') || '').split(';').map((value) => {\n const arr = value.split(':');\n return arr[0].trim();\n });\n }\n\n public add(node: HTMLElement, value: any): boolean {\n if (!this.canAdd(node, value)) {\n return false;\n }\n // @ts-expect-error Fix me later\n node.style[camelize(this.keyName)] = value;\n return true;\n }\n\n public remove(node: HTMLElement): void {\n // @ts-expect-error Fix me later\n node.style[camelize(this.keyName)] = '';\n if (!node.getAttribute('style')) {\n node.removeAttribute('style');\n }\n }\n\n public value(node: HTMLElement): any {\n // @ts-expect-error Fix me later\n const value = node.style[camelize(this.keyName)];\n return this.canAdd(node, value) ? value : '';\n }\n}\n\nexport default StyleAttributor;\n", "import type { Formattable } from '../blot/abstract/blot.js';\nimport Registry from '../registry.js';\nimport Scope from '../scope.js';\nimport Attributor from './attributor.js';\nimport ClassAttributor from './class.js';\nimport StyleAttributor from './style.js';\n\nclass AttributorStore {\n private attributes: { [key: string]: Attributor } = {};\n private domNode: HTMLElement;\n\n constructor(domNode: HTMLElement) {\n this.domNode = domNode;\n this.build();\n }\n\n public attribute(attribute: Attributor, value: any): void {\n // verb\n if (value) {\n if (attribute.add(this.domNode, value)) {\n if (attribute.value(this.domNode) != null) {\n this.attributes[attribute.attrName] = attribute;\n } else {\n delete this.attributes[attribute.attrName];\n }\n }\n } else {\n attribute.remove(this.domNode);\n delete this.attributes[attribute.attrName];\n }\n }\n\n public build(): void {\n this.attributes = {};\n const blot = Registry.find(this.domNode);\n if (blot == null) {\n return;\n }\n const attributes = Attributor.keys(this.domNode);\n const classes = ClassAttributor.keys(this.domNode);\n const styles = StyleAttributor.keys(this.domNode);\n attributes\n .concat(classes)\n .concat(styles)\n .forEach((name) => {\n const attr = blot.scroll.query(name, Scope.ATTRIBUTE);\n if (attr instanceof Attributor) {\n this.attributes[attr.attrName] = attr;\n }\n });\n }\n\n public copy(target: Formattable): void {\n Object.keys(this.attributes).forEach((key) => {\n const value = this.attributes[key].value(this.domNode);\n target.format(key, value);\n });\n }\n\n public move(target: Formattable): void {\n this.copy(target);\n Object.keys(this.attributes).forEach((key) => {\n this.attributes[key].remove(this.domNode);\n });\n this.attributes = {};\n }\n\n public values(): { [key: string]: any } {\n return Object.keys(this.attributes).reduce(\n (attributes: { [key: string]: any }, name: string) => {\n attributes[name] = this.attributes[name].value(this.domNode);\n return attributes;\n },\n {},\n );\n }\n}\n\nexport default AttributorStore;\n", "import ParchmentError from '../../error.js';\nimport Registry from '../../registry.js';\nimport Scope from '../../scope.js';\nimport type {\n Blot,\n BlotConstructor,\n Formattable,\n Parent,\n Root,\n} from './blot.js';\n\nclass ShadowBlot implements Blot {\n public static blotName = 'abstract';\n public static className: string;\n public static requiredContainer: BlotConstructor;\n public static scope: Scope;\n public static tagName: string | string[];\n\n public static create(rawValue?: unknown): Node {\n if (this.tagName == null) {\n throw new ParchmentError('Blot definition missing tagName');\n }\n let node: HTMLElement;\n let value: string | number | undefined;\n if (Array.isArray(this.tagName)) {\n if (typeof rawValue === 'string') {\n value = rawValue.toUpperCase();\n if (parseInt(value, 10).toString() === value) {\n value = parseInt(value, 10);\n }\n } else if (typeof rawValue === 'number') {\n value = rawValue;\n }\n if (typeof value === 'number') {\n node = document.createElement(this.tagName[value - 1]);\n } else if (value && this.tagName.indexOf(value) > -1) {\n node = document.createElement(value);\n } else {\n node = document.createElement(this.tagName[0]);\n }\n } else {\n node = document.createElement(this.tagName);\n }\n if (this.className) {\n node.classList.add(this.className);\n }\n return node;\n }\n\n public prev: Blot | null;\n public next: Blot | null;\n // @ts-expect-error Fix me later\n public parent: Parent;\n\n // Hack for accessing inherited static methods\n get statics(): any {\n return this.constructor;\n }\n constructor(\n public scroll: Root,\n public domNode: Node,\n ) {\n Registry.blots.set(domNode, this);\n this.prev = null;\n this.next = null;\n }\n\n public attach(): void {\n // Nothing to do\n }\n\n public clone(): Blot {\n const domNode = this.domNode.cloneNode(false);\n return this.scroll.create(domNode);\n }\n\n public detach(): void {\n if (this.parent != null) {\n this.parent.removeChild(this);\n }\n Registry.blots.delete(this.domNode);\n }\n\n public deleteAt(index: number, length: number): void {\n const blot = this.isolate(index, length);\n blot.remove();\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n const blot = this.isolate(index, length);\n if (this.scroll.query(name, Scope.BLOT) != null && value) {\n blot.wrap(name, value);\n } else if (this.scroll.query(name, Scope.ATTRIBUTE) != null) {\n const parent = this.scroll.create(this.statics.scope) as Parent &\n Formattable;\n blot.wrap(parent);\n parent.format(name, value);\n }\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n const blot =\n def == null\n ? this.scroll.create('text', value)\n : this.scroll.create(value, def);\n const ref = this.split(index);\n this.parent.insertBefore(blot, ref || undefined);\n }\n\n public isolate(index: number, length: number): Blot {\n const target = this.split(index);\n if (target == null) {\n throw new Error('Attempt to isolate at end');\n }\n target.split(length);\n return target;\n }\n\n public length(): number {\n return 1;\n }\n\n public offset(root: Blot = this.parent): number {\n if (this.parent == null || this === root) {\n return 0;\n }\n return this.parent.children.offset(this) + this.parent.offset(root);\n }\n\n public optimize(_context?: { [key: string]: any }): void {\n if (\n this.statics.requiredContainer &&\n !(this.parent instanceof this.statics.requiredContainer)\n ) {\n this.wrap(this.statics.requiredContainer.blotName);\n }\n }\n\n public remove(): void {\n if (this.domNode.parentNode != null) {\n this.domNode.parentNode.removeChild(this.domNode);\n }\n this.detach();\n }\n\n public replaceWith(name: string | Blot, value?: any): Blot {\n const replacement =\n typeof name === 'string' ? this.scroll.create(name, value) : name;\n if (this.parent != null) {\n this.parent.insertBefore(replacement, this.next || undefined);\n this.remove();\n }\n return replacement;\n }\n\n public split(index: number, _force?: boolean): Blot | null {\n return index === 0 ? this : this.next;\n }\n\n public update(\n _mutations: MutationRecord[],\n _context: { [key: string]: any },\n ): void {\n // Nothing to do by default\n }\n\n public wrap(name: string | Parent, value?: any): Parent {\n const wrapper =\n typeof name === 'string'\n ? (this.scroll.create(name, value) as Parent)\n : name;\n if (this.parent != null) {\n this.parent.insertBefore(wrapper, this.next || undefined);\n }\n if (typeof wrapper.appendChild !== 'function') {\n throw new ParchmentError(`Cannot wrap ${name}`);\n }\n wrapper.appendChild(this);\n return wrapper;\n }\n}\n\nexport default ShadowBlot;\n", "import Scope from '../../scope.js';\nimport type { Leaf } from './blot.js';\nimport ShadowBlot from './shadow.js';\n\nclass LeafBlot extends ShadowBlot implements Leaf {\n public static scope = Scope.INLINE_BLOT;\n\n /**\n * Returns the value represented by domNode if it is this Blot's type\n * No checking that domNode can represent this Blot type is required so\n * applications needing it should check externally before calling.\n */\n public static value(_domNode: Node): any {\n return true;\n }\n\n /**\n * Given location represented by node and offset from DOM Selection Range,\n * return index to that location.\n */\n public index(node: Node, offset: number): number {\n if (\n this.domNode === node ||\n this.domNode.compareDocumentPosition(node) &\n Node.DOCUMENT_POSITION_CONTAINED_BY\n ) {\n return Math.min(offset, 1);\n }\n return -1;\n }\n\n /**\n * Given index to location within blot, return node and offset representing\n * that location, consumable by DOM Selection Range\n */\n public position(index: number, _inclusive?: boolean): [Node, number] {\n const childNodes: Node[] = Array.from(this.parent.domNode.childNodes);\n let offset = childNodes.indexOf(this.domNode);\n if (index > 0) {\n offset += 1;\n }\n return [this.parent.domNode, offset];\n }\n\n /**\n * Return value represented by this blot\n * Should not change without interaction from API or\n * user change detectable by update()\n */\n public value(): any {\n return {\n [this.statics.blotName]: this.statics.value(this.domNode) || true,\n };\n }\n}\n\nexport default LeafBlot;\n", "import type LinkedNode from './linked-node.js';\n\nclass LinkedList {\n public head: T | null;\n public tail: T | null;\n public length: number;\n\n constructor() {\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n public append(...nodes: T[]): void {\n this.insertBefore(nodes[0], null);\n if (nodes.length > 1) {\n const rest = nodes.slice(1);\n this.append(...rest);\n }\n }\n\n public at(index: number): T | null {\n const next = this.iterator();\n let cur = next();\n while (cur && index > 0) {\n index -= 1;\n cur = next();\n }\n return cur;\n }\n\n public contains(node: T): boolean {\n const next = this.iterator();\n let cur = next();\n while (cur) {\n if (cur === node) {\n return true;\n }\n cur = next();\n }\n return false;\n }\n\n public indexOf(node: T): number {\n const next = this.iterator();\n let cur = next();\n let index = 0;\n while (cur) {\n if (cur === node) {\n return index;\n }\n index += 1;\n cur = next();\n }\n return -1;\n }\n\n public insertBefore(node: T | null, refNode: T | null): void {\n if (node == null) {\n return;\n }\n this.remove(node);\n node.next = refNode;\n if (refNode != null) {\n node.prev = refNode.prev;\n if (refNode.prev != null) {\n refNode.prev.next = node;\n }\n refNode.prev = node;\n if (refNode === this.head) {\n this.head = node;\n }\n } else if (this.tail != null) {\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n } else {\n node.prev = null;\n this.head = this.tail = node;\n }\n this.length += 1;\n }\n\n public offset(target: T): number {\n let index = 0;\n let cur = this.head;\n while (cur != null) {\n if (cur === target) {\n return index;\n }\n index += cur.length();\n cur = cur.next as T;\n }\n return -1;\n }\n\n public remove(node: T): void {\n if (!this.contains(node)) {\n return;\n }\n if (node.prev != null) {\n node.prev.next = node.next;\n }\n if (node.next != null) {\n node.next.prev = node.prev;\n }\n if (node === this.head) {\n this.head = node.next as T;\n }\n if (node === this.tail) {\n this.tail = node.prev as T;\n }\n this.length -= 1;\n }\n\n public iterator(curNode: T | null = this.head): () => T | null {\n // TODO use yield when we can\n return (): T | null => {\n const ret = curNode;\n if (curNode != null) {\n curNode = curNode.next as T;\n }\n return ret;\n };\n }\n\n public find(index: number, inclusive = false): [T | null, number] {\n const next = this.iterator();\n let cur = next();\n while (cur) {\n const length = cur.length();\n if (\n index < length ||\n (inclusive &&\n index === length &&\n (cur.next == null || cur.next.length() !== 0))\n ) {\n return [cur, index];\n }\n index -= length;\n cur = next();\n }\n return [null, 0];\n }\n\n public forEach(callback: (cur: T) => void): void {\n const next = this.iterator();\n let cur = next();\n while (cur) {\n callback(cur);\n cur = next();\n }\n }\n\n public forEachAt(\n index: number,\n length: number,\n callback: (cur: T, offset: number, length: number) => void,\n ): void {\n if (length <= 0) {\n return;\n }\n const [startNode, offset] = this.find(index);\n let curIndex = index - offset;\n const next = this.iterator(startNode);\n let cur = next();\n while (cur && curIndex < index + length) {\n const curLength = cur.length();\n if (index > curIndex) {\n callback(\n cur,\n index - curIndex,\n Math.min(length, curIndex + curLength - index),\n );\n } else {\n callback(cur, 0, Math.min(curLength, index + length - curIndex));\n }\n curIndex += curLength;\n cur = next();\n }\n }\n\n public map(callback: (cur: T) => any): any[] {\n return this.reduce((memo: T[], cur: T) => {\n memo.push(callback(cur));\n return memo;\n }, []);\n }\n\n public reduce(callback: (memo: M, cur: T) => M, memo: M): M {\n const next = this.iterator();\n let cur = next();\n while (cur) {\n memo = callback(memo, cur);\n cur = next();\n }\n return memo;\n }\n}\n\nexport default LinkedList;\n", "import LinkedList from '../../collection/linked-list.js';\nimport ParchmentError from '../../error.js';\nimport Scope from '../../scope.js';\nimport type { Blot, BlotConstructor, Parent, Root } from './blot.js';\nimport ShadowBlot from './shadow.js';\n\nfunction makeAttachedBlot(node: Node, scroll: Root): Blot {\n const found = scroll.find(node);\n if (found) return found;\n try {\n return scroll.create(node);\n } catch (e) {\n const blot = scroll.create(Scope.INLINE);\n Array.from(node.childNodes).forEach((child: Node) => {\n blot.domNode.appendChild(child);\n });\n if (node.parentNode) {\n node.parentNode.replaceChild(blot.domNode, node);\n }\n blot.attach();\n return blot;\n }\n}\n\nclass ParentBlot extends ShadowBlot implements Parent {\n /**\n * Whitelist array of Blots that can be direct children.\n */\n public static allowedChildren?: BlotConstructor[];\n\n /**\n * Default child blot to be inserted if this blot becomes empty.\n */\n public static defaultChild?: BlotConstructor;\n public static uiClass = '';\n\n public children!: LinkedList;\n public domNode!: HTMLElement;\n public uiNode: HTMLElement | null = null;\n\n constructor(scroll: Root, domNode: Node) {\n super(scroll, domNode);\n this.build();\n }\n\n public appendChild(other: Blot): void {\n this.insertBefore(other);\n }\n\n public attach(): void {\n super.attach();\n this.children.forEach((child) => {\n child.attach();\n });\n }\n\n public attachUI(node: HTMLElement): void {\n if (this.uiNode != null) {\n this.uiNode.remove();\n }\n this.uiNode = node;\n if (ParentBlot.uiClass) {\n this.uiNode.classList.add(ParentBlot.uiClass);\n }\n this.uiNode.setAttribute('contenteditable', 'false');\n this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);\n }\n\n /**\n * Called during construction, should fill its own children LinkedList.\n */\n public build(): void {\n this.children = new LinkedList();\n // Need to be reversed for if DOM nodes already in order\n Array.from(this.domNode.childNodes)\n .filter((node: Node) => node !== this.uiNode)\n .reverse()\n .forEach((node: Node) => {\n try {\n const child = makeAttachedBlot(node, this.scroll);\n this.insertBefore(child, this.children.head || undefined);\n } catch (err) {\n if (err instanceof ParchmentError) {\n return;\n } else {\n throw err;\n }\n }\n });\n }\n\n public deleteAt(index: number, length: number): void {\n if (index === 0 && length === this.length()) {\n return this.remove();\n }\n this.children.forEachAt(index, length, (child, offset, childLength) => {\n child.deleteAt(offset, childLength);\n });\n }\n\n public descendant(\n criteria: new (...args: any[]) => T,\n index: number,\n ): [T | null, number];\n public descendant(\n criteria: (blot: Blot) => boolean,\n index: number,\n ): [Blot | null, number];\n public descendant(criteria: any, index = 0): [Blot | null, number] {\n const [child, offset] = this.children.find(index);\n if (\n (criteria.blotName == null && criteria(child)) ||\n (criteria.blotName != null && child instanceof criteria)\n ) {\n return [child as any, offset];\n } else if (child instanceof ParentBlot) {\n return child.descendant(criteria, offset);\n } else {\n return [null, -1];\n }\n }\n\n public descendants(\n criteria: new (...args: any[]) => T,\n index?: number,\n length?: number,\n ): T[];\n public descendants(\n criteria: (blot: Blot) => boolean,\n index?: number,\n length?: number,\n ): Blot[];\n public descendants(\n criteria: any,\n index = 0,\n length: number = Number.MAX_VALUE,\n ): Blot[] {\n let descendants: Blot[] = [];\n let lengthLeft = length;\n this.children.forEachAt(\n index,\n length,\n (child: Blot, childIndex: number, childLength: number) => {\n if (\n (criteria.blotName == null && criteria(child)) ||\n (criteria.blotName != null && child instanceof criteria)\n ) {\n descendants.push(child);\n }\n if (child instanceof ParentBlot) {\n descendants = descendants.concat(\n child.descendants(criteria, childIndex, lengthLeft),\n );\n }\n lengthLeft -= childLength;\n },\n );\n return descendants;\n }\n\n public detach(): void {\n this.children.forEach((child) => {\n child.detach();\n });\n super.detach();\n }\n\n public enforceAllowedChildren(): void {\n let done = false;\n this.children.forEach((child: Blot) => {\n if (done) {\n return;\n }\n const allowed = this.statics.allowedChildren.some(\n (def: BlotConstructor) => child instanceof def,\n );\n if (allowed) {\n return;\n }\n if (child.statics.scope === Scope.BLOCK_BLOT) {\n if (child.next != null) {\n this.splitAfter(child);\n }\n if (child.prev != null) {\n this.splitAfter(child.prev);\n }\n child.parent.unwrap();\n done = true;\n } else if (child instanceof ParentBlot) {\n child.unwrap();\n } else {\n child.remove();\n }\n });\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n this.children.forEachAt(index, length, (child, offset, childLength) => {\n child.formatAt(offset, childLength, name, value);\n });\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n const [child, offset] = this.children.find(index);\n if (child) {\n child.insertAt(offset, value, def);\n } else {\n const blot =\n def == null\n ? this.scroll.create('text', value)\n : this.scroll.create(value, def);\n this.appendChild(blot);\n }\n }\n\n public insertBefore(childBlot: Blot, refBlot?: Blot | null): void {\n if (childBlot.parent != null) {\n childBlot.parent.children.remove(childBlot);\n }\n let refDomNode: Node | null = null;\n this.children.insertBefore(childBlot, refBlot || null);\n childBlot.parent = this;\n if (refBlot != null) {\n refDomNode = refBlot.domNode;\n }\n if (\n this.domNode.parentNode !== childBlot.domNode ||\n this.domNode.nextSibling !== refDomNode\n ) {\n this.domNode.insertBefore(childBlot.domNode, refDomNode);\n }\n childBlot.attach();\n }\n\n public length(): number {\n return this.children.reduce((memo, child) => {\n return memo + child.length();\n }, 0);\n }\n\n public moveChildren(targetParent: Parent, refNode?: Blot | null): void {\n this.children.forEach((child) => {\n targetParent.insertBefore(child, refNode);\n });\n }\n\n public optimize(context?: { [key: string]: any }): void {\n super.optimize(context);\n this.enforceAllowedChildren();\n if (this.uiNode != null && this.uiNode !== this.domNode.firstChild) {\n this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);\n }\n if (this.children.length === 0) {\n if (this.statics.defaultChild != null) {\n const child = this.scroll.create(this.statics.defaultChild.blotName);\n this.appendChild(child);\n // TODO double check if necessary\n // child.optimize(context);\n } else {\n this.remove();\n }\n }\n }\n\n public path(index: number, inclusive = false): [Blot, number][] {\n const [child, offset] = this.children.find(index, inclusive);\n const position: [Blot, number][] = [[this, index]];\n if (child instanceof ParentBlot) {\n return position.concat(child.path(offset, inclusive));\n } else if (child != null) {\n position.push([child, offset]);\n }\n return position;\n }\n\n public removeChild(child: Blot): void {\n this.children.remove(child);\n }\n\n public replaceWith(name: string | Blot, value?: any): Blot {\n const replacement =\n typeof name === 'string' ? this.scroll.create(name, value) : name;\n if (replacement instanceof ParentBlot) {\n this.moveChildren(replacement);\n }\n return super.replaceWith(replacement);\n }\n\n public split(index: number, force = false): Blot | null {\n if (!force) {\n if (index === 0) {\n return this;\n }\n if (index === this.length()) {\n return this.next;\n }\n }\n const after = this.clone() as ParentBlot;\n if (this.parent) {\n this.parent.insertBefore(after, this.next || undefined);\n }\n this.children.forEachAt(index, this.length(), (child, offset, _length) => {\n const split = child.split(offset, force);\n if (split != null) {\n after.appendChild(split);\n }\n });\n return after;\n }\n\n public splitAfter(child: Blot): Parent {\n const after = this.clone() as ParentBlot;\n while (child.next != null) {\n after.appendChild(child.next);\n }\n if (this.parent) {\n this.parent.insertBefore(after, this.next || undefined);\n }\n return after;\n }\n\n public unwrap(): void {\n if (this.parent) {\n this.moveChildren(this.parent, this.next || undefined);\n }\n this.remove();\n }\n\n public update(\n mutations: MutationRecord[],\n _context: { [key: string]: any },\n ): void {\n const addedNodes: Node[] = [];\n const removedNodes: Node[] = [];\n mutations.forEach((mutation) => {\n if (mutation.target === this.domNode && mutation.type === 'childList') {\n addedNodes.push(...mutation.addedNodes);\n removedNodes.push(...mutation.removedNodes);\n }\n });\n removedNodes.forEach((node: Node) => {\n // Check node has actually been removed\n // One exception is Chrome does not immediately remove IFRAMEs\n // from DOM but MutationRecord is correct in its reported removal\n if (\n node.parentNode != null &&\n // @ts-expect-error Fix me later\n node.tagName !== 'IFRAME' &&\n document.body.compareDocumentPosition(node) &\n Node.DOCUMENT_POSITION_CONTAINED_BY\n ) {\n return;\n }\n const blot = this.scroll.find(node);\n if (blot == null) {\n return;\n }\n if (\n blot.domNode.parentNode == null ||\n blot.domNode.parentNode === this.domNode\n ) {\n blot.detach();\n }\n });\n addedNodes\n .filter((node) => {\n return node.parentNode === this.domNode && node !== this.uiNode;\n })\n .sort((a, b) => {\n if (a === b) {\n return 0;\n }\n if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {\n return 1;\n }\n return -1;\n })\n .forEach((node) => {\n let refBlot: Blot | null = null;\n if (node.nextSibling != null) {\n refBlot = this.scroll.find(node.nextSibling);\n }\n const blot = makeAttachedBlot(node, this.scroll);\n if (blot.next !== refBlot || blot.next == null) {\n if (blot.parent != null) {\n blot.parent.removeChild(this);\n }\n this.insertBefore(blot, refBlot || undefined);\n }\n });\n this.enforceAllowedChildren();\n }\n}\n\nexport default ParentBlot;\n", "import Attributor from '../attributor/attributor.js';\nimport AttributorStore from '../attributor/store.js';\nimport Scope from '../scope.js';\nimport type {\n Blot,\n BlotConstructor,\n Formattable,\n Parent,\n Root,\n} from './abstract/blot.js';\nimport LeafBlot from './abstract/leaf.js';\nimport ParentBlot from './abstract/parent.js';\n\n// Shallow object comparison\nfunction isEqual(\n obj1: Record,\n obj2: Record,\n): boolean {\n if (Object.keys(obj1).length !== Object.keys(obj2).length) {\n return false;\n }\n for (const prop in obj1) {\n if (obj1[prop] !== obj2[prop]) {\n return false;\n }\n }\n return true;\n}\n\nclass InlineBlot extends ParentBlot implements Formattable {\n public static allowedChildren: BlotConstructor[] = [InlineBlot, LeafBlot];\n public static blotName = 'inline';\n public static scope = Scope.INLINE_BLOT;\n public static tagName: string | string[] = 'SPAN';\n\n static create(value?: unknown) {\n return super.create(value) as HTMLElement;\n }\n\n public static formats(domNode: HTMLElement, scroll: Root): any {\n const match = scroll.query(InlineBlot.blotName);\n if (\n match != null &&\n domNode.tagName === (match as BlotConstructor).tagName\n ) {\n return undefined;\n } else if (typeof this.tagName === 'string') {\n return true;\n } else if (Array.isArray(this.tagName)) {\n return domNode.tagName.toLowerCase();\n }\n return undefined;\n }\n\n protected attributes: AttributorStore;\n\n constructor(scroll: Root, domNode: Node) {\n super(scroll, domNode);\n this.attributes = new AttributorStore(this.domNode);\n }\n\n public format(name: string, value: any): void {\n if (name === this.statics.blotName && !value) {\n this.children.forEach((child) => {\n if (!(child instanceof InlineBlot)) {\n child = child.wrap(InlineBlot.blotName, true);\n }\n this.attributes.copy(child as InlineBlot);\n });\n this.unwrap();\n } else {\n const format = this.scroll.query(name, Scope.INLINE);\n if (format == null) {\n return;\n }\n if (format instanceof Attributor) {\n this.attributes.attribute(format, value);\n } else if (\n value &&\n (name !== this.statics.blotName || this.formats()[name] !== value)\n ) {\n this.replaceWith(name, value);\n }\n }\n }\n\n public formats(): { [index: string]: any } {\n const formats = this.attributes.values();\n const format = this.statics.formats(this.domNode, this.scroll);\n if (format != null) {\n formats[this.statics.blotName] = format;\n }\n return formats;\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n if (\n this.formats()[name] != null ||\n this.scroll.query(name, Scope.ATTRIBUTE)\n ) {\n const blot = this.isolate(index, length) as InlineBlot;\n blot.format(name, value);\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n\n public optimize(context: { [key: string]: any }): void {\n super.optimize(context);\n const formats = this.formats();\n if (Object.keys(formats).length === 0) {\n return this.unwrap(); // unformatted span\n }\n const next = this.next;\n if (\n next instanceof InlineBlot &&\n next.prev === this &&\n isEqual(formats, next.formats())\n ) {\n next.moveChildren(this);\n next.remove();\n }\n }\n\n public replaceWith(name: string | Blot, value?: any): Blot {\n const replacement = super.replaceWith(name, value) as InlineBlot;\n this.attributes.copy(replacement);\n return replacement;\n }\n\n public update(\n mutations: MutationRecord[],\n context: { [key: string]: any },\n ): void {\n super.update(mutations, context);\n const attributeChanged = mutations.some(\n (mutation) =>\n mutation.target === this.domNode && mutation.type === 'attributes',\n );\n if (attributeChanged) {\n this.attributes.build();\n }\n }\n\n public wrap(name: string | Parent, value?: any): Parent {\n const wrapper = super.wrap(name, value);\n if (wrapper instanceof InlineBlot) {\n this.attributes.move(wrapper);\n }\n return wrapper;\n }\n}\n\nexport default InlineBlot;\n", "import Attributor from '../attributor/attributor.js';\nimport AttributorStore from '../attributor/store.js';\nimport Scope from '../scope.js';\nimport type {\n Blot,\n BlotConstructor,\n Formattable,\n Root,\n} from './abstract/blot.js';\nimport LeafBlot from './abstract/leaf.js';\nimport ParentBlot from './abstract/parent.js';\nimport InlineBlot from './inline.js';\n\nclass BlockBlot extends ParentBlot implements Formattable {\n public static blotName = 'block';\n public static scope = Scope.BLOCK_BLOT;\n public static tagName: string | string[] = 'P';\n public static allowedChildren: BlotConstructor[] = [\n InlineBlot,\n BlockBlot,\n LeafBlot,\n ];\n\n static create(value?: unknown) {\n return super.create(value) as HTMLElement;\n }\n\n public static formats(domNode: HTMLElement, scroll: Root): any {\n const match = scroll.query(BlockBlot.blotName);\n if (\n match != null &&\n domNode.tagName === (match as BlotConstructor).tagName\n ) {\n return undefined;\n } else if (typeof this.tagName === 'string') {\n return true;\n } else if (Array.isArray(this.tagName)) {\n return domNode.tagName.toLowerCase();\n }\n }\n\n protected attributes: AttributorStore;\n\n constructor(scroll: Root, domNode: Node) {\n super(scroll, domNode);\n this.attributes = new AttributorStore(this.domNode);\n }\n\n public format(name: string, value: any): void {\n const format = this.scroll.query(name, Scope.BLOCK);\n if (format == null) {\n return;\n } else if (format instanceof Attributor) {\n this.attributes.attribute(format, value);\n } else if (name === this.statics.blotName && !value) {\n this.replaceWith(BlockBlot.blotName);\n } else if (\n value &&\n (name !== this.statics.blotName || this.formats()[name] !== value)\n ) {\n this.replaceWith(name, value);\n }\n }\n\n public formats(): { [index: string]: any } {\n const formats = this.attributes.values();\n const format = this.statics.formats(this.domNode, this.scroll);\n if (format != null) {\n formats[this.statics.blotName] = format;\n }\n return formats;\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n if (this.scroll.query(name, Scope.BLOCK) != null) {\n this.format(name, value);\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n if (def == null || this.scroll.query(value, Scope.INLINE) != null) {\n // Insert text or inline\n super.insertAt(index, value, def);\n } else {\n const after = this.split(index);\n if (after != null) {\n const blot = this.scroll.create(value, def);\n after.parent.insertBefore(blot, after);\n } else {\n throw new Error('Attempt to insertAt after block boundaries');\n }\n }\n }\n\n public replaceWith(name: string | Blot, value?: any): Blot {\n const replacement = super.replaceWith(name, value) as BlockBlot;\n this.attributes.copy(replacement);\n return replacement;\n }\n\n public update(\n mutations: MutationRecord[],\n context: { [key: string]: any },\n ): void {\n super.update(mutations, context);\n const attributeChanged = mutations.some(\n (mutation) =>\n mutation.target === this.domNode && mutation.type === 'attributes',\n );\n if (attributeChanged) {\n this.attributes.build();\n }\n }\n}\n\nexport default BlockBlot;\n", "import Scope from '../../scope.js';\nimport BlockBlot from '../block.js';\nimport ParentBlot from './parent.js';\n\nclass ContainerBlot extends ParentBlot {\n public static blotName = 'container';\n public static scope = Scope.BLOCK_BLOT;\n public static tagName: string | string[];\n\n public prev!: BlockBlot | ContainerBlot | null;\n public next!: BlockBlot | ContainerBlot | null;\n\n public checkMerge(): boolean {\n return (\n this.next !== null && this.next.statics.blotName === this.statics.blotName\n );\n }\n\n public deleteAt(index: number, length: number): void {\n super.deleteAt(index, length);\n this.enforceAllowedChildren();\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n super.formatAt(index, length, name, value);\n this.enforceAllowedChildren();\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n super.insertAt(index, value, def);\n this.enforceAllowedChildren();\n }\n\n public optimize(context: { [key: string]: any }): void {\n super.optimize(context);\n if (this.children.length > 0 && this.next != null && this.checkMerge()) {\n this.next.moveChildren(this);\n this.next.remove();\n }\n }\n}\n\nexport default ContainerBlot;\n", "import type { Formattable, Root } from './abstract/blot.js';\nimport LeafBlot from './abstract/leaf.js';\n\nclass EmbedBlot extends LeafBlot implements Formattable {\n public static formats(_domNode: HTMLElement, _scroll: Root): any {\n return undefined;\n }\n\n public format(name: string, value: any): void {\n // super.formatAt wraps, which is what we want in general,\n // but this allows subclasses to overwrite for formats\n // that just apply to particular embeds\n super.formatAt(0, this.length(), name, value);\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n if (index === 0 && length === this.length()) {\n this.format(name, value);\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n\n public formats(): { [index: string]: any } {\n return this.statics.formats(this.domNode, this.scroll);\n }\n}\n\nexport default EmbedBlot;\n", "import Registry, { type RegistryDefinition } from '../registry.js';\nimport Scope from '../scope.js';\nimport type { Blot, BlotConstructor, Root } from './abstract/blot.js';\nimport ContainerBlot from './abstract/container.js';\nimport ParentBlot from './abstract/parent.js';\nimport BlockBlot from './block.js';\n\nconst OBSERVER_CONFIG = {\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n};\n\nconst MAX_OPTIMIZE_ITERATIONS = 100;\n\nclass ScrollBlot extends ParentBlot implements Root {\n public static blotName = 'scroll';\n public static defaultChild = BlockBlot;\n public static allowedChildren: BlotConstructor[] = [BlockBlot, ContainerBlot];\n public static scope = Scope.BLOCK_BLOT;\n public static tagName = 'DIV';\n\n public observer: MutationObserver;\n\n constructor(\n public registry: Registry,\n node: HTMLDivElement,\n ) {\n // @ts-expect-error scroll is the root with no parent\n super(null, node);\n this.scroll = this;\n this.build();\n this.observer = new MutationObserver((mutations: MutationRecord[]) => {\n this.update(mutations);\n });\n this.observer.observe(this.domNode, OBSERVER_CONFIG);\n this.attach();\n }\n\n public create(input: Node | string | Scope, value?: any): Blot {\n return this.registry.create(this, input, value);\n }\n\n public find(node: Node | null, bubble = false): Blot | null {\n const blot = this.registry.find(node, bubble);\n if (!blot) {\n return null;\n }\n if (blot.scroll === this) {\n return blot;\n }\n return bubble ? this.find(blot.scroll.domNode.parentNode, true) : null;\n }\n\n public query(\n query: string | Node | Scope,\n scope: Scope = Scope.ANY,\n ): RegistryDefinition | null {\n return this.registry.query(query, scope);\n }\n\n public register(...definitions: RegistryDefinition[]) {\n return this.registry.register(...definitions);\n }\n\n public build(): void {\n if (this.scroll == null) {\n return;\n }\n super.build();\n }\n\n public detach(): void {\n super.detach();\n this.observer.disconnect();\n }\n\n public deleteAt(index: number, length: number): void {\n this.update();\n if (index === 0 && length === this.length()) {\n this.children.forEach((child) => {\n child.remove();\n });\n } else {\n super.deleteAt(index, length);\n }\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n this.update();\n super.formatAt(index, length, name, value);\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n this.update();\n super.insertAt(index, value, def);\n }\n\n public optimize(context?: { [key: string]: any }): void;\n public optimize(\n mutations: MutationRecord[],\n context: { [key: string]: any },\n ): void;\n public optimize(mutations: any = [], context: any = {}): void {\n super.optimize(context);\n const mutationsMap = context.mutationsMap || new WeakMap();\n // We must modify mutations directly, cannot make copy and then modify\n let records = Array.from(this.observer.takeRecords());\n // Array.push currently seems to be implemented by a non-tail recursive function\n // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n while (records.length > 0) {\n mutations.push(records.pop());\n }\n const mark = (blot: Blot | null, markParent = true): void => {\n if (blot == null || blot === this) {\n return;\n }\n if (blot.domNode.parentNode == null) {\n return;\n }\n if (!mutationsMap.has(blot.domNode)) {\n mutationsMap.set(blot.domNode, []);\n }\n if (markParent) {\n mark(blot.parent);\n }\n };\n const optimize = (blot: Blot): void => {\n // Post-order traversal\n if (!mutationsMap.has(blot.domNode)) {\n return;\n }\n if (blot instanceof ParentBlot) {\n blot.children.forEach(optimize);\n }\n mutationsMap.delete(blot.domNode);\n blot.optimize(context);\n };\n let remaining = mutations;\n for (let i = 0; remaining.length > 0; i += 1) {\n if (i >= MAX_OPTIMIZE_ITERATIONS) {\n throw new Error('[Parchment] Maximum optimize iterations reached');\n }\n remaining.forEach((mutation: MutationRecord) => {\n const blot = this.find(mutation.target, true);\n if (blot == null) {\n return;\n }\n if (blot.domNode === mutation.target) {\n if (mutation.type === 'childList') {\n mark(this.find(mutation.previousSibling, false));\n Array.from(mutation.addedNodes).forEach((node: Node) => {\n const child = this.find(node, false);\n mark(child, false);\n if (child instanceof ParentBlot) {\n child.children.forEach((grandChild: Blot) => {\n mark(grandChild, false);\n });\n }\n });\n } else if (mutation.type === 'attributes') {\n mark(blot.prev);\n }\n }\n mark(blot);\n });\n this.children.forEach(optimize);\n remaining = Array.from(this.observer.takeRecords());\n records = remaining.slice();\n while (records.length > 0) {\n mutations.push(records.pop());\n }\n }\n }\n\n public update(\n mutations?: MutationRecord[],\n context: { [key: string]: any } = {},\n ): void {\n mutations = mutations || this.observer.takeRecords();\n const mutationsMap = new WeakMap();\n mutations\n .map((mutation: MutationRecord) => {\n const blot = this.find(mutation.target, true);\n if (blot == null) {\n return null;\n }\n if (mutationsMap.has(blot.domNode)) {\n mutationsMap.get(blot.domNode).push(mutation);\n return null;\n } else {\n mutationsMap.set(blot.domNode, [mutation]);\n return blot;\n }\n })\n .forEach((blot: Blot | null) => {\n if (blot != null && blot !== this && mutationsMap.has(blot.domNode)) {\n blot.update(mutationsMap.get(blot.domNode) || [], context);\n }\n });\n context.mutationsMap = mutationsMap;\n if (mutationsMap.has(this.domNode)) {\n super.update(mutationsMap.get(this.domNode), context);\n }\n this.optimize(mutations, context);\n }\n}\n\nexport default ScrollBlot;\n", "import Scope from '../scope.js';\nimport type { Blot, Leaf, Root } from './abstract/blot.js';\nimport LeafBlot from './abstract/leaf.js';\n\nclass TextBlot extends LeafBlot implements Leaf {\n public static readonly blotName = 'text';\n public static scope = Scope.INLINE_BLOT;\n\n public static create(value: string): Text {\n return document.createTextNode(value);\n }\n\n public static value(domNode: Text): string {\n return domNode.data;\n }\n\n public domNode!: Text;\n protected text: string;\n\n constructor(scroll: Root, node: Node) {\n super(scroll, node);\n this.text = this.statics.value(this.domNode);\n }\n\n public deleteAt(index: number, length: number): void {\n this.domNode.data = this.text =\n this.text.slice(0, index) + this.text.slice(index + length);\n }\n\n public index(node: Node, offset: number): number {\n if (this.domNode === node) {\n return offset;\n }\n return -1;\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n if (def == null) {\n this.text = this.text.slice(0, index) + value + this.text.slice(index);\n this.domNode.data = this.text;\n } else {\n super.insertAt(index, value, def);\n }\n }\n\n public length(): number {\n return this.text.length;\n }\n\n public optimize(context: { [key: string]: any }): void {\n super.optimize(context);\n this.text = this.statics.value(this.domNode);\n if (this.text.length === 0) {\n this.remove();\n } else if (this.next instanceof TextBlot && this.next.prev === this) {\n this.insertAt(this.length(), (this.next as TextBlot).value());\n this.next.remove();\n }\n }\n\n public position(index: number, _inclusive = false): [Node, number] {\n return [this.domNode, index];\n }\n\n public split(index: number, force = false): Blot | null {\n if (!force) {\n if (index === 0) {\n return this;\n }\n if (index === this.length()) {\n return this.next;\n }\n }\n const after = this.scroll.create(this.domNode.splitText(index));\n this.parent.insertBefore(after, this.next || undefined);\n this.text = this.statics.value(this.domNode);\n return after;\n }\n\n public update(\n mutations: MutationRecord[],\n _context: { [key: string]: any },\n ): void {\n if (\n mutations.some((mutation) => {\n return (\n mutation.type === 'characterData' && mutation.target === this.domNode\n );\n })\n ) {\n this.text = this.statics.value(this.domNode);\n }\n }\n\n public value(): string {\n return this.text;\n }\n}\n\nexport default TextBlot;\n", "import { merge } from 'lodash-es';\nimport * as Parchment from 'parchment';\nimport type { Op } from 'quill-delta';\nimport Delta from 'quill-delta';\nimport type { BlockEmbed } from '../blots/block.js';\nimport type Block from '../blots/block.js';\nimport type Scroll from '../blots/scroll.js';\nimport type Clipboard from '../modules/clipboard.js';\nimport type History from '../modules/history.js';\nimport type Keyboard from '../modules/keyboard.js';\nimport type Uploader from '../modules/uploader.js';\nimport Editor from './editor.js';\nimport Emitter from './emitter.js';\nimport type { EmitterSource } from './emitter.js';\nimport instances from './instances.js';\nimport logger from './logger.js';\nimport type { DebugLevel } from './logger.js';\nimport Module from './module.js';\nimport Selection, { Range } from './selection.js';\nimport type { Bounds } from './selection.js';\nimport Composition from './composition.js';\nimport Theme from './theme.js';\nimport type { ThemeConstructor } from './theme.js';\nimport scrollRectIntoView from './utils/scrollRectIntoView.js';\nimport type { Rect } from './utils/scrollRectIntoView.js';\nimport createRegistryWithFormats from './utils/createRegistryWithFormats.js';\n\nconst debug = logger('quill');\n\nconst globalRegistry = new Parchment.Registry();\nParchment.ParentBlot.uiClass = 'ql-ui';\n\n/**\n * Options for initializing a Quill instance\n */\nexport interface QuillOptions {\n theme?: string;\n debug?: DebugLevel | boolean;\n registry?: Parchment.Registry;\n /**\n * Whether to disable the editing\n * @default false\n */\n readOnly?: boolean;\n\n /**\n * Placeholder text to display when the editor is empty\n * @default \"\"\n */\n placeholder?: string;\n bounds?: HTMLElement | string | null;\n modules?: Record;\n\n /**\n * A list of formats that are recognized and can exist within the editor contents.\n * `null` means all formats are allowed.\n * @default null\n */\n formats?: string[] | null;\n}\n\n/**\n * Similar to QuillOptions, but with all properties expanded to their default values,\n * and all selectors resolved to HTMLElements.\n */\nexport interface ExpandedQuillOptions\n extends Omit {\n theme: ThemeConstructor;\n registry: Parchment.Registry;\n container: HTMLElement;\n modules: Record;\n bounds?: HTMLElement | null;\n readOnly: boolean;\n}\n\nclass Quill {\n static DEFAULTS = {\n bounds: null,\n modules: {\n clipboard: true,\n keyboard: true,\n history: true,\n uploader: true,\n },\n placeholder: '',\n readOnly: false,\n registry: globalRegistry,\n theme: 'default',\n } satisfies Partial;\n static events = Emitter.events;\n static sources = Emitter.sources;\n static version = typeof QUILL_VERSION === 'undefined' ? 'dev' : QUILL_VERSION;\n\n static imports: Record = {\n delta: Delta,\n parchment: Parchment,\n 'core/module': Module,\n 'core/theme': Theme,\n };\n\n static debug(limit: DebugLevel | boolean) {\n if (limit === true) {\n limit = 'log';\n }\n logger.level(limit);\n }\n\n static find(node: Node, bubble = false) {\n return instances.get(node) || globalRegistry.find(node, bubble);\n }\n\n static import(name: 'core/module'): typeof Module;\n static import(name: `themes/${string}`): typeof Theme;\n static import(name: 'parchment'): typeof Parchment;\n static import(name: 'delta'): typeof Delta;\n static import(name: string): unknown;\n static import(name: string) {\n if (this.imports[name] == null) {\n debug.error(`Cannot import ${name}. Are you sure it was registered?`);\n }\n return this.imports[name];\n }\n\n static register(\n targets: Record<\n string,\n | Parchment.RegistryDefinition\n | Record // any objects\n | Theme\n | Module\n | Function // ES5 constructors\n >,\n overwrite?: boolean,\n ): void;\n static register(\n target: Parchment.RegistryDefinition,\n overwrite?: boolean,\n ): void;\n static register(path: string, target: any, overwrite?: boolean): void;\n static register(...args: any[]): void {\n if (typeof args[0] !== 'string') {\n const target = args[0];\n const overwrite = !!args[1];\n\n const name = 'attrName' in target ? target.attrName : target.blotName;\n if (typeof name === 'string') {\n // Shortcut for formats:\n // register(Blot | Attributor, overwrite)\n this.register(`formats/${name}`, target, overwrite);\n } else {\n Object.keys(target).forEach((key) => {\n this.register(key, target[key], overwrite);\n });\n }\n } else {\n const path = args[0];\n const target = args[1];\n const overwrite = !!args[2];\n\n if (this.imports[path] != null && !overwrite) {\n debug.warn(`Overwriting ${path} with`, target);\n }\n this.imports[path] = target;\n if (\n (path.startsWith('blots/') || path.startsWith('formats/')) &&\n target &&\n typeof target !== 'boolean' &&\n target.blotName !== 'abstract'\n ) {\n globalRegistry.register(target);\n }\n if (typeof target.register === 'function') {\n target.register(globalRegistry);\n }\n }\n }\n\n container: HTMLElement;\n root: HTMLDivElement;\n scroll: Scroll;\n emitter: Emitter;\n protected allowReadOnlyEdits: boolean;\n editor: Editor;\n composition: Composition;\n selection: Selection;\n\n theme: Theme;\n keyboard: Keyboard;\n clipboard: Clipboard;\n history: History;\n uploader: Uploader;\n\n options: ExpandedQuillOptions;\n\n constructor(container: HTMLElement | string, options: QuillOptions = {}) {\n this.options = expandConfig(container, options);\n this.container = this.options.container;\n if (this.container == null) {\n debug.error('Invalid Quill container', container);\n return;\n }\n if (this.options.debug) {\n Quill.debug(this.options.debug);\n }\n const html = this.container.innerHTML.trim();\n this.container.classList.add('ql-container');\n this.container.innerHTML = '';\n instances.set(this.container, this);\n this.root = this.addContainer('ql-editor');\n this.root.classList.add('ql-blank');\n this.emitter = new Emitter();\n const scrollBlotName = Parchment.ScrollBlot.blotName;\n const ScrollBlot = this.options.registry.query(scrollBlotName);\n if (!ScrollBlot || !('blotName' in ScrollBlot)) {\n throw new Error(\n `Cannot initialize Quill without \"${scrollBlotName}\" blot`,\n );\n }\n this.scroll = new ScrollBlot(this.options.registry, this.root, {\n emitter: this.emitter,\n }) as Scroll;\n this.editor = new Editor(this.scroll);\n this.selection = new Selection(this.scroll, this.emitter);\n this.composition = new Composition(this.scroll, this.emitter);\n this.theme = new this.options.theme(this, this.options); // eslint-disable-line new-cap\n this.keyboard = this.theme.addModule('keyboard');\n this.clipboard = this.theme.addModule('clipboard');\n this.history = this.theme.addModule('history');\n this.uploader = this.theme.addModule('uploader');\n this.theme.addModule('input');\n this.theme.addModule('uiNode');\n this.theme.init();\n this.emitter.on(Emitter.events.EDITOR_CHANGE, (type) => {\n if (type === Emitter.events.TEXT_CHANGE) {\n this.root.classList.toggle('ql-blank', this.editor.isBlank());\n }\n });\n this.emitter.on(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n const oldRange = this.selection.lastRange;\n const [newRange] = this.selection.getRange();\n const selectionInfo =\n oldRange && newRange ? { oldRange, newRange } : undefined;\n modify.call(\n this,\n () => this.editor.update(null, mutations, selectionInfo),\n source,\n );\n });\n this.emitter.on(Emitter.events.SCROLL_EMBED_UPDATE, (blot, delta) => {\n const oldRange = this.selection.lastRange;\n const [newRange] = this.selection.getRange();\n const selectionInfo =\n oldRange && newRange ? { oldRange, newRange } : undefined;\n modify.call(\n this,\n () => {\n const change = new Delta()\n .retain(blot.offset(this))\n .retain({ [blot.statics.blotName]: delta });\n return this.editor.update(change, [], selectionInfo);\n },\n Quill.sources.USER,\n );\n });\n if (html) {\n const contents = this.clipboard.convert({\n html: `${html}


    `,\n text: '\\n',\n });\n this.setContents(contents);\n }\n this.history.clear();\n if (this.options.placeholder) {\n this.root.setAttribute('data-placeholder', this.options.placeholder);\n }\n if (this.options.readOnly) {\n this.disable();\n }\n this.allowReadOnlyEdits = false;\n }\n\n addContainer(container: string, refNode?: Node | null): HTMLDivElement;\n addContainer(container: HTMLElement, refNode?: Node | null): HTMLElement;\n addContainer(\n container: string | HTMLElement,\n refNode: Node | null = null,\n ): HTMLDivElement | HTMLElement {\n if (typeof container === 'string') {\n const className = container;\n container = document.createElement('div');\n container.classList.add(className);\n }\n this.container.insertBefore(container, refNode);\n return container;\n }\n\n blur() {\n this.selection.setRange(null);\n }\n\n deleteText(range: Range, source?: EmitterSource): Delta;\n deleteText(index: number, length: number, source?: EmitterSource): Delta;\n deleteText(\n index: number | Range,\n length?: number | EmitterSource,\n source?: EmitterSource,\n ): Delta {\n // @ts-expect-error\n [index, length, , source] = overload(index, length, source);\n return modify.call(\n this,\n () => {\n return this.editor.deleteText(index, length);\n },\n source,\n index,\n -1 * length,\n );\n }\n\n disable() {\n this.enable(false);\n }\n\n editReadOnly(modifier: () => T): T {\n this.allowReadOnlyEdits = true;\n const value = modifier();\n this.allowReadOnlyEdits = false;\n return value;\n }\n\n enable(enabled = true) {\n this.scroll.enable(enabled);\n this.container.classList.toggle('ql-disabled', !enabled);\n }\n\n focus(options: { preventScroll?: boolean } = {}) {\n this.selection.focus();\n if (!options.preventScroll) {\n this.scrollSelectionIntoView();\n }\n }\n\n format(\n name: string,\n value: unknown,\n source: EmitterSource = Emitter.sources.API,\n ): Delta {\n return modify.call(\n this,\n () => {\n const range = this.getSelection(true);\n let change = new Delta();\n if (range == null) return change;\n if (this.scroll.query(name, Parchment.Scope.BLOCK)) {\n change = this.editor.formatLine(range.index, range.length, {\n [name]: value,\n });\n } else if (range.length === 0) {\n this.selection.format(name, value);\n return change;\n } else {\n change = this.editor.formatText(range.index, range.length, {\n [name]: value,\n });\n }\n this.setSelection(range, Emitter.sources.SILENT);\n return change;\n },\n source,\n );\n }\n\n formatLine(\n index: number,\n length: number,\n formats: Record,\n source?: EmitterSource,\n ): Delta;\n formatLine(\n index: number,\n length: number,\n name: string,\n value?: unknown,\n source?: EmitterSource,\n ): Delta;\n formatLine(\n index: number,\n length: number,\n name: string | Record,\n value?: unknown | EmitterSource,\n source?: EmitterSource,\n ): Delta {\n let formats: Record;\n // eslint-disable-next-line prefer-const\n [index, length, formats, source] = overload(\n index,\n length,\n // @ts-expect-error\n name,\n value,\n source,\n );\n return modify.call(\n this,\n () => {\n return this.editor.formatLine(index, length, formats);\n },\n source,\n index,\n 0,\n );\n }\n\n formatText(\n range: Range,\n name: string,\n value: unknown,\n source?: EmitterSource,\n ): Delta;\n formatText(\n index: number,\n length: number,\n name: string,\n value: unknown,\n source?: EmitterSource,\n ): Delta;\n formatText(\n index: number,\n length: number,\n formats: Record,\n source?: EmitterSource,\n ): Delta;\n formatText(\n index: number | Range,\n length: number | string,\n name: string | unknown,\n value?: unknown | EmitterSource,\n source?: EmitterSource,\n ): Delta {\n let formats: Record;\n // eslint-disable-next-line prefer-const\n [index, length, formats, source] = overload(\n // @ts-expect-error\n index,\n length,\n name,\n value,\n source,\n );\n return modify.call(\n this,\n () => {\n return this.editor.formatText(index, length, formats);\n },\n source,\n index,\n 0,\n );\n }\n\n getBounds(index: number | Range, length = 0): Bounds | null {\n let bounds: Bounds | null = null;\n if (typeof index === 'number') {\n bounds = this.selection.getBounds(index, length);\n } else {\n bounds = this.selection.getBounds(index.index, index.length);\n }\n if (!bounds) return null;\n const containerBounds = this.container.getBoundingClientRect();\n return {\n bottom: bounds.bottom - containerBounds.top,\n height: bounds.height,\n left: bounds.left - containerBounds.left,\n right: bounds.right - containerBounds.left,\n top: bounds.top - containerBounds.top,\n width: bounds.width,\n };\n }\n\n getContents(index = 0, length = this.getLength() - index) {\n [index, length] = overload(index, length);\n return this.editor.getContents(index, length);\n }\n\n getFormat(index?: number, length?: number): { [format: string]: unknown };\n getFormat(range?: Range): {\n [format: string]: unknown;\n };\n getFormat(\n index: Range | number = this.getSelection(true),\n length = 0,\n ): { [format: string]: unknown } {\n if (typeof index === 'number') {\n return this.editor.getFormat(index, length);\n }\n return this.editor.getFormat(index.index, index.length);\n }\n\n getIndex(blot: Parchment.Blot) {\n return blot.offset(this.scroll);\n }\n\n getLength() {\n return this.scroll.length();\n }\n\n getLeaf(index: number) {\n return this.scroll.leaf(index);\n }\n\n getLine(index: number) {\n return this.scroll.line(index);\n }\n\n getLines(range: Range): (Block | BlockEmbed)[];\n getLines(index?: number, length?: number): (Block | BlockEmbed)[];\n getLines(\n index: Range | number = 0,\n length = Number.MAX_VALUE,\n ): (Block | BlockEmbed)[] {\n if (typeof index !== 'number') {\n return this.scroll.lines(index.index, index.length);\n }\n return this.scroll.lines(index, length);\n }\n\n getModule(name: string) {\n return this.theme.modules[name];\n }\n\n getSelection(focus: true): Range;\n getSelection(focus?: boolean): Range | null;\n getSelection(focus = false): Range | null {\n if (focus) this.focus();\n this.update(); // Make sure we access getRange with editor in consistent state\n return this.selection.getRange()[0];\n }\n\n getSemanticHTML(range: Range): string;\n getSemanticHTML(index?: number, length?: number): string;\n getSemanticHTML(index: Range | number = 0, length?: number) {\n if (typeof index === 'number') {\n length = length ?? this.getLength() - index;\n }\n // @ts-expect-error\n [index, length] = overload(index, length);\n return this.editor.getHTML(index, length);\n }\n\n getText(range?: Range): string;\n getText(index?: number, length?: number): string;\n getText(index: Range | number = 0, length?: number): string {\n if (typeof index === 'number') {\n length = length ?? this.getLength() - index;\n }\n // @ts-expect-error\n [index, length] = overload(index, length);\n return this.editor.getText(index, length);\n }\n\n hasFocus() {\n return this.selection.hasFocus();\n }\n\n insertEmbed(\n index: number,\n embed: string,\n value: unknown,\n source: EmitterSource = Quill.sources.API,\n ): Delta {\n return modify.call(\n this,\n () => {\n return this.editor.insertEmbed(index, embed, value);\n },\n source,\n index,\n );\n }\n\n insertText(index: number, text: string, source?: EmitterSource): Delta;\n insertText(\n index: number,\n text: string,\n formats: Record,\n source?: EmitterSource,\n ): Delta;\n insertText(\n index: number,\n text: string,\n name: string,\n value: unknown,\n source?: EmitterSource,\n ): Delta;\n insertText(\n index: number,\n text: string,\n name?: string | Record | EmitterSource,\n value?: unknown,\n source?: EmitterSource,\n ): Delta {\n let formats: Record;\n // eslint-disable-next-line prefer-const\n // @ts-expect-error\n [index, , formats, source] = overload(index, 0, name, value, source);\n return modify.call(\n this,\n () => {\n return this.editor.insertText(index, text, formats);\n },\n source,\n index,\n text.length,\n );\n }\n\n isEnabled() {\n return this.scroll.isEnabled();\n }\n\n off(...args: Parameters<(typeof Emitter)['prototype']['off']>) {\n return this.emitter.off(...args);\n }\n\n on(\n event: (typeof Emitter)['events']['TEXT_CHANGE'],\n handler: (delta: Delta, oldContent: Delta, source: EmitterSource) => void,\n ): Emitter;\n on(\n event: (typeof Emitter)['events']['SELECTION_CHANGE'],\n handler: (range: Range, oldRange: Range, source: EmitterSource) => void,\n ): Emitter;\n on(\n event: (typeof Emitter)['events']['EDITOR_CHANGE'],\n handler: (\n ...args:\n | [\n (typeof Emitter)['events']['TEXT_CHANGE'],\n Delta,\n Delta,\n EmitterSource,\n ]\n | [\n (typeof Emitter)['events']['SELECTION_CHANGE'],\n Range,\n Range,\n EmitterSource,\n ]\n ) => void,\n ): Emitter;\n on(event: string, ...args: unknown[]): Emitter;\n on(...args: Parameters<(typeof Emitter)['prototype']['on']>): Emitter {\n return this.emitter.on(...args);\n }\n\n once(...args: Parameters<(typeof Emitter)['prototype']['once']>) {\n return this.emitter.once(...args);\n }\n\n removeFormat(index: number, length: number, source?: EmitterSource): Delta {\n [index, length, , source] = overload(index, length, source);\n return modify.call(\n this,\n () => {\n return this.editor.removeFormat(index, length);\n },\n source,\n index,\n );\n }\n\n scrollRectIntoView(rect: Rect) {\n scrollRectIntoView(this.root, rect);\n }\n\n /**\n * @deprecated Use Quill#scrollSelectionIntoView() instead.\n */\n scrollIntoView() {\n console.warn(\n 'Quill#scrollIntoView() has been deprecated and will be removed in the near future. Please use Quill#scrollSelectionIntoView() instead.',\n );\n this.scrollSelectionIntoView();\n }\n\n /**\n * Scroll the current selection into the visible area.\n * If the selection is already visible, no scrolling will occur.\n */\n scrollSelectionIntoView() {\n const range = this.selection.lastRange;\n const bounds = range && this.selection.getBounds(range.index, range.length);\n if (bounds) {\n this.scrollRectIntoView(bounds);\n }\n }\n\n setContents(\n delta: Delta | Op[],\n source: EmitterSource = Emitter.sources.API,\n ): Delta {\n return modify.call(\n this,\n () => {\n delta = new Delta(delta);\n const length = this.getLength();\n // Quill will set empty editor to \\n\n const delete1 = this.editor.deleteText(0, length);\n const applied = this.editor.insertContents(0, delta);\n // Remove extra \\n from empty editor initialization\n const delete2 = this.editor.deleteText(this.getLength() - 1, 1);\n return delete1.compose(applied).compose(delete2);\n },\n source,\n );\n }\n setSelection(range: Range | null, source?: EmitterSource): void;\n setSelection(index: number, source?: EmitterSource): void;\n setSelection(index: number, length?: number, source?: EmitterSource): void;\n setSelection(index: number, source?: EmitterSource): void;\n setSelection(\n index: Range | null | number,\n length?: EmitterSource | number,\n source?: EmitterSource,\n ): void {\n if (index == null) {\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/22609\n this.selection.setRange(null, length || Quill.sources.API);\n } else {\n // @ts-expect-error\n [index, length, , source] = overload(index, length, source);\n this.selection.setRange(new Range(Math.max(0, index), length), source);\n if (source !== Emitter.sources.SILENT) {\n this.scrollSelectionIntoView();\n }\n }\n }\n\n setText(text: string, source: EmitterSource = Emitter.sources.API) {\n const delta = new Delta().insert(text);\n return this.setContents(delta, source);\n }\n\n update(source: EmitterSource = Emitter.sources.USER) {\n const change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n this.selection.update(source);\n // TODO this is usually undefined\n return change;\n }\n\n updateContents(\n delta: Delta | Op[],\n source: EmitterSource = Emitter.sources.API,\n ): Delta {\n return modify.call(\n this,\n () => {\n delta = new Delta(delta);\n return this.editor.applyDelta(delta);\n },\n source,\n true,\n );\n }\n}\n\nfunction resolveSelector(selector: string | HTMLElement | null | undefined) {\n return typeof selector === 'string'\n ? document.querySelector(selector)\n : selector;\n}\n\nfunction expandModuleConfig(config: Record | undefined) {\n return Object.entries(config ?? {}).reduce(\n (expanded, [key, value]) => ({\n ...expanded,\n [key]: value === true ? {} : value,\n }),\n {} as Record,\n );\n}\n\nfunction omitUndefinedValuesFromOptions(obj: QuillOptions) {\n return Object.fromEntries(\n Object.entries(obj).filter((entry) => entry[1] !== undefined),\n );\n}\n\nfunction expandConfig(\n containerOrSelector: HTMLElement | string,\n options: QuillOptions,\n): ExpandedQuillOptions {\n const container = resolveSelector(containerOrSelector);\n if (!container) {\n throw new Error('Invalid Quill container');\n }\n\n const shouldUseDefaultTheme =\n !options.theme || options.theme === Quill.DEFAULTS.theme;\n const theme = shouldUseDefaultTheme\n ? Theme\n : Quill.import(`themes/${options.theme}`);\n if (!theme) {\n throw new Error(`Invalid theme ${options.theme}. Did you register it?`);\n }\n\n const { modules: quillModuleDefaults, ...quillDefaults } = Quill.DEFAULTS;\n const { modules: themeModuleDefaults, ...themeDefaults } = theme.DEFAULTS;\n\n let userModuleOptions = expandModuleConfig(options.modules);\n // Special case toolbar shorthand\n if (\n userModuleOptions != null &&\n userModuleOptions.toolbar &&\n userModuleOptions.toolbar.constructor !== Object\n ) {\n userModuleOptions = {\n ...userModuleOptions,\n toolbar: { container: userModuleOptions.toolbar },\n };\n }\n\n const modules: ExpandedQuillOptions['modules'] = merge(\n {},\n expandModuleConfig(quillModuleDefaults),\n expandModuleConfig(themeModuleDefaults),\n userModuleOptions,\n );\n\n const config = {\n ...quillDefaults,\n ...omitUndefinedValuesFromOptions(themeDefaults),\n ...omitUndefinedValuesFromOptions(options),\n };\n\n let registry = options.registry;\n if (registry) {\n if (options.formats) {\n debug.warn('Ignoring \"formats\" option because \"registry\" is specified');\n }\n } else {\n registry = options.formats\n ? createRegistryWithFormats(options.formats, config.registry, debug)\n : config.registry;\n }\n\n return {\n ...config,\n registry,\n container,\n theme,\n modules: Object.entries(modules).reduce(\n (modulesWithDefaults, [name, value]) => {\n if (!value) return modulesWithDefaults;\n\n const moduleClass = Quill.import(`modules/${name}`);\n if (moduleClass == null) {\n debug.error(\n `Cannot load ${name} module. Are you sure you registered it?`,\n );\n return modulesWithDefaults;\n }\n return {\n ...modulesWithDefaults,\n // @ts-expect-error\n [name]: merge({}, moduleClass.DEFAULTS || {}, value),\n };\n },\n {},\n ),\n bounds: resolveSelector(config.bounds),\n };\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(\n modifier: () => Delta,\n source: EmitterSource,\n index: number | boolean,\n shift: number | null,\n) {\n if (\n !this.isEnabled() &&\n source === Emitter.sources.USER &&\n !this.allowReadOnlyEdits\n ) {\n return new Delta();\n }\n let range = index == null ? null : this.getSelection();\n const oldDelta = this.editor.delta;\n const change = modifier();\n if (range != null) {\n if (index === true) {\n index = range.index; // eslint-disable-line prefer-destructuring\n }\n if (shift == null) {\n range = shiftRange(range, change, source);\n } else if (shift !== 0) {\n // @ts-expect-error index should always be number\n range = shiftRange(range, index, shift, source);\n }\n this.setSelection(range, Emitter.sources.SILENT);\n }\n if (change.length() > 0) {\n const args = [Emitter.events.TEXT_CHANGE, change, oldDelta, source];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n return change;\n}\n\ntype NormalizedIndexLength = [\n number,\n number,\n Record,\n EmitterSource,\n];\nfunction overload(index: number, source?: EmitterSource): NormalizedIndexLength;\nfunction overload(\n index: number,\n length: number,\n source?: EmitterSource,\n): NormalizedIndexLength;\nfunction overload(\n index: number,\n length: number,\n format: string,\n value: unknown,\n source?: EmitterSource,\n): NormalizedIndexLength;\nfunction overload(\n index: number,\n length: number,\n format: Record,\n source?: EmitterSource,\n): NormalizedIndexLength;\nfunction overload(range: Range, source?: EmitterSource): NormalizedIndexLength;\nfunction overload(\n range: Range,\n format: string,\n value: unknown,\n source?: EmitterSource,\n): NormalizedIndexLength;\nfunction overload(\n range: Range,\n format: Record,\n source?: EmitterSource,\n): NormalizedIndexLength;\nfunction overload(\n index: Range | number,\n length?: number | string | Record | EmitterSource,\n name?: string | unknown | Record | EmitterSource,\n value?: unknown | EmitterSource,\n source?: EmitterSource,\n): NormalizedIndexLength {\n let formats: Record = {};\n // @ts-expect-error\n if (typeof index.index === 'number' && typeof index.length === 'number') {\n // Allow for throwaway end (used by insertText/insertEmbed)\n if (typeof length !== 'number') {\n // @ts-expect-error\n source = value;\n value = name;\n name = length;\n // @ts-expect-error\n length = index.length; // eslint-disable-line prefer-destructuring\n // @ts-expect-error\n index = index.index; // eslint-disable-line prefer-destructuring\n } else {\n // @ts-expect-error\n length = index.length; // eslint-disable-line prefer-destructuring\n // @ts-expect-error\n index = index.index; // eslint-disable-line prefer-destructuring\n }\n } else if (typeof length !== 'number') {\n // @ts-expect-error\n source = value;\n value = name;\n name = length;\n length = 0;\n }\n // Handle format being object, two format name/value strings or excluded\n if (typeof name === 'object') {\n // @ts-expect-error Fix me later\n formats = name;\n // @ts-expect-error\n source = value;\n } else if (typeof name === 'string') {\n if (value != null) {\n formats[name] = value;\n } else {\n // @ts-expect-error\n source = name;\n }\n }\n // Handle optional source\n source = source || Emitter.sources.API;\n // @ts-expect-error\n return [index, length, formats, source];\n}\n\nfunction shiftRange(range: Range, change: Delta, source?: EmitterSource): Range;\nfunction shiftRange(\n range: Range,\n index: number,\n length?: number,\n source?: EmitterSource,\n): Range;\nfunction shiftRange(\n range: Range,\n index: number | Delta,\n lengthOrSource?: number | EmitterSource,\n source?: EmitterSource,\n) {\n const length = typeof lengthOrSource === 'number' ? lengthOrSource : 0;\n if (range == null) return null;\n let start;\n let end;\n // @ts-expect-error -- TODO: add a better type guard around `index`\n if (index && typeof index.transformPosition === 'function') {\n [start, end] = [range.index, range.index + range.length].map((pos) =>\n // @ts-expect-error -- TODO: add a better type guard around `index`\n index.transformPosition(pos, source !== Emitter.sources.USER),\n );\n } else {\n [start, end] = [range.index, range.index + range.length].map((pos) => {\n // @ts-expect-error -- TODO: add a better type guard around `index`\n if (pos < index || (pos === index && source === Emitter.sources.USER))\n return pos;\n if (length >= 0) {\n return pos + length;\n }\n // @ts-expect-error -- TODO: add a better type guard around `index`\n return Math.max(index, pos + length);\n });\n }\n return new Range(start, end - start);\n}\n\nexport type { Bounds, DebugLevel, EmitterSource };\nexport { Parchment, Range };\n\nexport { globalRegistry, expandConfig, overload, Quill as default };\n", "import { cloneDeep, isEqual, merge } from 'lodash-es';\nimport { LeafBlot, EmbedBlot, Scope, ParentBlot } from 'parchment';\nimport type { Blot } from 'parchment';\nimport Delta, { AttributeMap, Op } from 'quill-delta';\nimport Block, { BlockEmbed, bubbleFormats } from '../blots/block.js';\nimport Break from '../blots/break.js';\nimport CursorBlot from '../blots/cursor.js';\nimport type Scroll from '../blots/scroll.js';\nimport TextBlot, { escapeText } from '../blots/text.js';\nimport { Range } from './selection.js';\n\nconst ASCII = /^[ -~]*$/;\n\ntype SelectionInfo = {\n newRange: Range;\n oldRange: Range;\n};\n\nclass Editor {\n scroll: Scroll;\n delta: Delta;\n\n constructor(scroll: Scroll) {\n this.scroll = scroll;\n this.delta = this.getDelta();\n }\n\n applyDelta(delta: Delta): Delta {\n this.scroll.update();\n let scrollLength = this.scroll.length();\n this.scroll.batchStart();\n const normalizedDelta = normalizeDelta(delta);\n const deleteDelta = new Delta();\n const normalizedOps = splitOpLines(normalizedDelta.ops.slice());\n normalizedOps.reduce((index, op) => {\n const length = Op.length(op);\n let attributes = op.attributes || {};\n let isImplicitNewlinePrepended = false;\n let isImplicitNewlineAppended = false;\n if (op.insert != null) {\n deleteDelta.retain(length);\n if (typeof op.insert === 'string') {\n const text = op.insert;\n isImplicitNewlineAppended =\n !text.endsWith('\\n') &&\n (scrollLength <= index ||\n !!this.scroll.descendant(BlockEmbed, index)[0]);\n this.scroll.insertAt(index, text);\n const [line, offset] = this.scroll.line(index);\n let formats = merge({}, bubbleFormats(line));\n if (line instanceof Block) {\n const [leaf] = line.descendant(LeafBlot, offset);\n if (leaf) {\n formats = merge(formats, bubbleFormats(leaf));\n }\n }\n attributes = AttributeMap.diff(formats, attributes) || {};\n } else if (typeof op.insert === 'object') {\n const key = Object.keys(op.insert)[0]; // There should only be one key\n if (key == null) return index;\n const isInlineEmbed = this.scroll.query(key, Scope.INLINE) != null;\n if (isInlineEmbed) {\n if (\n scrollLength <= index ||\n !!this.scroll.descendant(BlockEmbed, index)[0]\n ) {\n isImplicitNewlineAppended = true;\n }\n } else if (index > 0) {\n const [leaf, offset] = this.scroll.descendant(LeafBlot, index - 1);\n if (leaf instanceof TextBlot) {\n const text = leaf.value();\n if (text[offset] !== '\\n') {\n isImplicitNewlinePrepended = true;\n }\n } else if (\n leaf instanceof EmbedBlot &&\n leaf.statics.scope === Scope.INLINE_BLOT\n ) {\n isImplicitNewlinePrepended = true;\n }\n }\n this.scroll.insertAt(index, key, op.insert[key]);\n\n if (isInlineEmbed) {\n const [leaf] = this.scroll.descendant(LeafBlot, index);\n if (leaf) {\n const formats = merge({}, bubbleFormats(leaf));\n attributes = AttributeMap.diff(formats, attributes) || {};\n }\n }\n }\n scrollLength += length;\n } else {\n deleteDelta.push(op);\n\n if (op.retain !== null && typeof op.retain === 'object') {\n const key = Object.keys(op.retain)[0];\n if (key == null) return index;\n this.scroll.updateEmbedAt(index, key, op.retain[key]);\n }\n }\n Object.keys(attributes).forEach((name) => {\n this.scroll.formatAt(index, length, name, attributes[name]);\n });\n const prependedLength = isImplicitNewlinePrepended ? 1 : 0;\n const addedLength = isImplicitNewlineAppended ? 1 : 0;\n scrollLength += prependedLength + addedLength;\n deleteDelta.retain(prependedLength);\n deleteDelta.delete(addedLength);\n return index + length + prependedLength + addedLength;\n }, 0);\n deleteDelta.reduce((index, op) => {\n if (typeof op.delete === 'number') {\n this.scroll.deleteAt(index, op.delete);\n return index;\n }\n return index + Op.length(op);\n }, 0);\n this.scroll.batchEnd();\n this.scroll.optimize();\n return this.update(normalizedDelta);\n }\n\n deleteText(index: number, length: number): Delta {\n this.scroll.deleteAt(index, length);\n return this.update(new Delta().retain(index).delete(length));\n }\n\n formatLine(\n index: number,\n length: number,\n formats: Record = {},\n ): Delta {\n this.scroll.update();\n Object.keys(formats).forEach((format) => {\n this.scroll.lines(index, Math.max(length, 1)).forEach((line) => {\n line.format(format, formats[format]);\n });\n });\n this.scroll.optimize();\n const delta = new Delta().retain(index).retain(length, cloneDeep(formats));\n return this.update(delta);\n }\n\n formatText(\n index: number,\n length: number,\n formats: Record = {},\n ): Delta {\n Object.keys(formats).forEach((format) => {\n this.scroll.formatAt(index, length, format, formats[format]);\n });\n const delta = new Delta().retain(index).retain(length, cloneDeep(formats));\n return this.update(delta);\n }\n\n getContents(index: number, length: number): Delta {\n return this.delta.slice(index, index + length);\n }\n\n getDelta(): Delta {\n return this.scroll.lines().reduce((delta, line) => {\n return delta.concat(line.delta());\n }, new Delta());\n }\n\n getFormat(index: number, length = 0): Record {\n let lines: (Block | BlockEmbed)[] = [];\n let leaves: LeafBlot[] = [];\n if (length === 0) {\n this.scroll.path(index).forEach((path) => {\n const [blot] = path;\n if (blot instanceof Block) {\n lines.push(blot);\n } else if (blot instanceof LeafBlot) {\n leaves.push(blot);\n }\n });\n } else {\n lines = this.scroll.lines(index, length);\n leaves = this.scroll.descendants(LeafBlot, index, length);\n }\n const [lineFormats, leafFormats] = [lines, leaves].map((blots) => {\n const blot = blots.shift();\n if (blot == null) return {};\n let formats = bubbleFormats(blot);\n while (Object.keys(formats).length > 0) {\n const blot = blots.shift();\n if (blot == null) return formats;\n formats = combineFormats(bubbleFormats(blot), formats);\n }\n return formats;\n });\n return { ...lineFormats, ...leafFormats };\n }\n\n getHTML(index: number, length: number): string {\n const [line, lineOffset] = this.scroll.line(index);\n if (line) {\n const lineLength = line.length();\n const isWithinLine = line.length() >= lineOffset + length;\n if (isWithinLine && !(lineOffset === 0 && length === lineLength)) {\n return convertHTML(line, lineOffset, length, true);\n }\n return convertHTML(this.scroll, index, length, true);\n }\n return '';\n }\n\n getText(index: number, length: number): string {\n return this.getContents(index, length)\n .filter((op) => typeof op.insert === 'string')\n .map((op) => op.insert)\n .join('');\n }\n\n insertContents(index: number, contents: Delta): Delta {\n const normalizedDelta = normalizeDelta(contents);\n const change = new Delta().retain(index).concat(normalizedDelta);\n this.scroll.insertContents(index, normalizedDelta);\n return this.update(change);\n }\n\n insertEmbed(index: number, embed: string, value: unknown): Delta {\n this.scroll.insertAt(index, embed, value);\n return this.update(new Delta().retain(index).insert({ [embed]: value }));\n }\n\n insertText(\n index: number,\n text: string,\n formats: Record = {},\n ): Delta {\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n this.scroll.insertAt(index, text);\n Object.keys(formats).forEach((format) => {\n this.scroll.formatAt(index, text.length, format, formats[format]);\n });\n return this.update(\n new Delta().retain(index).insert(text, cloneDeep(formats)),\n );\n }\n\n isBlank(): boolean {\n if (this.scroll.children.length === 0) return true;\n if (this.scroll.children.length > 1) return false;\n const blot = this.scroll.children.head;\n if (blot?.statics.blotName !== Block.blotName) return false;\n const block = blot as Block;\n if (block.children.length > 1) return false;\n return block.children.head instanceof Break;\n }\n\n removeFormat(index: number, length: number): Delta {\n const text = this.getText(index, length);\n const [line, offset] = this.scroll.line(index + length);\n let suffixLength = 0;\n let suffix = new Delta();\n if (line != null) {\n suffixLength = line.length() - offset;\n suffix = line\n .delta()\n .slice(offset, offset + suffixLength - 1)\n .insert('\\n');\n }\n const contents = this.getContents(index, length + suffixLength);\n const diff = contents.diff(new Delta().insert(text).concat(suffix));\n const delta = new Delta().retain(index).concat(diff);\n return this.applyDelta(delta);\n }\n\n update(\n change: Delta | null,\n mutations: MutationRecord[] = [],\n selectionInfo: SelectionInfo | undefined = undefined,\n ): Delta {\n const oldDelta = this.delta;\n if (\n mutations.length === 1 &&\n mutations[0].type === 'characterData' &&\n // @ts-expect-error Fix me later\n mutations[0].target.data.match(ASCII) &&\n this.scroll.find(mutations[0].target)\n ) {\n // Optimization for character changes\n const textBlot = this.scroll.find(mutations[0].target) as Blot;\n const formats = bubbleFormats(textBlot);\n const index = textBlot.offset(this.scroll);\n // @ts-expect-error Fix me later\n const oldValue = mutations[0].oldValue.replace(CursorBlot.CONTENTS, '');\n const oldText = new Delta().insert(oldValue);\n // @ts-expect-error\n const newText = new Delta().insert(textBlot.value());\n const relativeSelectionInfo = selectionInfo && {\n oldRange: shiftRange(selectionInfo.oldRange, -index),\n newRange: shiftRange(selectionInfo.newRange, -index),\n };\n const diffDelta = new Delta()\n .retain(index)\n .concat(oldText.diff(newText, relativeSelectionInfo));\n change = diffDelta.reduce((delta, op) => {\n if (op.insert) {\n return delta.insert(op.insert, formats);\n }\n return delta.push(op);\n }, new Delta());\n this.delta = oldDelta.compose(change);\n } else {\n this.delta = this.getDelta();\n if (!change || !isEqual(oldDelta.compose(change), this.delta)) {\n change = oldDelta.diff(this.delta, selectionInfo);\n }\n }\n return change;\n }\n}\n\ninterface ListItem {\n child: Blot;\n offset: number;\n length: number;\n indent: number;\n type: string;\n}\nfunction convertListHTML(\n items: ListItem[],\n lastIndent: number,\n types: string[],\n): string {\n if (items.length === 0) {\n const [endTag] = getListType(types.pop());\n if (lastIndent <= 0) {\n return ``;\n }\n return `${convertListHTML([], lastIndent - 1, types)}`;\n }\n const [{ child, offset, length, indent, type }, ...rest] = items;\n const [tag, attribute] = getListType(type);\n if (indent > lastIndent) {\n types.push(type);\n if (indent === lastIndent + 1) {\n return `<${tag}>${convertHTML(\n child,\n offset,\n length,\n )}${convertListHTML(rest, indent, types)}`;\n }\n return `<${tag}>
  • ${convertListHTML(items, lastIndent + 1, types)}`;\n }\n const previousType = types[types.length - 1];\n if (indent === lastIndent && type === previousType) {\n return `
  • ${convertHTML(\n child,\n offset,\n length,\n )}${convertListHTML(rest, indent, types)}`;\n }\n const [endTag] = getListType(types.pop());\n return `${convertListHTML(items, lastIndent - 1, types)}`;\n}\n\nfunction convertHTML(\n blot: Blot,\n index: number,\n length: number,\n isRoot = false,\n): string {\n if ('html' in blot && typeof blot.html === 'function') {\n return blot.html(index, length);\n }\n if (blot instanceof TextBlot) {\n const escapedText = escapeText(blot.value().slice(index, index + length));\n return escapedText.replaceAll(' ', ' ');\n }\n if (blot instanceof ParentBlot) {\n // TODO fix API\n if (blot.statics.blotName === 'list-container') {\n const items: any[] = [];\n blot.children.forEachAt(index, length, (child, offset, childLength) => {\n const formats =\n 'formats' in child && typeof child.formats === 'function'\n ? child.formats()\n : {};\n items.push({\n child,\n offset,\n length: childLength,\n indent: formats.indent || 0,\n type: formats.list,\n });\n });\n return convertListHTML(items, -1, []);\n }\n const parts: string[] = [];\n blot.children.forEachAt(index, length, (child, offset, childLength) => {\n parts.push(convertHTML(child, offset, childLength));\n });\n if (isRoot || blot.statics.blotName === 'list') {\n return parts.join('');\n }\n const { outerHTML, innerHTML } = blot.domNode as Element;\n const [start, end] = outerHTML.split(`>${innerHTML}<`);\n // TODO cleanup\n if (start === '${parts.join('')}<${end}`;\n }\n return `${start}>${parts.join('')}<${end}`;\n }\n return blot.domNode instanceof Element ? blot.domNode.outerHTML : '';\n}\n\nfunction combineFormats(\n formats: Record,\n combined: Record,\n): Record {\n return Object.keys(combined).reduce(\n (merged, name) => {\n if (formats[name] == null) return merged;\n const combinedValue = combined[name];\n if (combinedValue === formats[name]) {\n merged[name] = combinedValue;\n } else if (Array.isArray(combinedValue)) {\n if (combinedValue.indexOf(formats[name]) < 0) {\n merged[name] = combinedValue.concat([formats[name]]);\n } else {\n // If style already exists, don't add to an array, but don't lose other styles\n merged[name] = combinedValue;\n }\n } else {\n merged[name] = [combinedValue, formats[name]];\n }\n return merged;\n },\n {} as Record,\n );\n}\n\nfunction getListType(type: string | undefined) {\n const tag = type === 'ordered' ? 'ol' : 'ul';\n switch (type) {\n case 'checked':\n return [tag, ' data-list=\"checked\"'];\n case 'unchecked':\n return [tag, ' data-list=\"unchecked\"'];\n default:\n return [tag, ''];\n }\n}\n\nfunction normalizeDelta(delta: Delta) {\n return delta.reduce((normalizedDelta, op) => {\n if (typeof op.insert === 'string') {\n const text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n return normalizedDelta.insert(text, op.attributes);\n }\n return normalizedDelta.push(op);\n }, new Delta());\n}\n\nfunction shiftRange({ index, length }: Range, amount: number) {\n return new Range(index + amount, length);\n}\n\nfunction splitOpLines(ops: Op[]) {\n const split: Op[] = [];\n ops.forEach((op) => {\n if (typeof op.insert === 'string') {\n const lines = op.insert.split('\\n');\n lines.forEach((line, index) => {\n if (index) split.push({ insert: '\\n', attributes: op.attributes });\n if (line) split.push({ insert: line, attributes: op.attributes });\n });\n } else {\n split.push(op);\n }\n });\n\n return split;\n}\n\nexport default Editor;\n", "import {\n AttributorStore,\n BlockBlot,\n EmbedBlot,\n LeafBlot,\n Scope,\n} from 'parchment';\nimport type { Blot, Parent } from 'parchment';\nimport Delta from 'quill-delta';\nimport Break from './break.js';\nimport Inline from './inline.js';\nimport TextBlot from './text.js';\n\nconst NEWLINE_LENGTH = 1;\n\nclass Block extends BlockBlot {\n cache: { delta?: Delta | null; length?: number } = {};\n\n delta(): Delta {\n if (this.cache.delta == null) {\n this.cache.delta = blockDelta(this);\n }\n return this.cache.delta;\n }\n\n deleteAt(index: number, length: number) {\n super.deleteAt(index, length);\n this.cache = {};\n }\n\n formatAt(index: number, length: number, name: string, value: unknown) {\n if (length <= 0) return;\n if (this.scroll.query(name, Scope.BLOCK)) {\n if (index + length === this.length()) {\n this.format(name, value);\n }\n } else {\n super.formatAt(\n index,\n Math.min(length, this.length() - index - 1),\n name,\n value,\n );\n }\n this.cache = {};\n }\n\n insertAt(index: number, value: string, def?: unknown) {\n if (def != null) {\n super.insertAt(index, value, def);\n this.cache = {};\n return;\n }\n if (value.length === 0) return;\n const lines = value.split('\\n');\n const text = lines.shift() as string;\n if (text.length > 0) {\n if (index < this.length() - 1 || this.children.tail == null) {\n super.insertAt(Math.min(index, this.length() - 1), text);\n } else {\n this.children.tail.insertAt(this.children.tail.length(), text);\n }\n this.cache = {};\n }\n // TODO: Fix this next time the file is edited.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let block: Blot | this = this;\n lines.reduce((lineIndex, line) => {\n // @ts-expect-error Fix me later\n block = block.split(lineIndex, true);\n block.insertAt(0, line);\n return line.length;\n }, index + text.length);\n }\n\n insertBefore(blot: Blot, ref?: Blot | null) {\n const { head } = this.children;\n super.insertBefore(blot, ref);\n if (head instanceof Break) {\n head.remove();\n }\n this.cache = {};\n }\n\n length() {\n if (this.cache.length == null) {\n this.cache.length = super.length() + NEWLINE_LENGTH;\n }\n return this.cache.length;\n }\n\n moveChildren(target: Parent, ref?: Blot | null) {\n super.moveChildren(target, ref);\n this.cache = {};\n }\n\n optimize(context: { [key: string]: any }) {\n super.optimize(context);\n this.cache = {};\n }\n\n path(index: number) {\n return super.path(index, true);\n }\n\n removeChild(child: Blot) {\n super.removeChild(child);\n this.cache = {};\n }\n\n split(index: number, force: boolean | undefined = false): Blot | null {\n if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n const clone = this.clone();\n if (index === 0) {\n this.parent.insertBefore(clone, this);\n return this;\n }\n this.parent.insertBefore(clone, this.next);\n return clone;\n }\n const next = super.split(index, force);\n this.cache = {};\n return next;\n }\n}\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = Break;\nBlock.allowedChildren = [Break, Inline, EmbedBlot, TextBlot];\n\nclass BlockEmbed extends EmbedBlot {\n attributes: AttributorStore;\n domNode: HTMLElement;\n\n attach() {\n super.attach();\n this.attributes = new AttributorStore(this.domNode);\n }\n\n delta() {\n return new Delta().insert(this.value(), {\n ...this.formats(),\n ...this.attributes.values(),\n });\n }\n\n format(name: string, value: unknown) {\n const attribute = this.scroll.query(name, Scope.BLOCK_ATTRIBUTE);\n if (attribute != null) {\n // @ts-expect-error TODO: Scroll#query() should return Attributor when scope is attribute\n this.attributes.attribute(attribute, value);\n }\n }\n\n formatAt(index: number, length: number, name: string, value: unknown) {\n this.format(name, value);\n }\n\n insertAt(index: number, value: string, def?: unknown) {\n if (def != null) {\n super.insertAt(index, value, def);\n return;\n }\n const lines = value.split('\\n');\n const text = lines.pop();\n const blocks = lines.map((line) => {\n const block = this.scroll.create(Block.blotName);\n block.insertAt(0, line);\n return block;\n });\n const ref = this.split(index);\n blocks.forEach((block) => {\n this.parent.insertBefore(block, ref);\n });\n if (text) {\n this.parent.insertBefore(this.scroll.create('text', text), ref);\n }\n }\n}\nBlockEmbed.scope = Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\nfunction blockDelta(blot: BlockBlot, filter = true) {\n return blot\n .descendants(LeafBlot)\n .reduce((delta, leaf) => {\n if (leaf.length() === 0) {\n return delta;\n }\n return delta.insert(leaf.value(), bubbleFormats(leaf, {}, filter));\n }, new Delta())\n .insert('\\n', bubbleFormats(blot));\n}\n\nfunction bubbleFormats(\n blot: Blot | null,\n formats: Record = {},\n filter = true,\n): Record {\n if (blot == null) return formats;\n if ('formats' in blot && typeof blot.formats === 'function') {\n formats = {\n ...formats,\n ...blot.formats(),\n };\n if (filter) {\n // exclude syntax highlighting from deltas and getFormat()\n delete formats['code-token'];\n }\n }\n if (\n blot.parent == null ||\n blot.parent.statics.blotName === 'scroll' ||\n blot.parent.statics.scope !== blot.statics.scope\n ) {\n return formats;\n }\n return bubbleFormats(blot.parent, formats, filter);\n}\n\nexport { blockDelta, bubbleFormats, BlockEmbed, Block as default };\n", "import { EmbedBlot } from 'parchment';\n\nclass Break extends EmbedBlot {\n static value() {\n return undefined;\n }\n\n optimize() {\n if (this.prev || this.next) {\n this.remove();\n }\n }\n\n length() {\n return 0;\n }\n\n value() {\n return '';\n }\n}\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\nexport default Break;\n", "import { TextBlot } from 'parchment';\n\nclass Text extends TextBlot {}\n\n// https://lodash.com/docs#escape\nconst entityMap: Record = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\n\nfunction escapeText(text: string) {\n return text.replace(/[&<>\"']/g, (s) => entityMap[s]);\n}\n\nexport { Text as default, escapeText };\n", "import { EmbedBlot, InlineBlot, Scope } from 'parchment';\nimport type { BlotConstructor } from 'parchment';\nimport Break from './break.js';\nimport Text from './text.js';\n\nclass Inline extends InlineBlot {\n static allowedChildren: BlotConstructor[] = [Inline, Break, EmbedBlot, Text];\n // Lower index means deeper in the DOM tree, since not found (-1) is for embeds\n static order = [\n 'cursor',\n 'inline', // Must be lower\n 'link', // Chrome wants to be lower\n 'underline',\n 'strike',\n 'italic',\n 'bold',\n 'script',\n 'code', // Must be higher\n ];\n\n static compare(self: string, other: string) {\n const selfIndex = Inline.order.indexOf(self);\n const otherIndex = Inline.order.indexOf(other);\n if (selfIndex >= 0 || otherIndex >= 0) {\n return selfIndex - otherIndex;\n }\n if (self === other) {\n return 0;\n }\n if (self < other) {\n return -1;\n }\n return 1;\n }\n\n formatAt(index: number, length: number, name: string, value: unknown) {\n if (\n Inline.compare(this.statics.blotName, name) < 0 &&\n this.scroll.query(name, Scope.BLOT)\n ) {\n const blot = this.isolate(index, length);\n if (value) {\n blot.wrap(name, value);\n }\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n\n optimize(context: { [key: string]: any }) {\n super.optimize(context);\n if (\n this.parent instanceof Inline &&\n Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0\n ) {\n const parent = this.parent.isolate(this.offset(), this.length());\n // @ts-expect-error TODO: make isolate generic\n this.moveChildren(parent);\n parent.wrap(this);\n }\n }\n}\n\nexport default Inline;\n", "import { EmbedBlot, Scope } from 'parchment';\nimport type { Parent, ScrollBlot } from 'parchment';\nimport type Selection from '../core/selection.js';\nimport TextBlot from './text.js';\nimport type { EmbedContextRange } from './embed.js';\n\nclass Cursor extends EmbedBlot {\n static blotName = 'cursor';\n static className = 'ql-cursor';\n static tagName = 'span';\n static CONTENTS = '\\uFEFF'; // Zero width no break space\n\n static value() {\n return undefined;\n }\n\n selection: Selection;\n textNode: Text;\n savedLength: number;\n\n constructor(scroll: ScrollBlot, domNode: HTMLElement, selection: Selection) {\n super(scroll, domNode);\n this.selection = selection;\n this.textNode = document.createTextNode(Cursor.CONTENTS);\n this.domNode.appendChild(this.textNode);\n this.savedLength = 0;\n }\n\n detach() {\n // super.detach() will also clear domNode.__blot\n if (this.parent != null) this.parent.removeChild(this);\n }\n\n format(name: string, value: unknown) {\n if (this.savedLength !== 0) {\n super.format(name, value);\n return;\n }\n // TODO: Fix this next time the file is edited.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let target: Parent | this = this;\n let index = 0;\n while (target != null && target.statics.scope !== Scope.BLOCK_BLOT) {\n index += target.offset(target.parent);\n target = target.parent;\n }\n if (target != null) {\n this.savedLength = Cursor.CONTENTS.length;\n // @ts-expect-error TODO: allow empty context in Parchment\n target.optimize();\n target.formatAt(index, Cursor.CONTENTS.length, name, value);\n this.savedLength = 0;\n }\n }\n\n index(node: Node, offset: number) {\n if (node === this.textNode) return 0;\n return super.index(node, offset);\n }\n\n length() {\n return this.savedLength;\n }\n\n position(): [Text, number] {\n return [this.textNode, this.textNode.data.length];\n }\n\n remove() {\n super.remove();\n // @ts-expect-error Fix me later\n this.parent = null;\n }\n\n restore(): EmbedContextRange | null {\n if (this.selection.composing || this.parent == null) return null;\n const range = this.selection.getNativeRange();\n // Browser may push down styles/nodes inside the cursor blot.\n // https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#push-down-values\n while (\n this.domNode.lastChild != null &&\n this.domNode.lastChild !== this.textNode\n ) {\n // @ts-expect-error Fix me later\n this.domNode.parentNode.insertBefore(\n this.domNode.lastChild,\n this.domNode,\n );\n }\n\n const prevTextBlot = this.prev instanceof TextBlot ? this.prev : null;\n const prevTextLength = prevTextBlot ? prevTextBlot.length() : 0;\n const nextTextBlot = this.next instanceof TextBlot ? this.next : null;\n // @ts-expect-error TODO: make TextBlot.text public\n const nextText = nextTextBlot ? nextTextBlot.text : '';\n const { textNode } = this;\n // take text from inside this blot and reset it\n const newText = textNode.data.split(Cursor.CONTENTS).join('');\n textNode.data = Cursor.CONTENTS;\n\n // proactively merge TextBlots around cursor so that optimization\n // doesn't lose the cursor. the reason we are here in cursor.restore\n // could be that the user clicked in prevTextBlot or nextTextBlot, or\n // the user typed something.\n let mergedTextBlot;\n if (prevTextBlot) {\n mergedTextBlot = prevTextBlot;\n if (newText || nextTextBlot) {\n prevTextBlot.insertAt(prevTextBlot.length(), newText + nextText);\n if (nextTextBlot) {\n nextTextBlot.remove();\n }\n }\n } else if (nextTextBlot) {\n mergedTextBlot = nextTextBlot;\n nextTextBlot.insertAt(0, newText);\n } else {\n const newTextNode = document.createTextNode(newText);\n mergedTextBlot = this.scroll.create(newTextNode);\n this.parent.insertBefore(mergedTextBlot, this);\n }\n\n this.remove();\n if (range) {\n // calculate selection to restore\n const remapOffset = (node: Node, offset: number) => {\n if (prevTextBlot && node === prevTextBlot.domNode) {\n return offset;\n }\n if (node === textNode) {\n return prevTextLength + offset - 1;\n }\n if (nextTextBlot && node === nextTextBlot.domNode) {\n return prevTextLength + newText.length + offset;\n }\n return null;\n };\n\n const start = remapOffset(range.start.node, range.start.offset);\n const end = remapOffset(range.end.node, range.end.offset);\n if (start !== null && end !== null) {\n return {\n startNode: mergedTextBlot.domNode,\n startOffset: start,\n endNode: mergedTextBlot.domNode,\n endOffset: end,\n };\n }\n }\n return null;\n }\n\n update(mutations: MutationRecord[], context: Record) {\n if (\n mutations.some((mutation) => {\n return (\n mutation.type === 'characterData' && mutation.target === this.textNode\n );\n })\n ) {\n const range = this.restore();\n if (range) context.range = range;\n }\n }\n\n // Avoid .ql-cursor being a descendant of ``.\n // The reason is Safari pushes down `` on text insertion.\n // That will cause DOM nodes not sync with the model.\n //\n // For example ({I} is the caret), given the markup:\n // \\uFEFF{I}\n // When typing a char \"x\", `` will be pushed down inside the `` first:\n // \\uFEFF{I}\n // And then \"x\" will be inserted after ``:\n // \\uFEFFd{I}\n optimize(context?: unknown) {\n // @ts-expect-error Fix me later\n super.optimize(context);\n\n let { parent } = this;\n while (parent) {\n if (parent.domNode.tagName === 'A') {\n this.savedLength = Cursor.CONTENTS.length;\n // @ts-expect-error TODO: make isolate generic\n parent.isolate(this.offset(parent), this.length()).unwrap();\n this.savedLength = 0;\n break;\n }\n parent = parent.parent;\n }\n }\n\n value() {\n return '';\n }\n}\n\nexport default Cursor;\n", "import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n", "import type Quill from '../core.js';\n\nexport default new WeakMap();\n", "const levels = ['error', 'warn', 'log', 'info'] as const;\nexport type DebugLevel = (typeof levels)[number];\nlet level: DebugLevel | false = 'warn';\n\nfunction debug(method: DebugLevel, ...args: unknown[]) {\n if (level) {\n if (levels.indexOf(method) <= levels.indexOf(level)) {\n console[method](...args); // eslint-disable-line no-console\n }\n }\n}\n\nfunction namespace(\n ns: string,\n): Record void> {\n return levels.reduce(\n (logger, method) => {\n logger[method] = debug.bind(console, method, ns);\n return logger;\n },\n {} as Record void>,\n );\n}\n\nnamespace.level = (newLevel: DebugLevel | false) => {\n level = newLevel;\n};\ndebug.level = namespace.level;\n\nexport default namespace;\n", "import { EventEmitter } from 'eventemitter3';\nimport instances from './instances.js';\nimport logger from './logger.js';\n\nconst debug = logger('quill:events');\nconst EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\n\nEVENTS.forEach((eventName) => {\n document.addEventListener(eventName, (...args) => {\n Array.from(document.querySelectorAll('.ql-container')).forEach((node) => {\n const quill = instances.get(node);\n if (quill && quill.emitter) {\n quill.emitter.handleDOM(...args);\n }\n });\n });\n});\n\nclass Emitter extends EventEmitter {\n static events = {\n EDITOR_CHANGE: 'editor-change',\n SCROLL_BEFORE_UPDATE: 'scroll-before-update',\n SCROLL_BLOT_MOUNT: 'scroll-blot-mount',\n SCROLL_BLOT_UNMOUNT: 'scroll-blot-unmount',\n SCROLL_OPTIMIZE: 'scroll-optimize',\n SCROLL_UPDATE: 'scroll-update',\n SCROLL_EMBED_UPDATE: 'scroll-embed-update',\n SELECTION_CHANGE: 'selection-change',\n TEXT_CHANGE: 'text-change',\n COMPOSITION_BEFORE_START: 'composition-before-start',\n COMPOSITION_START: 'composition-start',\n COMPOSITION_BEFORE_END: 'composition-before-end',\n COMPOSITION_END: 'composition-end',\n } as const;\n\n static sources = {\n API: 'api',\n SILENT: 'silent',\n USER: 'user',\n } as const;\n\n protected domListeners: Record;\n\n constructor() {\n super();\n this.domListeners = {};\n this.on('error', debug.error);\n }\n\n emit(...args: unknown[]): boolean {\n debug.log.call(debug, ...args);\n // @ts-expect-error\n return super.emit(...args);\n }\n\n handleDOM(event: Event, ...args: unknown[]) {\n (this.domListeners[event.type] || []).forEach(({ node, handler }) => {\n if (event.target === node || node.contains(event.target as Node)) {\n handler(event, ...args);\n }\n });\n }\n\n listenDOM(eventName: string, node: Node, handler: EventListener) {\n if (!this.domListeners[eventName]) {\n this.domListeners[eventName] = [];\n }\n this.domListeners[eventName].push({ node, handler });\n }\n}\n\nexport type EmitterSource =\n (typeof Emitter.sources)[keyof typeof Emitter.sources];\n\nexport default Emitter;\n", "import { LeafBlot, Scope } from 'parchment';\nimport { cloneDeep, isEqual } from 'lodash-es';\nimport Emitter from './emitter.js';\nimport type { EmitterSource } from './emitter.js';\nimport logger from './logger.js';\nimport type Cursor from '../blots/cursor.js';\nimport type Scroll from '../blots/scroll.js';\n\nconst debug = logger('quill:selection');\n\ntype NativeRange = AbstractRange;\n\ninterface NormalizedRange {\n start: {\n node: NativeRange['startContainer'];\n offset: NativeRange['startOffset'];\n };\n end: { node: NativeRange['endContainer']; offset: NativeRange['endOffset'] };\n native: NativeRange;\n}\n\nexport interface Bounds {\n bottom: number;\n height: number;\n left: number;\n right: number;\n top: number;\n width: number;\n}\n\nexport class Range {\n constructor(\n public index: number,\n public length = 0,\n ) {}\n}\n\nclass Selection {\n scroll: Scroll;\n emitter: Emitter;\n composing: boolean;\n mouseDown: boolean;\n\n root: HTMLElement;\n cursor: Cursor;\n savedRange: Range;\n lastRange: Range | null;\n lastNative: NormalizedRange | null;\n\n constructor(scroll: Scroll, emitter: Emitter) {\n this.emitter = emitter;\n this.scroll = scroll;\n this.composing = false;\n this.mouseDown = false;\n this.root = this.scroll.domNode;\n // @ts-expect-error\n this.cursor = this.scroll.create('cursor', this);\n // savedRange is last non-null range\n this.savedRange = new Range(0, 0);\n this.lastRange = this.savedRange;\n this.lastNative = null;\n this.handleComposition();\n this.handleDragging();\n this.emitter.listenDOM('selectionchange', document, () => {\n if (!this.mouseDown && !this.composing) {\n setTimeout(this.update.bind(this, Emitter.sources.USER), 1);\n }\n });\n this.emitter.on(Emitter.events.SCROLL_BEFORE_UPDATE, () => {\n if (!this.hasFocus()) return;\n const native = this.getNativeRange();\n if (native == null) return;\n if (native.start.node === this.cursor.textNode) return; // cursor.restore() will handle\n this.emitter.once(\n Emitter.events.SCROLL_UPDATE,\n (source, mutations: MutationRecord[]) => {\n try {\n if (\n this.root.contains(native.start.node) &&\n this.root.contains(native.end.node)\n ) {\n this.setNativeRange(\n native.start.node,\n native.start.offset,\n native.end.node,\n native.end.offset,\n );\n }\n const triggeredByTyping = mutations.some(\n (mutation) =>\n mutation.type === 'characterData' ||\n mutation.type === 'childList' ||\n (mutation.type === 'attributes' &&\n mutation.target === this.root),\n );\n this.update(triggeredByTyping ? Emitter.sources.SILENT : source);\n } catch (ignored) {\n // ignore\n }\n },\n );\n });\n this.emitter.on(Emitter.events.SCROLL_OPTIMIZE, (mutations, context) => {\n if (context.range) {\n const { startNode, startOffset, endNode, endOffset } = context.range;\n this.setNativeRange(startNode, startOffset, endNode, endOffset);\n this.update(Emitter.sources.SILENT);\n }\n });\n this.update(Emitter.sources.SILENT);\n }\n\n handleComposition() {\n this.emitter.on(Emitter.events.COMPOSITION_BEFORE_START, () => {\n this.composing = true;\n });\n this.emitter.on(Emitter.events.COMPOSITION_END, () => {\n this.composing = false;\n if (this.cursor.parent) {\n const range = this.cursor.restore();\n if (!range) return;\n setTimeout(() => {\n this.setNativeRange(\n range.startNode,\n range.startOffset,\n range.endNode,\n range.endOffset,\n );\n }, 1);\n }\n });\n }\n\n handleDragging() {\n this.emitter.listenDOM('mousedown', document.body, () => {\n this.mouseDown = true;\n });\n this.emitter.listenDOM('mouseup', document.body, () => {\n this.mouseDown = false;\n this.update(Emitter.sources.USER);\n });\n }\n\n focus() {\n if (this.hasFocus()) return;\n this.root.focus({ preventScroll: true });\n this.setRange(this.savedRange);\n }\n\n format(format: string, value: unknown) {\n this.scroll.update();\n const nativeRange = this.getNativeRange();\n if (\n nativeRange == null ||\n !nativeRange.native.collapsed ||\n this.scroll.query(format, Scope.BLOCK)\n )\n return;\n if (nativeRange.start.node !== this.cursor.textNode) {\n const blot = this.scroll.find(nativeRange.start.node, false);\n if (blot == null) return;\n // TODO Give blot ability to not split\n if (blot instanceof LeafBlot) {\n const after = blot.split(nativeRange.start.offset);\n blot.parent.insertBefore(this.cursor, after);\n } else {\n // @ts-expect-error TODO: nativeRange.start.node doesn't seem to match function signature\n blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n }\n this.cursor.attach();\n }\n this.cursor.format(format, value);\n this.scroll.optimize();\n this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n this.update();\n }\n\n getBounds(index: number, length = 0) {\n const scrollLength = this.scroll.length();\n index = Math.min(index, scrollLength - 1);\n length = Math.min(index + length, scrollLength - 1) - index;\n let node: Node;\n let [leaf, offset] = this.scroll.leaf(index);\n if (leaf == null) return null;\n if (length > 0 && offset === leaf.length()) {\n const [next] = this.scroll.leaf(index + 1);\n if (next) {\n const [line] = this.scroll.line(index);\n const [nextLine] = this.scroll.line(index + 1);\n if (line === nextLine) {\n leaf = next;\n offset = 0;\n }\n }\n }\n [node, offset] = leaf.position(offset, true);\n const range = document.createRange();\n if (length > 0) {\n range.setStart(node, offset);\n [leaf, offset] = this.scroll.leaf(index + length);\n if (leaf == null) return null;\n [node, offset] = leaf.position(offset, true);\n range.setEnd(node, offset);\n return range.getBoundingClientRect();\n }\n let side: 'left' | 'right' = 'left';\n let rect: DOMRect;\n if (node instanceof Text) {\n // Return null if the text node is empty because it is\n // not able to get a useful client rect:\n // https://github.com/w3c/csswg-drafts/issues/2514.\n // Empty text nodes are most likely caused by TextBlot#optimize()\n // not getting called when editor content changes.\n if (!node.data.length) {\n return null;\n }\n if (offset < node.data.length) {\n range.setStart(node, offset);\n range.setEnd(node, offset + 1);\n } else {\n range.setStart(node, offset - 1);\n range.setEnd(node, offset);\n side = 'right';\n }\n rect = range.getBoundingClientRect();\n } else {\n if (!(leaf.domNode instanceof Element)) return null;\n rect = leaf.domNode.getBoundingClientRect();\n if (offset > 0) side = 'right';\n }\n return {\n bottom: rect.top + rect.height,\n height: rect.height,\n left: rect[side],\n right: rect[side],\n top: rect.top,\n width: 0,\n };\n }\n\n getNativeRange(): NormalizedRange | null {\n const selection = document.getSelection();\n if (selection == null || selection.rangeCount <= 0) return null;\n const nativeRange = selection.getRangeAt(0);\n if (nativeRange == null) return null;\n const range = this.normalizeNative(nativeRange);\n debug.info('getNativeRange', range);\n return range;\n }\n\n getRange(): [Range, NormalizedRange] | [null, null] {\n const root = this.scroll.domNode;\n if ('isConnected' in root && !root.isConnected) {\n // document.getSelection() forces layout on Blink, so we trend to\n // not calling it.\n return [null, null];\n }\n const normalized = this.getNativeRange();\n if (normalized == null) return [null, null];\n const range = this.normalizedToRange(normalized);\n return [range, normalized];\n }\n\n hasFocus(): boolean {\n return (\n document.activeElement === this.root ||\n (document.activeElement != null &&\n contains(this.root, document.activeElement))\n );\n }\n\n normalizedToRange(range: NormalizedRange) {\n const positions: [Node, number][] = [\n [range.start.node, range.start.offset],\n ];\n if (!range.native.collapsed) {\n positions.push([range.end.node, range.end.offset]);\n }\n const indexes = positions.map((position) => {\n const [node, offset] = position;\n const blot = this.scroll.find(node, true);\n // @ts-expect-error Fix me later\n const index = blot.offset(this.scroll);\n if (offset === 0) {\n return index;\n }\n if (blot instanceof LeafBlot) {\n return index + blot.index(node, offset);\n }\n // @ts-expect-error Fix me later\n return index + blot.length();\n });\n const end = Math.min(Math.max(...indexes), this.scroll.length() - 1);\n const start = Math.min(end, ...indexes);\n return new Range(start, end - start);\n }\n\n normalizeNative(nativeRange: NativeRange) {\n if (\n !contains(this.root, nativeRange.startContainer) ||\n (!nativeRange.collapsed && !contains(this.root, nativeRange.endContainer))\n ) {\n return null;\n }\n const range = {\n start: {\n node: nativeRange.startContainer,\n offset: nativeRange.startOffset,\n },\n end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },\n native: nativeRange,\n };\n [range.start, range.end].forEach((position) => {\n let { node, offset } = position;\n while (!(node instanceof Text) && node.childNodes.length > 0) {\n if (node.childNodes.length > offset) {\n node = node.childNodes[offset];\n offset = 0;\n } else if (node.childNodes.length === offset) {\n // @ts-expect-error Fix me later\n node = node.lastChild;\n if (node instanceof Text) {\n offset = node.data.length;\n } else if (node.childNodes.length > 0) {\n // Container case\n offset = node.childNodes.length;\n } else {\n // Embed case\n offset = node.childNodes.length + 1;\n }\n } else {\n break;\n }\n }\n position.node = node;\n position.offset = offset;\n });\n return range;\n }\n\n rangeToNative(range: Range): [Node | null, number, Node | null, number] {\n const scrollLength = this.scroll.length();\n\n const getPosition = (\n index: number,\n inclusive: boolean,\n ): [Node | null, number] => {\n index = Math.min(scrollLength - 1, index);\n const [leaf, leafOffset] = this.scroll.leaf(index);\n return leaf ? leaf.position(leafOffset, inclusive) : [null, -1];\n };\n return [\n ...getPosition(range.index, false),\n ...getPosition(range.index + range.length, true),\n ];\n }\n\n setNativeRange(\n startNode: Node | null,\n startOffset?: number,\n endNode = startNode,\n endOffset = startOffset,\n force = false,\n ) {\n debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n if (\n startNode != null &&\n (this.root.parentNode == null ||\n startNode.parentNode == null ||\n // @ts-expect-error Fix me later\n endNode.parentNode == null)\n ) {\n return;\n }\n const selection = document.getSelection();\n if (selection == null) return;\n if (startNode != null) {\n if (!this.hasFocus()) this.root.focus({ preventScroll: true });\n const { native } = this.getNativeRange() || {};\n if (\n native == null ||\n force ||\n startNode !== native.startContainer ||\n startOffset !== native.startOffset ||\n endNode !== native.endContainer ||\n endOffset !== native.endOffset\n ) {\n if (startNode instanceof Element && startNode.tagName === 'BR') {\n // @ts-expect-error Fix me later\n startOffset = Array.from(startNode.parentNode.childNodes).indexOf(\n startNode,\n );\n startNode = startNode.parentNode;\n }\n if (endNode instanceof Element && endNode.tagName === 'BR') {\n // @ts-expect-error Fix me later\n endOffset = Array.from(endNode.parentNode.childNodes).indexOf(\n endNode,\n );\n endNode = endNode.parentNode;\n }\n const range = document.createRange();\n // @ts-expect-error Fix me later\n range.setStart(startNode, startOffset);\n // @ts-expect-error Fix me later\n range.setEnd(endNode, endOffset);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n } else {\n selection.removeAllRanges();\n this.root.blur();\n }\n }\n\n setRange(range: Range | null, force: boolean, source?: EmitterSource): void;\n setRange(range: Range | null, source?: EmitterSource): void;\n setRange(\n range: Range | null,\n force: boolean | EmitterSource = false,\n source: EmitterSource = Emitter.sources.API,\n ): void {\n if (typeof force === 'string') {\n source = force;\n force = false;\n }\n debug.info('setRange', range);\n if (range != null) {\n const args = this.rangeToNative(range);\n this.setNativeRange(...args, force);\n } else {\n this.setNativeRange(null);\n }\n this.update(source);\n }\n\n update(source: EmitterSource = Emitter.sources.USER) {\n const oldRange = this.lastRange;\n const [lastRange, nativeRange] = this.getRange();\n this.lastRange = lastRange;\n this.lastNative = nativeRange;\n if (this.lastRange != null) {\n this.savedRange = this.lastRange;\n }\n if (!isEqual(oldRange, this.lastRange)) {\n if (\n !this.composing &&\n nativeRange != null &&\n nativeRange.native.collapsed &&\n nativeRange.start.node !== this.cursor.textNode\n ) {\n const range = this.cursor.restore();\n if (range) {\n this.setNativeRange(\n range.startNode,\n range.startOffset,\n range.endNode,\n range.endOffset,\n );\n }\n }\n const args = [\n Emitter.events.SELECTION_CHANGE,\n cloneDeep(this.lastRange),\n cloneDeep(oldRange),\n source,\n ];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n }\n}\n\nfunction contains(parent: Node, descendant: Node) {\n try {\n // Firefox inserts inaccessible nodes around video elements\n descendant.parentNode; // eslint-disable-line @typescript-eslint/no-unused-expressions\n } catch (e) {\n return false;\n }\n return parent.contains(descendant);\n}\n\nexport default Selection;\n", "import type Quill from './quill.js';\n\nabstract class Module {\n static DEFAULTS = {};\n\n constructor(\n public quill: Quill,\n protected options: Partial = {},\n ) {}\n}\n\nexport default Module;\n", "import type { ScrollBlot } from 'parchment';\nimport { EmbedBlot } from 'parchment';\nimport TextBlot from './text.js';\n\nconst GUARD_TEXT = '\\uFEFF';\n\nexport interface EmbedContextRange {\n startNode: Node | Text;\n startOffset: number;\n endNode?: Node | Text;\n endOffset?: number;\n}\n\nclass Embed extends EmbedBlot {\n contentNode: HTMLSpanElement;\n leftGuard: Text;\n rightGuard: Text;\n\n constructor(scroll: ScrollBlot, node: Node) {\n super(scroll, node);\n this.contentNode = document.createElement('span');\n this.contentNode.setAttribute('contenteditable', 'false');\n Array.from(this.domNode.childNodes).forEach((childNode) => {\n this.contentNode.appendChild(childNode);\n });\n this.leftGuard = document.createTextNode(GUARD_TEXT);\n this.rightGuard = document.createTextNode(GUARD_TEXT);\n this.domNode.appendChild(this.leftGuard);\n this.domNode.appendChild(this.contentNode);\n this.domNode.appendChild(this.rightGuard);\n }\n\n index(node: Node, offset: number) {\n if (node === this.leftGuard) return 0;\n if (node === this.rightGuard) return 1;\n return super.index(node, offset);\n }\n\n restore(node: Text): EmbedContextRange | null {\n let range: EmbedContextRange | null = null;\n let textNode: Text;\n const text = node.data.split(GUARD_TEXT).join('');\n if (node === this.leftGuard) {\n if (this.prev instanceof TextBlot) {\n const prevLength = this.prev.length();\n this.prev.insertAt(prevLength, text);\n range = {\n startNode: this.prev.domNode,\n startOffset: prevLength + text.length,\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(this.scroll.create(textNode), this);\n range = {\n startNode: textNode,\n startOffset: text.length,\n };\n }\n } else if (node === this.rightGuard) {\n if (this.next instanceof TextBlot) {\n this.next.insertAt(0, text);\n range = {\n startNode: this.next.domNode,\n startOffset: text.length,\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(this.scroll.create(textNode), this.next);\n range = {\n startNode: textNode,\n startOffset: text.length,\n };\n }\n }\n node.data = GUARD_TEXT;\n return range;\n }\n\n update(mutations: MutationRecord[], context: Record) {\n mutations.forEach((mutation) => {\n if (\n mutation.type === 'characterData' &&\n (mutation.target === this.leftGuard ||\n mutation.target === this.rightGuard)\n ) {\n const range = this.restore(mutation.target as Text);\n if (range) context.range = range;\n }\n });\n }\n}\n\nexport default Embed;\n", "import Embed from '../blots/embed.js';\nimport type Scroll from '../blots/scroll.js';\nimport Emitter from './emitter.js';\n\nclass Composition {\n isComposing = false;\n\n constructor(\n private scroll: Scroll,\n private emitter: Emitter,\n ) {\n this.setupListeners();\n }\n\n private setupListeners() {\n this.scroll.domNode.addEventListener('compositionstart', (event) => {\n if (!this.isComposing) {\n this.handleCompositionStart(event);\n }\n });\n\n this.scroll.domNode.addEventListener('compositionend', (event) => {\n if (this.isComposing) {\n // Webkit makes DOM changes after compositionend, so we use microtask to\n // ensure the order.\n // https://bugs.webkit.org/show_bug.cgi?id=31902\n queueMicrotask(() => {\n this.handleCompositionEnd(event);\n });\n }\n });\n }\n\n private handleCompositionStart(event: CompositionEvent) {\n const blot =\n event.target instanceof Node\n ? this.scroll.find(event.target, true)\n : null;\n\n if (blot && !(blot instanceof Embed)) {\n this.emitter.emit(Emitter.events.COMPOSITION_BEFORE_START, event);\n this.scroll.batchStart();\n this.emitter.emit(Emitter.events.COMPOSITION_START, event);\n this.isComposing = true;\n }\n }\n\n private handleCompositionEnd(event: CompositionEvent) {\n this.emitter.emit(Emitter.events.COMPOSITION_BEFORE_END, event);\n this.scroll.batchEnd();\n this.emitter.emit(Emitter.events.COMPOSITION_END, event);\n this.isComposing = false;\n }\n}\n\nexport default Composition;\n", "import type Quill from '../core.js';\nimport type Clipboard from '../modules/clipboard.js';\nimport type History from '../modules/history.js';\nimport type Keyboard from '../modules/keyboard.js';\nimport type { ToolbarProps } from '../modules/toolbar.js';\nimport type Uploader from '../modules/uploader.js';\n\nexport interface ThemeOptions {\n modules: Record & {\n toolbar?: null | ToolbarProps;\n };\n}\n\nclass Theme {\n static DEFAULTS: ThemeOptions = {\n modules: {},\n };\n\n static themes = {\n default: Theme,\n };\n\n modules: ThemeOptions['modules'] = {};\n\n constructor(\n protected quill: Quill,\n protected options: ThemeOptions,\n ) {}\n\n init() {\n Object.keys(this.options.modules).forEach((name) => {\n if (this.modules[name] == null) {\n this.addModule(name);\n }\n });\n }\n\n addModule(name: 'clipboard'): Clipboard;\n addModule(name: 'keyboard'): Keyboard;\n addModule(name: 'uploader'): Uploader;\n addModule(name: 'history'): History;\n addModule(name: string): unknown;\n addModule(name: string) {\n // @ts-expect-error\n const ModuleClass = this.quill.constructor.import(`modules/${name}`);\n this.modules[name] = new ModuleClass(\n this.quill,\n this.options.modules[name] || {},\n );\n return this.modules[name];\n }\n}\n\nexport interface ThemeConstructor {\n new (quill: Quill, options: unknown): Theme;\n DEFAULTS: ThemeOptions;\n}\n\nexport default Theme;\n", "export type Rect = {\n top: number;\n right: number;\n bottom: number;\n left: number;\n};\n\nconst getParentElement = (element: Node): Element | null =>\n element.parentElement || (element.getRootNode() as ShadowRoot).host || null;\n\nconst getElementRect = (element: Element): Rect => {\n const rect = element.getBoundingClientRect();\n const scaleX =\n ('offsetWidth' in element &&\n Math.abs(rect.width) / (element as HTMLElement).offsetWidth) ||\n 1;\n const scaleY =\n ('offsetHeight' in element &&\n Math.abs(rect.height) / (element as HTMLElement).offsetHeight) ||\n 1;\n return {\n top: rect.top,\n right: rect.left + element.clientWidth * scaleX,\n bottom: rect.top + element.clientHeight * scaleY,\n left: rect.left,\n };\n};\n\nconst paddingValueToInt = (value: string) => {\n const number = parseInt(value, 10);\n return Number.isNaN(number) ? 0 : number;\n};\n\n// Follow the steps described in https://www.w3.org/TR/cssom-view-1/#element-scrolling-members,\n// assuming that the scroll option is set to 'nearest'.\nconst getScrollDistance = (\n targetStart: number,\n targetEnd: number,\n scrollStart: number,\n scrollEnd: number,\n scrollPaddingStart: number,\n scrollPaddingEnd: number,\n) => {\n if (targetStart < scrollStart && targetEnd > scrollEnd) {\n return 0;\n }\n\n if (targetStart < scrollStart) {\n return -(scrollStart - targetStart + scrollPaddingStart);\n }\n\n if (targetEnd > scrollEnd) {\n return targetEnd - targetStart > scrollEnd - scrollStart\n ? targetStart + scrollPaddingStart - scrollStart\n : targetEnd - scrollEnd + scrollPaddingEnd;\n }\n return 0;\n};\n\nconst scrollRectIntoView = (root: HTMLElement, targetRect: Rect) => {\n const document = root.ownerDocument;\n\n let rect = targetRect;\n\n let current: Element | null = root;\n while (current) {\n const isDocumentBody: boolean = current === document.body;\n const bounding = isDocumentBody\n ? {\n top: 0,\n right:\n window.visualViewport?.width ??\n document.documentElement.clientWidth,\n bottom:\n window.visualViewport?.height ??\n document.documentElement.clientHeight,\n left: 0,\n }\n : getElementRect(current);\n\n const style = getComputedStyle(current);\n const scrollDistanceX = getScrollDistance(\n rect.left,\n rect.right,\n bounding.left,\n bounding.right,\n paddingValueToInt(style.scrollPaddingLeft),\n paddingValueToInt(style.scrollPaddingRight),\n );\n const scrollDistanceY = getScrollDistance(\n rect.top,\n rect.bottom,\n bounding.top,\n bounding.bottom,\n paddingValueToInt(style.scrollPaddingTop),\n paddingValueToInt(style.scrollPaddingBottom),\n );\n if (scrollDistanceX || scrollDistanceY) {\n if (isDocumentBody) {\n document.defaultView?.scrollBy(scrollDistanceX, scrollDistanceY);\n } else {\n const { scrollLeft, scrollTop } = current;\n if (scrollDistanceY) {\n current.scrollTop += scrollDistanceY;\n }\n if (scrollDistanceX) {\n current.scrollLeft += scrollDistanceX;\n }\n const scrolledLeft = current.scrollLeft - scrollLeft;\n const scrolledTop = current.scrollTop - scrollTop;\n rect = {\n left: rect.left - scrolledLeft,\n top: rect.top - scrolledTop,\n right: rect.right - scrolledLeft,\n bottom: rect.bottom - scrolledTop,\n };\n }\n }\n\n current =\n isDocumentBody || style.position === 'fixed'\n ? null\n : getParentElement(current);\n }\n};\n\nexport default scrollRectIntoView;\n", "import { Registry } from 'parchment';\n\nconst MAX_REGISTER_ITERATIONS = 100;\nconst CORE_FORMATS = ['block', 'break', 'cursor', 'inline', 'scroll', 'text'];\n\nconst createRegistryWithFormats = (\n formats: string[],\n sourceRegistry: Registry,\n debug: { error: (errorMessage: string) => void },\n) => {\n const registry = new Registry();\n CORE_FORMATS.forEach((name) => {\n const coreBlot = sourceRegistry.query(name);\n if (coreBlot) registry.register(coreBlot);\n });\n\n formats.forEach((name) => {\n let format = sourceRegistry.query(name);\n if (!format) {\n debug.error(\n `Cannot register \"${name}\" specified in \"formats\" config. Are you sure it was registered?`,\n );\n }\n let iterations = 0;\n while (format) {\n registry.register(format);\n format = 'blotName' in format ? format.requiredContainer ?? null : null;\n\n iterations += 1;\n if (iterations > MAX_REGISTER_ITERATIONS) {\n debug.error(\n `Cycle detected in registering blot requiredContainer: \"${name}\"`,\n );\n break;\n }\n }\n });\n\n return registry;\n};\n\nexport default createRegistryWithFormats;\n", "import { ContainerBlot } from 'parchment';\n\nclass Container extends ContainerBlot {}\n\nexport default Container;\n", "import { ContainerBlot, LeafBlot, Scope, ScrollBlot } from 'parchment';\nimport type { Blot, Parent, EmbedBlot, ParentBlot, Registry } from 'parchment';\nimport Delta, { AttributeMap, Op } from 'quill-delta';\nimport Emitter from '../core/emitter.js';\nimport type { EmitterSource } from '../core/emitter.js';\nimport Block, { BlockEmbed, bubbleFormats } from './block.js';\nimport Break from './break.js';\nimport Container from './container.js';\n\ntype RenderBlock =\n | {\n type: 'blockEmbed';\n attributes: AttributeMap;\n key: string;\n value: unknown;\n }\n | { type: 'block'; attributes: AttributeMap; delta: Delta };\n\nfunction isLine(blot: unknown): blot is Block | BlockEmbed {\n return blot instanceof Block || blot instanceof BlockEmbed;\n}\n\ninterface UpdatableEmbed {\n updateContent(change: unknown): void;\n}\n\nfunction isUpdatable(blot: Blot): blot is Blot & UpdatableEmbed {\n return typeof (blot as unknown as any).updateContent === 'function';\n}\n\nclass Scroll extends ScrollBlot {\n static blotName = 'scroll';\n static className = 'ql-editor';\n static tagName = 'DIV';\n static defaultChild = Block;\n static allowedChildren = [Block, BlockEmbed, Container];\n\n emitter: Emitter;\n batch: false | MutationRecord[];\n\n constructor(\n registry: Registry,\n domNode: HTMLDivElement,\n { emitter }: { emitter: Emitter },\n ) {\n super(registry, domNode);\n this.emitter = emitter;\n this.batch = false;\n this.optimize();\n this.enable();\n this.domNode.addEventListener('dragstart', (e) => this.handleDragStart(e));\n }\n\n batchStart() {\n if (!Array.isArray(this.batch)) {\n this.batch = [];\n }\n }\n\n batchEnd() {\n if (!this.batch) return;\n const mutations = this.batch;\n this.batch = false;\n this.update(mutations);\n }\n\n emitMount(blot: Blot) {\n this.emitter.emit(Emitter.events.SCROLL_BLOT_MOUNT, blot);\n }\n\n emitUnmount(blot: Blot) {\n this.emitter.emit(Emitter.events.SCROLL_BLOT_UNMOUNT, blot);\n }\n\n emitEmbedUpdate(blot: Blot, change: unknown) {\n this.emitter.emit(Emitter.events.SCROLL_EMBED_UPDATE, blot, change);\n }\n\n deleteAt(index: number, length: number) {\n const [first, offset] = this.line(index);\n const [last] = this.line(index + length);\n super.deleteAt(index, length);\n if (last != null && first !== last && offset > 0) {\n if (first instanceof BlockEmbed || last instanceof BlockEmbed) {\n this.optimize();\n return;\n }\n const ref =\n last.children.head instanceof Break ? null : last.children.head;\n // @ts-expect-error\n first.moveChildren(last, ref);\n // @ts-expect-error\n first.remove();\n }\n this.optimize();\n }\n\n enable(enabled = true) {\n this.domNode.setAttribute('contenteditable', enabled ? 'true' : 'false');\n }\n\n formatAt(index: number, length: number, format: string, value: unknown) {\n super.formatAt(index, length, format, value);\n this.optimize();\n }\n\n insertAt(index: number, value: string, def?: unknown) {\n if (index >= this.length()) {\n if (def == null || this.scroll.query(value, Scope.BLOCK) == null) {\n const blot = this.scroll.create(this.statics.defaultChild.blotName);\n this.appendChild(blot);\n if (def == null && value.endsWith('\\n')) {\n blot.insertAt(0, value.slice(0, -1), def);\n } else {\n blot.insertAt(0, value, def);\n }\n } else {\n const embed = this.scroll.create(value, def);\n this.appendChild(embed);\n }\n } else {\n super.insertAt(index, value, def);\n }\n this.optimize();\n }\n\n insertBefore(blot: Blot, ref?: Blot | null) {\n if (blot.statics.scope === Scope.INLINE_BLOT) {\n const wrapper = this.scroll.create(\n this.statics.defaultChild.blotName,\n ) as Parent;\n wrapper.appendChild(blot);\n super.insertBefore(wrapper, ref);\n } else {\n super.insertBefore(blot, ref);\n }\n }\n\n insertContents(index: number, delta: Delta) {\n const renderBlocks = this.deltaToRenderBlocks(\n delta.concat(new Delta().insert('\\n')),\n );\n const last = renderBlocks.pop();\n if (last == null) return;\n\n this.batchStart();\n\n const first = renderBlocks.shift();\n if (first) {\n const shouldInsertNewlineChar =\n first.type === 'block' &&\n (first.delta.length() === 0 ||\n (!this.descendant(BlockEmbed, index)[0] && index < this.length()));\n const delta =\n first.type === 'block'\n ? first.delta\n : new Delta().insert({ [first.key]: first.value });\n insertInlineContents(this, index, delta);\n const newlineCharLength = first.type === 'block' ? 1 : 0;\n const lineEndIndex = index + delta.length() + newlineCharLength;\n if (shouldInsertNewlineChar) {\n this.insertAt(lineEndIndex - 1, '\\n');\n }\n\n const formats = bubbleFormats(this.line(index)[0]);\n const attributes = AttributeMap.diff(formats, first.attributes) || {};\n Object.keys(attributes).forEach((name) => {\n this.formatAt(lineEndIndex - 1, 1, name, attributes[name]);\n });\n\n index = lineEndIndex;\n }\n\n let [refBlot, refBlotOffset] = this.children.find(index);\n if (renderBlocks.length) {\n if (refBlot) {\n refBlot = refBlot.split(refBlotOffset);\n refBlotOffset = 0;\n }\n\n renderBlocks.forEach((renderBlock) => {\n if (renderBlock.type === 'block') {\n const block = this.createBlock(\n renderBlock.attributes,\n refBlot || undefined,\n );\n insertInlineContents(block, 0, renderBlock.delta);\n } else {\n const blockEmbed = this.create(\n renderBlock.key,\n renderBlock.value,\n ) as EmbedBlot;\n this.insertBefore(blockEmbed, refBlot || undefined);\n Object.keys(renderBlock.attributes).forEach((name) => {\n blockEmbed.format(name, renderBlock.attributes[name]);\n });\n }\n });\n }\n\n if (last.type === 'block' && last.delta.length()) {\n const offset = refBlot\n ? refBlot.offset(refBlot.scroll) + refBlotOffset\n : this.length();\n insertInlineContents(this, offset, last.delta);\n }\n\n this.batchEnd();\n this.optimize();\n }\n\n isEnabled() {\n return this.domNode.getAttribute('contenteditable') === 'true';\n }\n\n leaf(index: number): [LeafBlot | null, number] {\n const last = this.path(index).pop();\n if (!last) {\n return [null, -1];\n }\n\n const [blot, offset] = last;\n return blot instanceof LeafBlot ? [blot, offset] : [null, -1];\n }\n\n line(index: number): [Block | BlockEmbed | null, number] {\n if (index === this.length()) {\n return this.line(index - 1);\n }\n // @ts-expect-error TODO: make descendant() generic\n return this.descendant(isLine, index);\n }\n\n lines(index = 0, length = Number.MAX_VALUE): (Block | BlockEmbed)[] {\n const getLines = (\n blot: ParentBlot,\n blotIndex: number,\n blotLength: number,\n ) => {\n let lines: (Block | BlockEmbed)[] = [];\n let lengthLeft = blotLength;\n blot.children.forEachAt(\n blotIndex,\n blotLength,\n (child, childIndex, childLength) => {\n if (isLine(child)) {\n lines.push(child);\n } else if (child instanceof ContainerBlot) {\n lines = lines.concat(getLines(child, childIndex, lengthLeft));\n }\n lengthLeft -= childLength;\n },\n );\n return lines;\n };\n return getLines(this, index, length);\n }\n\n optimize(context?: { [key: string]: any }): void;\n optimize(\n mutations?: MutationRecord[],\n context?: { [key: string]: any },\n ): void;\n optimize(mutations = [], context = {}) {\n if (this.batch) return;\n super.optimize(mutations, context);\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_OPTIMIZE, mutations, context);\n }\n }\n\n path(index: number) {\n return super.path(index).slice(1); // Exclude self\n }\n\n remove() {\n // Never remove self\n }\n\n update(source?: EmitterSource): void;\n update(mutations?: MutationRecord[]): void;\n update(mutations?: MutationRecord[] | EmitterSource): void {\n if (this.batch) {\n if (Array.isArray(mutations)) {\n this.batch = this.batch.concat(mutations);\n }\n return;\n }\n let source: EmitterSource = Emitter.sources.USER;\n if (typeof mutations === 'string') {\n source = mutations;\n }\n if (!Array.isArray(mutations)) {\n mutations = this.observer.takeRecords();\n }\n mutations = mutations.filter(({ target }) => {\n const blot = this.find(target, true);\n return blot && !isUpdatable(blot);\n });\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_BEFORE_UPDATE, source, mutations);\n }\n super.update(mutations.concat([])); // pass copy\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_UPDATE, source, mutations);\n }\n }\n\n updateEmbedAt(index: number, key: string, change: unknown) {\n // Currently it only supports top-level embeds (BlockEmbed).\n // We can update `ParentBlot` in parchment to support inline embeds.\n const [blot] = this.descendant((b: Blot) => b instanceof BlockEmbed, index);\n if (blot && blot.statics.blotName === key && isUpdatable(blot)) {\n blot.updateContent(change);\n }\n }\n\n protected handleDragStart(event: DragEvent) {\n event.preventDefault();\n }\n\n private deltaToRenderBlocks(delta: Delta) {\n const renderBlocks: RenderBlock[] = [];\n\n let currentBlockDelta = new Delta();\n delta.forEach((op) => {\n const insert = op?.insert;\n if (!insert) return;\n if (typeof insert === 'string') {\n const splitted = insert.split('\\n');\n splitted.slice(0, -1).forEach((text) => {\n currentBlockDelta.insert(text, op.attributes);\n renderBlocks.push({\n type: 'block',\n delta: currentBlockDelta,\n attributes: op.attributes ?? {},\n });\n currentBlockDelta = new Delta();\n });\n const last = splitted[splitted.length - 1];\n if (last) {\n currentBlockDelta.insert(last, op.attributes);\n }\n } else {\n const key = Object.keys(insert)[0];\n if (!key) return;\n if (this.query(key, Scope.INLINE)) {\n currentBlockDelta.push(op);\n } else {\n if (currentBlockDelta.length()) {\n renderBlocks.push({\n type: 'block',\n delta: currentBlockDelta,\n attributes: {},\n });\n }\n currentBlockDelta = new Delta();\n renderBlocks.push({\n type: 'blockEmbed',\n key,\n value: insert[key],\n attributes: op.attributes ?? {},\n });\n }\n }\n });\n\n if (currentBlockDelta.length()) {\n renderBlocks.push({\n type: 'block',\n delta: currentBlockDelta,\n attributes: {},\n });\n }\n\n return renderBlocks;\n }\n\n private createBlock(attributes: AttributeMap, refBlot?: Blot) {\n let blotName: string | undefined;\n const formats: AttributeMap = {};\n\n Object.entries(attributes).forEach(([key, value]) => {\n const isBlockBlot = this.query(key, Scope.BLOCK & Scope.BLOT) != null;\n if (isBlockBlot) {\n blotName = key;\n } else {\n formats[key] = value;\n }\n });\n\n const block = this.create(\n blotName || this.statics.defaultChild.blotName,\n blotName ? attributes[blotName] : undefined,\n ) as ParentBlot;\n\n this.insertBefore(block, refBlot || undefined);\n\n const length = block.length();\n Object.entries(formats).forEach(([key, value]) => {\n block.formatAt(0, length, key, value);\n });\n\n return block;\n }\n}\n\nfunction insertInlineContents(\n parent: ParentBlot,\n index: number,\n inlineContents: Delta,\n) {\n inlineContents.reduce((index, op) => {\n const length = Op.length(op);\n let attributes = op.attributes || {};\n if (op.insert != null) {\n if (typeof op.insert === 'string') {\n const text = op.insert;\n parent.insertAt(index, text);\n const [leaf] = parent.descendant(LeafBlot, index);\n const formats = bubbleFormats(leaf);\n attributes = AttributeMap.diff(formats, attributes) || {};\n } else if (typeof op.insert === 'object') {\n const key = Object.keys(op.insert)[0]; // There should only be one key\n if (key == null) return index;\n parent.insertAt(index, key, op.insert[key]);\n const isInlineEmbed = parent.scroll.query(key, Scope.INLINE) != null;\n if (isInlineEmbed) {\n const [leaf] = parent.descendant(LeafBlot, index);\n const formats = bubbleFormats(leaf);\n attributes = AttributeMap.diff(formats, attributes) || {};\n }\n }\n }\n Object.keys(attributes).forEach((key) => {\n parent.formatAt(index, length, key, attributes[key]);\n });\n return index + length;\n }, index);\n}\n\nexport default Scroll;\n", "import type { ScrollBlot } from 'parchment';\nimport {\n Attributor,\n BlockBlot,\n ClassAttributor,\n EmbedBlot,\n Scope,\n StyleAttributor,\n} from 'parchment';\nimport Delta from 'quill-delta';\nimport { BlockEmbed } from '../blots/block.js';\nimport type { EmitterSource } from '../core/emitter.js';\nimport logger from '../core/logger.js';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nimport type { Range } from '../core/selection.js';\nimport { AlignAttribute, AlignStyle } from '../formats/align.js';\nimport { BackgroundStyle } from '../formats/background.js';\nimport CodeBlock from '../formats/code.js';\nimport { ColorStyle } from '../formats/color.js';\nimport { DirectionAttribute, DirectionStyle } from '../formats/direction.js';\nimport { FontStyle } from '../formats/font.js';\nimport { SizeStyle } from '../formats/size.js';\nimport { deleteRange } from './keyboard.js';\nimport normalizeExternalHTML from './normalizeExternalHTML/index.js';\n\nconst debug = logger('quill:clipboard');\n\ntype Selector = string | Node['TEXT_NODE'] | Node['ELEMENT_NODE'];\ntype Matcher = (node: Node, delta: Delta, scroll: ScrollBlot) => Delta;\n\nconst CLIPBOARD_CONFIG: [Selector, Matcher][] = [\n [Node.TEXT_NODE, matchText],\n [Node.TEXT_NODE, matchNewline],\n ['br', matchBreak],\n [Node.ELEMENT_NODE, matchNewline],\n [Node.ELEMENT_NODE, matchBlot],\n [Node.ELEMENT_NODE, matchAttributor],\n [Node.ELEMENT_NODE, matchStyles],\n ['li', matchIndent],\n ['ol, ul', matchList],\n ['pre', matchCodeBlock],\n ['tr', matchTable],\n ['b', createMatchAlias('bold')],\n ['i', createMatchAlias('italic')],\n ['strike', createMatchAlias('strike')],\n ['style', matchIgnore],\n];\n\nconst ATTRIBUTE_ATTRIBUTORS = [AlignAttribute, DirectionAttribute].reduce(\n (memo: Record, attr) => {\n memo[attr.keyName] = attr;\n return memo;\n },\n {},\n);\n\nconst STYLE_ATTRIBUTORS = [\n AlignStyle,\n BackgroundStyle,\n ColorStyle,\n DirectionStyle,\n FontStyle,\n SizeStyle,\n].reduce((memo: Record, attr) => {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\n\ninterface ClipboardOptions {\n matchers: [Selector, Matcher][];\n}\n\nclass Clipboard extends Module {\n static DEFAULTS: ClipboardOptions = {\n matchers: [],\n };\n\n matchers: [Selector, Matcher][];\n\n constructor(quill: Quill, options: Partial) {\n super(quill, options);\n this.quill.root.addEventListener('copy', (e) =>\n this.onCaptureCopy(e, false),\n );\n this.quill.root.addEventListener('cut', (e) => this.onCaptureCopy(e, true));\n this.quill.root.addEventListener('paste', this.onCapturePaste.bind(this));\n this.matchers = [];\n CLIPBOARD_CONFIG.concat(this.options.matchers ?? []).forEach(\n ([selector, matcher]) => {\n this.addMatcher(selector, matcher);\n },\n );\n }\n\n addMatcher(selector: Selector, matcher: Matcher) {\n this.matchers.push([selector, matcher]);\n }\n\n convert(\n { html, text }: { html?: string; text?: string },\n formats: Record = {},\n ) {\n if (formats[CodeBlock.blotName]) {\n return new Delta().insert(text || '', {\n [CodeBlock.blotName]: formats[CodeBlock.blotName],\n });\n }\n if (!html) {\n return new Delta().insert(text || '', formats);\n }\n const delta = this.convertHTML(html);\n // Remove trailing newline\n if (\n deltaEndsWith(delta, '\\n') &&\n (delta.ops[delta.ops.length - 1].attributes == null || formats.table)\n ) {\n return delta.compose(new Delta().retain(delta.length() - 1).delete(1));\n }\n return delta;\n }\n\n protected normalizeHTML(doc: Document) {\n normalizeExternalHTML(doc);\n }\n\n protected convertHTML(html: string) {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n this.normalizeHTML(doc);\n const container = doc.body;\n const nodeMatches = new WeakMap();\n const [elementMatchers, textMatchers] = this.prepareMatching(\n container,\n nodeMatches,\n );\n return traverse(\n this.quill.scroll,\n container,\n elementMatchers,\n textMatchers,\n nodeMatches,\n );\n }\n\n dangerouslyPasteHTML(html: string, source?: EmitterSource): void;\n dangerouslyPasteHTML(\n index: number,\n html: string,\n source?: EmitterSource,\n ): void;\n dangerouslyPasteHTML(\n index: number | string,\n html?: string,\n source: EmitterSource = Quill.sources.API,\n ) {\n if (typeof index === 'string') {\n const delta = this.convert({ html: index, text: '' });\n // @ts-expect-error\n this.quill.setContents(delta, html);\n this.quill.setSelection(0, Quill.sources.SILENT);\n } else {\n const paste = this.convert({ html, text: '' });\n this.quill.updateContents(\n new Delta().retain(index).concat(paste),\n source,\n );\n this.quill.setSelection(index + paste.length(), Quill.sources.SILENT);\n }\n }\n\n onCaptureCopy(e: ClipboardEvent, isCut = false) {\n if (e.defaultPrevented) return;\n e.preventDefault();\n const [range] = this.quill.selection.getRange();\n if (range == null) return;\n const { html, text } = this.onCopy(range, isCut);\n e.clipboardData?.setData('text/plain', text);\n e.clipboardData?.setData('text/html', html);\n if (isCut) {\n deleteRange({ range, quill: this.quill });\n }\n }\n\n /*\n * https://www.iana.org/assignments/media-types/text/uri-list\n */\n private normalizeURIList(urlList: string) {\n return (\n urlList\n .split(/\\r?\\n/)\n // Ignore all comments\n .filter((url) => url[0] !== '#')\n .join('\\n')\n );\n }\n\n onCapturePaste(e: ClipboardEvent) {\n if (e.defaultPrevented || !this.quill.isEnabled()) return;\n e.preventDefault();\n const range = this.quill.getSelection(true);\n if (range == null) return;\n const html = e.clipboardData?.getData('text/html');\n let text = e.clipboardData?.getData('text/plain');\n if (!html && !text) {\n const urlList = e.clipboardData?.getData('text/uri-list');\n if (urlList) {\n text = this.normalizeURIList(urlList);\n }\n }\n const files = Array.from(e.clipboardData?.files || []);\n if (!html && files.length > 0) {\n this.quill.uploader.upload(range, files);\n return;\n }\n if (html && files.length > 0) {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n if (\n doc.body.childElementCount === 1 &&\n doc.body.firstElementChild?.tagName === 'IMG'\n ) {\n this.quill.uploader.upload(range, files);\n return;\n }\n }\n this.onPaste(range, { html, text });\n }\n\n onCopy(range: Range, isCut: boolean): { html: string; text: string };\n onCopy(range: Range) {\n const text = this.quill.getText(range);\n const html = this.quill.getSemanticHTML(range);\n return { html, text };\n }\n\n onPaste(range: Range, { text, html }: { text?: string; html?: string }) {\n const formats = this.quill.getFormat(range.index);\n const pastedDelta = this.convert({ text, html }, formats);\n debug.log('onPaste', pastedDelta, { text, html });\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .concat(pastedDelta);\n this.quill.updateContents(delta, Quill.sources.USER);\n // range.length contributes to delta.length()\n this.quill.setSelection(\n delta.length() - range.length,\n Quill.sources.SILENT,\n );\n this.quill.scrollSelectionIntoView();\n }\n\n prepareMatching(container: Element, nodeMatches: WeakMap) {\n const elementMatchers: Matcher[] = [];\n const textMatchers: Matcher[] = [];\n this.matchers.forEach((pair) => {\n const [selector, matcher] = pair;\n switch (selector) {\n case Node.TEXT_NODE:\n textMatchers.push(matcher);\n break;\n case Node.ELEMENT_NODE:\n elementMatchers.push(matcher);\n break;\n default:\n Array.from(container.querySelectorAll(selector)).forEach((node) => {\n if (nodeMatches.has(node)) {\n const matches = nodeMatches.get(node);\n matches?.push(matcher);\n } else {\n nodeMatches.set(node, [matcher]);\n }\n });\n break;\n }\n });\n return [elementMatchers, textMatchers];\n }\n}\n\nfunction applyFormat(\n delta: Delta,\n format: string,\n value: unknown,\n scroll: ScrollBlot,\n): Delta {\n if (!scroll.query(format)) {\n return delta;\n }\n\n return delta.reduce((newDelta, op) => {\n if (!op.insert) return newDelta;\n if (op.attributes && op.attributes[format]) {\n return newDelta.push(op);\n }\n const formats = value ? { [format]: value } : {};\n return newDelta.insert(op.insert, { ...formats, ...op.attributes });\n }, new Delta());\n}\n\nfunction deltaEndsWith(delta: Delta, text: string) {\n let endText = '';\n for (\n let i = delta.ops.length - 1;\n i >= 0 && endText.length < text.length;\n --i // eslint-disable-line no-plusplus\n ) {\n const op = delta.ops[i];\n if (typeof op.insert !== 'string') break;\n endText = op.insert + endText;\n }\n return endText.slice(-1 * text.length) === text;\n}\n\nfunction isLine(node: Node, scroll: ScrollBlot) {\n if (!(node instanceof Element)) return false;\n const match = scroll.query(node);\n // @ts-expect-error\n if (match && match.prototype instanceof EmbedBlot) return false;\n\n return [\n 'address',\n 'article',\n 'blockquote',\n 'canvas',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'iframe',\n 'li',\n 'main',\n 'nav',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'section',\n 'table',\n 'td',\n 'tr',\n 'ul',\n 'video',\n ].includes(node.tagName.toLowerCase());\n}\n\nfunction isBetweenInlineElements(node: HTMLElement, scroll: ScrollBlot) {\n return (\n node.previousElementSibling &&\n node.nextElementSibling &&\n !isLine(node.previousElementSibling, scroll) &&\n !isLine(node.nextElementSibling, scroll)\n );\n}\n\nconst preNodes = new WeakMap();\nfunction isPre(node: Node | null) {\n if (node == null) return false;\n if (!preNodes.has(node)) {\n // @ts-expect-error\n if (node.tagName === 'PRE') {\n preNodes.set(node, true);\n } else {\n preNodes.set(node, isPre(node.parentNode));\n }\n }\n return preNodes.get(node);\n}\n\nfunction traverse(\n scroll: ScrollBlot,\n node: ChildNode,\n elementMatchers: Matcher[],\n textMatchers: Matcher[],\n nodeMatches: WeakMap,\n): Delta {\n // Post-order\n if (node.nodeType === node.TEXT_NODE) {\n return textMatchers.reduce((delta: Delta, matcher) => {\n return matcher(node, delta, scroll);\n }, new Delta());\n }\n if (node.nodeType === node.ELEMENT_NODE) {\n return Array.from(node.childNodes || []).reduce((delta, childNode) => {\n let childrenDelta = traverse(\n scroll,\n childNode,\n elementMatchers,\n textMatchers,\n nodeMatches,\n );\n if (childNode.nodeType === node.ELEMENT_NODE) {\n childrenDelta = elementMatchers.reduce((reducedDelta, matcher) => {\n return matcher(childNode as HTMLElement, reducedDelta, scroll);\n }, childrenDelta);\n childrenDelta = (nodeMatches.get(childNode) || []).reduce(\n (reducedDelta, matcher) => {\n return matcher(childNode, reducedDelta, scroll);\n },\n childrenDelta,\n );\n }\n return delta.concat(childrenDelta);\n }, new Delta());\n }\n return new Delta();\n}\n\nfunction createMatchAlias(format: string) {\n return (_node: Element, delta: Delta, scroll: ScrollBlot) => {\n return applyFormat(delta, format, true, scroll);\n };\n}\n\nfunction matchAttributor(node: HTMLElement, delta: Delta, scroll: ScrollBlot) {\n const attributes = Attributor.keys(node);\n const classes = ClassAttributor.keys(node);\n const styles = StyleAttributor.keys(node);\n const formats: Record = {};\n attributes\n .concat(classes)\n .concat(styles)\n .forEach((name) => {\n let attr = scroll.query(name, Scope.ATTRIBUTE) as Attributor;\n if (attr != null) {\n formats[attr.attrName] = attr.value(node);\n if (formats[attr.attrName]) return;\n }\n attr = ATTRIBUTE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n attr = STYLE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n attr = STYLE_ATTRIBUTORS[name];\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n });\n\n return Object.entries(formats).reduce(\n (newDelta, [name, value]) => applyFormat(newDelta, name, value, scroll),\n delta,\n );\n}\n\nfunction matchBlot(node: Node, delta: Delta, scroll: ScrollBlot) {\n const match = scroll.query(node);\n if (match == null) return delta;\n // @ts-expect-error\n if (match.prototype instanceof EmbedBlot) {\n const embed = {};\n // @ts-expect-error\n const value = match.value(node);\n if (value != null) {\n // @ts-expect-error\n embed[match.blotName] = value;\n // @ts-expect-error\n return new Delta().insert(embed, match.formats(node, scroll));\n }\n } else {\n // @ts-expect-error\n if (match.prototype instanceof BlockBlot && !deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n if (\n 'blotName' in match &&\n 'formats' in match &&\n typeof match.formats === 'function'\n ) {\n return applyFormat(\n delta,\n match.blotName,\n match.formats(node, scroll),\n scroll,\n );\n }\n }\n return delta;\n}\n\nfunction matchBreak(node: Node, delta: Delta) {\n if (!deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n return delta;\n}\n\nfunction matchCodeBlock(node: Node, delta: Delta, scroll: ScrollBlot) {\n const match = scroll.query('code-block');\n const language =\n match && 'formats' in match && typeof match.formats === 'function'\n ? match.formats(node, scroll)\n : true;\n return applyFormat(delta, 'code-block', language, scroll);\n}\n\nfunction matchIgnore() {\n return new Delta();\n}\n\nfunction matchIndent(node: Node, delta: Delta, scroll: ScrollBlot) {\n const match = scroll.query(node);\n if (\n match == null ||\n // @ts-expect-error\n match.blotName !== 'list' ||\n !deltaEndsWith(delta, '\\n')\n ) {\n return delta;\n }\n let indent = -1;\n let parent = node.parentNode;\n while (parent != null) {\n // @ts-expect-error\n if (['OL', 'UL'].includes(parent.tagName)) {\n indent += 1;\n }\n parent = parent.parentNode;\n }\n if (indent <= 0) return delta;\n return delta.reduce((composed, op) => {\n if (!op.insert) return composed;\n if (op.attributes && typeof op.attributes.indent === 'number') {\n return composed.push(op);\n }\n return composed.insert(op.insert, { indent, ...(op.attributes || {}) });\n }, new Delta());\n}\n\nfunction matchList(node: Node, delta: Delta, scroll: ScrollBlot) {\n const element = node as Element;\n let list = element.tagName === 'OL' ? 'ordered' : 'bullet';\n\n const checkedAttr = element.getAttribute('data-checked');\n if (checkedAttr) {\n list = checkedAttr === 'true' ? 'checked' : 'unchecked';\n }\n\n return applyFormat(delta, 'list', list, scroll);\n}\n\nfunction matchNewline(node: Node, delta: Delta, scroll: ScrollBlot) {\n if (!deltaEndsWith(delta, '\\n')) {\n if (\n isLine(node, scroll) &&\n (node.childNodes.length > 0 || node instanceof HTMLParagraphElement)\n ) {\n return delta.insert('\\n');\n }\n if (delta.length() > 0 && node.nextSibling) {\n let nextSibling: Node | null = node.nextSibling;\n while (nextSibling != null) {\n if (isLine(nextSibling, scroll)) {\n return delta.insert('\\n');\n }\n const match = scroll.query(nextSibling);\n // @ts-expect-error\n if (match && match.prototype instanceof BlockEmbed) {\n return delta.insert('\\n');\n }\n nextSibling = nextSibling.firstChild;\n }\n }\n }\n return delta;\n}\n\nfunction matchStyles(node: HTMLElement, delta: Delta, scroll: ScrollBlot) {\n const formats: Record = {};\n const style: Partial = node.style || {};\n if (style.fontStyle === 'italic') {\n formats.italic = true;\n }\n if (style.textDecoration === 'underline') {\n formats.underline = true;\n }\n if (style.textDecoration === 'line-through') {\n formats.strike = true;\n }\n if (\n style.fontWeight?.startsWith('bold') ||\n // @ts-expect-error Fix me later\n parseInt(style.fontWeight, 10) >= 700\n ) {\n formats.bold = true;\n }\n delta = Object.entries(formats).reduce(\n (newDelta, [name, value]) => applyFormat(newDelta, name, value, scroll),\n delta,\n );\n // @ts-expect-error\n if (parseFloat(style.textIndent || 0) > 0) {\n // Could be 0.5in\n return new Delta().insert('\\t').concat(delta);\n }\n return delta;\n}\n\nfunction matchTable(\n node: HTMLTableRowElement,\n delta: Delta,\n scroll: ScrollBlot,\n) {\n const table =\n node.parentElement?.tagName === 'TABLE'\n ? node.parentElement\n : node.parentElement?.parentElement;\n if (table != null) {\n const rows = Array.from(table.querySelectorAll('tr'));\n const row = rows.indexOf(node) + 1;\n return applyFormat(delta, 'table', row, scroll);\n }\n return delta;\n}\n\nfunction matchText(node: HTMLElement, delta: Delta, scroll: ScrollBlot) {\n // @ts-expect-error\n let text = node.data as string;\n // Word represents empty line with  \n if (node.parentElement?.tagName === 'O:P') {\n return delta.insert(text.trim());\n }\n if (!isPre(node)) {\n if (\n text.trim().length === 0 &&\n text.includes('\\n') &&\n !isBetweenInlineElements(node, scroll)\n ) {\n return delta;\n }\n // convert all non-nbsp whitespace into regular space\n text = text.replace(/[^\\S\\u00a0]/g, ' ');\n // collapse consecutive spaces into one\n text = text.replace(/ {2,}/g, ' ');\n if (\n (node.previousSibling == null &&\n node.parentElement != null &&\n isLine(node.parentElement, scroll)) ||\n (node.previousSibling instanceof Element &&\n isLine(node.previousSibling, scroll))\n ) {\n // block structure means we don't need leading space\n text = text.replace(/^ /, '');\n }\n if (\n (node.nextSibling == null &&\n node.parentElement != null &&\n isLine(node.parentElement, scroll)) ||\n (node.nextSibling instanceof Element && isLine(node.nextSibling, scroll))\n ) {\n // block structure means we don't need trailing space\n text = text.replace(/ $/, '');\n }\n // done removing whitespace and can normalize all to regular space\n text = text.replaceAll('\\u00a0', ' ');\n }\n return delta.insert(text);\n}\n\nexport {\n Clipboard as default,\n matchAttributor,\n matchBlot,\n matchNewline,\n matchText,\n traverse,\n};\n", "import { Attributor, ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nconst config = {\n scope: Scope.BLOCK,\n whitelist: ['right', 'center', 'justify'],\n};\n\nconst AlignAttribute = new Attributor('align', 'align', config);\nconst AlignClass = new ClassAttributor('align', 'ql-align', config);\nconst AlignStyle = new StyleAttributor('align', 'text-align', config);\n\nexport { AlignAttribute, AlignClass, AlignStyle };\n", "import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nclass ColorAttributor extends StyleAttributor {\n value(domNode: HTMLElement) {\n let value = super.value(domNode) as string;\n if (!value.startsWith('rgb(')) return value;\n value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n const hex = value\n .split(',')\n .map((component) => `00${parseInt(component, 10).toString(16)}`.slice(-2))\n .join('');\n return `#${hex}`;\n }\n}\n\nconst ColorClass = new ClassAttributor('color', 'ql-color', {\n scope: Scope.INLINE,\n});\nconst ColorStyle = new ColorAttributor('color', 'color', {\n scope: Scope.INLINE,\n});\n\nexport { ColorAttributor, ColorClass, ColorStyle };\n", "import { ClassAttributor, Scope } from 'parchment';\nimport { ColorAttributor } from './color.js';\n\nconst BackgroundClass = new ClassAttributor('background', 'ql-bg', {\n scope: Scope.INLINE,\n});\nconst BackgroundStyle = new ColorAttributor('background', 'background-color', {\n scope: Scope.INLINE,\n});\n\nexport { BackgroundClass, BackgroundStyle };\n", "import Block from '../blots/block.js';\nimport Break from '../blots/break.js';\nimport Cursor from '../blots/cursor.js';\nimport Inline from '../blots/inline.js';\nimport TextBlot, { escapeText } from '../blots/text.js';\nimport Container from '../blots/container.js';\nimport Quill from '../core/quill.js';\n\nclass CodeBlockContainer extends Container {\n static create(value: string) {\n const domNode = super.create(value) as Element;\n domNode.setAttribute('spellcheck', 'false');\n return domNode;\n }\n\n code(index: number, length: number) {\n return (\n this.children\n // @ts-expect-error\n .map((child) => (child.length() <= 1 ? '' : child.domNode.innerText))\n .join('\\n')\n .slice(index, index + length)\n );\n }\n\n html(index: number, length: number) {\n // `\\n`s are needed in order to support empty lines at the beginning and the end.\n // https://html.spec.whatwg.org/multipage/syntax.html#element-restrictions\n return `
    \\n${escapeText(this.code(index, length))}\\n
    `;\n }\n}\n\nclass CodeBlock extends Block {\n static TAB = ' ';\n\n static register() {\n Quill.register(CodeBlockContainer);\n }\n}\n\nclass Code extends Inline {}\nCode.blotName = 'code';\nCode.tagName = 'CODE';\n\nCodeBlock.blotName = 'code-block';\nCodeBlock.className = 'ql-code-block';\nCodeBlock.tagName = 'DIV';\nCodeBlockContainer.blotName = 'code-block-container';\nCodeBlockContainer.className = 'ql-code-block-container';\nCodeBlockContainer.tagName = 'DIV';\n\nCodeBlockContainer.allowedChildren = [CodeBlock];\n\nCodeBlock.allowedChildren = [TextBlot, Break, Cursor];\nCodeBlock.requiredContainer = CodeBlockContainer;\n\nexport { Code, CodeBlockContainer, CodeBlock as default };\n", "import { Attributor, ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nconst config = {\n scope: Scope.BLOCK,\n whitelist: ['rtl'],\n};\n\nconst DirectionAttribute = new Attributor('direction', 'dir', config);\nconst DirectionClass = new ClassAttributor('direction', 'ql-direction', config);\nconst DirectionStyle = new StyleAttributor('direction', 'direction', config);\n\nexport { DirectionAttribute, DirectionClass, DirectionStyle };\n", "import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nconst config = {\n scope: Scope.INLINE,\n whitelist: ['serif', 'monospace'],\n};\n\nconst FontClass = new ClassAttributor('font', 'ql-font', config);\n\nclass FontStyleAttributor extends StyleAttributor {\n value(node: HTMLElement) {\n return super.value(node).replace(/[\"']/g, '');\n }\n}\n\nconst FontStyle = new FontStyleAttributor('font', 'font-family', config);\n\nexport { FontStyle, FontClass };\n", "import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nconst SizeClass = new ClassAttributor('size', 'ql-size', {\n scope: Scope.INLINE,\n whitelist: ['small', 'large', 'huge'],\n});\nconst SizeStyle = new StyleAttributor('size', 'font-size', {\n scope: Scope.INLINE,\n whitelist: ['10px', '18px', '32px'],\n});\n\nexport { SizeClass, SizeStyle };\n", "import { cloneDeep, isEqual } from 'lodash-es';\nimport Delta, { AttributeMap } from 'quill-delta';\nimport { EmbedBlot, Scope, TextBlot } from 'parchment';\nimport type { Blot, BlockBlot } from 'parchment';\nimport Quill from '../core/quill.js';\nimport logger from '../core/logger.js';\nimport Module from '../core/module.js';\nimport type { BlockEmbed } from '../blots/block.js';\nimport type { Range } from '../core/selection.js';\n\nconst debug = logger('quill:keyboard');\n\nconst SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\n\nexport interface Context {\n collapsed: boolean;\n empty: boolean;\n offset: number;\n prefix: string;\n suffix: string;\n format: Record;\n event: KeyboardEvent;\n line: BlockEmbed | BlockBlot;\n}\n\ninterface BindingObject\n extends Partial> {\n key: number | string | string[];\n shortKey?: boolean | null;\n shiftKey?: boolean | null;\n altKey?: boolean | null;\n metaKey?: boolean | null;\n ctrlKey?: boolean | null;\n prefix?: RegExp;\n suffix?: RegExp;\n format?: Record | string[];\n handler?: (\n this: { quill: Quill },\n range: Range,\n curContext: Context,\n // eslint-disable-next-line no-use-before-define\n binding: NormalizedBinding,\n ) => boolean | void;\n}\n\ntype Binding = BindingObject | string | number;\n\ninterface NormalizedBinding extends Omit {\n key: string | number;\n}\n\ninterface KeyboardOptions {\n bindings: Record;\n}\n\ninterface KeyboardOptions {\n bindings: Record;\n}\n\nclass Keyboard extends Module {\n static DEFAULTS: KeyboardOptions;\n\n static match(evt: KeyboardEvent, binding: BindingObject) {\n if (\n (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'] as const).some((key) => {\n return !!binding[key] !== evt[key] && binding[key] !== null;\n })\n ) {\n return false;\n }\n return binding.key === evt.key || binding.key === evt.which;\n }\n\n bindings: Record;\n\n constructor(quill: Quill, options: Partial) {\n super(quill, options);\n this.bindings = {};\n // @ts-expect-error Fix me later\n Object.keys(this.options.bindings).forEach((name) => {\n // @ts-expect-error Fix me later\n if (this.options.bindings[name]) {\n // @ts-expect-error Fix me later\n this.addBinding(this.options.bindings[name]);\n }\n });\n this.addBinding({ key: 'Enter', shiftKey: null }, this.handleEnter);\n this.addBinding(\n { key: 'Enter', metaKey: null, ctrlKey: null, altKey: null },\n () => {},\n );\n if (/Firefox/i.test(navigator.userAgent)) {\n // Need to handle delete and backspace for Firefox in the general case #1171\n this.addBinding(\n { key: 'Backspace' },\n { collapsed: true },\n this.handleBackspace,\n );\n this.addBinding(\n { key: 'Delete' },\n { collapsed: true },\n this.handleDelete,\n );\n } else {\n this.addBinding(\n { key: 'Backspace' },\n { collapsed: true, prefix: /^.?$/ },\n this.handleBackspace,\n );\n this.addBinding(\n { key: 'Delete' },\n { collapsed: true, suffix: /^.?$/ },\n this.handleDelete,\n );\n }\n this.addBinding(\n { key: 'Backspace' },\n { collapsed: false },\n this.handleDeleteRange,\n );\n this.addBinding(\n { key: 'Delete' },\n { collapsed: false },\n this.handleDeleteRange,\n );\n this.addBinding(\n {\n key: 'Backspace',\n altKey: null,\n ctrlKey: null,\n metaKey: null,\n shiftKey: null,\n },\n { collapsed: true, offset: 0 },\n this.handleBackspace,\n );\n this.listen();\n }\n\n addBinding(\n keyBinding: Binding,\n context:\n | Required\n | Partial> = {},\n handler:\n | Required\n | Partial> = {},\n ) {\n const binding = normalize(keyBinding);\n if (binding == null) {\n debug.warn('Attempted to add invalid keyboard binding', binding);\n return;\n }\n if (typeof context === 'function') {\n context = { handler: context };\n }\n if (typeof handler === 'function') {\n handler = { handler };\n }\n const keys = Array.isArray(binding.key) ? binding.key : [binding.key];\n keys.forEach((key) => {\n const singleBinding = {\n ...binding,\n key,\n ...context,\n ...handler,\n };\n this.bindings[singleBinding.key] = this.bindings[singleBinding.key] || [];\n this.bindings[singleBinding.key].push(singleBinding);\n });\n }\n\n listen() {\n this.quill.root.addEventListener('keydown', (evt) => {\n if (evt.defaultPrevented || evt.isComposing) return;\n\n // evt.isComposing is false when pressing Enter/Backspace when composing in Safari\n // https://bugs.webkit.org/show_bug.cgi?id=165004\n const isComposing =\n evt.keyCode === 229 && (evt.key === 'Enter' || evt.key === 'Backspace');\n if (isComposing) return;\n\n const bindings = (this.bindings[evt.key] || []).concat(\n this.bindings[evt.which] || [],\n );\n const matches = bindings.filter((binding) =>\n Keyboard.match(evt, binding),\n );\n if (matches.length === 0) return;\n // @ts-expect-error\n const blot = Quill.find(evt.target, true);\n if (blot && blot.scroll !== this.quill.scroll) return;\n const range = this.quill.getSelection();\n if (range == null || !this.quill.hasFocus()) return;\n const [line, offset] = this.quill.getLine(range.index);\n const [leafStart, offsetStart] = this.quill.getLeaf(range.index);\n const [leafEnd, offsetEnd] =\n range.length === 0\n ? [leafStart, offsetStart]\n : this.quill.getLeaf(range.index + range.length);\n const prefixText =\n leafStart instanceof TextBlot\n ? leafStart.value().slice(0, offsetStart)\n : '';\n const suffixText =\n leafEnd instanceof TextBlot ? leafEnd.value().slice(offsetEnd) : '';\n const curContext = {\n collapsed: range.length === 0,\n // @ts-expect-error Fix me later\n empty: range.length === 0 && line.length() <= 1,\n format: this.quill.getFormat(range),\n line,\n offset,\n prefix: prefixText,\n suffix: suffixText,\n event: evt,\n };\n const prevented = matches.some((binding) => {\n if (\n binding.collapsed != null &&\n binding.collapsed !== curContext.collapsed\n ) {\n return false;\n }\n if (binding.empty != null && binding.empty !== curContext.empty) {\n return false;\n }\n if (binding.offset != null && binding.offset !== curContext.offset) {\n return false;\n }\n if (Array.isArray(binding.format)) {\n // any format is present\n if (binding.format.every((name) => curContext.format[name] == null)) {\n return false;\n }\n } else if (typeof binding.format === 'object') {\n // all formats must match\n if (\n !Object.keys(binding.format).every((name) => {\n // @ts-expect-error Fix me later\n if (binding.format[name] === true)\n return curContext.format[name] != null;\n // @ts-expect-error Fix me later\n if (binding.format[name] === false)\n return curContext.format[name] == null;\n // @ts-expect-error Fix me later\n return isEqual(binding.format[name], curContext.format[name]);\n })\n ) {\n return false;\n }\n }\n if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) {\n return false;\n }\n if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) {\n return false;\n }\n // @ts-expect-error Fix me later\n return binding.handler.call(this, range, curContext, binding) !== true;\n });\n if (prevented) {\n evt.preventDefault();\n }\n });\n }\n\n handleBackspace(range: Range, context: Context) {\n // Check for astral symbols\n const length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix)\n ? 2\n : 1;\n if (range.index === 0 || this.quill.getLength() <= 1) return;\n let formats = {};\n const [line] = this.quill.getLine(range.index);\n let delta = new Delta().retain(range.index - length).delete(length);\n if (context.offset === 0) {\n // Always deleting newline here, length always 1\n const [prev] = this.quill.getLine(range.index - 1);\n if (prev) {\n const isPrevLineEmpty =\n prev.statics.blotName === 'block' && prev.length() <= 1;\n if (!isPrevLineEmpty) {\n // @ts-expect-error Fix me later\n const curFormats = line.formats();\n const prevFormats = this.quill.getFormat(range.index - 1, 1);\n formats = AttributeMap.diff(curFormats, prevFormats) || {};\n if (Object.keys(formats).length > 0) {\n // line.length() - 1 targets \\n in line, another -1 for newline being deleted\n const formatDelta = new Delta()\n // @ts-expect-error Fix me later\n .retain(range.index + line.length() - 2)\n .retain(1, formats);\n delta = delta.compose(formatDelta);\n }\n }\n }\n }\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.focus();\n }\n\n handleDelete(range: Range, context: Context) {\n // Check for astral symbols\n const length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix)\n ? 2\n : 1;\n if (range.index >= this.quill.getLength() - length) return;\n let formats = {};\n const [line] = this.quill.getLine(range.index);\n let delta = new Delta().retain(range.index).delete(length);\n // @ts-expect-error Fix me later\n if (context.offset >= line.length() - 1) {\n const [next] = this.quill.getLine(range.index + 1);\n if (next) {\n // @ts-expect-error Fix me later\n const curFormats = line.formats();\n const nextFormats = this.quill.getFormat(range.index, 1);\n formats = AttributeMap.diff(curFormats, nextFormats) || {};\n if (Object.keys(formats).length > 0) {\n delta = delta.retain(next.length() - 1).retain(1, formats);\n }\n }\n }\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.focus();\n }\n\n handleDeleteRange(range: Range) {\n deleteRange({ range, quill: this.quill });\n this.quill.focus();\n }\n\n handleEnter(range: Range, context: Context) {\n const lineFormats = Object.keys(context.format).reduce(\n (formats: Record, format) => {\n if (\n this.quill.scroll.query(format, Scope.BLOCK) &&\n !Array.isArray(context.format[format])\n ) {\n formats[format] = context.format[format];\n }\n return formats;\n },\n {},\n );\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert('\\n', lineFormats);\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.focus();\n }\n}\n\nconst defaultOptions: KeyboardOptions = {\n bindings: {\n bold: makeFormatHandler('bold'),\n italic: makeFormatHandler('italic'),\n underline: makeFormatHandler('underline'),\n indent: {\n // highlight tab or tab at beginning of list, indent or blockquote\n key: 'Tab',\n format: ['blockquote', 'indent', 'list'],\n handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '+1', Quill.sources.USER);\n return false;\n },\n },\n outdent: {\n key: 'Tab',\n shiftKey: true,\n format: ['blockquote', 'indent', 'list'],\n // highlight tab or tab at beginning of list, indent or blockquote\n handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '-1', Quill.sources.USER);\n return false;\n },\n },\n 'outdent backspace': {\n key: 'Backspace',\n collapsed: true,\n shiftKey: null,\n metaKey: null,\n ctrlKey: null,\n altKey: null,\n format: ['indent', 'list'],\n offset: 0,\n handler(range, context) {\n if (context.format.indent != null) {\n this.quill.format('indent', '-1', Quill.sources.USER);\n } else if (context.format.list != null) {\n this.quill.format('list', false, Quill.sources.USER);\n }\n },\n },\n 'indent code-block': makeCodeBlockHandler(true),\n 'outdent code-block': makeCodeBlockHandler(false),\n 'remove tab': {\n key: 'Tab',\n shiftKey: true,\n collapsed: true,\n prefix: /\\t$/,\n handler(range) {\n this.quill.deleteText(range.index - 1, 1, Quill.sources.USER);\n },\n },\n tab: {\n key: 'Tab',\n handler(range, context) {\n if (context.format.table) return true;\n this.quill.history.cutoff();\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert('\\t');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n return false;\n },\n },\n 'blockquote empty enter': {\n key: 'Enter',\n collapsed: true,\n format: ['blockquote'],\n empty: true,\n handler() {\n this.quill.format('blockquote', false, Quill.sources.USER);\n },\n },\n 'list empty enter': {\n key: 'Enter',\n collapsed: true,\n format: ['list'],\n empty: true,\n handler(range, context) {\n const formats: Record = { list: false };\n if (context.format.indent) {\n formats.indent = false;\n }\n this.quill.formatLine(\n range.index,\n range.length,\n formats,\n Quill.sources.USER,\n );\n },\n },\n 'checklist enter': {\n key: 'Enter',\n collapsed: true,\n format: { list: 'checked' },\n handler(range) {\n const [line, offset] = this.quill.getLine(range.index);\n const formats = {\n // @ts-expect-error Fix me later\n ...line.formats(),\n list: 'checked',\n };\n const delta = new Delta()\n .retain(range.index)\n .insert('\\n', formats)\n // @ts-expect-error Fix me later\n .retain(line.length() - offset - 1)\n .retain(1, { list: 'unchecked' });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollSelectionIntoView();\n },\n },\n 'header enter': {\n key: 'Enter',\n collapsed: true,\n format: ['header'],\n suffix: /^$/,\n handler(range, context) {\n const [line, offset] = this.quill.getLine(range.index);\n const delta = new Delta()\n .retain(range.index)\n .insert('\\n', context.format)\n // @ts-expect-error Fix me later\n .retain(line.length() - offset - 1)\n .retain(1, { header: null });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollSelectionIntoView();\n },\n },\n 'table backspace': {\n key: 'Backspace',\n format: ['table'],\n collapsed: true,\n offset: 0,\n handler() {},\n },\n 'table delete': {\n key: 'Delete',\n format: ['table'],\n collapsed: true,\n suffix: /^$/,\n handler() {},\n },\n 'table enter': {\n key: 'Enter',\n shiftKey: null,\n format: ['table'],\n handler(range) {\n const module = this.quill.getModule('table');\n if (module) {\n // @ts-expect-error\n const [table, row, cell, offset] = module.getTable(range);\n const shift = tableSide(table, row, cell, offset);\n if (shift == null) return;\n let index = table.offset();\n if (shift < 0) {\n const delta = new Delta().retain(index).insert('\\n');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(\n range.index + 1,\n range.length,\n Quill.sources.SILENT,\n );\n } else if (shift > 0) {\n index += table.length();\n const delta = new Delta().retain(index).insert('\\n');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(index, Quill.sources.USER);\n }\n }\n },\n },\n 'table tab': {\n key: 'Tab',\n shiftKey: null,\n format: ['table'],\n handler(range, context) {\n const { event, line: cell } = context;\n const offset = cell.offset(this.quill.scroll);\n if (event.shiftKey) {\n this.quill.setSelection(offset - 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(offset + cell.length(), Quill.sources.USER);\n }\n },\n },\n 'list autofill': {\n key: ' ',\n shiftKey: null,\n collapsed: true,\n format: {\n 'code-block': false,\n blockquote: false,\n table: false,\n },\n prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n handler(range, context) {\n if (this.quill.scroll.query('list') == null) return true;\n const { length } = context.prefix;\n const [line, offset] = this.quill.getLine(range.index);\n if (offset > length) return true;\n let value;\n switch (context.prefix.trim()) {\n case '[]':\n case '[ ]':\n value = 'unchecked';\n break;\n case '[x]':\n value = 'checked';\n break;\n case '-':\n case '*':\n value = 'bullet';\n break;\n default:\n value = 'ordered';\n }\n this.quill.insertText(range.index, ' ', Quill.sources.USER);\n this.quill.history.cutoff();\n const delta = new Delta()\n .retain(range.index - offset)\n .delete(length + 1)\n // @ts-expect-error Fix me later\n .retain(line.length() - 2 - offset)\n .retain(1, { list: value });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index - length, Quill.sources.SILENT);\n return false;\n },\n },\n 'code exit': {\n key: 'Enter',\n collapsed: true,\n format: ['code-block'],\n prefix: /^$/,\n suffix: /^\\s*$/,\n handler(range) {\n const [line, offset] = this.quill.getLine(range.index);\n let numLines = 2;\n let cur = line;\n while (\n cur != null &&\n cur.length() <= 1 &&\n cur.formats()['code-block']\n ) {\n // @ts-expect-error\n cur = cur.prev;\n numLines -= 1;\n // Requisite prev lines are empty\n if (numLines <= 0) {\n const delta = new Delta()\n // @ts-expect-error Fix me later\n .retain(range.index + line.length() - offset - 2)\n .retain(1, { 'code-block': null })\n .delete(1);\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index - 1, Quill.sources.SILENT);\n return false;\n }\n }\n return true;\n },\n },\n 'embed left': makeEmbedArrowHandler('ArrowLeft', false),\n 'embed left shift': makeEmbedArrowHandler('ArrowLeft', true),\n 'embed right': makeEmbedArrowHandler('ArrowRight', false),\n 'embed right shift': makeEmbedArrowHandler('ArrowRight', true),\n 'table down': makeTableArrowHandler(false),\n 'table up': makeTableArrowHandler(true),\n },\n};\n\nKeyboard.DEFAULTS = defaultOptions;\n\nfunction makeCodeBlockHandler(indent: boolean): BindingObject {\n return {\n key: 'Tab',\n shiftKey: !indent,\n format: { 'code-block': true },\n handler(range, { event }) {\n const CodeBlock = this.quill.scroll.query('code-block');\n // @ts-expect-error\n const { TAB } = CodeBlock;\n if (range.length === 0 && !event.shiftKey) {\n this.quill.insertText(range.index, TAB, Quill.sources.USER);\n this.quill.setSelection(range.index + TAB.length, Quill.sources.SILENT);\n return;\n }\n\n const lines =\n range.length === 0\n ? this.quill.getLines(range.index, 1)\n : this.quill.getLines(range);\n let { index, length } = range;\n lines.forEach((line, i) => {\n if (indent) {\n line.insertAt(0, TAB);\n if (i === 0) {\n index += TAB.length;\n } else {\n length += TAB.length;\n }\n // @ts-expect-error Fix me later\n } else if (line.domNode.textContent.startsWith(TAB)) {\n line.deleteAt(0, TAB.length);\n if (i === 0) {\n index -= TAB.length;\n } else {\n length -= TAB.length;\n }\n }\n });\n this.quill.update(Quill.sources.USER);\n this.quill.setSelection(index, length, Quill.sources.SILENT);\n },\n };\n}\n\nfunction makeEmbedArrowHandler(\n key: string,\n shiftKey: boolean | null,\n): BindingObject {\n const where = key === 'ArrowLeft' ? 'prefix' : 'suffix';\n return {\n key,\n shiftKey,\n altKey: null,\n [where]: /^$/,\n handler(range) {\n let { index } = range;\n if (key === 'ArrowRight') {\n index += range.length + 1;\n }\n const [leaf] = this.quill.getLeaf(index);\n if (!(leaf instanceof EmbedBlot)) return true;\n if (key === 'ArrowLeft') {\n if (shiftKey) {\n this.quill.setSelection(\n range.index - 1,\n range.length + 1,\n Quill.sources.USER,\n );\n } else {\n this.quill.setSelection(range.index - 1, Quill.sources.USER);\n }\n } else if (shiftKey) {\n this.quill.setSelection(\n range.index,\n range.length + 1,\n Quill.sources.USER,\n );\n } else {\n this.quill.setSelection(\n range.index + range.length + 1,\n Quill.sources.USER,\n );\n }\n return false;\n },\n };\n}\n\nfunction makeFormatHandler(format: string): BindingObject {\n return {\n key: format[0],\n shortKey: true,\n handler(range, context) {\n this.quill.format(format, !context.format[format], Quill.sources.USER);\n },\n };\n}\n\nfunction makeTableArrowHandler(up: boolean): BindingObject {\n return {\n key: up ? 'ArrowUp' : 'ArrowDown',\n collapsed: true,\n format: ['table'],\n handler(range, context) {\n // TODO move to table module\n const key = up ? 'prev' : 'next';\n const cell = context.line;\n const targetRow = cell.parent[key];\n if (targetRow != null) {\n if (targetRow.statics.blotName === 'table-row') {\n // @ts-expect-error\n let targetCell = targetRow.children.head;\n let cur = cell;\n while (cur.prev != null) {\n // @ts-expect-error\n cur = cur.prev;\n targetCell = targetCell.next;\n }\n const index =\n targetCell.offset(this.quill.scroll) +\n Math.min(context.offset, targetCell.length() - 1);\n this.quill.setSelection(index, 0, Quill.sources.USER);\n }\n } else {\n // @ts-expect-error\n const targetLine = cell.table()[key];\n if (targetLine != null) {\n if (up) {\n this.quill.setSelection(\n targetLine.offset(this.quill.scroll) + targetLine.length() - 1,\n 0,\n Quill.sources.USER,\n );\n } else {\n this.quill.setSelection(\n targetLine.offset(this.quill.scroll),\n 0,\n Quill.sources.USER,\n );\n }\n }\n }\n return false;\n },\n };\n}\n\nfunction normalize(binding: Binding): BindingObject | null {\n if (typeof binding === 'string' || typeof binding === 'number') {\n binding = { key: binding };\n } else if (typeof binding === 'object') {\n binding = cloneDeep(binding);\n } else {\n return null;\n }\n if (binding.shortKey) {\n binding[SHORTKEY] = binding.shortKey;\n delete binding.shortKey;\n }\n return binding;\n}\n\n// TODO: Move into quill.ts or editor.ts\nfunction deleteRange({ quill, range }: { quill: Quill; range: Range }) {\n const lines = quill.getLines(range);\n let formats = {};\n if (lines.length > 1) {\n const firstFormats = lines[0].formats();\n const lastFormats = lines[lines.length - 1].formats();\n formats = AttributeMap.diff(lastFormats, firstFormats) || {};\n }\n quill.deleteText(range, Quill.sources.USER);\n if (Object.keys(formats).length > 0) {\n quill.formatLine(range.index, 1, formats, Quill.sources.USER);\n }\n quill.setSelection(range.index, Quill.sources.SILENT);\n}\n\nfunction tableSide(_table: unknown, row: Blot, cell: Blot, offset: number) {\n if (row.prev == null && row.next == null) {\n if (cell.prev == null && cell.next == null) {\n return offset === 0 ? -1 : 1;\n }\n return cell.prev == null ? -1 : 1;\n }\n if (row.prev == null) {\n return -1;\n }\n if (row.next == null) {\n return 1;\n }\n return null;\n}\n\nexport { Keyboard as default, SHORTKEY, normalize, deleteRange };\n", "const normalWeightRegexp = /font-weight:\\s*normal/;\nconst blockTagNames = ['P', 'OL', 'UL'];\n\nconst isBlockElement = (element: Element | null) => {\n return element && blockTagNames.includes(element.tagName);\n};\n\nconst normalizeEmptyLines = (doc: Document) => {\n Array.from(doc.querySelectorAll('br'))\n .filter(\n (br) =>\n isBlockElement(br.previousElementSibling) &&\n isBlockElement(br.nextElementSibling),\n )\n .forEach((br) => {\n br.parentNode?.removeChild(br);\n });\n};\n\nconst normalizeFontWeight = (doc: Document) => {\n Array.from(doc.querySelectorAll('b[style*=\"font-weight\"]'))\n .filter((node) => node.getAttribute('style')?.match(normalWeightRegexp))\n .forEach((node) => {\n const fragment = doc.createDocumentFragment();\n fragment.append(...node.childNodes);\n node.parentNode?.replaceChild(fragment, node);\n });\n};\n\nexport default function normalize(doc: Document) {\n if (doc.querySelector('[id^=\"docs-internal-guid-\"]')) {\n normalizeFontWeight(doc);\n normalizeEmptyLines(doc);\n }\n}\n", "const ignoreRegexp = /\\bmso-list:[^;]*ignore/i;\nconst idRegexp = /\\bmso-list:[^;]*\\bl(\\d+)/i;\nconst indentRegexp = /\\bmso-list:[^;]*\\blevel(\\d+)/i;\n\nconst parseListItem = (element: Element, html: string) => {\n const style = element.getAttribute('style');\n const idMatch = style?.match(idRegexp);\n if (!idMatch) {\n return null;\n }\n const id = Number(idMatch[1]);\n\n const indentMatch = style?.match(indentRegexp);\n const indent = indentMatch ? Number(indentMatch[1]) : 1;\n\n const typeRegexp = new RegExp(\n `@list l${id}:level${indent}\\\\s*\\\\{[^\\\\}]*mso-level-number-format:\\\\s*([\\\\w-]+)`,\n 'i',\n );\n const typeMatch = html.match(typeRegexp);\n const type = typeMatch && typeMatch[1] === 'bullet' ? 'bullet' : 'ordered';\n\n return { id, indent, type, element };\n};\n\n// list items are represented as `p` tags with styles like `mso-list: l0 level1` where:\n// 1. \"0\" in \"l0\" means the list item id;\n// 2. \"1\" in \"level1\" means the indent level, starting from 1.\nconst normalizeListItem = (doc: Document) => {\n const msoList = Array.from(doc.querySelectorAll('[style*=mso-list]'));\n const ignored: Element[] = [];\n const others: Element[] = [];\n msoList.forEach((node) => {\n const shouldIgnore = (node.getAttribute('style') || '').match(ignoreRegexp);\n if (shouldIgnore) {\n ignored.push(node);\n } else {\n others.push(node);\n }\n });\n\n // Each list item contains a marker wrapped with \"mso-list: Ignore\".\n ignored.forEach((node) => node.parentNode?.removeChild(node));\n\n // The list stype is not defined inline with the tag, instead, it's in the\n // style tag so we need to pass the html as a string.\n const html = doc.documentElement.innerHTML;\n const listItems = others\n .map((element) => parseListItem(element, html))\n .filter((parsed) => parsed);\n\n while (listItems.length) {\n const childListItems = [];\n\n let current = listItems.shift();\n // Group continuous items into the same group (aka \"ul\")\n while (current) {\n childListItems.push(current);\n current =\n listItems.length &&\n listItems[0]?.element === current.element.nextElementSibling &&\n // Different id means the next item doesn't belong to this group.\n listItems[0].id === current.id\n ? listItems.shift()\n : null;\n }\n\n const ul = document.createElement('ul');\n childListItems.forEach((listItem) => {\n const li = document.createElement('li');\n li.setAttribute('data-list', listItem.type);\n if (listItem.indent > 1) {\n li.setAttribute('class', `ql-indent-${listItem.indent - 1}`);\n }\n li.innerHTML = listItem.element.innerHTML;\n ul.appendChild(li);\n });\n\n const element = childListItems[0]?.element;\n const { parentNode } = element ?? {};\n if (element) {\n parentNode?.replaceChild(ul, element);\n }\n childListItems.slice(1).forEach(({ element: e }) => {\n parentNode?.removeChild(e);\n });\n }\n};\n\nexport default function normalize(doc: Document) {\n if (\n doc.documentElement.getAttribute('xmlns:w') ===\n 'urn:schemas-microsoft-com:office:word'\n ) {\n normalizeListItem(doc);\n }\n}\n", "import googleDocs from './normalizers/googleDocs.js';\nimport msWord from './normalizers/msWord.js';\n\nconst NORMALIZERS = [msWord, googleDocs];\n\nconst normalizeExternalHTML = (doc: Document) => {\n if (doc.documentElement) {\n NORMALIZERS.forEach((normalize) => {\n normalize(doc);\n });\n }\n};\n\nexport default normalizeExternalHTML;\n", "import { Scope } from 'parchment';\nimport type Delta from 'quill-delta';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nimport type Scroll from '../blots/scroll.js';\nimport type { Range } from '../core/selection.js';\n\nexport interface HistoryOptions {\n userOnly: boolean;\n delay: number;\n maxStack: number;\n}\n\nexport interface StackItem {\n delta: Delta;\n range: Range | null;\n}\n\ninterface Stack {\n undo: StackItem[];\n redo: StackItem[];\n}\n\nclass History extends Module {\n static DEFAULTS: HistoryOptions = {\n delay: 1000,\n maxStack: 100,\n userOnly: false,\n };\n\n lastRecorded = 0;\n ignoreChange = false;\n stack: Stack = { undo: [], redo: [] };\n currentRange: Range | null = null;\n\n constructor(quill: Quill, options: Partial) {\n super(quill, options);\n this.quill.on(\n Quill.events.EDITOR_CHANGE,\n (eventName, value, oldValue, source) => {\n if (eventName === Quill.events.SELECTION_CHANGE) {\n if (value && source !== Quill.sources.SILENT) {\n this.currentRange = value;\n }\n } else if (eventName === Quill.events.TEXT_CHANGE) {\n if (!this.ignoreChange) {\n if (!this.options.userOnly || source === Quill.sources.USER) {\n this.record(value, oldValue);\n } else {\n this.transform(value);\n }\n }\n\n this.currentRange = transformRange(this.currentRange, value);\n }\n },\n );\n\n this.quill.keyboard.addBinding(\n { key: 'z', shortKey: true },\n this.undo.bind(this),\n );\n this.quill.keyboard.addBinding(\n { key: ['z', 'Z'], shortKey: true, shiftKey: true },\n this.redo.bind(this),\n );\n if (/Win/i.test(navigator.platform)) {\n this.quill.keyboard.addBinding(\n { key: 'y', shortKey: true },\n this.redo.bind(this),\n );\n }\n\n this.quill.root.addEventListener('beforeinput', (event) => {\n if (event.inputType === 'historyUndo') {\n this.undo();\n event.preventDefault();\n } else if (event.inputType === 'historyRedo') {\n this.redo();\n event.preventDefault();\n }\n });\n }\n\n change(source: 'undo' | 'redo', dest: 'redo' | 'undo') {\n if (this.stack[source].length === 0) return;\n const item = this.stack[source].pop();\n if (!item) return;\n const base = this.quill.getContents();\n const inverseDelta = item.delta.invert(base);\n this.stack[dest].push({\n delta: inverseDelta,\n range: transformRange(item.range, inverseDelta),\n });\n this.lastRecorded = 0;\n this.ignoreChange = true;\n this.quill.updateContents(item.delta, Quill.sources.USER);\n this.ignoreChange = false;\n\n this.restoreSelection(item);\n }\n\n clear() {\n this.stack = { undo: [], redo: [] };\n }\n\n cutoff() {\n this.lastRecorded = 0;\n }\n\n record(changeDelta: Delta, oldDelta: Delta) {\n if (changeDelta.ops.length === 0) return;\n this.stack.redo = [];\n let undoDelta = changeDelta.invert(oldDelta);\n let undoRange = this.currentRange;\n const timestamp = Date.now();\n if (\n // @ts-expect-error Fix me later\n this.lastRecorded + this.options.delay > timestamp &&\n this.stack.undo.length > 0\n ) {\n const item = this.stack.undo.pop();\n if (item) {\n undoDelta = undoDelta.compose(item.delta);\n undoRange = item.range;\n }\n } else {\n this.lastRecorded = timestamp;\n }\n if (undoDelta.length() === 0) return;\n this.stack.undo.push({ delta: undoDelta, range: undoRange });\n // @ts-expect-error Fix me later\n if (this.stack.undo.length > this.options.maxStack) {\n this.stack.undo.shift();\n }\n }\n\n redo() {\n this.change('redo', 'undo');\n }\n\n transform(delta: Delta) {\n transformStack(this.stack.undo, delta);\n transformStack(this.stack.redo, delta);\n }\n\n undo() {\n this.change('undo', 'redo');\n }\n\n protected restoreSelection(stackItem: StackItem) {\n if (stackItem.range) {\n this.quill.setSelection(stackItem.range, Quill.sources.USER);\n } else {\n const index = getLastChangeIndex(this.quill.scroll, stackItem.delta);\n this.quill.setSelection(index, Quill.sources.USER);\n }\n }\n}\n\nfunction transformStack(stack: StackItem[], delta: Delta) {\n let remoteDelta = delta;\n for (let i = stack.length - 1; i >= 0; i -= 1) {\n const oldItem = stack[i];\n stack[i] = {\n delta: remoteDelta.transform(oldItem.delta, true),\n range: oldItem.range && transformRange(oldItem.range, remoteDelta),\n };\n remoteDelta = oldItem.delta.transform(remoteDelta);\n if (stack[i].delta.length() === 0) {\n stack.splice(i, 1);\n }\n }\n}\n\nfunction endsWithNewlineChange(scroll: Scroll, delta: Delta) {\n const lastOp = delta.ops[delta.ops.length - 1];\n if (lastOp == null) return false;\n if (lastOp.insert != null) {\n return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n }\n if (lastOp.attributes != null) {\n return Object.keys(lastOp.attributes).some((attr) => {\n return scroll.query(attr, Scope.BLOCK) != null;\n });\n }\n return false;\n}\n\nfunction getLastChangeIndex(scroll: Scroll, delta: Delta) {\n const deleteLength = delta.reduce((length, op) => {\n return length + (op.delete || 0);\n }, 0);\n let changeIndex = delta.length() - deleteLength;\n if (endsWithNewlineChange(scroll, delta)) {\n changeIndex -= 1;\n }\n return changeIndex;\n}\n\nfunction transformRange(range: Range | null, delta: Delta) {\n if (!range) return range;\n const start = delta.transformPosition(range.index);\n const end = delta.transformPosition(range.index + range.length);\n return { index: start, length: end - start };\n}\n\nexport { History as default, getLastChangeIndex };\n", "import Delta from 'quill-delta';\nimport type Quill from '../core/quill.js';\nimport Emitter from '../core/emitter.js';\nimport Module from '../core/module.js';\nimport type { Range } from '../core/selection.js';\n\ninterface UploaderOptions {\n mimetypes: string[];\n handler: (this: { quill: Quill }, range: Range, files: File[]) => void;\n}\n\nclass Uploader extends Module {\n static DEFAULTS: UploaderOptions;\n\n constructor(quill: Quill, options: Partial) {\n super(quill, options);\n quill.root.addEventListener('drop', (e) => {\n e.preventDefault();\n let native: ReturnType | null = null;\n if (document.caretRangeFromPoint) {\n native = document.caretRangeFromPoint(e.clientX, e.clientY);\n // @ts-expect-error\n } else if (document.caretPositionFromPoint) {\n // @ts-expect-error\n const position = document.caretPositionFromPoint(e.clientX, e.clientY);\n native = document.createRange();\n native.setStart(position.offsetNode, position.offset);\n native.setEnd(position.offsetNode, position.offset);\n }\n\n const normalized = native && quill.selection.normalizeNative(native);\n if (normalized) {\n const range = quill.selection.normalizedToRange(normalized);\n if (e.dataTransfer?.files) {\n this.upload(range, e.dataTransfer.files);\n }\n }\n });\n }\n\n upload(range: Range, files: FileList | File[]) {\n const uploads: File[] = [];\n Array.from(files).forEach((file) => {\n if (file && this.options.mimetypes?.includes(file.type)) {\n uploads.push(file);\n }\n });\n if (uploads.length > 0) {\n // @ts-expect-error Fix me later\n this.options.handler.call(this, range, uploads);\n }\n }\n}\n\nUploader.DEFAULTS = {\n mimetypes: ['image/png', 'image/jpeg'],\n handler(range: Range, files: File[]) {\n if (!this.quill.scroll.query('image')) {\n return;\n }\n const promises = files.map>((file) => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(file);\n });\n });\n Promise.all(promises).then((images) => {\n const update = images.reduce((delta: Delta, image) => {\n return delta.insert({ image });\n }, new Delta().retain(range.index).delete(range.length)) as Delta;\n this.quill.updateContents(update, Emitter.sources.USER);\n this.quill.setSelection(\n range.index + images.length,\n Emitter.sources.SILENT,\n );\n });\n },\n};\n\nexport default Uploader;\n", "import Quill, { Parchment, Range } from './core/quill.js';\nimport type {\n Bounds,\n DebugLevel,\n EmitterSource,\n ExpandedQuillOptions,\n QuillOptions,\n} from './core/quill.js';\n\nimport Block, { BlockEmbed } from './blots/block.js';\nimport Break from './blots/break.js';\nimport Container from './blots/container.js';\nimport Cursor from './blots/cursor.js';\nimport Embed from './blots/embed.js';\nimport Inline from './blots/inline.js';\nimport Scroll from './blots/scroll.js';\nimport TextBlot from './blots/text.js';\n\nimport Clipboard from './modules/clipboard.js';\nimport History from './modules/history.js';\nimport Keyboard from './modules/keyboard.js';\nimport Uploader from './modules/uploader.js';\nimport Delta, { Op, OpIterator, AttributeMap } from 'quill-delta';\nimport Input from './modules/input.js';\nimport UINode from './modules/uiNode.js';\n\nexport { default as Module } from './core/module.js';\nexport { Delta, Op, OpIterator, AttributeMap, Parchment, Range };\nexport type {\n Bounds,\n DebugLevel,\n EmitterSource,\n ExpandedQuillOptions,\n QuillOptions,\n};\n\nQuill.register({\n 'blots/block': Block,\n 'blots/block/embed': BlockEmbed,\n 'blots/break': Break,\n 'blots/container': Container,\n 'blots/cursor': Cursor,\n 'blots/embed': Embed,\n 'blots/inline': Inline,\n 'blots/scroll': Scroll,\n 'blots/text': TextBlot,\n\n 'modules/clipboard': Clipboard,\n 'modules/history': History,\n 'modules/keyboard': Keyboard,\n 'modules/uploader': Uploader,\n 'modules/input': Input,\n 'modules/uiNode': UINode,\n});\n\nexport default Quill;\n", "import Delta from 'quill-delta';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nimport type { Range } from '../core/selection.js';\nimport { deleteRange } from './keyboard.js';\n\nconst INSERT_TYPES = ['insertText', 'insertReplacementText'];\n\nclass Input extends Module {\n constructor(quill: Quill, options: Record) {\n super(quill, options);\n\n quill.root.addEventListener('beforeinput', (event) => {\n this.handleBeforeInput(event);\n });\n\n // Gboard with English input on Android triggers `compositionstart` sometimes even\n // users are not going to type anything.\n if (!/Android/i.test(navigator.userAgent)) {\n quill.on(Quill.events.COMPOSITION_BEFORE_START, () => {\n this.handleCompositionStart();\n });\n }\n }\n\n private deleteRange(range: Range) {\n deleteRange({ range, quill: this.quill });\n }\n\n private replaceText(range: Range, text = '') {\n if (range.length === 0) return false;\n\n if (text) {\n // Follow the native behavior that inherits the formats of the first character\n const formats = this.quill.getFormat(range.index, 1);\n this.deleteRange(range);\n this.quill.updateContents(\n new Delta().retain(range.index).insert(text, formats),\n Quill.sources.USER,\n );\n } else {\n this.deleteRange(range);\n }\n\n this.quill.setSelection(range.index + text.length, 0, Quill.sources.SILENT);\n return true;\n }\n\n private handleBeforeInput(event: InputEvent) {\n if (\n this.quill.composition.isComposing ||\n event.defaultPrevented ||\n !INSERT_TYPES.includes(event.inputType)\n ) {\n return;\n }\n\n const staticRange = event.getTargetRanges\n ? event.getTargetRanges()[0]\n : null;\n if (!staticRange || staticRange.collapsed === true) {\n return;\n }\n\n const text = getPlainTextFromInputEvent(event);\n if (text == null) {\n return;\n }\n const normalized = this.quill.selection.normalizeNative(staticRange);\n const range = normalized\n ? this.quill.selection.normalizedToRange(normalized)\n : null;\n if (range && this.replaceText(range, text)) {\n event.preventDefault();\n }\n }\n\n private handleCompositionStart() {\n const range = this.quill.getSelection();\n if (range) {\n this.replaceText(range);\n }\n }\n}\n\nfunction getPlainTextFromInputEvent(event: InputEvent) {\n // When `inputType` is \"insertText\":\n // - `event.data` should be string (Safari uses `event.dataTransfer`).\n // - `event.dataTransfer` should be null.\n // When `inputType` is \"insertReplacementText\":\n // - `event.data` should be null.\n // - `event.dataTransfer` should contain \"text/plain\" data.\n\n if (typeof event.data === 'string') {\n return event.data;\n }\n if (event.dataTransfer?.types.includes('text/plain')) {\n return event.dataTransfer.getData('text/plain');\n }\n return null;\n}\n\nexport default Input;\n", "import { ParentBlot } from 'parchment';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\n\nconst isMac = /Mac/i.test(navigator.platform);\n\n// Export for testing\nexport const TTL_FOR_VALID_SELECTION_CHANGE = 100;\n\n// A loose check to determine if the shortcut can move the caret before a UI node:\n// [CARET]
    [CONTENT]
    \nconst canMoveCaretBeforeUINode = (event: KeyboardEvent) => {\n if (\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight' || // RTL scripts or moving from the end of the previous line\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'Home'\n ) {\n return true;\n }\n\n if (isMac && event.key === 'a' && event.ctrlKey === true) {\n return true;\n }\n\n return false;\n};\n\nclass UINode extends Module {\n isListening = false;\n selectionChangeDeadline = 0;\n\n constructor(quill: Quill, options: Record) {\n super(quill, options);\n\n this.handleArrowKeys();\n this.handleNavigationShortcuts();\n }\n\n private handleArrowKeys() {\n this.quill.keyboard.addBinding({\n key: ['ArrowLeft', 'ArrowRight'],\n offset: 0,\n shiftKey: null,\n handler(range, { line, event }) {\n if (!(line instanceof ParentBlot) || !line.uiNode) {\n return true;\n }\n\n const isRTL = getComputedStyle(line.domNode)['direction'] === 'rtl';\n if (\n (isRTL && event.key !== 'ArrowRight') ||\n (!isRTL && event.key !== 'ArrowLeft')\n ) {\n return true;\n }\n\n this.quill.setSelection(\n range.index - 1,\n range.length + (event.shiftKey ? 1 : 0),\n Quill.sources.USER,\n );\n return false;\n },\n });\n }\n\n private handleNavigationShortcuts() {\n this.quill.root.addEventListener('keydown', (event) => {\n if (!event.defaultPrevented && canMoveCaretBeforeUINode(event)) {\n this.ensureListeningToSelectionChange();\n }\n });\n }\n\n /**\n * We only listen to the `selectionchange` event when\n * there is an intention of moving the caret to the beginning using shortcuts.\n * This is primarily implemented to prevent infinite loops, as we are changing\n * the selection within the handler of a `selectionchange` event.\n */\n private ensureListeningToSelectionChange() {\n this.selectionChangeDeadline = Date.now() + TTL_FOR_VALID_SELECTION_CHANGE;\n\n if (this.isListening) return;\n this.isListening = true;\n\n const listener = () => {\n this.isListening = false;\n\n if (Date.now() <= this.selectionChangeDeadline) {\n this.handleSelectionChange();\n }\n };\n\n document.addEventListener('selectionchange', listener, {\n once: true,\n });\n }\n\n private handleSelectionChange() {\n const selection = document.getSelection();\n if (!selection) return;\n const range = selection.getRangeAt(0);\n if (range.collapsed !== true || range.startOffset !== 0) return;\n\n const line = this.quill.scroll.find(range.startContainer);\n if (!(line instanceof ParentBlot) || !line.uiNode) return;\n\n const newRange = document.createRange();\n newRange.setStartAfter(line.uiNode);\n newRange.setEndAfter(line.uiNode);\n selection.removeAllRanges();\n selection.addRange(newRange);\n }\n}\n\nexport default UINode;\n", "import { ClassAttributor, Scope } from 'parchment';\n\nclass IndentAttributor extends ClassAttributor {\n add(node: HTMLElement, value: string | number) {\n let normalizedValue = 0;\n if (value === '+1' || value === '-1') {\n const indent = this.value(node) || 0;\n normalizedValue = value === '+1' ? indent + 1 : indent - 1;\n } else if (typeof value === 'number') {\n normalizedValue = value;\n }\n if (normalizedValue === 0) {\n this.remove(node);\n return true;\n }\n return super.add(node, normalizedValue.toString());\n }\n\n canAdd(node: HTMLElement, value: string) {\n return super.canAdd(node, value) || super.canAdd(node, parseInt(value, 10));\n }\n\n value(node: HTMLElement) {\n return parseInt(super.value(node), 10) || undefined; // Don't return NaN\n }\n}\n\nconst IndentClass = new IndentAttributor('indent', 'ql-indent', {\n scope: Scope.BLOCK,\n // @ts-expect-error\n whitelist: [1, 2, 3, 4, 5, 6, 7, 8],\n});\n\nexport default IndentClass;\n", "import Block from '../blots/block.js';\n\nclass Blockquote extends Block {\n static blotName = 'blockquote';\n static tagName = 'blockquote';\n}\n\nexport default Blockquote;\n", "import Block from '../blots/block.js';\n\nclass Header extends Block {\n static blotName = 'header';\n static tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n\n static formats(domNode: Element) {\n return this.tagName.indexOf(domNode.tagName) + 1;\n }\n}\n\nexport default Header;\n", "import Block from '../blots/block.js';\nimport Container from '../blots/container.js';\nimport type Scroll from '../blots/scroll.js';\nimport Quill from '../core/quill.js';\n\nclass ListContainer extends Container {}\nListContainer.blotName = 'list-container';\nListContainer.tagName = 'OL';\n\nclass ListItem extends Block {\n static create(value: string) {\n const node = super.create() as HTMLElement;\n node.setAttribute('data-list', value);\n return node;\n }\n\n static formats(domNode: HTMLElement) {\n return domNode.getAttribute('data-list') || undefined;\n }\n\n static register() {\n Quill.register(ListContainer);\n }\n\n constructor(scroll: Scroll, domNode: HTMLElement) {\n super(scroll, domNode);\n const ui = domNode.ownerDocument.createElement('span');\n const listEventHandler = (e: Event) => {\n if (!scroll.isEnabled()) return;\n const format = this.statics.formats(domNode, scroll);\n if (format === 'checked') {\n this.format('list', 'unchecked');\n e.preventDefault();\n } else if (format === 'unchecked') {\n this.format('list', 'checked');\n e.preventDefault();\n }\n };\n ui.addEventListener('mousedown', listEventHandler);\n ui.addEventListener('touchstart', listEventHandler);\n this.attachUI(ui);\n }\n\n format(name: string, value: string) {\n if (name === this.statics.blotName && value) {\n this.domNode.setAttribute('data-list', value);\n } else {\n super.format(name, value);\n }\n }\n}\nListItem.blotName = 'list';\nListItem.tagName = 'LI';\n\nListContainer.allowedChildren = [ListItem];\nListItem.requiredContainer = ListContainer;\n\nexport { ListContainer, ListItem as default };\n", "import Inline from '../blots/inline.js';\n\nclass Bold extends Inline {\n static blotName = 'bold';\n static tagName = ['STRONG', 'B'];\n\n static create() {\n return super.create();\n }\n\n static formats() {\n return true;\n }\n\n optimize(context: { [key: string]: any }) {\n super.optimize(context);\n if (this.domNode.tagName !== this.statics.tagName[0]) {\n this.replaceWith(this.statics.blotName);\n }\n }\n}\n\nexport default Bold;\n", "import Bold from './bold.js';\n\nclass Italic extends Bold {\n static blotName = 'italic';\n static tagName = ['EM', 'I'];\n}\n\nexport default Italic;\n", "import Inline from '../blots/inline.js';\n\nclass Link extends Inline {\n static blotName = 'link';\n static tagName = 'A';\n static SANITIZED_URL = 'about:blank';\n static PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel', 'sms'];\n\n static create(value: string) {\n const node = super.create(value) as HTMLElement;\n node.setAttribute('href', this.sanitize(value));\n node.setAttribute('rel', 'noopener noreferrer');\n node.setAttribute('target', '_blank');\n return node;\n }\n\n static formats(domNode: HTMLElement) {\n return domNode.getAttribute('href');\n }\n\n static sanitize(url: string) {\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n }\n\n format(name: string, value: unknown) {\n if (name !== this.statics.blotName || !value) {\n super.format(name, value);\n } else {\n // @ts-expect-error\n this.domNode.setAttribute('href', this.constructor.sanitize(value));\n }\n }\n}\n\nfunction sanitize(url: string, protocols: string[]) {\n const anchor = document.createElement('a');\n anchor.href = url;\n const protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n return protocols.indexOf(protocol) > -1;\n}\n\nexport { Link as default, sanitize };\n", "import Inline from '../blots/inline.js';\n\nclass Script extends Inline {\n static blotName = 'script';\n static tagName = ['SUB', 'SUP'];\n\n static create(value: 'super' | 'sub' | (string & {})) {\n if (value === 'super') {\n return document.createElement('sup');\n }\n if (value === 'sub') {\n return document.createElement('sub');\n }\n return super.create(value);\n }\n\n static formats(domNode: HTMLElement) {\n if (domNode.tagName === 'SUB') return 'sub';\n if (domNode.tagName === 'SUP') return 'super';\n return undefined;\n }\n}\n\nexport default Script;\n", "import Bold from './bold.js';\n\nclass Strike extends Bold {\n static blotName = 'strike';\n static tagName = ['S', 'STRIKE'];\n}\n\nexport default Strike;\n", "import Inline from '../blots/inline.js';\n\nclass Underline extends Inline {\n static blotName = 'underline';\n static tagName = 'U';\n}\n\nexport default Underline;\n", "import Embed from '../blots/embed.js';\n\nclass Formula extends Embed {\n static blotName = 'formula';\n static className = 'ql-formula';\n static tagName = 'SPAN';\n\n static create(value: string) {\n // @ts-expect-error\n if (window.katex == null) {\n throw new Error('Formula module requires KaTeX.');\n }\n const node = super.create(value) as Element;\n if (typeof value === 'string') {\n // @ts-expect-error\n window.katex.render(value, node, {\n throwOnError: false,\n errorColor: '#f00',\n });\n node.setAttribute('data-value', value);\n }\n return node;\n }\n\n static value(domNode: Element) {\n return domNode.getAttribute('data-value');\n }\n\n html() {\n const { formula } = this.value();\n return `${formula}`;\n }\n}\n\nexport default Formula;\n", "import { EmbedBlot } from 'parchment';\nimport { sanitize } from './link.js';\n\nconst ATTRIBUTES = ['alt', 'height', 'width'];\n\nclass Image extends EmbedBlot {\n static blotName = 'image';\n static tagName = 'IMG';\n\n static create(value: string) {\n const node = super.create(value) as Element;\n if (typeof value === 'string') {\n node.setAttribute('src', this.sanitize(value));\n }\n return node;\n }\n\n static formats(domNode: Element) {\n return ATTRIBUTES.reduce(\n (formats: Record, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n },\n {},\n );\n }\n\n static match(url: string) {\n return /\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url);\n }\n\n static sanitize(url: string) {\n return sanitize(url, ['http', 'https', 'data']) ? url : '//:0';\n }\n\n static value(domNode: Element) {\n return domNode.getAttribute('src');\n }\n\n domNode: HTMLImageElement;\n\n format(name: string, value: string) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n}\n\nexport default Image;\n", "import { BlockEmbed } from '../blots/block.js';\nimport Link from './link.js';\n\nconst ATTRIBUTES = ['height', 'width'];\n\nclass Video extends BlockEmbed {\n static blotName = 'video';\n static className = 'ql-video';\n static tagName = 'IFRAME';\n\n static create(value: string) {\n const node = super.create(value) as Element;\n node.setAttribute('frameborder', '0');\n node.setAttribute('allowfullscreen', 'true');\n node.setAttribute('src', this.sanitize(value));\n return node;\n }\n\n static formats(domNode: Element) {\n return ATTRIBUTES.reduce(\n (formats: Record, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n },\n {},\n );\n }\n\n static sanitize(url: string) {\n return Link.sanitize(url);\n }\n\n static value(domNode: Element) {\n return domNode.getAttribute('src');\n }\n\n domNode: HTMLVideoElement;\n\n format(name: string, value: string) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n\n html() {\n const { video } = this.value();\n return `${video}`;\n }\n}\n\nexport default Video;\n", "import Delta from 'quill-delta';\nimport { ClassAttributor, Scope } from 'parchment';\nimport type { Blot, ScrollBlot } from 'parchment';\nimport Inline from '../blots/inline.js';\nimport Quill from '../core/quill.js';\nimport Module from '../core/module.js';\nimport { blockDelta } from '../blots/block.js';\nimport BreakBlot from '../blots/break.js';\nimport CursorBlot from '../blots/cursor.js';\nimport TextBlot, { escapeText } from '../blots/text.js';\nimport CodeBlock, { CodeBlockContainer } from '../formats/code.js';\nimport { traverse } from './clipboard.js';\n\nconst TokenAttributor = new ClassAttributor('code-token', 'hljs', {\n scope: Scope.INLINE,\n});\nclass CodeToken extends Inline {\n static formats(node: Element, scroll: ScrollBlot) {\n while (node != null && node !== scroll.domNode) {\n if (node.classList && node.classList.contains(CodeBlock.className)) {\n // @ts-expect-error\n return super.formats(node, scroll);\n }\n // @ts-expect-error\n node = node.parentNode;\n }\n return undefined;\n }\n\n constructor(scroll: ScrollBlot, domNode: Node, value: unknown) {\n // @ts-expect-error\n super(scroll, domNode, value);\n TokenAttributor.add(this.domNode, value);\n }\n\n format(format: string, value: unknown) {\n if (format !== CodeToken.blotName) {\n super.format(format, value);\n } else if (value) {\n TokenAttributor.add(this.domNode, value);\n } else {\n TokenAttributor.remove(this.domNode);\n this.domNode.classList.remove(this.statics.className);\n }\n }\n\n optimize(...args: unknown[]) {\n // @ts-expect-error\n super.optimize(...args);\n if (!TokenAttributor.value(this.domNode)) {\n this.unwrap();\n }\n }\n}\nCodeToken.blotName = 'code-token';\nCodeToken.className = 'ql-token';\n\nclass SyntaxCodeBlock extends CodeBlock {\n static create(value: unknown) {\n const domNode = super.create(value);\n if (typeof value === 'string') {\n domNode.setAttribute('data-language', value);\n }\n return domNode;\n }\n\n static formats(domNode: Node) {\n // @ts-expect-error\n return domNode.getAttribute('data-language') || 'plain';\n }\n\n static register() {} // Syntax module will register\n\n format(name: string, value: unknown) {\n if (name === this.statics.blotName && value) {\n // @ts-expect-error\n this.domNode.setAttribute('data-language', value);\n } else {\n super.format(name, value);\n }\n }\n\n replaceWith(name: string | Blot, value?: any) {\n this.formatAt(0, this.length(), CodeToken.blotName, false);\n return super.replaceWith(name, value);\n }\n}\n\nclass SyntaxCodeBlockContainer extends CodeBlockContainer {\n forceNext?: boolean;\n cachedText?: string | null;\n\n attach() {\n super.attach();\n this.forceNext = false;\n // @ts-expect-error\n this.scroll.emitMount(this);\n }\n\n format(name: string, value: unknown) {\n if (name === SyntaxCodeBlock.blotName) {\n this.forceNext = true;\n this.children.forEach((child) => {\n // @ts-expect-error\n child.format(name, value);\n });\n }\n }\n\n formatAt(index: number, length: number, name: string, value: unknown) {\n if (name === SyntaxCodeBlock.blotName) {\n this.forceNext = true;\n }\n super.formatAt(index, length, name, value);\n }\n\n highlight(\n highlight: (text: string, language: string) => Delta,\n forced = false,\n ) {\n if (this.children.head == null) return;\n const nodes = Array.from(this.domNode.childNodes).filter(\n (node) => node !== this.uiNode,\n );\n const text = `${nodes.map((node) => node.textContent).join('\\n')}\\n`;\n const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n if (forced || this.forceNext || this.cachedText !== text) {\n if (text.trim().length > 0 || this.cachedText == null) {\n const oldDelta = this.children.reduce((delta, child) => {\n // @ts-expect-error\n return delta.concat(blockDelta(child, false));\n }, new Delta());\n const delta = highlight(text, language);\n oldDelta.diff(delta).reduce((index, { retain, attributes }) => {\n // Should be all retains\n if (!retain) return index;\n if (attributes) {\n Object.keys(attributes).forEach((format) => {\n if (\n [SyntaxCodeBlock.blotName, CodeToken.blotName].includes(format)\n ) {\n // @ts-expect-error\n this.formatAt(index, retain, format, attributes[format]);\n }\n });\n }\n // @ts-expect-error\n return index + retain;\n }, 0);\n }\n this.cachedText = text;\n this.forceNext = false;\n }\n }\n\n html(index: number, length: number) {\n const [codeBlock] = this.children.find(index);\n const language = codeBlock\n ? SyntaxCodeBlock.formats(codeBlock.domNode)\n : 'plain';\n\n return `
    \\n${escapeText(\n      this.code(index, length),\n    )}\\n
    `;\n }\n\n optimize(context: Record) {\n super.optimize(context);\n if (\n this.parent != null &&\n this.children.head != null &&\n this.uiNode != null\n ) {\n const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n // @ts-expect-error\n if (language !== this.uiNode.value) {\n // @ts-expect-error\n this.uiNode.value = language;\n }\n }\n }\n}\n\nSyntaxCodeBlockContainer.allowedChildren = [SyntaxCodeBlock];\nSyntaxCodeBlock.requiredContainer = SyntaxCodeBlockContainer;\nSyntaxCodeBlock.allowedChildren = [CodeToken, CursorBlot, TextBlot, BreakBlot];\n\ninterface SyntaxOptions {\n interval: number;\n languages: { key: string; label: string }[];\n hljs: any;\n}\n\nconst highlight = (lib: any, language: string, text: string) => {\n if (typeof lib.versionString === 'string') {\n const majorVersion = lib.versionString.split('.')[0];\n if (parseInt(majorVersion, 10) >= 11) {\n return lib.highlight(text, { language }).value;\n }\n }\n return lib.highlight(language, text).value;\n};\n\nclass Syntax extends Module {\n static DEFAULTS: SyntaxOptions & { hljs: any };\n\n static register() {\n Quill.register(CodeToken, true);\n Quill.register(SyntaxCodeBlock, true);\n Quill.register(SyntaxCodeBlockContainer, true);\n }\n\n languages: Record;\n\n constructor(quill: Quill, options: Partial) {\n super(quill, options);\n if (this.options.hljs == null) {\n throw new Error(\n 'Syntax module requires highlight.js. Please include the library on the page before Quill.',\n );\n }\n // @ts-expect-error Fix me later\n this.languages = this.options.languages.reduce(\n (memo: Record, { key }) => {\n memo[key] = true;\n return memo;\n },\n {},\n );\n this.highlightBlot = this.highlightBlot.bind(this);\n this.initListener();\n this.initTimer();\n }\n\n initListener() {\n this.quill.on(Quill.events.SCROLL_BLOT_MOUNT, (blot: Blot) => {\n if (!(blot instanceof SyntaxCodeBlockContainer)) return;\n const select = this.quill.root.ownerDocument.createElement('select');\n // @ts-expect-error Fix me later\n this.options.languages.forEach(({ key, label }) => {\n const option = select.ownerDocument.createElement('option');\n option.textContent = label;\n option.setAttribute('value', key);\n select.appendChild(option);\n });\n select.addEventListener('change', () => {\n blot.format(SyntaxCodeBlock.blotName, select.value);\n this.quill.root.focus(); // Prevent scrolling\n this.highlight(blot, true);\n });\n if (blot.uiNode == null) {\n blot.attachUI(select);\n if (blot.children.head) {\n select.value = SyntaxCodeBlock.formats(blot.children.head.domNode);\n }\n }\n });\n }\n\n initTimer() {\n let timer: ReturnType | null = null;\n this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n this.highlight();\n timer = null;\n }, this.options.interval);\n });\n }\n\n highlight(blot: SyntaxCodeBlockContainer | null = null, force = false) {\n if (this.quill.selection.composing) return;\n this.quill.update(Quill.sources.USER);\n const range = this.quill.getSelection();\n const blots =\n blot == null\n ? this.quill.scroll.descendants(SyntaxCodeBlockContainer)\n : [blot];\n blots.forEach((container) => {\n container.highlight(this.highlightBlot, force);\n });\n this.quill.update(Quill.sources.SILENT);\n if (range != null) {\n this.quill.setSelection(range, Quill.sources.SILENT);\n }\n }\n\n highlightBlot(text: string, language = 'plain') {\n language = this.languages[language] ? language : 'plain';\n if (language === 'plain') {\n return escapeText(text)\n .split('\\n')\n .reduce((delta, line, i) => {\n if (i !== 0) {\n delta.insert('\\n', { [CodeBlock.blotName]: language });\n }\n return delta.insert(line);\n }, new Delta());\n }\n const container = this.quill.root.ownerDocument.createElement('div');\n container.classList.add(CodeBlock.className);\n container.innerHTML = highlight(this.options.hljs, language, text);\n return traverse(\n this.quill.scroll,\n container,\n [\n (node, delta) => {\n // @ts-expect-error\n const value = TokenAttributor.value(node);\n if (value) {\n return delta.compose(\n new Delta().retain(delta.length(), {\n [CodeToken.blotName]: value,\n }),\n );\n }\n return delta;\n },\n ],\n [\n (node, delta) => {\n // @ts-expect-error\n return node.data.split('\\n').reduce((memo, nodeText, i) => {\n if (i !== 0) memo.insert('\\n', { [CodeBlock.blotName]: language });\n return memo.insert(nodeText);\n }, delta);\n },\n ],\n new WeakMap(),\n );\n }\n}\nSyntax.DEFAULTS = {\n hljs: (() => {\n return window.hljs;\n })(),\n interval: 1000,\n languages: [\n { key: 'plain', label: 'Plain' },\n { key: 'bash', label: 'Bash' },\n { key: 'cpp', label: 'C++' },\n { key: 'cs', label: 'C#' },\n { key: 'css', label: 'CSS' },\n { key: 'diff', label: 'Diff' },\n { key: 'xml', label: 'HTML/XML' },\n { key: 'java', label: 'Java' },\n { key: 'javascript', label: 'JavaScript' },\n { key: 'markdown', label: 'Markdown' },\n { key: 'php', label: 'PHP' },\n { key: 'python', label: 'Python' },\n { key: 'ruby', label: 'Ruby' },\n { key: 'sql', label: 'SQL' },\n ],\n};\n\nexport { SyntaxCodeBlock as CodeBlock, CodeToken, Syntax as default };\n", "import Delta from 'quill-delta';\nimport Quill from '../core/quill.js';\nimport Module from '../core/module.js';\nimport {\n TableCell,\n TableRow,\n TableBody,\n TableContainer,\n tableId,\n} from '../formats/table.js';\n\nclass Table extends Module {\n static register() {\n Quill.register(TableCell);\n Quill.register(TableRow);\n Quill.register(TableBody);\n Quill.register(TableContainer);\n }\n\n constructor(...args: ConstructorParameters) {\n super(...args);\n this.listenBalanceCells();\n }\n\n balanceTables() {\n this.quill.scroll.descendants(TableContainer).forEach((table) => {\n table.balanceCells();\n });\n }\n\n deleteColumn() {\n const [table, , cell] = this.getTable();\n if (cell == null) return;\n // @ts-expect-error\n table.deleteColumn(cell.cellOffset());\n this.quill.update(Quill.sources.USER);\n }\n\n deleteRow() {\n const [, row] = this.getTable();\n if (row == null) return;\n row.remove();\n this.quill.update(Quill.sources.USER);\n }\n\n deleteTable() {\n const [table] = this.getTable();\n if (table == null) return;\n // @ts-expect-error\n const offset = table.offset();\n // @ts-expect-error\n table.remove();\n this.quill.update(Quill.sources.USER);\n this.quill.setSelection(offset, Quill.sources.SILENT);\n }\n\n getTable(\n range = this.quill.getSelection(),\n ): [null, null, null, -1] | [Table, TableRow, TableCell, number] {\n if (range == null) return [null, null, null, -1];\n const [cell, offset] = this.quill.getLine(range.index);\n if (cell == null || cell.statics.blotName !== TableCell.blotName) {\n return [null, null, null, -1];\n }\n const row = cell.parent;\n const table = row.parent.parent;\n // @ts-expect-error\n return [table, row, cell, offset];\n }\n\n insertColumn(offset: number) {\n const range = this.quill.getSelection();\n if (!range) return;\n const [table, row, cell] = this.getTable(range);\n if (cell == null) return;\n const column = cell.cellOffset();\n table.insertColumn(column + offset);\n this.quill.update(Quill.sources.USER);\n let shift = row.rowOffset();\n if (offset === 0) {\n shift += 1;\n }\n this.quill.setSelection(\n range.index + shift,\n range.length,\n Quill.sources.SILENT,\n );\n }\n\n insertColumnLeft() {\n this.insertColumn(0);\n }\n\n insertColumnRight() {\n this.insertColumn(1);\n }\n\n insertRow(offset: number) {\n const range = this.quill.getSelection();\n if (!range) return;\n const [table, row, cell] = this.getTable(range);\n if (cell == null) return;\n const index = row.rowOffset();\n table.insertRow(index + offset);\n this.quill.update(Quill.sources.USER);\n if (offset > 0) {\n this.quill.setSelection(range, Quill.sources.SILENT);\n } else {\n this.quill.setSelection(\n range.index + row.children.length,\n range.length,\n Quill.sources.SILENT,\n );\n }\n }\n\n insertRowAbove() {\n this.insertRow(0);\n }\n\n insertRowBelow() {\n this.insertRow(1);\n }\n\n insertTable(rows: number, columns: number) {\n const range = this.quill.getSelection();\n if (range == null) return;\n const delta = new Array(rows).fill(0).reduce((memo) => {\n const text = new Array(columns).fill('\\n').join('');\n return memo.insert(text, { table: tableId() });\n }, new Delta().retain(range.index));\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index, Quill.sources.SILENT);\n this.balanceTables();\n }\n\n listenBalanceCells() {\n this.quill.on(\n Quill.events.SCROLL_OPTIMIZE,\n (mutations: MutationRecord[]) => {\n mutations.some((mutation) => {\n if (\n ['TD', 'TR', 'TBODY', 'TABLE'].includes(\n (mutation.target as HTMLElement).tagName,\n )\n ) {\n this.quill.once(Quill.events.TEXT_CHANGE, (delta, old, source) => {\n if (source !== Quill.sources.USER) return;\n this.balanceTables();\n });\n return true;\n }\n return false;\n });\n },\n );\n }\n}\n\nexport default Table;\n", "import type { LinkedList } from 'parchment';\nimport Block from '../blots/block.js';\nimport Container from '../blots/container.js';\n\nclass TableCell extends Block {\n static blotName = 'table';\n static tagName = 'TD';\n\n static create(value: string) {\n const node = super.create() as HTMLElement;\n if (value) {\n node.setAttribute('data-row', value);\n } else {\n node.setAttribute('data-row', tableId());\n }\n return node;\n }\n\n static formats(domNode: HTMLElement) {\n if (domNode.hasAttribute('data-row')) {\n return domNode.getAttribute('data-row');\n }\n return undefined;\n }\n\n next: this | null;\n\n cellOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this);\n }\n return -1;\n }\n\n format(name: string, value: string) {\n if (name === TableCell.blotName && value) {\n this.domNode.setAttribute('data-row', value);\n } else {\n super.format(name, value);\n }\n }\n\n row(): TableRow {\n return this.parent as TableRow;\n }\n\n rowOffset() {\n if (this.row()) {\n return this.row().rowOffset();\n }\n return -1;\n }\n\n table() {\n return this.row() && this.row().table();\n }\n}\n\nclass TableRow extends Container {\n static blotName = 'table-row';\n static tagName = 'TR';\n\n children: LinkedList;\n next: this | null;\n\n checkMerge() {\n // @ts-expect-error\n if (super.checkMerge() && this.next.children.head != null) {\n // @ts-expect-error\n const thisHead = this.children.head.formats();\n // @ts-expect-error\n const thisTail = this.children.tail.formats();\n // @ts-expect-error\n const nextHead = this.next.children.head.formats();\n // @ts-expect-error\n const nextTail = this.next.children.tail.formats();\n return (\n thisHead.table === thisTail.table &&\n thisHead.table === nextHead.table &&\n thisHead.table === nextTail.table\n );\n }\n return false;\n }\n\n optimize(context: { [key: string]: any }) {\n super.optimize(context);\n this.children.forEach((child) => {\n if (child.next == null) return;\n const childFormats = child.formats();\n const nextFormats = child.next.formats();\n if (childFormats.table !== nextFormats.table) {\n const next = this.splitAfter(child);\n if (next) {\n // @ts-expect-error TODO: parameters of optimize() should be a optional\n next.optimize();\n }\n // We might be able to merge with prev now\n if (this.prev) {\n // @ts-expect-error TODO: parameters of optimize() should be a optional\n this.prev.optimize();\n }\n }\n });\n }\n\n rowOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this);\n }\n return -1;\n }\n\n table() {\n return this.parent && this.parent.parent;\n }\n}\n\nclass TableBody extends Container {\n static blotName = 'table-body';\n static tagName = 'TBODY';\n\n children: LinkedList;\n}\n\nclass TableContainer extends Container {\n static blotName = 'table-container';\n static tagName = 'TABLE';\n\n children: LinkedList;\n\n balanceCells() {\n const rows = this.descendants(TableRow);\n const maxColumns = rows.reduce((max, row) => {\n return Math.max(row.children.length, max);\n }, 0);\n rows.forEach((row) => {\n new Array(maxColumns - row.children.length).fill(0).forEach(() => {\n let value;\n if (row.children.head != null) {\n value = TableCell.formats(row.children.head.domNode);\n }\n const blot = this.scroll.create(TableCell.blotName, value);\n row.appendChild(blot);\n // @ts-expect-error TODO: parameters of optimize() should be a optional\n blot.optimize(); // Add break blot\n });\n });\n }\n\n cells(column: number) {\n return this.rows().map((row) => row.children.at(column));\n }\n\n deleteColumn(index: number) {\n // @ts-expect-error\n const [body] = this.descendant(TableBody) as TableBody[];\n if (body == null || body.children.head == null) return;\n body.children.forEach((row) => {\n const cell = row.children.at(index);\n if (cell != null) {\n cell.remove();\n }\n });\n }\n\n insertColumn(index: number) {\n // @ts-expect-error\n const [body] = this.descendant(TableBody) as TableBody[];\n if (body == null || body.children.head == null) return;\n body.children.forEach((row) => {\n const ref = row.children.at(index);\n // @ts-expect-error\n const value = TableCell.formats(row.children.head.domNode);\n const cell = this.scroll.create(TableCell.blotName, value);\n row.insertBefore(cell, ref);\n });\n }\n\n insertRow(index: number) {\n // @ts-expect-error\n const [body] = this.descendant(TableBody) as TableBody[];\n if (body == null || body.children.head == null) return;\n const id = tableId();\n const row = this.scroll.create(TableRow.blotName) as TableRow;\n body.children.head.children.forEach(() => {\n const cell = this.scroll.create(TableCell.blotName, id);\n row.appendChild(cell);\n });\n const ref = body.children.at(index);\n body.insertBefore(row, ref);\n }\n\n rows() {\n const body = this.children.head;\n if (body == null) return [];\n return body.children.map((row) => row);\n }\n}\n\nTableContainer.allowedChildren = [TableBody];\nTableBody.requiredContainer = TableContainer;\n\nTableBody.allowedChildren = [TableRow];\nTableRow.requiredContainer = TableBody;\n\nTableRow.allowedChildren = [TableCell];\nTableCell.requiredContainer = TableRow;\n\nfunction tableId() {\n const id = Math.random().toString(36).slice(2, 6);\n return `row-${id}`;\n}\n\nexport { TableCell, TableRow, TableBody, TableContainer, tableId };\n", "import Delta from 'quill-delta';\nimport { EmbedBlot, Scope } from 'parchment';\nimport Quill from '../core/quill.js';\nimport logger from '../core/logger.js';\nimport Module from '../core/module.js';\nimport type { Range } from '../core/selection.js';\n\nconst debug = logger('quill:toolbar');\n\ntype Handler = (this: Toolbar, value: any) => void;\n\nexport type ToolbarConfig = Array<\n string[] | Array>\n>;\nexport interface ToolbarProps {\n container?: HTMLElement | ToolbarConfig | null;\n handlers?: Record;\n option?: number;\n module?: boolean;\n theme?: boolean;\n}\n\nclass Toolbar extends Module {\n static DEFAULTS: ToolbarProps;\n\n container?: HTMLElement | null;\n controls: [string, HTMLElement][];\n handlers: Record;\n\n constructor(quill: Quill, options: Partial) {\n super(quill, options);\n if (Array.isArray(this.options.container)) {\n const container = document.createElement('div');\n container.setAttribute('role', 'toolbar');\n addControls(container, this.options.container);\n quill.container?.parentNode?.insertBefore(container, quill.container);\n this.container = container;\n } else if (typeof this.options.container === 'string') {\n this.container = document.querySelector(this.options.container);\n } else {\n this.container = this.options.container;\n }\n if (!(this.container instanceof HTMLElement)) {\n debug.error('Container required for toolbar', this.options);\n return;\n }\n this.container.classList.add('ql-toolbar');\n this.controls = [];\n this.handlers = {};\n if (this.options.handlers) {\n Object.keys(this.options.handlers).forEach((format) => {\n const handler = this.options.handlers?.[format];\n if (handler) {\n this.addHandler(format, handler);\n }\n });\n }\n Array.from(this.container.querySelectorAll('button, select')).forEach(\n (input) => {\n // @ts-expect-error\n this.attach(input);\n },\n );\n this.quill.on(Quill.events.EDITOR_CHANGE, () => {\n const [range] = this.quill.selection.getRange(); // quill.getSelection triggers update\n this.update(range);\n });\n }\n\n addHandler(format: string, handler: Handler) {\n this.handlers[format] = handler;\n }\n\n attach(input: HTMLElement) {\n let format = Array.from(input.classList).find((className) => {\n return className.indexOf('ql-') === 0;\n });\n if (!format) return;\n format = format.slice('ql-'.length);\n if (input.tagName === 'BUTTON') {\n input.setAttribute('type', 'button');\n }\n if (\n this.handlers[format] == null &&\n this.quill.scroll.query(format) == null\n ) {\n debug.warn('ignoring attaching to nonexistent format', format, input);\n return;\n }\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n input.addEventListener(eventName, (e) => {\n let value;\n if (input.tagName === 'SELECT') {\n // @ts-expect-error\n if (input.selectedIndex < 0) return;\n // @ts-expect-error\n const selected = input.options[input.selectedIndex];\n if (selected.hasAttribute('selected')) {\n value = false;\n } else {\n value = selected.value || false;\n }\n } else {\n if (input.classList.contains('ql-active')) {\n value = false;\n } else {\n // @ts-expect-error\n value = input.value || !input.hasAttribute('value');\n }\n e.preventDefault();\n }\n this.quill.focus();\n const [range] = this.quill.selection.getRange();\n if (this.handlers[format] != null) {\n this.handlers[format].call(this, value);\n } else if (\n // @ts-expect-error\n this.quill.scroll.query(format).prototype instanceof EmbedBlot\n ) {\n value = prompt(`Enter ${format}`); // eslint-disable-line no-alert\n if (!value) return;\n this.quill.updateContents(\n new Delta()\n // @ts-expect-error Fix me later\n .retain(range.index)\n // @ts-expect-error Fix me later\n .delete(range.length)\n .insert({ [format]: value }),\n Quill.sources.USER,\n );\n } else {\n this.quill.format(format, value, Quill.sources.USER);\n }\n this.update(range);\n });\n this.controls.push([format, input]);\n }\n\n update(range: Range | null) {\n const formats = range == null ? {} : this.quill.getFormat(range);\n this.controls.forEach((pair) => {\n const [format, input] = pair;\n if (input.tagName === 'SELECT') {\n let option: HTMLOptionElement | null = null;\n if (range == null) {\n option = null;\n } else if (formats[format] == null) {\n option = input.querySelector('option[selected]');\n } else if (!Array.isArray(formats[format])) {\n let value = formats[format];\n if (typeof value === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n }\n option = input.querySelector(`option[value=\"${value}\"]`);\n }\n if (option == null) {\n // @ts-expect-error TODO fix me later\n input.value = ''; // TODO make configurable?\n // @ts-expect-error TODO fix me later\n input.selectedIndex = -1;\n } else {\n option.selected = true;\n }\n } else if (range == null) {\n input.classList.remove('ql-active');\n input.setAttribute('aria-pressed', 'false');\n } else if (input.hasAttribute('value')) {\n // both being null should match (default values)\n // '1' should match with 1 (headers)\n const value = formats[format] as boolean | number | string | object;\n const isActive =\n value === input.getAttribute('value') ||\n (value != null && value.toString() === input.getAttribute('value')) ||\n (value == null && !input.getAttribute('value'));\n input.classList.toggle('ql-active', isActive);\n input.setAttribute('aria-pressed', isActive.toString());\n } else {\n const isActive = formats[format] != null;\n input.classList.toggle('ql-active', isActive);\n input.setAttribute('aria-pressed', isActive.toString());\n }\n });\n }\n}\nToolbar.DEFAULTS = {};\n\nfunction addButton(container: HTMLElement, format: string, value?: string) {\n const input = document.createElement('button');\n input.setAttribute('type', 'button');\n input.classList.add(`ql-${format}`);\n input.setAttribute('aria-pressed', 'false');\n if (value != null) {\n input.value = value;\n input.setAttribute('aria-label', `${format}: ${value}`);\n } else {\n input.setAttribute('aria-label', format);\n }\n container.appendChild(input);\n}\n\nfunction addControls(\n container: HTMLElement,\n groups:\n | (string | Record)[][]\n | (string | Record)[],\n) {\n if (!Array.isArray(groups[0])) {\n // @ts-expect-error\n groups = [groups];\n }\n groups.forEach((controls: any) => {\n const group = document.createElement('span');\n group.classList.add('ql-formats');\n controls.forEach((control: any) => {\n if (typeof control === 'string') {\n addButton(group, control);\n } else {\n const format = Object.keys(control)[0];\n const value = control[format];\n if (Array.isArray(value)) {\n addSelect(group, format, value);\n } else {\n addButton(group, format, value);\n }\n }\n });\n container.appendChild(group);\n });\n}\n\nfunction addSelect(\n container: HTMLElement,\n format: string,\n values: Array,\n) {\n const input = document.createElement('select');\n input.classList.add(`ql-${format}`);\n values.forEach((value) => {\n const option = document.createElement('option');\n if (value !== false) {\n option.setAttribute('value', String(value));\n } else {\n option.setAttribute('selected', 'selected');\n }\n input.appendChild(option);\n });\n container.appendChild(input);\n}\n\nToolbar.DEFAULTS = {\n container: null,\n handlers: {\n clean() {\n const range = this.quill.getSelection();\n if (range == null) return;\n if (range.length === 0) {\n const formats = this.quill.getFormat();\n Object.keys(formats).forEach((name) => {\n // Clean functionality in existing apps only clean inline formats\n if (this.quill.scroll.query(name, Scope.INLINE) != null) {\n this.quill.format(name, false, Quill.sources.USER);\n }\n });\n } else {\n this.quill.removeFormat(range.index, range.length, Quill.sources.USER);\n }\n },\n direction(value) {\n const { align } = this.quill.getFormat();\n if (value === 'rtl' && align == null) {\n this.quill.format('align', 'right', Quill.sources.USER);\n } else if (!value && align === 'right') {\n this.quill.format('align', false, Quill.sources.USER);\n }\n this.quill.format('direction', value, Quill.sources.USER);\n },\n indent(value) {\n const range = this.quill.getSelection();\n // @ts-expect-error\n const formats = this.quill.getFormat(range);\n // @ts-expect-error\n const indent = parseInt(formats.indent || 0, 10);\n if (value === '+1' || value === '-1') {\n let modifier = value === '+1' ? 1 : -1;\n if (formats.direction === 'rtl') modifier *= -1;\n this.quill.format('indent', indent + modifier, Quill.sources.USER);\n }\n },\n link(value) {\n if (value === true) {\n value = prompt('Enter link URL:'); // eslint-disable-line no-alert\n }\n this.quill.format('link', value, Quill.sources.USER);\n },\n list(value) {\n const range = this.quill.getSelection();\n // @ts-expect-error\n const formats = this.quill.getFormat(range);\n if (value === 'check') {\n if (formats.list === 'checked' || formats.list === 'unchecked') {\n this.quill.format('list', false, Quill.sources.USER);\n } else {\n this.quill.format('list', 'unchecked', Quill.sources.USER);\n }\n } else {\n this.quill.format('list', value, Quill.sources.USER);\n }\n },\n },\n};\n\nexport { Toolbar as default, addControls };\n", "import alignLeftIcon from '../assets/icons/align-left.svg';\nimport alignCenterIcon from '../assets/icons/align-center.svg';\nimport alignRightIcon from '../assets/icons/align-right.svg';\nimport alignJustifyIcon from '../assets/icons/align-justify.svg';\nimport backgroundIcon from '../assets/icons/background.svg';\nimport blockquoteIcon from '../assets/icons/blockquote.svg';\nimport boldIcon from '../assets/icons/bold.svg';\nimport cleanIcon from '../assets/icons/clean.svg';\nimport codeIcon from '../assets/icons/code.svg';\nimport colorIcon from '../assets/icons/color.svg';\nimport directionLeftToRightIcon from '../assets/icons/direction-ltr.svg';\nimport directionRightToLeftIcon from '../assets/icons/direction-rtl.svg';\nimport formulaIcon from '../assets/icons/formula.svg';\nimport headerIcon from '../assets/icons/header.svg';\nimport header2Icon from '../assets/icons/header-2.svg';\nimport header3Icon from '../assets/icons/header-3.svg';\nimport header4Icon from '../assets/icons/header-4.svg';\nimport header5Icon from '../assets/icons/header-5.svg';\nimport header6Icon from '../assets/icons/header-6.svg';\nimport italicIcon from '../assets/icons/italic.svg';\nimport imageIcon from '../assets/icons/image.svg';\nimport indentIcon from '../assets/icons/indent.svg';\nimport outdentIcon from '../assets/icons/outdent.svg';\nimport linkIcon from '../assets/icons/link.svg';\nimport listBulletIcon from '../assets/icons/list-bullet.svg';\nimport listCheckIcon from '../assets/icons/list-check.svg';\nimport listOrderedIcon from '../assets/icons/list-ordered.svg';\nimport subscriptIcon from '../assets/icons/subscript.svg';\nimport superscriptIcon from '../assets/icons/superscript.svg';\nimport strikeIcon from '../assets/icons/strike.svg';\nimport tableIcon from '../assets/icons/table.svg';\nimport underlineIcon from '../assets/icons/underline.svg';\nimport videoIcon from '../assets/icons/video.svg';\n\nexport default {\n align: {\n '': alignLeftIcon,\n center: alignCenterIcon,\n right: alignRightIcon,\n justify: alignJustifyIcon,\n },\n background: backgroundIcon,\n blockquote: blockquoteIcon,\n bold: boldIcon,\n clean: cleanIcon,\n code: codeIcon,\n 'code-block': codeIcon,\n color: colorIcon,\n direction: {\n '': directionLeftToRightIcon,\n rtl: directionRightToLeftIcon,\n },\n formula: formulaIcon,\n header: {\n '1': headerIcon,\n '2': header2Icon,\n '3': header3Icon,\n '4': header4Icon,\n '5': header5Icon,\n '6': header6Icon,\n },\n italic: italicIcon,\n image: imageIcon,\n indent: {\n '+1': indentIcon,\n '-1': outdentIcon,\n },\n link: linkIcon,\n list: {\n bullet: listBulletIcon,\n check: listCheckIcon,\n ordered: listOrderedIcon,\n },\n script: {\n sub: subscriptIcon,\n super: superscriptIcon,\n },\n strike: strikeIcon,\n table: tableIcon,\n underline: underlineIcon,\n video: videoIcon,\n};\n", "import DropdownIcon from '../assets/icons/dropdown.svg';\n\nlet optionsCounter = 0;\n\nfunction toggleAriaAttribute(element: HTMLElement, attribute: string) {\n element.setAttribute(\n attribute,\n `${!(element.getAttribute(attribute) === 'true')}`,\n );\n}\n\nclass Picker {\n select: HTMLSelectElement;\n container: HTMLElement;\n label: HTMLElement;\n\n constructor(select: HTMLSelectElement) {\n this.select = select;\n this.container = document.createElement('span');\n this.buildPicker();\n this.select.style.display = 'none';\n // @ts-expect-error Fix me later\n this.select.parentNode.insertBefore(this.container, this.select);\n\n this.label.addEventListener('mousedown', () => {\n this.togglePicker();\n });\n this.label.addEventListener('keydown', (event) => {\n switch (event.key) {\n case 'Enter':\n this.togglePicker();\n break;\n case 'Escape':\n this.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n this.select.addEventListener('change', this.update.bind(this));\n }\n\n togglePicker() {\n this.container.classList.toggle('ql-expanded');\n // Toggle aria-expanded and aria-hidden to make the picker accessible\n toggleAriaAttribute(this.label, 'aria-expanded');\n // @ts-expect-error\n toggleAriaAttribute(this.options, 'aria-hidden');\n }\n\n buildItem(option: HTMLOptionElement) {\n const item = document.createElement('span');\n // @ts-expect-error\n item.tabIndex = '0';\n item.setAttribute('role', 'button');\n item.classList.add('ql-picker-item');\n const value = option.getAttribute('value');\n if (value) {\n item.setAttribute('data-value', value);\n }\n if (option.textContent) {\n item.setAttribute('data-label', option.textContent);\n }\n item.addEventListener('click', () => {\n this.selectItem(item, true);\n });\n item.addEventListener('keydown', (event) => {\n switch (event.key) {\n case 'Enter':\n this.selectItem(item, true);\n event.preventDefault();\n break;\n case 'Escape':\n this.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n\n return item;\n }\n\n buildLabel() {\n const label = document.createElement('span');\n label.classList.add('ql-picker-label');\n label.innerHTML = DropdownIcon;\n // @ts-expect-error\n label.tabIndex = '0';\n label.setAttribute('role', 'button');\n label.setAttribute('aria-expanded', 'false');\n this.container.appendChild(label);\n return label;\n }\n\n buildOptions() {\n const options = document.createElement('span');\n options.classList.add('ql-picker-options');\n\n // Don't want screen readers to read this until options are visible\n options.setAttribute('aria-hidden', 'true');\n // @ts-expect-error\n options.tabIndex = '-1';\n\n // Need a unique id for aria-controls\n options.id = `ql-picker-options-${optionsCounter}`;\n optionsCounter += 1;\n this.label.setAttribute('aria-controls', options.id);\n\n // @ts-expect-error\n this.options = options;\n\n Array.from(this.select.options).forEach((option) => {\n const item = this.buildItem(option);\n options.appendChild(item);\n if (option.selected === true) {\n this.selectItem(item);\n }\n });\n this.container.appendChild(options);\n }\n\n buildPicker() {\n Array.from(this.select.attributes).forEach((item) => {\n this.container.setAttribute(item.name, item.value);\n });\n this.container.classList.add('ql-picker');\n this.label = this.buildLabel();\n this.buildOptions();\n }\n\n escape() {\n // Close menu and return focus to trigger label\n this.close();\n // Need setTimeout for accessibility to ensure that the browser executes\n // focus on the next process thread and after any DOM content changes\n setTimeout(() => this.label.focus(), 1);\n }\n\n close() {\n this.container.classList.remove('ql-expanded');\n this.label.setAttribute('aria-expanded', 'false');\n // @ts-expect-error\n this.options.setAttribute('aria-hidden', 'true');\n }\n\n selectItem(item: HTMLElement | null, trigger = false) {\n const selected = this.container.querySelector('.ql-selected');\n if (item === selected) return;\n if (selected != null) {\n selected.classList.remove('ql-selected');\n }\n if (item == null) return;\n item.classList.add('ql-selected');\n // @ts-expect-error Fix me later\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(\n item,\n );\n if (item.hasAttribute('data-value')) {\n // @ts-expect-error Fix me later\n this.label.setAttribute('data-value', item.getAttribute('data-value'));\n } else {\n this.label.removeAttribute('data-value');\n }\n if (item.hasAttribute('data-label')) {\n // @ts-expect-error Fix me later\n this.label.setAttribute('data-label', item.getAttribute('data-label'));\n } else {\n this.label.removeAttribute('data-label');\n }\n if (trigger) {\n this.select.dispatchEvent(new Event('change'));\n this.close();\n }\n }\n\n update() {\n let option;\n if (this.select.selectedIndex > -1) {\n const item =\n // @ts-expect-error Fix me later\n this.container.querySelector('.ql-picker-options').children[\n this.select.selectedIndex\n ];\n option = this.select.options[this.select.selectedIndex];\n // @ts-expect-error\n this.selectItem(item);\n } else {\n this.selectItem(null);\n }\n const isActive =\n option != null &&\n option !== this.select.querySelector('option[selected]');\n this.label.classList.toggle('ql-active', isActive);\n }\n}\n\nexport default Picker;\n", "import Picker from './picker.js';\n\nclass ColorPicker extends Picker {\n constructor(select: HTMLSelectElement, label: string) {\n super(select);\n this.label.innerHTML = label;\n this.container.classList.add('ql-color-picker');\n Array.from(this.container.querySelectorAll('.ql-picker-item'))\n .slice(0, 7)\n .forEach((item) => {\n item.classList.add('ql-primary');\n });\n }\n\n buildItem(option: HTMLOptionElement) {\n const item = super.buildItem(option);\n item.style.backgroundColor = option.getAttribute('value') || '';\n return item;\n }\n\n selectItem(item: HTMLElement | null, trigger?: boolean) {\n super.selectItem(item, trigger);\n const colorLabel = this.label.querySelector('.ql-color-label');\n const value = item ? item.getAttribute('data-value') || '' : '';\n if (colorLabel) {\n if (colorLabel.tagName === 'line') {\n colorLabel.style.stroke = value;\n } else {\n colorLabel.style.fill = value;\n }\n }\n }\n}\n\nexport default ColorPicker;\n", "import Picker from './picker.js';\n\nclass IconPicker extends Picker {\n defaultItem: HTMLElement | null;\n\n constructor(select: HTMLSelectElement, icons: Record) {\n super(select);\n this.container.classList.add('ql-icon-picker');\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(\n (item) => {\n item.innerHTML = icons[item.getAttribute('data-value') || ''];\n },\n );\n this.defaultItem = this.container.querySelector('.ql-selected');\n this.selectItem(this.defaultItem);\n }\n\n selectItem(target: HTMLElement | null, trigger?: boolean) {\n super.selectItem(target, trigger);\n const item = target || this.defaultItem;\n if (item != null) {\n if (this.label.innerHTML === item.innerHTML) return;\n this.label.innerHTML = item.innerHTML;\n }\n }\n}\n\nexport default IconPicker;\n", "import type Quill from '../core.js';\nimport type { Bounds } from '../core/selection.js';\n\nconst isScrollable = (el: Element) => {\n const { overflowY } = getComputedStyle(el, null);\n return overflowY !== 'visible' && overflowY !== 'clip';\n};\n\nclass Tooltip {\n quill: Quill;\n boundsContainer: HTMLElement;\n root: HTMLDivElement;\n\n constructor(quill: Quill, boundsContainer?: HTMLElement) {\n this.quill = quill;\n this.boundsContainer = boundsContainer || document.body;\n this.root = quill.addContainer('ql-tooltip');\n // @ts-expect-error\n this.root.innerHTML = this.constructor.TEMPLATE;\n if (isScrollable(this.quill.root)) {\n this.quill.root.addEventListener('scroll', () => {\n this.root.style.marginTop = `${-1 * this.quill.root.scrollTop}px`;\n });\n }\n this.hide();\n }\n\n hide() {\n this.root.classList.add('ql-hidden');\n }\n\n position(reference: Bounds) {\n const left =\n reference.left + reference.width / 2 - this.root.offsetWidth / 2;\n // root.scrollTop should be 0 if scrollContainer !== root\n const top = reference.bottom + this.quill.root.scrollTop;\n this.root.style.left = `${left}px`;\n this.root.style.top = `${top}px`;\n this.root.classList.remove('ql-flip');\n const containerBounds = this.boundsContainer.getBoundingClientRect();\n const rootBounds = this.root.getBoundingClientRect();\n let shift = 0;\n if (rootBounds.right > containerBounds.right) {\n shift = containerBounds.right - rootBounds.right;\n this.root.style.left = `${left + shift}px`;\n }\n if (rootBounds.left < containerBounds.left) {\n shift = containerBounds.left - rootBounds.left;\n this.root.style.left = `${left + shift}px`;\n }\n if (rootBounds.bottom > containerBounds.bottom) {\n const height = rootBounds.bottom - rootBounds.top;\n const verticalShift = reference.bottom - reference.top + height;\n this.root.style.top = `${top - verticalShift}px`;\n this.root.classList.add('ql-flip');\n }\n return shift;\n }\n\n show() {\n this.root.classList.remove('ql-editing');\n this.root.classList.remove('ql-hidden');\n }\n}\n\nexport default Tooltip;\n", "import { merge } from 'lodash-es';\nimport type Quill from '../core/quill.js';\nimport Emitter from '../core/emitter.js';\nimport Theme from '../core/theme.js';\nimport type { ThemeOptions } from '../core/theme.js';\nimport ColorPicker from '../ui/color-picker.js';\nimport IconPicker from '../ui/icon-picker.js';\nimport Picker from '../ui/picker.js';\nimport Tooltip from '../ui/tooltip.js';\nimport type { Range } from '../core/selection.js';\nimport type Clipboard from '../modules/clipboard.js';\nimport type History from '../modules/history.js';\nimport type Keyboard from '../modules/keyboard.js';\nimport type Uploader from '../modules/uploader.js';\nimport type Selection from '../core/selection.js';\n\nconst ALIGNS = [false, 'center', 'right', 'justify'];\n\nconst COLORS = [\n '#000000',\n '#e60000',\n '#ff9900',\n '#ffff00',\n '#008a00',\n '#0066cc',\n '#9933ff',\n '#ffffff',\n '#facccc',\n '#ffebcc',\n '#ffffcc',\n '#cce8cc',\n '#cce0f5',\n '#ebd6ff',\n '#bbbbbb',\n '#f06666',\n '#ffc266',\n '#ffff66',\n '#66b966',\n '#66a3e0',\n '#c285ff',\n '#888888',\n '#a10000',\n '#b26b00',\n '#b2b200',\n '#006100',\n '#0047b2',\n '#6b24b2',\n '#444444',\n '#5c0000',\n '#663d00',\n '#666600',\n '#003700',\n '#002966',\n '#3d1466',\n];\n\nconst FONTS = [false, 'serif', 'monospace'];\n\nconst HEADERS = ['1', '2', '3', false];\n\nconst SIZES = ['small', false, 'large', 'huge'];\n\nclass BaseTheme extends Theme {\n pickers: Picker[];\n tooltip?: Tooltip;\n\n constructor(quill: Quill, options: ThemeOptions) {\n super(quill, options);\n const listener = (e: MouseEvent) => {\n if (!document.body.contains(quill.root)) {\n document.body.removeEventListener('click', listener);\n return;\n }\n if (\n this.tooltip != null &&\n // @ts-expect-error\n !this.tooltip.root.contains(e.target) &&\n // @ts-expect-error\n document.activeElement !== this.tooltip.textbox &&\n !this.quill.hasFocus()\n ) {\n this.tooltip.hide();\n }\n if (this.pickers != null) {\n this.pickers.forEach((picker) => {\n // @ts-expect-error\n if (!picker.container.contains(e.target)) {\n picker.close();\n }\n });\n }\n };\n quill.emitter.listenDOM('click', document.body, listener);\n }\n\n addModule(name: 'clipboard'): Clipboard;\n addModule(name: 'keyboard'): Keyboard;\n addModule(name: 'uploader'): Uploader;\n addModule(name: 'history'): History;\n addModule(name: 'selection'): Selection;\n addModule(name: string): unknown;\n addModule(name: string) {\n const module = super.addModule(name);\n if (name === 'toolbar') {\n // @ts-expect-error\n this.extendToolbar(module);\n }\n return module;\n }\n\n buildButtons(\n buttons: NodeListOf,\n icons: Record | string>,\n ) {\n Array.from(buttons).forEach((button) => {\n const className = button.getAttribute('class') || '';\n className.split(/\\s+/).forEach((name) => {\n if (!name.startsWith('ql-')) return;\n name = name.slice('ql-'.length);\n if (icons[name] == null) return;\n if (name === 'direction') {\n // @ts-expect-error\n button.innerHTML = icons[name][''] + icons[name].rtl;\n } else if (typeof icons[name] === 'string') {\n // @ts-expect-error\n button.innerHTML = icons[name];\n } else {\n // @ts-expect-error\n const value = button.value || '';\n // @ts-expect-error\n if (value != null && icons[name][value]) {\n // @ts-expect-error\n button.innerHTML = icons[name][value];\n }\n }\n });\n });\n }\n\n buildPickers(\n selects: NodeListOf,\n icons: Record>,\n ) {\n this.pickers = Array.from(selects).map((select) => {\n if (select.classList.contains('ql-align')) {\n if (select.querySelector('option') == null) {\n fillSelect(select, ALIGNS);\n }\n if (typeof icons.align === 'object') {\n return new IconPicker(select, icons.align);\n }\n }\n if (\n select.classList.contains('ql-background') ||\n select.classList.contains('ql-color')\n ) {\n const format = select.classList.contains('ql-background')\n ? 'background'\n : 'color';\n if (select.querySelector('option') == null) {\n fillSelect(\n select,\n COLORS,\n format === 'background' ? '#ffffff' : '#000000',\n );\n }\n return new ColorPicker(select, icons[format] as string);\n }\n if (select.querySelector('option') == null) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS);\n } else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS);\n } else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES);\n }\n }\n return new Picker(select);\n });\n const update = () => {\n this.pickers.forEach((picker) => {\n picker.update();\n });\n };\n this.quill.on(Emitter.events.EDITOR_CHANGE, update);\n }\n}\nBaseTheme.DEFAULTS = merge({}, Theme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n formula() {\n this.quill.theme.tooltip.edit('formula');\n },\n image() {\n let fileInput = this.container.querySelector(\n 'input.ql-image[type=file]',\n );\n if (fileInput == null) {\n fileInput = document.createElement('input');\n fileInput.setAttribute('type', 'file');\n fileInput.setAttribute(\n 'accept',\n this.quill.uploader.options.mimetypes.join(', '),\n );\n fileInput.classList.add('ql-image');\n fileInput.addEventListener('change', () => {\n const range = this.quill.getSelection(true);\n this.quill.uploader.upload(range, fileInput.files);\n fileInput.value = '';\n });\n this.container.appendChild(fileInput);\n }\n fileInput.click();\n },\n video() {\n this.quill.theme.tooltip.edit('video');\n },\n },\n },\n },\n});\n\nclass BaseTooltip extends Tooltip {\n textbox: HTMLInputElement | null;\n linkRange?: Range;\n\n constructor(quill: Quill, boundsContainer?: HTMLElement) {\n super(quill, boundsContainer);\n this.textbox = this.root.querySelector('input[type=\"text\"]');\n this.listen();\n }\n\n listen() {\n // @ts-expect-error Fix me later\n this.textbox.addEventListener('keydown', (event) => {\n if (event.key === 'Enter') {\n this.save();\n event.preventDefault();\n } else if (event.key === 'Escape') {\n this.cancel();\n event.preventDefault();\n }\n });\n }\n\n cancel() {\n this.hide();\n this.restoreFocus();\n }\n\n edit(mode = 'link', preview: string | null = null) {\n this.root.classList.remove('ql-hidden');\n this.root.classList.add('ql-editing');\n if (this.textbox == null) return;\n\n if (preview != null) {\n this.textbox.value = preview;\n } else if (mode !== this.root.getAttribute('data-mode')) {\n this.textbox.value = '';\n }\n const bounds = this.quill.getBounds(this.quill.selection.savedRange);\n if (bounds != null) {\n this.position(bounds);\n }\n this.textbox.select();\n this.textbox.setAttribute(\n 'placeholder',\n this.textbox.getAttribute(`data-${mode}`) || '',\n );\n this.root.setAttribute('data-mode', mode);\n }\n\n restoreFocus() {\n this.quill.focus({ preventScroll: true });\n }\n\n save() {\n // @ts-expect-error Fix me later\n let { value } = this.textbox;\n switch (this.root.getAttribute('data-mode')) {\n case 'link': {\n const { scrollTop } = this.quill.root;\n if (this.linkRange) {\n this.quill.formatText(\n this.linkRange,\n 'link',\n value,\n Emitter.sources.USER,\n );\n delete this.linkRange;\n } else {\n this.restoreFocus();\n this.quill.format('link', value, Emitter.sources.USER);\n }\n this.quill.root.scrollTop = scrollTop;\n break;\n }\n case 'video': {\n value = extractVideoUrl(value);\n } // eslint-disable-next-line no-fallthrough\n case 'formula': {\n if (!value) break;\n const range = this.quill.getSelection(true);\n if (range != null) {\n const index = range.index + range.length;\n this.quill.insertEmbed(\n index,\n // @ts-expect-error Fix me later\n this.root.getAttribute('data-mode'),\n value,\n Emitter.sources.USER,\n );\n if (this.root.getAttribute('data-mode') === 'formula') {\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER);\n }\n this.quill.setSelection(index + 2, Emitter.sources.USER);\n }\n break;\n }\n default:\n }\n // @ts-expect-error Fix me later\n this.textbox.value = '';\n this.hide();\n }\n}\n\nfunction extractVideoUrl(url: string) {\n let match =\n url.match(\n /^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/,\n ) ||\n url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n if (match) {\n return `${match[1] || 'https'}://www.youtube.com/embed/${\n match[2]\n }?showinfo=0`;\n }\n // eslint-disable-next-line no-cond-assign\n if ((match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/))) {\n return `${match[1] || 'https'}://player.vimeo.com/video/${match[2]}/`;\n }\n return url;\n}\n\nfunction fillSelect(\n select: HTMLSelectElement,\n values: Array,\n defaultValue: unknown = false,\n) {\n values.forEach((value) => {\n const option = document.createElement('option');\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected');\n } else {\n option.setAttribute('value', String(value));\n }\n select.appendChild(option);\n });\n}\n\nexport { BaseTooltip, BaseTheme as default };\n", "import { merge } from 'lodash-es';\nimport Emitter from '../core/emitter.js';\nimport BaseTheme, { BaseTooltip } from './base.js';\nimport { Range } from '../core/selection.js';\nimport type { Bounds } from '../core/selection.js';\nimport icons from '../ui/icons.js';\nimport Quill from '../core/quill.js';\nimport type { ThemeOptions } from '../core/theme.js';\nimport type Toolbar from '../modules/toolbar.js';\nimport type { ToolbarConfig } from '../modules/toolbar.js';\n\nconst TOOLBAR_CONFIG: ToolbarConfig = [\n ['bold', 'italic', 'link'],\n [{ header: 1 }, { header: 2 }, 'blockquote'],\n];\n\nclass BubbleTooltip extends BaseTooltip {\n static TEMPLATE = [\n '',\n '
    ',\n '',\n '',\n '
    ',\n ].join('');\n\n constructor(quill: Quill, bounds?: HTMLElement) {\n super(quill, bounds);\n this.quill.on(\n Emitter.events.EDITOR_CHANGE,\n (type, range, oldRange, source) => {\n if (type !== Emitter.events.SELECTION_CHANGE) return;\n if (\n range != null &&\n range.length > 0 &&\n source === Emitter.sources.USER\n ) {\n this.show();\n // Lock our width so we will expand beyond our offsetParent boundaries\n this.root.style.left = '0px';\n this.root.style.width = '';\n this.root.style.width = `${this.root.offsetWidth}px`;\n const lines = this.quill.getLines(range.index, range.length);\n if (lines.length === 1) {\n const bounds = this.quill.getBounds(range);\n if (bounds != null) {\n this.position(bounds);\n }\n } else {\n const lastLine = lines[lines.length - 1];\n const index = this.quill.getIndex(lastLine);\n const length = Math.min(\n lastLine.length() - 1,\n range.index + range.length - index,\n );\n const indexBounds = this.quill.getBounds(new Range(index, length));\n if (indexBounds != null) {\n this.position(indexBounds);\n }\n }\n } else if (\n document.activeElement !== this.textbox &&\n this.quill.hasFocus()\n ) {\n this.hide();\n }\n },\n );\n }\n\n listen() {\n super.listen();\n // @ts-expect-error Fix me later\n this.root.querySelector('.ql-close').addEventListener('click', () => {\n this.root.classList.remove('ql-editing');\n });\n this.quill.on(Emitter.events.SCROLL_OPTIMIZE, () => {\n // Let selection be restored by toolbar handlers before repositioning\n setTimeout(() => {\n if (this.root.classList.contains('ql-hidden')) return;\n const range = this.quill.getSelection();\n if (range != null) {\n const bounds = this.quill.getBounds(range);\n if (bounds != null) {\n this.position(bounds);\n }\n }\n }, 1);\n });\n }\n\n cancel() {\n this.show();\n }\n\n position(reference: Bounds) {\n const shift = super.position(reference);\n const arrow = this.root.querySelector('.ql-tooltip-arrow');\n // @ts-expect-error\n arrow.style.marginLeft = '';\n if (shift !== 0) {\n // @ts-expect-error\n arrow.style.marginLeft = `${-1 * shift - arrow.offsetWidth / 2}px`;\n }\n return shift;\n }\n}\n\nclass BubbleTheme extends BaseTheme {\n tooltip: BubbleTooltip;\n\n constructor(quill: Quill, options: ThemeOptions) {\n if (\n options.modules.toolbar != null &&\n options.modules.toolbar.container == null\n ) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n super(quill, options);\n this.quill.container.classList.add('ql-bubble');\n }\n\n extendToolbar(toolbar: Toolbar) {\n // @ts-expect-error\n this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n if (toolbar.container != null) {\n this.tooltip.root.appendChild(toolbar.container);\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons);\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons);\n }\n }\n}\nBubbleTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link(value: string) {\n if (!value) {\n this.quill.format('link', false, Quill.sources.USER);\n } else {\n // @ts-expect-error\n this.quill.theme.tooltip.edit();\n }\n },\n },\n },\n },\n} satisfies ThemeOptions);\n\nexport { BubbleTooltip, BubbleTheme as default };\n", "import { merge } from 'lodash-es';\nimport Emitter from '../core/emitter.js';\nimport BaseTheme, { BaseTooltip } from './base.js';\nimport LinkBlot from '../formats/link.js';\nimport { Range } from '../core/selection.js';\nimport icons from '../ui/icons.js';\nimport Quill from '../core/quill.js';\nimport type { Context } from '../modules/keyboard.js';\nimport type Toolbar from '../modules/toolbar.js';\nimport type { ToolbarConfig } from '../modules/toolbar.js';\nimport type { ThemeOptions } from '../core/theme.js';\n\nconst TOOLBAR_CONFIG: ToolbarConfig = [\n [{ header: ['1', '2', '3', false] }],\n ['bold', 'italic', 'underline', 'link'],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['clean'],\n];\n\nclass SnowTooltip extends BaseTooltip {\n static TEMPLATE = [\n '',\n '',\n '',\n '',\n ].join('');\n\n preview = this.root.querySelector('a.ql-preview');\n\n listen() {\n super.listen();\n // @ts-expect-error Fix me later\n this.root\n .querySelector('a.ql-action')\n .addEventListener('click', (event) => {\n if (this.root.classList.contains('ql-editing')) {\n this.save();\n } else {\n // @ts-expect-error Fix me later\n this.edit('link', this.preview.textContent);\n }\n event.preventDefault();\n });\n // @ts-expect-error Fix me later\n this.root\n .querySelector('a.ql-remove')\n .addEventListener('click', (event) => {\n if (this.linkRange != null) {\n const range = this.linkRange;\n this.restoreFocus();\n this.quill.formatText(range, 'link', false, Emitter.sources.USER);\n delete this.linkRange;\n }\n event.preventDefault();\n this.hide();\n });\n this.quill.on(\n Emitter.events.SELECTION_CHANGE,\n (range, oldRange, source) => {\n if (range == null) return;\n if (range.length === 0 && source === Emitter.sources.USER) {\n const [link, offset] = this.quill.scroll.descendant(\n LinkBlot,\n range.index,\n );\n if (link != null) {\n this.linkRange = new Range(range.index - offset, link.length());\n const preview = LinkBlot.formats(link.domNode);\n // @ts-expect-error Fix me later\n this.preview.textContent = preview;\n // @ts-expect-error Fix me later\n this.preview.setAttribute('href', preview);\n this.show();\n const bounds = this.quill.getBounds(this.linkRange);\n if (bounds != null) {\n this.position(bounds);\n }\n return;\n }\n } else {\n delete this.linkRange;\n }\n this.hide();\n },\n );\n }\n\n show() {\n super.show();\n this.root.removeAttribute('data-mode');\n }\n}\n\nclass SnowTheme extends BaseTheme {\n constructor(quill: Quill, options: ThemeOptions) {\n if (\n options.modules.toolbar != null &&\n options.modules.toolbar.container == null\n ) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n super(quill, options);\n this.quill.container.classList.add('ql-snow');\n }\n\n extendToolbar(toolbar: Toolbar) {\n if (toolbar.container != null) {\n toolbar.container.classList.add('ql-snow');\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons);\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons);\n // @ts-expect-error\n this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n if (toolbar.container.querySelector('.ql-link')) {\n this.quill.keyboard.addBinding(\n { key: 'k', shortKey: true },\n (_range: Range, context: Context) => {\n toolbar.handlers.link.call(toolbar, !context.format.link);\n },\n );\n }\n }\n }\n}\nSnowTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link(value: string) {\n if (value) {\n const range = this.quill.getSelection();\n if (range == null || range.length === 0) return;\n let preview = this.quill.getText(range);\n if (\n /^\\S+@\\S+\\.\\S+$/.test(preview) &&\n preview.indexOf('mailto:') !== 0\n ) {\n preview = `mailto:${preview}`;\n }\n // @ts-expect-error\n const { tooltip } = this.quill.theme;\n tooltip.edit('link', preview);\n } else {\n this.quill.format('link', false, Quill.sources.USER);\n }\n },\n },\n },\n },\n} satisfies ThemeOptions);\n\nexport default SnowTheme;\n", "import Quill from './core.js';\nimport type {\n Bounds,\n DebugLevel,\n EmitterSource,\n ExpandedQuillOptions,\n QuillOptions,\n} from './core.js';\n\nimport { AlignClass, AlignStyle } from './formats/align.js';\nimport {\n DirectionAttribute,\n DirectionClass,\n DirectionStyle,\n} from './formats/direction.js';\nimport Indent from './formats/indent.js';\n\nimport Blockquote from './formats/blockquote.js';\nimport Header from './formats/header.js';\nimport List from './formats/list.js';\n\nimport { BackgroundClass, BackgroundStyle } from './formats/background.js';\nimport { ColorClass, ColorStyle } from './formats/color.js';\nimport { FontClass, FontStyle } from './formats/font.js';\nimport { SizeClass, SizeStyle } from './formats/size.js';\n\nimport Bold from './formats/bold.js';\nimport Italic from './formats/italic.js';\nimport Link from './formats/link.js';\nimport Script from './formats/script.js';\nimport Strike from './formats/strike.js';\nimport Underline from './formats/underline.js';\n\nimport Formula from './formats/formula.js';\nimport Image from './formats/image.js';\nimport Video from './formats/video.js';\n\nimport CodeBlock, { Code as InlineCode } from './formats/code.js';\n\nimport Syntax from './modules/syntax.js';\nimport Table from './modules/table.js';\nimport Toolbar from './modules/toolbar.js';\n\nimport Icons from './ui/icons.js';\nimport Picker from './ui/picker.js';\nimport ColorPicker from './ui/color-picker.js';\nimport IconPicker from './ui/icon-picker.js';\nimport Tooltip from './ui/tooltip.js';\n\nimport BubbleTheme from './themes/bubble.js';\nimport SnowTheme from './themes/snow.js';\n\nQuill.register(\n {\n 'attributors/attribute/direction': DirectionAttribute,\n\n 'attributors/class/align': AlignClass,\n 'attributors/class/background': BackgroundClass,\n 'attributors/class/color': ColorClass,\n 'attributors/class/direction': DirectionClass,\n 'attributors/class/font': FontClass,\n 'attributors/class/size': SizeClass,\n\n 'attributors/style/align': AlignStyle,\n 'attributors/style/background': BackgroundStyle,\n 'attributors/style/color': ColorStyle,\n 'attributors/style/direction': DirectionStyle,\n 'attributors/style/font': FontStyle,\n 'attributors/style/size': SizeStyle,\n },\n true,\n);\n\nQuill.register(\n {\n 'formats/align': AlignClass,\n 'formats/direction': DirectionClass,\n 'formats/indent': Indent,\n\n 'formats/background': BackgroundStyle,\n 'formats/color': ColorStyle,\n 'formats/font': FontClass,\n 'formats/size': SizeClass,\n\n 'formats/blockquote': Blockquote,\n 'formats/code-block': CodeBlock,\n 'formats/header': Header,\n 'formats/list': List,\n\n 'formats/bold': Bold,\n 'formats/code': InlineCode,\n 'formats/italic': Italic,\n 'formats/link': Link,\n 'formats/script': Script,\n 'formats/strike': Strike,\n 'formats/underline': Underline,\n\n 'formats/formula': Formula,\n 'formats/image': Image,\n 'formats/video': Video,\n\n 'modules/syntax': Syntax,\n 'modules/table': Table,\n 'modules/toolbar': Toolbar,\n\n 'themes/bubble': BubbleTheme,\n 'themes/snow': SnowTheme,\n\n 'ui/icons': Icons,\n 'ui/picker': Picker,\n 'ui/icon-picker': IconPicker,\n 'ui/color-picker': ColorPicker,\n 'ui/tooltip': Tooltip,\n },\n true,\n);\n\nexport {\n AttributeMap,\n Delta,\n Module,\n Op,\n OpIterator,\n Parchment,\n Range,\n} from './core.js';\nexport type {\n Bounds,\n DebugLevel,\n EmitterSource,\n ExpandedQuillOptions,\n QuillOptions,\n};\n\nexport default Quill;\n", "// Import ActiveAdmin - this already includes all features and Rails UJS\n// DO NOT import Rails separately as it's already included and started in ActiveAdmin\nimport '@activeadmin/activeadmin';\n\n// Import Quill from NPM and make it globally available\nimport Quill from 'quill';\nwindow.Quill = Quill;\n\n// Import the image uploader plugin if available (optional)\ntry {\n const ImageUploader = require('quill-image-uploader');\n window.ImageUploader = ImageUploader.default || ImageUploader;\n} catch(e) {\n // Image uploader is optional (silent failure)\n}\n\n// Import the Quill Editor initialization module\nimport QuillEditorModule from 'activeadmin_quill_editor';\n\n// Now that Quill is available, initialize the editors\n// This ensures proper initialization order without setTimeout hacks\nif (window.QuillEditor && window.QuillEditor.init) {\n window.QuillEditor.init();\n} else if (QuillEditorModule && QuillEditorModule.init) {\n QuillEditorModule.init();\n}"], + "mappings": "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", + "names": ["exports", "module", "longtext", "shorttext", "exports", "module", "LARGE_ARRAY_SIZE", "HASH_UNDEFINED", "MAX_SAFE_INTEGER", "argsTag", "arrayTag", "boolTag", "dateTag", "errorTag", "funcTag", "genTag", "mapTag", "numberTag", "objectTag", "promiseTag", "regexpTag", "setTag", "stringTag", "symbolTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "reRegExpChar", "reFlags", "reIsHostCtor", "reIsUint", "cloneableTags", "freeGlobal", "freeSelf", "root", "freeExports", "freeModule", "moduleExports", "arrayEach", "arrayPush", "offset", "baseTimes", "getValue", "mapToArray", "overArg", "setToArray", "arrayProto", "funcProto", "objectProto", "coreJsData", "maskSrcKey", "funcToString", "hasOwnProperty", "objectToString", "reIsNative", "Buffer", "Symbol", "Uint8Array", "getPrototype", "objectCreate", "propertyIsEnumerable", "splice", "nativeGetSymbols", "nativeIsBuffer", "nativeKeys", "DataView", "getNative", "Map", "Promise", "Set", "WeakMap", "nativeCreate", "dataViewCtorString", "toSource", "mapCtorString", "promiseCtorString", "setCtorString", "weakMapCtorString", "symbolProto", "symbolValueOf", "Hash", "hashClear", "hashDelete", "hashGet", "hashHas", "hashSet", "ListCache", "listCacheClear", "listCacheDelete", "assocIndexOf", "listCacheGet", "listCacheHas", "listCacheSet", "MapCache", "mapCacheClear", "mapCacheDelete", "getMapData", "mapCacheGet", "mapCacheHas", "mapCacheSet", "Stack", "stackClear", "stackDelete", "stackGet", "stackHas", "stackSet", "arrayLikeKeys", "isArray", "isArguments", "isIndex", "assignValue", "eq", "baseAssign", "copyObject", "keys", "baseClone", "isObject", "initCloneArray", "copyArray", "getTag", "isBuffer", "cloneBuffer", "initCloneObject", "copySymbols", "initCloneByTag", "getAllKeys", "key", "baseCreate", "baseGetAllKeys", "baseGetTag", "baseIsNative", "isMasked", "isFunction", "baseKeys", "isPrototype", "cloneArrayBuffer", "cloneDataView", "cloneRegExp", "cloneSymbol", "cloneTypedArray", "getSymbols", "isKeyable", "stubArray", "cloneDeep", "isArrayLikeObject", "isArrayLike", "isLength", "isObjectLike", "stubFalse", "require_lodash", "exports", "module", "LARGE_ARRAY_SIZE", "HASH_UNDEFINED", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "MAX_SAFE_INTEGER", "argsTag", "arrayTag", "asyncTag", "boolTag", "dateTag", "errorTag", "funcTag", "genTag", "mapTag", "numberTag", "nullTag", "objectTag", "promiseTag", "proxyTag", "regexpTag", "setTag", "stringTag", "symbolTag", "undefinedTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "reRegExpChar", "reIsHostCtor", "reIsUint", "typedArrayTags", "freeGlobal", "freeSelf", "root", "freeExports", "freeModule", "moduleExports", "freeProcess", "nodeUtil", "nodeIsTypedArray", "arrayFilter", "arrayPush", "offset", "arraySome", "baseTimes", "baseUnary", "cacheHas", "getValue", "mapToArray", "overArg", "setToArray", "arrayProto", "funcProto", "objectProto", "coreJsData", "funcToString", "hasOwnProperty", "maskSrcKey", "nativeObjectToString", "reIsNative", "Buffer", "Symbol", "Uint8Array", "propertyIsEnumerable", "splice", "symToStringTag", "nativeGetSymbols", "nativeIsBuffer", "nativeKeys", "DataView", "getNative", "Map", "Promise", "Set", "WeakMap", "nativeCreate", "dataViewCtorString", "toSource", "mapCtorString", "promiseCtorString", "setCtorString", "weakMapCtorString", "symbolProto", "symbolValueOf", "Hash", "hashClear", "hashDelete", "hashGet", "hashHas", "hashSet", "ListCache", "listCacheClear", "listCacheDelete", "assocIndexOf", "listCacheGet", "listCacheHas", "listCacheSet", "MapCache", "mapCacheClear", "mapCacheDelete", "getMapData", "mapCacheGet", "mapCacheHas", "mapCacheSet", "SetCache", "setCacheAdd", "setCacheHas", "Stack", "stackClear", "stackDelete", "stackGet", "stackHas", "stackSet", "arrayLikeKeys", "isArray", "isArguments", "isBuffer", "isTypedArray", "isIndex", "eq", "baseGetAllKeys", "baseGetTag", "getRawTag", "objectToString", "baseIsArguments", "isObjectLike", "baseIsEqual", "baseIsEqualDeep", "getTag", "equalArrays", "equalByTag", "equalObjects", "baseIsNative", "isObject", "isMasked", "isFunction", "baseIsTypedArray", "isLength", "baseKeys", "isPrototype", "othValue", "getAllKeys", "keys", "getSymbols", "isKeyable", "stubArray", "isArrayLike", "stubFalse", "isEqual", "cloneDeep", "isEqual", "AttributeMap", "exports", "Op", "exports", "offset", "next", "exports", "cloneDeep", "isEqual", "exports", "Delta", "start", "end", "offset", "module", "exports", "module", "Events", "fn", "EventEmitter", "events", "exports", "module", "csrfToken", "Events", "Instances", "Accordion", "_a", "_b", "Default", "DefaultInstanceOptions", "Collapse", "__assign", "Default", "DefaultInstanceOptions", "Carousel", "__assign", "_a", "_b", "Default", "DefaultInstanceOptions", "Dismiss", "__assign", "name", "style", "next", "getComputedStyle", "getComputedStyle", "window", "min", "max", "keys", "toPaddingObject", "popperOffsets", "min", "max", "offset", "effect", "popper", "getComputedStyle", "effect", "window", "hash", "getComputedStyle", "getComputedStyle", "clippingParents", "getComputedStyle", "reference", "popperOffsets", "offset", "placements", "placement", "placements", "placement", "_loop", "_i", "checks", "offset", "popperOffsets", "offset", "min", "max", "fn", "merged", "defaultModifiers", "defaultOptions", "createPopper", "reference", "popper", "options", "m", "fn", "state", "effect", "noopFn", "Default", "DefaultInstanceOptions", "Dropdown", "__assign", "Default", "DefaultInstanceOptions", "Modal", "__assign", "Default", "DefaultInstanceOptions", "Drawer", "__assign", "Default", "DefaultInstanceOptions", "Tabs", "__assign", "_a", "_b", "Default", "DefaultInstanceOptions", "Tooltip", "__assign", "__spreadArray", "Default", "DefaultInstanceOptions", "Popover", "__assign", "__spreadArray", "offset", "Default", "DefaultInstanceOptions", "Dial", "__assign", "Default", "DefaultInstanceOptions", "InputCounter", "__assign", "Default", "DefaultInstanceOptions", "CopyClipboard", "__assign", "href", "start", "Symbol", "objectProto", "nativeObjectToString", "symToStringTag", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "WeakMap", "objectProto", "hasOwnProperty", "start", "start", "MAX_SAFE_INTEGER", "objectProto", "objectProto", "hasOwnProperty", "Buffer", "argsTag", "funcTag", "freeExports", "freeModule", "moduleExports", "objectProto", "hasOwnProperty", "objectProto", "hasOwnProperty", "objectProto", "hasOwnProperty", "objectProto", "hasOwnProperty", "objectProto", "hasOwnProperty", "HASH_UNDEFINED", "Map", "offset", "objectTag", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "freeExports", "freeModule", "moduleExports", "Buffer", "objectProto", "propertyIsEnumerable", "nativeGetSymbols", "Promise", "Set", "mapTag", "objectTag", "setTag", "weakMapTag", "dataViewTag", "objectProto", "hasOwnProperty", "Uint8Array", "boolTag", "dateTag", "mapTag", "numberTag", "regexpTag", "setTag", "stringTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "mapTag", "setTag", "argsTag", "arrayTag", "boolTag", "dateTag", "errorTag", "funcTag", "genTag", "mapTag", "numberTag", "objectTag", "regexpTag", "setTag", "stringTag", "symbolTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "key", "CLONE_DEEP_FLAG", "CLONE_SYMBOLS_FLAG", "HASH_UNDEFINED", "othValue", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "boolTag", "dateTag", "errorTag", "mapTag", "numberTag", "regexpTag", "setTag", "stringTag", "symbolTag", "arrayBufferTag", "dataViewTag", "symbolProto", "symbolValueOf", "COMPARE_PARTIAL_FLAG", "objectProto", "hasOwnProperty", "COMPARE_PARTIAL_FLAG", "argsTag", "arrayTag", "objectTag", "objectProto", "hasOwnProperty", "Scope", "_Registry", "match", "ClassAttributor", "StyleAttributor", "_ShadowBlot", "root", "_LeafBlot", "offset", "next", "_ParentBlot", "isEqual", "_InlineBlot", "ParentBlot", "AttributorStore", "LeafBlot", "_BlockBlot", "InlineBlot", "_ContainerBlot", "_ScrollBlot", "BlockBlot", "ContainerBlot", "_TextBlot", "import_quill_delta", "import_quill_delta", "Break", "EmbedBlot", "value", "undefined", "optimize", "prev", "next", "remove", "length", "blotName", "tagName", "Text", "TextBlot", "entityMap", "escapeText", "text", "replace", "s", "Inline", "InlineBlot", "allowedChildren", "Break", "EmbedBlot", "Text", "order", "compare", "self", "other", "selfIndex", "indexOf", "otherIndex", "formatAt", "index", "length", "name", "value", "statics", "blotName", "scroll", "query", "Scope", "BLOT", "blot", "isolate", "wrap", "optimize", "context", "parent", "offset", "moveChildren", "NEWLINE_LENGTH", "Block", "BlockBlot", "cache", "delta", "blockDelta", "deleteAt", "index", "length", "formatAt", "name", "value", "scroll", "query", "Scope", "BLOCK", "format", "Math", "min", "insertAt", "def", "lines", "split", "text", "shift", "children", "tail", "block", "reduce", "lineIndex", "line", "insertBefore", "blot", "ref", "head", "Break", "remove", "moveChildren", "target", "optimize", "context", "path", "removeChild", "child", "force", "arguments", "undefined", "clone", "parent", "next", "blotName", "tagName", "defaultChild", "allowedChildren", "Inline", "EmbedBlot", "TextBlot", "BlockEmbed", "attach", "attributes", "AttributorStore", "domNode", "Delta", "insert", "formats", "values", "attribute", "BLOCK_ATTRIBUTE", "pop", "blocks", "map", "create", "forEach", "scope", "BLOCK_BLOT", "filter", "descendants", "LeafBlot", "leaf", "bubbleFormats", "statics", "Cursor", "EmbedBlot", "blotName", "className", "tagName", "CONTENTS", "value", "undefined", "constructor", "scroll", "domNode", "selection", "textNode", "document", "createTextNode", "appendChild", "savedLength", "detach", "parent", "removeChild", "format", "name", "target", "index", "statics", "scope", "Scope", "BLOCK_BLOT", "offset", "length", "optimize", "formatAt", "node", "position", "data", "remove", "restore", "composing", "range", "getNativeRange", "lastChild", "parentNode", "insertBefore", "prevTextBlot", "prev", "TextBlot", "prevTextLength", "nextTextBlot", "next", "nextText", "text", "newText", "split", "join", "mergedTextBlot", "insertAt", "newTextNode", "create", "remapOffset", "start", "end", "startNode", "startOffset", "endNode", "endOffset", "update", "mutations", "context", "some", "mutation", "type", "isolate", "unwrap", "instances_default", "WeakMap", "levels", "level", "debug", "method", "indexOf", "_len", "arguments", "length", "args", "Array", "_key", "console", "namespace", "ns", "reduce", "logger", "bind", "newLevel", "debug", "logger", "EVENTS", "forEach", "eventName", "document", "addEventListener", "_len", "arguments", "length", "args", "Array", "_key", "from", "querySelectorAll", "node", "quill", "instances", "get", "emitter", "handleDOM", "Emitter", "EventEmitter", "events", "EDITOR_CHANGE", "SCROLL_BEFORE_UPDATE", "SCROLL_BLOT_MOUNT", "SCROLL_BLOT_UNMOUNT", "SCROLL_OPTIMIZE", "SCROLL_UPDATE", "SCROLL_EMBED_UPDATE", "SELECTION_CHANGE", "TEXT_CHANGE", "COMPOSITION_BEFORE_START", "COMPOSITION_START", "COMPOSITION_BEFORE_END", "COMPOSITION_END", "sources", "API", "SILENT", "USER", "constructor", "domListeners", "on", "error", "emit", "_len2", "_key2", "log", "call", "event", "_len3", "_key3", "type", "_ref", "handler", "target", "contains", "listenDOM", "push", "debug", "logger", "Range", "constructor", "index", "length", "arguments", "undefined", "Selection", "scroll", "emitter", "composing", "mouseDown", "root", "domNode", "cursor", "create", "savedRange", "lastRange", "lastNative", "handleComposition", "handleDragging", "listenDOM", "document", "setTimeout", "update", "bind", "Emitter", "sources", "USER", "on", "events", "SCROLL_BEFORE_UPDATE", "hasFocus", "native", "getNativeRange", "start", "node", "textNode", "once", "SCROLL_UPDATE", "source", "mutations", "contains", "end", "setNativeRange", "offset", "triggeredByTyping", "some", "mutation", "type", "target", "SILENT", "ignored", "SCROLL_OPTIMIZE", "context", "range", "startNode", "startOffset", "endNode", "endOffset", "COMPOSITION_BEFORE_START", "COMPOSITION_END", "parent", "restore", "body", "focus", "preventScroll", "setRange", "format", "value", "nativeRange", "collapsed", "query", "Scope", "BLOCK", "blot", "find", "LeafBlot", "after", "split", "insertBefore", "attach", "optimize", "data", "getBounds", "scrollLength", "Math", "min", "leaf", "next", "line", "nextLine", "position", "createRange", "setStart", "setEnd", "getBoundingClientRect", "side", "rect", "Text", "Element", "bottom", "top", "height", "left", "right", "width", "selection", "getSelection", "rangeCount", "getRangeAt", "normalizeNative", "info", "getRange", "isConnected", "normalized", "normalizedToRange", "activeElement", "positions", "push", "indexes", "map", "max", "startContainer", "endContainer", "forEach", "childNodes", "lastChild", "rangeToNative", "getPosition", "inclusive", "leafOffset", "force", "parentNode", "tagName", "Array", "from", "indexOf", "removeAllRanges", "addRange", "blur", "API", "args", "oldRange", "isEqual", "SELECTION_CHANGE", "cloneDeep", "emit", "EDITOR_CHANGE", "descendant", "e", "ASCII", "Editor", "constructor", "scroll", "delta", "getDelta", "applyDelta", "update", "scrollLength", "length", "batchStart", "normalizedDelta", "normalizeDelta", "deleteDelta", "Delta", "normalizedOps", "splitOpLines", "ops", "slice", "reduce", "index", "op", "Op", "attributes", "isImplicitNewlinePrepended", "isImplicitNewlineAppended", "insert", "retain", "text", "endsWith", "descendant", "BlockEmbed", "insertAt", "line", "offset", "formats", "merge", "bubbleFormats", "Block", "leaf", "LeafBlot", "AttributeMap", "diff", "key", "Object", "keys", "isInlineEmbed", "query", "Scope", "INLINE", "TextBlot", "value", "EmbedBlot", "statics", "scope", "INLINE_BLOT", "push", "updateEmbedAt", "forEach", "name", "formatAt", "prependedLength", "addedLength", "delete", "deleteAt", "batchEnd", "optimize", "deleteText", "formatLine", "arguments", "undefined", "format", "lines", "Math", "max", "cloneDeep", "formatText", "getContents", "concat", "getFormat", "leaves", "path", "blot", "descendants", "lineFormats", "leafFormats", "map", "blots", "shift", "combineFormats", "getHTML", "lineOffset", "lineLength", "isWithinLine", "convertHTML", "getText", "filter", "join", "insertContents", "contents", "change", "insertEmbed", "embed", "insertText", "replace", "isBlank", "children", "head", "blotName", "block", "Break", "removeFormat", "suffixLength", "suffix", "mutations", "selectionInfo", "oldDelta", "type", "target", "data", "match", "find", "textBlot", "oldValue", "CursorBlot", "CONTENTS", "oldText", "newText", "relativeSelectionInfo", "oldRange", "shiftRange", "newRange", "diffDelta", "compose", "isEqual", "convertListHTML", "items", "lastIndent", "types", "endTag", "getListType", "pop", "child", "indent", "rest", "tag", "attribute", "previousType", "isRoot", "html", "escapedText", "escapeText", "replaceAll", "ParentBlot", "forEachAt", "childLength", "list", "parts", "outerHTML", "innerHTML", "domNode", "start", "end", "split", "Element", "combined", "merged", "combinedValue", "Array", "isArray", "indexOf", "_ref", "amount", "Range", "Module", "DEFAULTS", "constructor", "quill", "options", "arguments", "length", "undefined", "GUARD_TEXT", "Embed", "EmbedBlot", "constructor", "scroll", "node", "contentNode", "document", "createElement", "setAttribute", "Array", "from", "domNode", "childNodes", "forEach", "childNode", "appendChild", "leftGuard", "createTextNode", "rightGuard", "index", "offset", "restore", "range", "textNode", "text", "data", "split", "join", "prev", "TextBlot", "prevLength", "length", "insertAt", "startNode", "startOffset", "parent", "insertBefore", "create", "next", "update", "mutations", "context", "mutation", "type", "target", "Composition", "isComposing", "constructor", "scroll", "emitter", "setupListeners", "domNode", "addEventListener", "event", "handleCompositionStart", "queueMicrotask", "handleCompositionEnd", "blot", "target", "Node", "find", "Embed", "emit", "Emitter", "events", "COMPOSITION_BEFORE_START", "batchStart", "COMPOSITION_START", "COMPOSITION_BEFORE_END", "batchEnd", "COMPOSITION_END", "Theme", "DEFAULTS", "modules", "themes", "default", "constructor", "quill", "options", "init", "Object", "keys", "forEach", "name", "addModule", "ModuleClass", "import", "getParentElement", "element", "parentElement", "getRootNode", "host", "getElementRect", "rect", "getBoundingClientRect", "scaleX", "Math", "abs", "width", "offsetWidth", "scaleY", "height", "offsetHeight", "top", "right", "left", "clientWidth", "bottom", "clientHeight", "paddingValueToInt", "value", "number", "parseInt", "Number", "isNaN", "getScrollDistance", "targetStart", "targetEnd", "scrollStart", "scrollEnd", "scrollPaddingStart", "scrollPaddingEnd", "scrollRectIntoView", "root", "targetRect", "document", "ownerDocument", "current", "isDocumentBody", "body", "bounding", "window", "visualViewport", "documentElement", "style", "getComputedStyle", "scrollDistanceX", "scrollPaddingLeft", "scrollPaddingRight", "scrollDistanceY", "scrollPaddingTop", "scrollPaddingBottom", "defaultView", "scrollBy", "scrollLeft", "scrollTop", "scrolledLeft", "scrolledTop", "position", "MAX_REGISTER_ITERATIONS", "CORE_FORMATS", "createRegistryWithFormats", "formats", "sourceRegistry", "debug", "registry", "Registry", "forEach", "name", "coreBlot", "query", "register", "format", "error", "iterations", "requiredContainer", "debug", "logger", "globalRegistry", "Registry", "Parchment", "ParentBlot", "uiClass", "Quill", "DEFAULTS", "bounds", "modules", "clipboard", "keyboard", "history", "uploader", "placeholder", "readOnly", "registry", "theme", "events", "Emitter", "sources", "version", "imports", "delta", "Delta", "parchment", "Module", "Theme", "limit", "level", "find", "node", "bubble", "arguments", "length", "undefined", "instances", "get", "import", "name", "error", "register", "target", "overwrite", "attrName", "blotName", "Object", "keys", "forEach", "key", "path", "warn", "startsWith", "constructor", "container", "options", "expandConfig", "html", "innerHTML", "trim", "classList", "add", "set", "root", "addContainer", "emitter", "scrollBlotName", "ScrollBlot", "query", "Error", "scroll", "editor", "Editor", "selection", "Selection", "composition", "Composition", "addModule", "init", "on", "EDITOR_CHANGE", "type", "TEXT_CHANGE", "toggle", "isBlank", "SCROLL_UPDATE", "source", "mutations", "oldRange", "lastRange", "newRange", "getRange", "selectionInfo", "modify", "call", "update", "SCROLL_EMBED_UPDATE", "blot", "change", "retain", "offset", "statics", "USER", "contents", "convert", "text", "setContents", "clear", "setAttribute", "disable", "allowReadOnlyEdits", "refNode", "className", "document", "createElement", "insertBefore", "blur", "setRange", "deleteText", "index", "overload", "enable", "editReadOnly", "modifier", "value", "enabled", "focus", "preventScroll", "scrollSelectionIntoView", "format", "API", "range", "getSelection", "Scope", "BLOCK", "formatLine", "formatText", "setSelection", "SILENT", "formats", "getBounds", "containerBounds", "getBoundingClientRect", "bottom", "top", "height", "left", "right", "width", "getContents", "getLength", "getFormat", "getIndex", "getLeaf", "leaf", "getLine", "line", "getLines", "Number", "MAX_VALUE", "lines", "getModule", "getSemanticHTML", "getHTML", "getText", "hasFocus", "insertEmbed", "embed", "insertText", "isEnabled", "off", "once", "removeFormat", "scrollRectIntoView", "rect", "scrollIntoView", "console", "delete1", "applied", "insertContents", "delete2", "compose", "Range", "Math", "max", "setText", "insert", "updateContents", "applyDelta", "resolveSelector", "selector", "querySelector", "expandModuleConfig", "config", "entries", "reduce", "expanded", "_ref", "omitUndefinedValuesFromOptions", "obj", "fromEntries", "filter", "entry", "containerOrSelector", "shouldUseDefaultTheme", "quillModuleDefaults", "quillDefaults", "themeModuleDefaults", "themeDefaults", "userModuleOptions", "toolbar", "merge", "createRegistryWithFormats", "modulesWithDefaults", "_ref2", "moduleClass", "shift", "oldDelta", "shiftRange", "args", "emit", "lengthOrSource", "start", "end", "transformPosition", "map", "pos", "Container", "ContainerBlot", "import_quill_delta", "isLine", "blot", "Block", "BlockEmbed", "isUpdatable", "updateContent", "Scroll", "ScrollBlot", "blotName", "className", "tagName", "defaultChild", "allowedChildren", "Container", "constructor", "registry", "domNode", "_ref", "emitter", "batch", "optimize", "enable", "addEventListener", "e", "handleDragStart", "batchStart", "Array", "isArray", "batchEnd", "mutations", "update", "emitMount", "emit", "Emitter", "events", "SCROLL_BLOT_MOUNT", "emitUnmount", "SCROLL_BLOT_UNMOUNT", "emitEmbedUpdate", "change", "SCROLL_EMBED_UPDATE", "deleteAt", "index", "length", "first", "offset", "line", "last", "ref", "children", "head", "Break", "moveChildren", "remove", "enabled", "arguments", "undefined", "setAttribute", "formatAt", "format", "value", "insertAt", "def", "scroll", "query", "Scope", "BLOCK", "create", "statics", "appendChild", "endsWith", "slice", "embed", "insertBefore", "scope", "INLINE_BLOT", "wrapper", "insertContents", "delta", "renderBlocks", "deltaToRenderBlocks", "concat", "Delta", "insert", "pop", "shift", "shouldInsertNewlineChar", "type", "descendant", "key", "insertInlineContents", "newlineCharLength", "lineEndIndex", "formats", "bubbleFormats", "attributes", "AttributeMap", "diff", "Object", "keys", "forEach", "name", "refBlot", "refBlotOffset", "find", "split", "renderBlock", "block", "createBlock", "blockEmbed", "isEnabled", "getAttribute", "leaf", "path", "LeafBlot", "lines", "Number", "MAX_VALUE", "getLines", "blotIndex", "blotLength", "lengthLeft", "forEachAt", "child", "childIndex", "childLength", "push", "ContainerBlot", "context", "SCROLL_OPTIMIZE", "source", "sources", "USER", "observer", "takeRecords", "filter", "_ref2", "target", "SCROLL_BEFORE_UPDATE", "SCROLL_UPDATE", "updateEmbedAt", "b", "event", "preventDefault", "currentBlockDelta", "op", "splitted", "text", "INLINE", "entries", "_ref3", "isBlockBlot", "BLOT", "_ref4", "parent", "inlineContents", "reduce", "Op", "isInlineEmbed", "import_quill_delta", "config", "scope", "Scope", "BLOCK", "whitelist", "AlignAttribute", "Attributor", "AlignClass", "ClassAttributor", "AlignStyle", "StyleAttributor", "ColorAttributor", "StyleAttributor", "value", "domNode", "startsWith", "replace", "hex", "split", "map", "component", "parseInt", "toString", "slice", "join", "ColorClass", "ClassAttributor", "scope", "Scope", "INLINE", "ColorStyle", "BackgroundClass", "ClassAttributor", "scope", "Scope", "INLINE", "BackgroundStyle", "ColorAttributor", "CodeBlockContainer", "Container", "create", "value", "domNode", "setAttribute", "code", "index", "length", "children", "map", "child", "innerText", "join", "slice", "html", "escapeText", "CodeBlock", "Block", "TAB", "register", "Quill", "Code", "Inline", "blotName", "tagName", "className", "allowedChildren", "TextBlot", "Break", "Cursor", "requiredContainer", "config", "scope", "Scope", "BLOCK", "whitelist", "DirectionAttribute", "Attributor", "DirectionClass", "ClassAttributor", "DirectionStyle", "StyleAttributor", "config", "scope", "Scope", "INLINE", "whitelist", "FontClass", "ClassAttributor", "FontStyleAttributor", "StyleAttributor", "value", "node", "replace", "FontStyle", "SizeClass", "ClassAttributor", "scope", "Scope", "INLINE", "whitelist", "SizeStyle", "StyleAttributor", "import_quill_delta", "debug", "logger", "SHORTKEY", "test", "navigator", "platform", "Keyboard", "Module", "match", "evt", "binding", "some", "key", "which", "constructor", "quill", "options", "bindings", "Object", "keys", "forEach", "name", "addBinding", "shiftKey", "handleEnter", "metaKey", "ctrlKey", "altKey", "userAgent", "collapsed", "handleBackspace", "handleDelete", "prefix", "suffix", "handleDeleteRange", "offset", "listen", "keyBinding", "context", "arguments", "length", "undefined", "handler", "normalize", "warn", "Array", "isArray", "singleBinding", "push", "root", "addEventListener", "defaultPrevented", "isComposing", "keyCode", "concat", "matches", "filter", "blot", "Quill", "find", "target", "scroll", "range", "getSelection", "hasFocus", "line", "getLine", "index", "leafStart", "offsetStart", "getLeaf", "leafEnd", "offsetEnd", "prefixText", "TextBlot", "value", "slice", "suffixText", "curContext", "empty", "format", "getFormat", "event", "prevented", "every", "isEqual", "call", "preventDefault", "getLength", "formats", "delta", "Delta", "retain", "delete", "prev", "isPrevLineEmpty", "statics", "blotName", "curFormats", "prevFormats", "AttributeMap", "diff", "formatDelta", "compose", "updateContents", "sources", "USER", "focus", "next", "nextFormats", "deleteRange", "lineFormats", "reduce", "query", "Scope", "BLOCK", "insert", "setSelection", "SILENT", "defaultOptions", "bold", "makeFormatHandler", "italic", "underline", "indent", "outdent", "list", "makeCodeBlockHandler", "deleteText", "tab", "table", "history", "cutoff", "formatLine", "scrollSelectionIntoView", "header", "module", "getModule", "row", "cell", "getTable", "shift", "tableSide", "blockquote", "trim", "insertText", "numLines", "cur", "makeEmbedArrowHandler", "makeTableArrowHandler", "DEFAULTS", "_ref", "CodeBlock", "TAB", "lines", "getLines", "i", "insertAt", "domNode", "textContent", "startsWith", "deleteAt", "update", "where", "leaf", "EmbedBlot", "shortKey", "up", "targetRow", "parent", "targetCell", "children", "head", "Math", "min", "targetLine", "cloneDeep", "_ref2", "firstFormats", "lastFormats", "_table", "normalWeightRegexp", "blockTagNames", "isBlockElement", "element", "includes", "tagName", "normalizeEmptyLines", "doc", "Array", "from", "querySelectorAll", "filter", "br", "previousElementSibling", "nextElementSibling", "forEach", "parentNode", "removeChild", "normalizeFontWeight", "node", "getAttribute", "match", "fragment", "createDocumentFragment", "append", "childNodes", "replaceChild", "normalize", "querySelector", "ignoreRegexp", "idRegexp", "indentRegexp", "parseListItem", "element", "html", "style", "getAttribute", "idMatch", "match", "id", "Number", "indentMatch", "indent", "typeRegexp", "RegExp", "typeMatch", "type", "normalizeListItem", "doc", "msoList", "Array", "from", "querySelectorAll", "ignored", "others", "forEach", "node", "shouldIgnore", "push", "parentNode", "removeChild", "documentElement", "innerHTML", "listItems", "map", "filter", "parsed", "length", "childListItems", "current", "shift", "nextElementSibling", "ul", "document", "createElement", "listItem", "li", "setAttribute", "appendChild", "replaceChild", "slice", "_ref", "e", "normalize", "NORMALIZERS", "msWord", "googleDocs", "normalizeExternalHTML", "doc", "documentElement", "forEach", "normalize", "debug", "logger", "CLIPBOARD_CONFIG", "Node", "TEXT_NODE", "matchText", "matchNewline", "matchBreak", "ELEMENT_NODE", "matchBlot", "matchAttributor", "matchStyles", "matchIndent", "matchList", "matchCodeBlock", "matchTable", "createMatchAlias", "matchIgnore", "ATTRIBUTE_ATTRIBUTORS", "AlignAttribute", "DirectionAttribute", "reduce", "memo", "attr", "keyName", "STYLE_ATTRIBUTORS", "AlignStyle", "BackgroundStyle", "ColorStyle", "DirectionStyle", "FontStyle", "SizeStyle", "Clipboard", "Module", "DEFAULTS", "matchers", "constructor", "quill", "options", "root", "addEventListener", "e", "onCaptureCopy", "onCapturePaste", "bind", "concat", "forEach", "_ref", "selector", "matcher", "addMatcher", "push", "convert", "_ref2", "html", "text", "formats", "arguments", "length", "undefined", "CodeBlock", "blotName", "Delta", "insert", "delta", "convertHTML", "deltaEndsWith", "ops", "attributes", "table", "compose", "retain", "delete", "normalizeHTML", "doc", "normalizeExternalHTML", "DOMParser", "parseFromString", "container", "body", "nodeMatches", "WeakMap", "elementMatchers", "textMatchers", "prepareMatching", "traverse", "scroll", "dangerouslyPasteHTML", "index", "source", "Quill", "sources", "API", "setContents", "setSelection", "SILENT", "paste", "updateContents", "isCut", "defaultPrevented", "preventDefault", "range", "selection", "getRange", "onCopy", "clipboardData", "setData", "deleteRange", "normalizeURIList", "urlList", "split", "filter", "url", "join", "isEnabled", "getSelection", "getData", "files", "Array", "from", "uploader", "upload", "childElementCount", "firstElementChild", "tagName", "onPaste", "getText", "getSemanticHTML", "_ref3", "getFormat", "pastedDelta", "log", "USER", "scrollSelectionIntoView", "pair", "querySelectorAll", "node", "has", "matches", "get", "set", "applyFormat", "format", "value", "query", "newDelta", "op", "endText", "i", "slice", "isLine", "Element", "match", "prototype", "EmbedBlot", "includes", "toLowerCase", "isBetweenInlineElements", "previousElementSibling", "nextElementSibling", "preNodes", "isPre", "parentNode", "nodeType", "childNodes", "childNode", "childrenDelta", "reducedDelta", "_node", "Attributor", "keys", "classes", "ClassAttributor", "styles", "StyleAttributor", "name", "Scope", "ATTRIBUTE", "attrName", "Object", "entries", "_ref4", "embed", "BlockBlot", "language", "indent", "parent", "composed", "element", "list", "checkedAttr", "getAttribute", "HTMLParagraphElement", "nextSibling", "BlockEmbed", "firstChild", "style", "fontStyle", "italic", "textDecoration", "underline", "strike", "fontWeight", "startsWith", "parseInt", "bold", "_ref5", "parseFloat", "textIndent", "parentElement", "rows", "row", "indexOf", "data", "trim", "replace", "previousSibling", "replaceAll", "History", "Module", "DEFAULTS", "delay", "maxStack", "userOnly", "lastRecorded", "ignoreChange", "stack", "undo", "redo", "currentRange", "constructor", "quill", "options", "on", "Quill", "events", "EDITOR_CHANGE", "eventName", "value", "oldValue", "source", "SELECTION_CHANGE", "sources", "SILENT", "TEXT_CHANGE", "USER", "record", "transform", "transformRange", "keyboard", "addBinding", "key", "shortKey", "bind", "shiftKey", "test", "navigator", "platform", "root", "addEventListener", "event", "inputType", "preventDefault", "change", "dest", "length", "item", "pop", "base", "getContents", "inverseDelta", "delta", "invert", "push", "range", "updateContents", "restoreSelection", "clear", "cutoff", "changeDelta", "oldDelta", "ops", "undoDelta", "undoRange", "timestamp", "Date", "now", "compose", "shift", "transformStack", "stackItem", "setSelection", "index", "getLastChangeIndex", "scroll", "remoteDelta", "i", "oldItem", "splice", "endsWithNewlineChange", "lastOp", "insert", "endsWith", "attributes", "Object", "keys", "some", "attr", "query", "Scope", "BLOCK", "deleteLength", "reduce", "op", "delete", "changeIndex", "start", "transformPosition", "end", "import_quill_delta", "Uploader", "Module", "constructor", "quill", "options", "root", "addEventListener", "e", "preventDefault", "native", "document", "caretRangeFromPoint", "clientX", "clientY", "caretPositionFromPoint", "position", "createRange", "setStart", "offsetNode", "offset", "setEnd", "normalized", "selection", "normalizeNative", "range", "normalizedToRange", "dataTransfer", "files", "upload", "uploads", "Array", "from", "forEach", "file", "mimetypes", "includes", "type", "push", "length", "handler", "call", "DEFAULTS", "scroll", "query", "promises", "map", "Promise", "resolve", "reader", "FileReader", "onload", "result", "readAsDataURL", "all", "then", "images", "update", "reduce", "delta", "image", "insert", "Delta", "retain", "index", "delete", "updateContents", "Emitter", "sources", "USER", "setSelection", "SILENT", "import_quill_delta", "import_quill_delta", "INSERT_TYPES", "Input", "Module", "constructor", "quill", "options", "root", "addEventListener", "event", "handleBeforeInput", "test", "navigator", "userAgent", "on", "Quill", "events", "COMPOSITION_BEFORE_START", "handleCompositionStart", "deleteRange", "range", "replaceText", "text", "arguments", "length", "undefined", "formats", "getFormat", "index", "updateContents", "Delta", "retain", "insert", "sources", "USER", "setSelection", "SILENT", "composition", "isComposing", "defaultPrevented", "includes", "inputType", "staticRange", "getTargetRanges", "collapsed", "getPlainTextFromInputEvent", "normalized", "selection", "normalizeNative", "normalizedToRange", "preventDefault", "getSelection", "data", "dataTransfer", "types", "getData", "isMac", "test", "navigator", "platform", "TTL_FOR_VALID_SELECTION_CHANGE", "canMoveCaretBeforeUINode", "event", "key", "ctrlKey", "UINode", "Module", "isListening", "selectionChangeDeadline", "constructor", "quill", "options", "handleArrowKeys", "handleNavigationShortcuts", "keyboard", "addBinding", "offset", "shiftKey", "handler", "range", "_ref", "line", "ParentBlot", "uiNode", "isRTL", "getComputedStyle", "domNode", "setSelection", "index", "length", "Quill", "sources", "USER", "root", "addEventListener", "defaultPrevented", "ensureListeningToSelectionChange", "Date", "now", "listener", "handleSelectionChange", "document", "once", "selection", "getSelection", "getRangeAt", "collapsed", "startOffset", "scroll", "find", "startContainer", "newRange", "createRange", "setStartAfter", "setEndAfter", "removeAllRanges", "addRange", "Quill", "register", "Block", "BlockEmbed", "Break", "Container", "Cursor", "Embed", "Inline", "Scroll", "TextBlot", "Clipboard", "History", "Keyboard", "Uploader", "Input", "UINode", "IndentAttributor", "ClassAttributor", "add", "node", "value", "normalizedValue", "indent", "remove", "toString", "canAdd", "parseInt", "undefined", "IndentClass", "scope", "Scope", "BLOCK", "whitelist", "Blockquote", "Block", "blotName", "tagName", "Header", "Block", "blotName", "tagName", "formats", "domNode", "indexOf", "ListContainer", "Container", "blotName", "tagName", "ListItem", "Block", "create", "value", "node", "setAttribute", "formats", "domNode", "getAttribute", "undefined", "register", "Quill", "constructor", "scroll", "ui", "ownerDocument", "createElement", "listEventHandler", "e", "isEnabled", "format", "statics", "preventDefault", "addEventListener", "attachUI", "name", "allowedChildren", "requiredContainer", "Bold", "Inline", "blotName", "tagName", "create", "formats", "optimize", "context", "domNode", "statics", "replaceWith", "Italic", "Bold", "blotName", "tagName", "Link", "Inline", "blotName", "tagName", "SANITIZED_URL", "PROTOCOL_WHITELIST", "create", "value", "node", "setAttribute", "sanitize", "formats", "domNode", "getAttribute", "url", "format", "name", "statics", "constructor", "protocols", "anchor", "document", "createElement", "href", "protocol", "slice", "indexOf", "Script", "Inline", "blotName", "tagName", "create", "value", "document", "createElement", "formats", "domNode", "undefined", "Strike", "Bold", "blotName", "tagName", "Underline", "Inline", "blotName", "tagName", "Formula", "Embed", "blotName", "className", "tagName", "create", "value", "window", "katex", "Error", "node", "render", "throwOnError", "errorColor", "setAttribute", "domNode", "getAttribute", "html", "formula", "ATTRIBUTES", "Image", "EmbedBlot", "blotName", "tagName", "create", "value", "node", "setAttribute", "sanitize", "formats", "domNode", "reduce", "attribute", "hasAttribute", "getAttribute", "match", "url", "test", "format", "name", "indexOf", "removeAttribute", "ATTRIBUTES", "Video", "BlockEmbed", "blotName", "className", "tagName", "create", "value", "node", "setAttribute", "sanitize", "formats", "domNode", "reduce", "attribute", "hasAttribute", "getAttribute", "url", "Link", "format", "name", "indexOf", "removeAttribute", "html", "video", "import_quill_delta", "TokenAttributor", "ClassAttributor", "scope", "Scope", "INLINE", "CodeToken", "Inline", "formats", "node", "scroll", "domNode", "classList", "contains", "CodeBlock", "className", "parentNode", "undefined", "constructor", "value", "add", "format", "blotName", "remove", "statics", "optimize", "arguments", "unwrap", "SyntaxCodeBlock", "create", "setAttribute", "getAttribute", "register", "name", "replaceWith", "formatAt", "length", "SyntaxCodeBlockContainer", "CodeBlockContainer", "attach", "forceNext", "emitMount", "children", "forEach", "child", "index", "highlight", "forced", "head", "nodes", "Array", "from", "childNodes", "filter", "uiNode", "text", "map", "textContent", "join", "language", "cachedText", "trim", "oldDelta", "reduce", "delta", "concat", "blockDelta", "Delta", "diff", "_ref", "retain", "attributes", "Object", "keys", "includes", "html", "codeBlock", "find", "escapeText", "code", "context", "parent", "allowedChildren", "requiredContainer", "CursorBlot", "TextBlot", "BreakBlot", "lib", "versionString", "majorVersion", "split", "parseInt", "Syntax", "Module", "Quill", "quill", "options", "hljs", "Error", "languages", "memo", "_ref2", "key", "highlightBlot", "bind", "initListener", "initTimer", "on", "events", "SCROLL_BLOT_MOUNT", "blot", "select", "root", "ownerDocument", "createElement", "_ref3", "label", "option", "appendChild", "addEventListener", "focus", "attachUI", "timer", "SCROLL_OPTIMIZE", "clearTimeout", "setTimeout", "interval", "force", "selection", "composing", "update", "sources", "USER", "range", "getSelection", "blots", "descendants", "container", "SILENT", "setSelection", "line", "i", "insert", "innerHTML", "traverse", "compose", "data", "nodeText", "WeakMap", "DEFAULTS", "window", "import_quill_delta", "TableCell", "Block", "blotName", "tagName", "create", "value", "node", "setAttribute", "tableId", "formats", "domNode", "hasAttribute", "getAttribute", "undefined", "cellOffset", "parent", "children", "indexOf", "format", "name", "row", "rowOffset", "table", "TableRow", "Container", "checkMerge", "next", "head", "thisHead", "thisTail", "tail", "nextHead", "nextTail", "optimize", "context", "forEach", "child", "childFormats", "nextFormats", "splitAfter", "prev", "TableBody", "TableContainer", "balanceCells", "rows", "descendants", "maxColumns", "reduce", "max", "Math", "length", "Array", "fill", "blot", "scroll", "appendChild", "cells", "column", "map", "at", "deleteColumn", "index", "body", "descendant", "cell", "remove", "insertColumn", "ref", "insertBefore", "insertRow", "id", "allowedChildren", "requiredContainer", "random", "toString", "slice", "Table", "Module", "register", "Quill", "TableCell", "TableRow", "TableBody", "TableContainer", "constructor", "arguments", "listenBalanceCells", "balanceTables", "quill", "scroll", "descendants", "forEach", "table", "balanceCells", "deleteColumn", "cell", "getTable", "cellOffset", "update", "sources", "USER", "deleteRow", "row", "remove", "deleteTable", "offset", "setSelection", "SILENT", "range", "length", "undefined", "getSelection", "getLine", "index", "statics", "blotName", "parent", "insertColumn", "column", "shift", "rowOffset", "insertColumnLeft", "insertColumnRight", "insertRow", "children", "insertRowAbove", "insertRowBelow", "insertTable", "rows", "columns", "delta", "Array", "fill", "reduce", "memo", "text", "join", "insert", "tableId", "Delta", "retain", "updateContents", "on", "events", "SCROLL_OPTIMIZE", "mutations", "some", "mutation", "includes", "target", "tagName", "once", "TEXT_CHANGE", "old", "source", "import_quill_delta", "debug", "logger", "Toolbar", "Module", "constructor", "quill", "options", "Array", "isArray", "container", "document", "createElement", "setAttribute", "addControls", "parentNode", "insertBefore", "querySelector", "HTMLElement", "error", "classList", "add", "controls", "handlers", "Object", "keys", "forEach", "format", "handler", "addHandler", "from", "querySelectorAll", "input", "attach", "on", "Quill", "events", "EDITOR_CHANGE", "range", "selection", "getRange", "update", "find", "className", "indexOf", "slice", "length", "tagName", "scroll", "query", "warn", "eventName", "addEventListener", "e", "value", "selectedIndex", "selected", "hasAttribute", "contains", "preventDefault", "focus", "call", "prototype", "EmbedBlot", "prompt", "updateContents", "Delta", "retain", "index", "delete", "insert", "sources", "USER", "push", "formats", "getFormat", "pair", "option", "replace", "remove", "isActive", "getAttribute", "toString", "toggle", "DEFAULTS", "addButton", "appendChild", "groups", "group", "control", "addSelect", "values", "String", "clean", "getSelection", "name", "Scope", "INLINE", "removeFormat", "direction", "align", "indent", "parseInt", "modifier", "link", "list", "align", "alignLeftIcon", "center", "alignCenterIcon", "right", "alignRightIcon", "justify", "alignJustifyIcon", "background", "backgroundIcon", "blockquote", "blockquoteIcon", "bold", "boldIcon", "clean", "cleanIcon", "code", "codeIcon", "color", "colorIcon", "direction", "directionLeftToRightIcon", "rtl", "directionRightToLeftIcon", "formula", "formulaIcon", "header", "headerIcon", "header2Icon", "header3Icon", "header4Icon", "header5Icon", "header6Icon", "italic", "italicIcon", "image", "imageIcon", "indent", "indentIcon", "outdentIcon", "link", "linkIcon", "list", "bullet", "listBulletIcon", "check", "listCheckIcon", "ordered", "listOrderedIcon", "script", "sub", "subscriptIcon", "super", "superscriptIcon", "strike", "strikeIcon", "table", "tableIcon", "underline", "underlineIcon", "video", "videoIcon", "optionsCounter", "toggleAriaAttribute", "element", "attribute", "setAttribute", "getAttribute", "Picker", "constructor", "select", "container", "document", "createElement", "buildPicker", "style", "display", "parentNode", "insertBefore", "label", "addEventListener", "togglePicker", "event", "key", "escape", "preventDefault", "update", "bind", "classList", "toggle", "options", "buildItem", "option", "item", "tabIndex", "add", "value", "textContent", "selectItem", "buildLabel", "innerHTML", "DropdownIcon", "appendChild", "buildOptions", "id", "Array", "from", "forEach", "selected", "attributes", "name", "close", "setTimeout", "focus", "remove", "trigger", "arguments", "length", "undefined", "querySelector", "selectedIndex", "children", "indexOf", "hasAttribute", "removeAttribute", "dispatchEvent", "Event", "isActive", "ColorPicker", "Picker", "constructor", "select", "label", "innerHTML", "container", "classList", "add", "Array", "from", "querySelectorAll", "slice", "forEach", "item", "buildItem", "option", "style", "backgroundColor", "getAttribute", "selectItem", "trigger", "colorLabel", "querySelector", "value", "tagName", "stroke", "fill", "IconPicker", "Picker", "constructor", "select", "icons", "container", "classList", "add", "Array", "from", "querySelectorAll", "forEach", "item", "innerHTML", "getAttribute", "defaultItem", "querySelector", "selectItem", "target", "trigger", "label", "isScrollable", "el", "overflowY", "getComputedStyle", "Tooltip", "constructor", "quill", "boundsContainer", "document", "body", "root", "addContainer", "innerHTML", "TEMPLATE", "addEventListener", "style", "marginTop", "scrollTop", "hide", "classList", "add", "position", "reference", "left", "width", "offsetWidth", "top", "bottom", "remove", "containerBounds", "getBoundingClientRect", "rootBounds", "shift", "right", "height", "verticalShift", "show", "tooltip_default", "ALIGNS", "COLORS", "FONTS", "HEADERS", "SIZES", "BaseTheme", "Theme", "constructor", "quill", "options", "listener", "e", "document", "body", "contains", "root", "removeEventListener", "tooltip", "target", "activeElement", "textbox", "hasFocus", "hide", "pickers", "forEach", "picker", "container", "close", "emitter", "listenDOM", "addModule", "name", "module", "extendToolbar", "buildButtons", "buttons", "icons", "Array", "from", "button", "className", "getAttribute", "split", "startsWith", "slice", "length", "innerHTML", "rtl", "value", "buildPickers", "selects", "map", "select", "classList", "querySelector", "fillSelect", "align", "IconPicker", "format", "ColorPicker", "Picker", "update", "on", "Emitter", "events", "EDITOR_CHANGE", "DEFAULTS", "merge", "modules", "toolbar", "handlers", "formula", "theme", "edit", "image", "fileInput", "createElement", "setAttribute", "uploader", "mimetypes", "join", "add", "addEventListener", "range", "getSelection", "upload", "files", "appendChild", "click", "video", "BaseTooltip", "Tooltip", "boundsContainer", "listen", "event", "key", "save", "preventDefault", "cancel", "restoreFocus", "mode", "arguments", "undefined", "preview", "remove", "bounds", "getBounds", "selection", "savedRange", "position", "focus", "preventScroll", "scrollTop", "linkRange", "formatText", "sources", "USER", "extractVideoUrl", "index", "insertEmbed", "insertText", "setSelection", "url", "match", "values", "defaultValue", "option", "String", "TOOLBAR_CONFIG", "header", "BubbleTooltip", "BaseTooltip", "TEMPLATE", "join", "constructor", "quill", "bounds", "on", "Emitter", "events", "EDITOR_CHANGE", "type", "range", "oldRange", "source", "SELECTION_CHANGE", "length", "sources", "USER", "show", "root", "style", "left", "width", "offsetWidth", "lines", "getLines", "index", "getBounds", "position", "lastLine", "getIndex", "Math", "min", "indexBounds", "Range", "document", "activeElement", "textbox", "hasFocus", "hide", "listen", "querySelector", "addEventListener", "classList", "remove", "SCROLL_OPTIMIZE", "setTimeout", "contains", "getSelection", "cancel", "reference", "shift", "arrow", "marginLeft", "BubbleTheme", "BaseTheme", "options", "modules", "toolbar", "container", "add", "extendToolbar", "tooltip", "appendChild", "buildButtons", "querySelectorAll", "icons", "buildPickers", "DEFAULTS", "merge", "handlers", "link", "value", "format", "Quill", "theme", "edit", "TOOLBAR_CONFIG", "header", "list", "SnowTooltip", "BaseTooltip", "TEMPLATE", "join", "preview", "root", "querySelector", "listen", "addEventListener", "event", "classList", "contains", "save", "edit", "textContent", "preventDefault", "linkRange", "range", "restoreFocus", "quill", "formatText", "Emitter", "sources", "USER", "hide", "on", "events", "SELECTION_CHANGE", "oldRange", "source", "length", "link", "offset", "scroll", "descendant", "LinkBlot", "index", "Range", "formats", "domNode", "setAttribute", "show", "bounds", "getBounds", "position", "removeAttribute", "SnowTheme", "BaseTheme", "constructor", "options", "modules", "toolbar", "container", "add", "extendToolbar", "buildButtons", "querySelectorAll", "icons", "buildPickers", "tooltip", "keyboard", "addBinding", "key", "shortKey", "_range", "context", "handlers", "call", "format", "DEFAULTS", "merge", "value", "getSelection", "getText", "test", "indexOf", "theme", "Quill", "Quill", "register", "DirectionAttribute", "AlignClass", "BackgroundClass", "ColorClass", "DirectionClass", "FontClass", "SizeClass", "AlignStyle", "BackgroundStyle", "ColorStyle", "DirectionStyle", "FontStyle", "SizeStyle", "Indent", "Blockquote", "CodeBlock", "Header", "List", "Bold", "InlineCode", "Italic", "Link", "Script", "Strike", "Underline", "Formula", "Image", "Video", "Syntax", "Table", "Toolbar", "BubbleTheme", "SnowTheme", "Icons", "Picker", "IconPicker", "ColorPicker", "Tooltip", "QuillEditorModule"] +} diff --git a/spec/dummy/app/assets/config/manifest.js b/spec/dummy/app/assets/config/manifest.js index a729cf5..61f344b 100644 --- a/spec/dummy/app/assets/config/manifest.js +++ b/spec/dummy/app/assets/config/manifest.js @@ -1,3 +1,7 @@ //= link_tree ../images -//= link_directory ../stylesheets .css +//= link_directory ../javascripts .js +//= link active_admin.css +//= link active_admin.js +//= link activeadmin_quill_editor.js +//= link application.css // OFF link active_storage_db_manifest.js diff --git a/spec/dummy/app/assets/javascripts/active_admin.js b/spec/dummy/app/assets/javascripts/active_admin_legacy.js.bak similarity index 100% rename from spec/dummy/app/assets/javascripts/active_admin.js rename to spec/dummy/app/assets/javascripts/active_admin_legacy.js.bak diff --git a/spec/dummy/app/assets/javascripts/activeadmin_quill_editor.js b/spec/dummy/app/assets/javascripts/activeadmin_quill_editor.js new file mode 120000 index 0000000..a0ce660 --- /dev/null +++ b/spec/dummy/app/assets/javascripts/activeadmin_quill_editor.js @@ -0,0 +1 @@ +../../../../../vendor/assets/javascripts/activeadmin_quill_editor.js \ No newline at end of file diff --git a/spec/dummy/app/assets/javascripts/application.js b/spec/dummy/app/assets/javascripts/application.js new file mode 100644 index 0000000..24a3436 --- /dev/null +++ b/spec/dummy/app/assets/javascripts/application.js @@ -0,0 +1,2 @@ +//= require_tree ../builds +//= require activeadmin_quill_editor \ No newline at end of file diff --git a/spec/dummy/app/assets/stylesheets/active_admin.css b/spec/dummy/app/assets/stylesheets/active_admin.css new file mode 100644 index 0000000..8e8bcff --- /dev/null +++ b/spec/dummy/app/assets/stylesheets/active_admin.css @@ -0,0 +1,73 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +/* Import Quill styles */ +@import "../../../node_modules/quill/dist/quill.snow.css"; +@import "../../../node_modules/quill/dist/quill.bubble.css"; + +/* Custom Quill integration styles for ActiveAdmin */ +@layer components { + .quill-editor { + @apply border border-gray-300 rounded-md; + } + + .ql-toolbar { + @apply border-b-0 rounded-t-md; + } + + .ql-container { + @apply rounded-b-md; + } + + .ql-editor { + @apply min-h-[200px]; + } + + /* Dark mode support */ + .dark .quill-editor { + @apply border-gray-600; + } + + .dark .ql-toolbar { + @apply bg-gray-800 border-gray-600; + } + + .dark .ql-container { + @apply bg-gray-900 border-gray-600; + } + + .dark .ql-editor { + @apply text-gray-100; + } + + /* Fix toolbar button styles */ + .ql-toolbar button:hover { + @apply bg-gray-100 dark:bg-gray-700; + } + + /* Ensure icons are visible in dark mode */ + .dark .ql-toolbar button svg { + @apply text-gray-300; + } + + .dark .ql-toolbar button:hover svg { + @apply text-white; + } + + .dark .ql-toolbar .ql-stroke { + stroke: #9ca3af !important; + } + + .dark .ql-toolbar .ql-fill { + fill: #9ca3af !important; + } + + .dark .ql-toolbar button:hover .ql-stroke { + stroke: white !important; + } + + .dark .ql-toolbar button:hover .ql-fill { + fill: white !important; + } +} \ No newline at end of file diff --git a/spec/dummy/app/assets/stylesheets/active_admin.scss b/spec/dummy/app/assets/stylesheets/active_admin_legacy.scss.bak similarity index 100% rename from spec/dummy/app/assets/stylesheets/active_admin.scss rename to spec/dummy/app/assets/stylesheets/active_admin_legacy.scss.bak diff --git a/spec/dummy/app/javascript/active_admin.js b/spec/dummy/app/javascript/active_admin.js new file mode 100644 index 0000000..0e8a55e --- /dev/null +++ b/spec/dummy/app/javascript/active_admin.js @@ -0,0 +1,26 @@ +// Import ActiveAdmin - this already includes all features and Rails UJS +// DO NOT import Rails separately as it's already included and started in ActiveAdmin +import '@activeadmin/activeadmin'; + +// Import Quill from NPM and make it globally available +import Quill from 'quill'; +window.Quill = Quill; + +// Import the image uploader plugin if available (optional) +try { + const ImageUploader = require('quill-image-uploader'); + window.ImageUploader = ImageUploader.default || ImageUploader; +} catch(e) { + // Image uploader is optional (silent failure) +} + +// Import the Quill Editor initialization module +import QuillEditorModule from 'activeadmin_quill_editor'; + +// Now that Quill is available, initialize the editors +// This ensures proper initialization order without setTimeout hacks +if (window.QuillEditor && window.QuillEditor.init) { + window.QuillEditor.init(); +} else if (QuillEditorModule && QuillEditorModule.init) { + QuillEditorModule.init(); +} \ No newline at end of file diff --git a/spec/dummy/app/views/layouts/application.html.erb b/spec/dummy/app/views/layouts/application.html.erb index 24307d3..b596e7b 100644 --- a/spec/dummy/app/views/layouts/application.html.erb +++ b/spec/dummy/app/views/layouts/application.html.erb @@ -6,6 +6,7 @@ <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all' %> + <%= javascript_include_tag 'application', 'data-turbo-track': 'reload', defer: true %> diff --git a/spec/dummy/build_activeadmin_css.js b/spec/dummy/build_activeadmin_css.js new file mode 100644 index 0000000..6b104f1 --- /dev/null +++ b/spec/dummy/build_activeadmin_css.js @@ -0,0 +1,191 @@ +#!/usr/bin/env node +const fs = require('fs'); +const path = require('path'); +const { spawnSync } = require('child_process'); + +const root = __dirname; +const inputPath = path.join(root, 'app/css/active_admin_source.css'); +const vendorCssPath = path.join(root, 'node_modules/quill/dist/quill.snow.css'); +const vendorBubbleCssPath = path.join(root, 'node_modules/quill/dist/quill.bubble.css'); +const tmpPath = path.join(root, 'app/css/__aa_tmp.css'); +const outPath = path.join(root, 'app/assets/builds/active_admin.css'); + +function build() { + // Read source file + let srcContent = ''; + if (fs.existsSync(inputPath)) { + srcContent = fs.readFileSync(inputPath, 'utf8'); + } else { + // Create default source if it doesn't exist + srcContent = `@tailwind base; +@tailwind components; +@tailwind utilities;`; + } + + // Extract tailwind directives and body content + const lines = srcContent.split(/\r?\n/); + const tailwindLines = lines.filter(line => line.includes('@tailwind')); + const bodyLines = lines.filter(line => + !line.includes('@tailwind') && + !line.includes('quill/dist/quill') + ); + + const tailwindDirectives = tailwindLines.join('\n') || '@tailwind base;\n@tailwind components;\n@tailwind utilities;'; + + // Read Quill vendor CSS + let vendorCss = ''; + + if (fs.existsSync(vendorCssPath)) { + vendorCss += `\n/* Begin Quill Snow theme CSS */\n`; + vendorCss += fs.readFileSync(vendorCssPath, 'utf8'); + vendorCss += `\n/* End Quill Snow theme CSS */\n`; + } else { + console.warn('Warning: Quill Snow CSS not found at', vendorCssPath); + } + + if (fs.existsSync(vendorBubbleCssPath)) { + vendorCss += `\n/* Begin Quill Bubble theme CSS */\n`; + vendorCss += fs.readFileSync(vendorBubbleCssPath, 'utf8'); + vendorCss += `\n/* End Quill Bubble theme CSS */\n`; + } else { + console.warn('Warning: Quill Bubble CSS not found at', vendorBubbleCssPath); + } + + const body = bodyLines.join('\n'); + + // Add custom Quill styles for ActiveAdmin integration + const customStyles = ` +/* Custom Quill integration styles */ +.quill-editor { + @apply border border-gray-300 rounded-md; +} + +.ql-toolbar { + @apply border-b-0 rounded-t-md; +} + +.ql-container { + @apply rounded-b-md; +} + +.ql-editor { + @apply min-h-[200px]; +} + +/* Dark mode support */ +.dark .quill-editor { + @apply border-gray-600; +} + +.dark .ql-toolbar { + @apply bg-gray-800 border-gray-600; +} + +.dark .ql-container { + @apply bg-gray-900 border-gray-600; +} + +.dark .ql-editor { + @apply text-gray-100; +} + +/* Fix toolbar button styles */ +.ql-toolbar button:hover { + @apply bg-gray-100 dark:bg-gray-700; +} + +/* Ensure icons are visible in dark mode */ +.dark .ql-toolbar button svg { + @apply text-gray-300; +} + +.dark .ql-toolbar button:hover svg { + @apply text-white; +} + +.dark .ql-toolbar .ql-stroke { + stroke: #9ca3af !important; +} + +.dark .ql-toolbar .ql-fill { + fill: #9ca3af !important; +} + +.dark .ql-toolbar button:hover .ql-stroke { + stroke: white !important; +} + +.dark .ql-toolbar button:hover .ql-fill { + fill: white !important; +}`; + + // Combine all CSS - Tailwind directives, vendor CSS, custom styles, then body + const tmpCss = `${tailwindDirectives}\n${vendorCss}\n${customStyles}\n${body}`; + + // Create directories if they don't exist + const cssDir = path.dirname(tmpPath); + if (!fs.existsSync(cssDir)) { + fs.mkdirSync(cssDir, { recursive: true }); + } + + const buildDir = path.dirname(outPath); + if (!fs.existsSync(buildDir)) { + fs.mkdirSync(buildDir, { recursive: true }); + } + + fs.writeFileSync(tmpPath, tmpCss, 'utf8'); + + // Run tailwindcss build + const res = spawnSync('npx', [ + 'tailwindcss', + '-c', path.join(root, 'tailwind-active_admin.config.js'), + '-i', tmpPath, + '-o', outPath, + '--minify' + ], { stdio: 'inherit', cwd: root }); + + if (res.status !== 0) { + console.error('Tailwind build failed'); + process.exit(res.status || 1); + } + + // Clean up temp file + fs.unlinkSync(tmpPath); + + console.log(`ActiveAdmin CSS built successfully: ${outPath}`); + const stats = fs.statSync(outPath); + console.log(`File size: ${(stats.size / 1024).toFixed(2)} KB`); +} + +// Support watch mode +if (process.argv.includes('--watch')) { + console.log('Watching for changes...'); + + // Initial build + build(); + + // Watch for changes + const watchPaths = [ + inputPath, + path.join(root, 'tailwind-active_admin.config.js'), + path.join(root, 'app/admin'), + path.join(root, 'app/views') + ]; + + const chokidar = require('chokidar'); + const watcher = chokidar.watch(watchPaths, { + ignored: /node_modules|\.git|__aa_tmp\.css/, + persistent: true + }); + + watcher.on('change', () => { + console.log('Changes detected, rebuilding...'); + try { + build(); + } catch (err) { + console.error('Build error:', err); + } + }); +} else { + build(); +} \ No newline at end of file diff --git a/spec/dummy/config/initializers/active_admin.rb b/spec/dummy/config/initializers/active_admin.rb index 92ef9e7..87847eb 100644 --- a/spec/dummy/config/initializers/active_admin.rb +++ b/spec/dummy/config/initializers/active_admin.rb @@ -216,6 +216,9 @@ ActiveAdmin.setup do |config| # To load a javascript file: # config.register_javascript 'my_javascript.js' + # ActiveAdmin 4 with Propshaft loads assets via the application layout + # and the manifest.js file, not via register_stylesheet/register_javascript + # == CSV options # # Set the CSV builder separator diff --git a/spec/dummy/esbuild.config.js b/spec/dummy/esbuild.config.js new file mode 100644 index 0000000..4c0ecd2 --- /dev/null +++ b/spec/dummy/esbuild.config.js @@ -0,0 +1,50 @@ +#!/usr/bin/env node +const esbuild = require('esbuild'); +const path = require('path'); +const { execSync } = require('node:child_process'); + +// For development, use the local gem path +const gemPath = path.resolve(__dirname, '../..'); + +// Configuration for esbuild with proper module resolution +const config = { + entryPoints: ['app/javascript/active_admin.js'], + bundle: true, + sourcemap: true, + format: 'iife', + outdir: 'app/assets/builds', + publicPath: '/assets', + loader: { + '.js': 'js', + }, + // Define global Quill for the initialization script + define: { + 'global': 'window' + }, + // Use alias for clean imports + alias: { + 'activeadmin_quill_editor': path.join(gemPath, 'vendor/assets/javascripts/activeadmin_quill_editor.js') + } +}; + +// Check if we're in watch mode +const watchMode = process.argv.includes('--watch'); + +if (watchMode) { + // Start the build with watch mode + esbuild.context(config).then(ctx => { + ctx.watch(); + console.log('Watching for changes...'); + }).catch(error => { + console.error('Build failed:', error); + process.exit(1); + }); +} else { + // Single build + esbuild.build(config).then(() => { + console.log('Build completed'); + }).catch(error => { + console.error('Build failed:', error); + process.exit(1); + }); +} \ No newline at end of file diff --git a/spec/dummy/lib/tasks/active_admin.rake b/spec/dummy/lib/tasks/active_admin.rake new file mode 100644 index 0000000..42f191f --- /dev/null +++ b/spec/dummy/lib/tasks/active_admin.rake @@ -0,0 +1,34 @@ +namespace :active_admin do + desc "Build Active Admin Tailwind stylesheets" + task build: :environment do + command = [ + "npx", "tailwindcss", + "-i", Rails.root.join("app/assets/stylesheets/active_admin.css").to_s, + "-o", Rails.root.join("app/assets/builds/active_admin.css").to_s, + "-c", Rails.root.join("tailwind.config.js").to_s, + "-m" + ] + + system(*command, exception: true) + end + + desc "Watch Active Admin Tailwind stylesheets" + task watch: :environment do + command = [ + "npx", "tailwindcss", + "--watch", + "-i", Rails.root.join("app/assets/stylesheets/active_admin.css").to_s, + "-o", Rails.root.join("app/assets/builds/active_admin.css").to_s, + "-c", Rails.root.join("tailwind.config.js").to_s, + "-m" + ] + + system(*command) + end +end + +Rake::Task["assets:precompile"].enhance(["active_admin:build"]) + +Rake::Task["test:prepare"].enhance(["active_admin:build"]) if Rake::Task.task_defined?("test:prepare") +Rake::Task["spec:prepare"].enhance(["active_admin:build"]) if Rake::Task.task_defined?("spec:prepare") +Rake::Task["db:test:prepare"].enhance(["active_admin:build"]) if Rake::Task.task_defined?("db:test:prepare") \ No newline at end of file diff --git a/spec/dummy/package-lock.json b/spec/dummy/package-lock.json new file mode 100644 index 0000000..c3f01a4 --- /dev/null +++ b/spec/dummy/package-lock.json @@ -0,0 +1,2041 @@ +{ + "name": "activeadmin-quill-editor-test-app", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "activeadmin-quill-editor-test-app", + "version": "1.0.0", + "dependencies": { + "@activeadmin/activeadmin": "^4.0.0-beta16", + "@rails/ujs": "^7.1.3", + "quill": "^2.0.2" + }, + "devDependencies": { + "esbuild": "^0.19.5", + "tailwindcss": "^3.4.1" + } + }, + "node_modules/@activeadmin/activeadmin": { + "version": "4.0.0-beta9", + "resolved": "https://registry.npmjs.org/@activeadmin/activeadmin/-/activeadmin-4.0.0-beta9.tgz", + "integrity": "sha512-nsUSI4M5Zrujyjw92yQv/cV2edj7E6+D1HNZG0zqz98miPOxzPBJDXwpvQkE/iYSIeqc99NlLobFHxYXuzeB7Q==", + "license": "MIT", + "dependencies": { + "@rails/ujs": "7.1.2", + "flowbite": "2.3.0" + } + }, + "node_modules/@activeadmin/activeadmin/node_modules/@rails/ujs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@rails/ujs/-/ujs-7.1.2.tgz", + "integrity": "sha512-c5x02djEKEVVE4qfN4XgElJS4biM0xxtIVpcJ0ZHLK116U19rowTtmD0AJ/RCb3Xaewa4GPIWLlwgeC0dCQqzw==", + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rails/ujs": { + "version": "7.1.502", + "resolved": "https://registry.npmjs.org/@rails/ujs/-/ujs-7.1.502.tgz", + "integrity": "sha512-SFtA5X59BimNG8cy60pgZhPf1bGpg5KXVYF6Jj5H5hrwwNXKNmD2yNZhHC+WfuLqBN+972cZHR9Fto6nJQz+Xw==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flowbite": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.3.0.tgz", + "integrity": "sha512-pm3JRo8OIJHGfFYWgaGpPv8E+UdWy0Z3gEAGufw+G/1dusaU/P1zoBLiQpf2/+bYAi+GBQtPVG86KYlV0W+AFQ==", + "license": "MIT", + "dependencies": { + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parchment": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz", + "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==", + "license": "BSD-3-Clause" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quill": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz", + "integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==", + "license": "BSD-3-Clause", + "dependencies": { + "eventemitter3": "^5.0.1", + "lodash-es": "^4.17.21", + "parchment": "^3.0.0", + "quill-delta": "^5.1.0" + }, + "engines": { + "npm": ">=8.2.3" + } + }, + "node_modules/quill-delta": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", + "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", + "license": "MIT", + "dependencies": { + "fast-diff": "^1.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + } + } +} diff --git a/spec/dummy/package.json b/spec/dummy/package.json new file mode 100644 index 0000000..cd87fb9 --- /dev/null +++ b/spec/dummy/package.json @@ -0,0 +1,21 @@ +{ + "name": "activeadmin-quill-editor-test-app", + "version": "1.0.0", + "private": true, + "scripts": { + "build:js": "node esbuild.config.js", + "build:css": "bundle exec rake active_admin:build", + "build": "npm run build:js && npm run build:css", + "watch:js": "node esbuild.config.js --watch", + "watch:css": "bundle exec rake active_admin:watch" + }, + "dependencies": { + "@activeadmin/activeadmin": "^4.0.0-beta16", + "@rails/ujs": "^7.1.3", + "quill": "^2.0.2" + }, + "devDependencies": { + "esbuild": "^0.19.5", + "tailwindcss": "^3.4.1" + } +} \ No newline at end of file diff --git a/spec/dummy/tailwind.config.js b/spec/dummy/tailwind.config.js new file mode 100644 index 0000000..aa98ea9 --- /dev/null +++ b/spec/dummy/tailwind.config.js @@ -0,0 +1,117 @@ +const execSync = require('child_process').execSync; +const activeAdminPath = execSync('bundle show activeadmin', { encoding: 'utf-8' }).trim(); + +module.exports = { + content: [ + `${activeAdminPath}/vendor/javascript/flowbite.js`, + `${activeAdminPath}/plugin.js`, + `${activeAdminPath}/app/views/**/*.{arb,erb,html,rb}`, + './app/admin/**/*.{arb,erb,html,rb}', + './app/views/active_admin/**/*.{arb,erb,html,rb}', + './app/views/admin/**/*.{arb,erb,html,rb}', + './app/javascript/**/*.js', + // Quill editor gem files + '../../lib/**/*.rb', + '../../app/**/*.rb' + ], + darkMode: "class", + plugins: [ + require('@activeadmin/activeadmin/plugin') + ], + theme: { + extend: { + // Add any custom theme extensions here + } + }, + // CRITICAL: Safelist for ActiveAdmin 4 dynamic classes + safelist: [ + // Grid and layout + 'grid', 'gap-4', 'gap-6', 'lg:grid-cols-3', 'md:grid-cols-2', + 'col-span-2', 'col-span-3', 'lg:col-span-2', 'lg:col-span-1', + // Flexbox + 'flex', 'inline-flex', 'flex-col', 'flex-row', 'flex-wrap', 'flex-nowrap', + 'justify-start', 'justify-end', 'justify-center', 'justify-between', 'justify-around', + 'items-start', 'items-end', 'items-center', 'items-baseline', 'items-stretch', + // Spacing + 'space-x-4', 'space-y-4', 'space-x-2', 'space-y-2', + 'p-0', 'p-1', 'p-2', 'p-3', 'p-4', 'p-5', 'p-6', 'p-8', + 'px-0', 'px-1', 'px-2', 'px-3', 'px-4', 'px-5', 'px-6', 'px-8', + 'py-0', 'py-1', 'py-2', 'py-3', 'py-4', 'py-5', 'py-6', 'py-8', + 'm-0', 'm-1', 'm-2', 'm-3', 'm-4', 'm-5', 'm-6', 'm-8', + 'mx-0', 'mx-1', 'mx-2', 'mx-3', 'mx-4', 'mx-5', 'mx-6', 'mx-8', 'mx-auto', + 'my-0', 'my-1', 'my-2', 'my-3', 'my-4', 'my-5', 'my-6', 'my-8', 'my-auto', + 'mt-0', 'mt-1', 'mt-2', 'mt-3', 'mt-4', 'mt-5', 'mt-6', 'mt-8', + 'mb-0', 'mb-1', 'mb-2', 'mb-3', 'mb-4', 'mb-5', 'mb-6', 'mb-8', + 'ml-0', 'ml-1', 'ml-2', 'ml-3', 'ml-4', 'ml-5', 'ml-6', 'ml-8', 'ml-auto', + 'mr-0', 'mr-1', 'mr-2', 'mr-3', 'mr-4', 'mr-5', 'mr-6', 'mr-8', 'mr-auto', + // Display + 'block', 'inline-block', 'inline', 'hidden', 'table', 'table-cell', 'table-row', + 'lg:block', 'lg:inline-block', 'lg:hidden', 'lg:flex', + 'md:block', 'md:inline-block', 'md:hidden', 'md:flex', + 'sm:block', 'sm:inline-block', 'sm:hidden', 'sm:flex', + // Width/Height + 'w-full', 'w-auto', 'w-1/2', 'w-1/3', 'w-2/3', 'w-1/4', 'w-3/4', + 'w-12', 'w-16', 'w-20', 'w-24', 'w-32', 'w-48', 'w-64', 'w-96', + 'h-full', 'h-screen', 'h-auto', 'h-12', 'h-16', 'h-32', 'h-64', + 'min-h-screen', 'min-h-full', 'max-w-7xl', 'max-w-full', + // Typography + 'text-xs', 'text-sm', 'text-base', 'text-lg', 'text-xl', 'text-2xl', 'text-3xl', + 'font-thin', 'font-light', 'font-normal', 'font-medium', 'font-semibold', 'font-bold', + 'text-left', 'text-center', 'text-right', 'text-justify', + 'uppercase', 'lowercase', 'capitalize', 'normal-case', + 'italic', 'not-italic', + 'leading-none', 'leading-tight', 'leading-normal', 'leading-loose', + // Colors (for dynamic theme) + 'text-gray-50', 'text-gray-100', 'text-gray-200', 'text-gray-300', 'text-gray-400', + 'text-gray-500', 'text-gray-600', 'text-gray-700', 'text-gray-800', 'text-gray-900', + 'bg-white', 'bg-gray-50', 'bg-gray-100', 'bg-gray-200', 'bg-gray-300', + 'bg-gray-400', 'bg-gray-500', 'bg-gray-600', 'bg-gray-700', 'bg-gray-800', 'bg-gray-900', + 'bg-transparent', + 'border-gray-100', 'border-gray-200', 'border-gray-300', 'border-gray-400', + 'border-gray-500', 'border-gray-600', 'border-gray-700', 'border-gray-800', + // Dark mode + 'dark:bg-gray-700', 'dark:bg-gray-800', 'dark:bg-gray-900', + 'dark:text-gray-50', 'dark:text-gray-100', 'dark:text-gray-200', 'dark:text-gray-300', 'dark:text-gray-400', + 'dark:text-white', + 'dark:border-gray-600', 'dark:border-gray-700', 'dark:border-gray-800', + // Borders and Rounding + 'border', 'border-0', 'border-2', 'border-4', 'border-8', + 'border-t', 'border-b', 'border-l', 'border-r', + 'border-t-0', 'border-b-0', 'border-l-0', 'border-r-0', + 'rounded', 'rounded-sm', 'rounded-md', 'rounded-lg', 'rounded-xl', 'rounded-2xl', 'rounded-full', + 'rounded-t', 'rounded-b', 'rounded-l', 'rounded-r', + 'rounded-t-md', 'rounded-b-md', 'rounded-l-md', 'rounded-r-md', + // Shadows + 'shadow-none', 'shadow-sm', 'shadow', 'shadow-md', 'shadow-lg', 'shadow-xl', 'shadow-2xl', + // Overflow + 'overflow-auto', 'overflow-hidden', 'overflow-visible', 'overflow-scroll', + 'overflow-x-auto', 'overflow-x-hidden', 'overflow-x-visible', 'overflow-x-scroll', + 'overflow-y-auto', 'overflow-y-hidden', 'overflow-y-visible', 'overflow-y-scroll', + // Position + 'static', 'fixed', 'absolute', 'relative', 'sticky', + 'top-0', 'right-0', 'bottom-0', 'left-0', + 'inset-0', 'inset-x-0', 'inset-y-0', + // Z-index + 'z-0', 'z-10', 'z-20', 'z-30', 'z-40', 'z-50', 'z-auto', + // Opacity + 'opacity-0', 'opacity-25', 'opacity-50', 'opacity-75', 'opacity-100', + // Cursor + 'cursor-auto', 'cursor-pointer', 'cursor-not-allowed', 'cursor-wait', + // Forms + 'form-input', 'form-select', 'form-checkbox', 'form-radio', + // Tables + 'table-auto', 'table-fixed', 'border-collapse', 'border-separate', + // Transitions + 'transition', 'transition-all', 'transition-colors', 'transition-opacity', + 'duration-75', 'duration-100', 'duration-150', 'duration-200', 'duration-300', + 'ease-in', 'ease-out', 'ease-in-out', 'ease-linear', + // Transform + 'transform', 'transform-none', + 'scale-90', 'scale-95', 'scale-100', 'scale-105', 'scale-110', + // Visibility + 'visible', 'invisible', + // Quill specific classes + 'ql-toolbar', 'ql-container', 'ql-editor', 'quill-editor', + 'ql-snow', 'ql-bubble' + ] +}; \ No newline at end of file diff --git a/spec/support/javascript_helper.rb b/spec/support/javascript_helper.rb new file mode 100644 index 0000000..62735c8 --- /dev/null +++ b/spec/support/javascript_helper.rb @@ -0,0 +1,118 @@ +# frozen_string_literal: true + +module JavaScriptHelper + def ensure_quill_loaded + # Wait for Quill to be available + Timeout.timeout(10) do + loop do + quill_loaded = page.evaluate_script('typeof Quill !== "undefined"') + break if quill_loaded + sleep 0.1 + end + end + + # Wait for initialization script to be loaded + Timeout.timeout(10) do + loop do + init_loaded = page.evaluate_script(<<~JS) + typeof getQuillEditors === 'function' && + typeof getQuillEditorByIndex === 'function' && + typeof getQuillEditorByElementId === 'function' + JS + break if init_loaded + sleep 0.1 + end + end + rescue Timeout::Error + raise 'Quill editor failed to load within timeout' + end + + def wait_for_quill_editor(selector = '[data-aa-quill-editor]') + expect(page).to have_css(selector, wait: 5) + ensure_quill_loaded + + # Wait for the editor to be initialized + page.evaluate_script(<<~JS) + (function() { + const editor = document.querySelector('#{selector}'); + if (!editor || !editor._quillEditor) return false; + return true; + })() + JS + end + + def get_quill_content(index = 0) + page.evaluate_script("getQuillEditorByIndex(#{index})?.root.innerHTML") + end + + def set_quill_content(content, index = 0) + page.evaluate_script(<<~JS) + (function() { + const editor = getQuillEditorByIndex(#{index}); + if (editor) { + editor.root.innerHTML = '#{content.gsub("'", "\\\\'")}'; + return true; + } + return false; + })() + JS + end + + def format_quill_text(format, index = 0) + page.evaluate_script(<<~JS) + (function() { + const editor = getQuillEditorByIndex(#{index}); + if (editor) { + editor.selectAll(); + editor.format('#{format}', true); + return true; + } + return false; + })() + JS + end + + def insert_quill_text(text, index = 0) + page.evaluate_script(<<~JS) + (function() { + const editor = getQuillEditorByIndex(#{index}); + if (editor) { + const length = editor.getLength(); + editor.insertText(length - 1, '#{text.gsub("'", "\\\\'")}'); + return true; + } + return false; + })() + JS + end + + def quill_editor_count + page.evaluate_script('getQuillEditors().length') + end + + def quill_has_content?(text, index = 0) + content = get_quill_content(index) + return false unless content + content.include?(text) + end + + def click_quill_toolbar_button(button_class, index = 0) + page.evaluate_script(<<~JS) + (function() { + const editors = document.querySelectorAll('[data-aa-quill-editor]'); + if (editors[#{index}]) { + const button = editors[#{index}].querySelector('.ql-toolbar .#{button_class}'); + if (button) { + button.click(); + return true; + } + } + return false; + })() + JS + end +end + +RSpec.configure do |config| + config.include JavaScriptHelper, type: :system +end \ No newline at end of file diff --git a/spec/system/css_loading_spec.rb b/spec/system/css_loading_spec.rb new file mode 100644 index 0000000..e2dab4c --- /dev/null +++ b/spec/system/css_loading_spec.rb @@ -0,0 +1,161 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'CSS Loading', type: :system do + before do + # Create an admin user if authentication is enabled + if defined?(AdminUser) + AdminUser.create!(email: 'admin@example.com', password: 'password') + end + end + + context 'when loading Quill editor CSS' do + it 'loads Quill CSS from local assets' do + visit '/admin' + + # Check that Quill CSS is loaded from local assets (not CDN) + quill_stylesheets = page.evaluate_script(<<~JS) + Array.from(document.styleSheets).filter(sheet => { + try { + return sheet.href && (sheet.href.includes('quill') || + (sheet.cssRules && Array.from(sheet.cssRules).some(rule => + rule.cssText && rule.cssText.includes('.ql-')))) + } catch(e) { + return false; + } + }).map(sheet => sheet.href || 'inline') + JS + + expect(quill_stylesheets).not_to be_empty + + # Ensure no CDN URLs + quill_stylesheets.each do |href| + next if href == 'inline' + expect(href).not_to match(%r{https?://cdn}) + expect(href).not_to match(%r{jsdelivr}) + expect(href).not_to match(%r{unpkg}) + expect(href).to match(%r{/assets/}) if href != 'inline' + end + end + + it 'properly bundles Quill CSS with ActiveAdmin CSS' do + visit '/admin' + + # Check for ActiveAdmin CSS + aa_styles_loaded = page.evaluate_script(<<~JS) + window.getComputedStyle(document.body).fontFamily !== '' + JS + expect(aa_styles_loaded).to be true + + # Check for Quill-specific CSS classes + quill_css_loaded = page.evaluate_script(<<~JS) + Array.from(document.styleSheets).some(sheet => { + try { + return sheet.cssRules && Array.from(sheet.cssRules).some(rule => + rule.selectorText && ( + rule.selectorText.includes('.ql-container') || + rule.selectorText.includes('.ql-editor') || + rule.selectorText.includes('.ql-toolbar') + ) + ); + } catch(e) { + return false; + } + }) + JS + expect(quill_css_loaded).to be true + end + + it 'applies Quill styles correctly when editor is present' do + # Create a test model with Quill editor + post = Post.create!(title: 'Test Post', description: '

    Test content

    ') + visit "/admin/posts/#{post.id}/edit" + + # Wait for editor to load + expect(page).to have_css('[data-aa-quill-editor]', wait: 5) + + # Check that Quill styles are applied + editor_styles = page.evaluate_script(<<~JS) + (function() { + const editor = document.querySelector('.ql-container'); + if (!editor) return null; + const styles = window.getComputedStyle(editor); + return { + position: styles.position, + display: styles.display, + hasBackground: styles.backgroundColor !== '' && styles.backgroundColor !== 'rgba(0, 0, 0, 0)' + }; + })() + JS + + expect(editor_styles).not_to be_nil + expect(editor_styles['display']).not_to eq('none') + expect(editor_styles['hasBackground']).to be true + + # Check toolbar styles + toolbar_visible = page.evaluate_script(<<~JS) + (function() { + const toolbar = document.querySelector('.ql-toolbar'); + if (!toolbar) return false; + const styles = window.getComputedStyle(toolbar); + return styles.display !== 'none' && styles.visibility !== 'hidden'; + })() + JS + + expect(toolbar_visible).to be true + end + + it 'includes both snow and bubble theme CSS' do + visit '/admin' + + # Check for snow theme CSS + snow_theme_loaded = page.evaluate_script(<<~JS) + Array.from(document.styleSheets).some(sheet => { + try { + return sheet.cssRules && Array.from(sheet.cssRules).some(rule => + rule.selectorText && rule.selectorText.includes('.ql-snow') + ); + } catch(e) { + return false; + } + }) + JS + + # Check for bubble theme CSS (if included) + bubble_theme_loaded = page.evaluate_script(<<~JS) + Array.from(document.styleSheets).some(sheet => { + try { + return sheet.cssRules && Array.from(sheet.cssRules).some(rule => + rule.selectorText && rule.selectorText.includes('.ql-bubble') + ); + } catch(e) { + return false; + } + }) + JS + + expect(snow_theme_loaded).to be true + # Bubble theme is optional + # expect(bubble_theme_loaded).to be true + end + + it 'does not load duplicate Quill CSS files' do + visit '/admin' + + # Count Quill CSS references + quill_css_count = page.evaluate_script(<<~JS) + Array.from(document.styleSheets).filter(sheet => { + try { + return sheet.href && sheet.href.includes('quill'); + } catch(e) { + return false; + } + }).length + JS + + # Should have at most one bundled CSS file with Quill styles + expect(quill_css_count).to be <= 1 + end + end +end \ No newline at end of file diff --git a/vendor/assets/javascripts/activeadmin_quill_editor.js b/vendor/assets/javascripts/activeadmin_quill_editor.js new file mode 100644 index 0000000..e46a5dc --- /dev/null +++ b/vendor/assets/javascripts/activeadmin_quill_editor.js @@ -0,0 +1,220 @@ +(function() { + 'use strict'; + + // Default configuration + const defaultTheme = 'snow'; + const defaultToolbar = [ + ['bold', 'italic', 'underline'], + ['link', 'blockquote', 'code-block'], + [{ 'script': 'sub' }, { 'script': 'super' }], + [{ 'align': [] }, { list: 'ordered' }, { list: 'bullet' }], + [{ 'color': [] }, { 'background': [] }], + ['image'], + ['clean'], + ]; + + let registeredPlugins = {}; + + // Initialize a single Quill editor + function initQuillEditor(container) { + // Check if Quill is available + if (typeof window.Quill === 'undefined') { + return; + } + + // Check if already initialized + if (!container || container.classList.contains('quill-editor--active')) { + return; + } + + const content = container.querySelector('[data-aa-quill-content]'); + if (!content) return; + + // Setup editor options + const options = container.getAttribute('data-options') ? + JSON.parse(container.getAttribute('data-options')) : {}; + + if (!options.theme) options.theme = defaultTheme; + if (!options.modules) options.modules = {}; + if (!options.modules.toolbar) options.modules.toolbar = defaultToolbar; + + // Setup plugin options + const pluginOptions = container.getAttribute('data-plugins') ? + JSON.parse(container.getAttribute('data-plugins')) : {}; + + // Handle image uploader plugin if configured + if (pluginOptions.image_uploader && pluginOptions.image_uploader.server_url) { + if (!registeredPlugins.image_uploader && typeof window.ImageUploader !== 'undefined') { + window.Quill.register('modules/imageUploader', window.ImageUploader); + registeredPlugins.image_uploader = true; + } + const opts = pluginOptions.image_uploader; + options.modules.imageUploader = setupImageUploader(opts.server_url, opts.field_name); + } + + // Initialize Quill editor + const editor = new window.Quill(content, options); + container._quillEditor = editor; + container.classList.add('quill-editor--active'); + + // Store reference for form submission + const input = container.querySelector('input[type="hidden"]'); + if (input) { + container._quillInput = input; + } + + return editor; + } + + // Initialize all Quill editors on the page + function initQuillEditors() { + // Don't retry here - expect Quill to be available when called + if (typeof window.Quill === 'undefined') { + console.error('Quill is not available. Please ensure Quill is loaded before initializing editors.'); + return; + } + + const editors = document.querySelectorAll('[data-aa-quill-editor]'); + editors.forEach(initQuillEditor); + + // Setup form submission handler + setupFormSubmission(); + } + + // Setup form submission to update hidden inputs + function setupFormSubmission() { + const forms = document.querySelectorAll('form.formtastic'); + + forms.forEach(function(form) { + // Check if already setup + if (form._quillSubmitHandler) return; + + form._quillSubmitHandler = true; + form.addEventListener('submit', function(e) { + updateQuillInputs(form); + }); + }); + } + + // Update hidden inputs with editor content before form submission + function updateQuillInputs(form) { + const editors = form.querySelectorAll('[data-aa-quill-editor]'); + + editors.forEach(function(container) { + const editor = container._quillEditor; + const input = container._quillInput; + + if (editor && input) { + if (editor.getText().trim() === '') { + input.value = ''; + } else { + input.value = editor.root.innerHTML; + } + } + }); + } + + // Setup image uploader module + function setupImageUploader(serverUrl, fieldName) { + return { + upload: function(file) { + return new Promise(function(resolve, reject) { + const formData = new FormData(); + formData.append(fieldName || 'file_upload', file); + + const csrfToken = document.querySelector('meta[name="csrf-token"]'); + const headers = {}; + + if (csrfToken) { + headers['X-CSRF-Token'] = csrfToken.getAttribute('content'); + } + + fetch(serverUrl, { + method: 'POST', + body: formData, + headers: headers + }) + .then(function(response) { return response.json(); }) + .then(function(result) { + if (!result.url) { + reject('Upload failed'); + return; + } + resolve(result.url); + }) + .catch(function(error) { + reject('Upload failed'); + console.error('Error:', error); + }); + }); + } + }; + } + + // Public API + window.getQuillEditors = function() { + const editors = document.querySelectorAll('[data-aa-quill-editor]'); + const list = []; + editors.forEach(function(editor) { + if (editor._quillEditor) { + list.push(editor._quillEditor); + } + }); + return list; + }; + + window.getQuillEditorByIndex = function(index) { + const editors = document.querySelectorAll('[data-aa-quill-editor]'); + return (index >= 0 && index < editors.length) ? editors[index]._quillEditor : null; + }; + + window.getQuillEditorByElementId = function(id) { + const editor = document.querySelector('[data-aa-quill-editor]#' + id); + return editor ? editor._quillEditor : null; + }; + + // Initialize on various events + function setupAutoInit() { + // Initialize on DOMContentLoaded + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initQuillEditors); + } else { + initQuillEditors(); + } + + // Support for Turbo + document.addEventListener('turbo:load', initQuillEditors); + document.addEventListener('turbo:render', initQuillEditors); + + // Support for Turbolinks + document.addEventListener('turbolinks:load', initQuillEditors); + + // Support for ActiveAdmin has_many fields + document.addEventListener('has_many_add:after', function(event) { + const newFields = event.target.querySelectorAll('[data-aa-quill-editor]'); + newFields.forEach(initQuillEditor); + setupFormSubmission(); + }); + } + + // Export the main initialization function + const QuillEditor = { + init: setupAutoInit, + initEditor: initQuillEditor, + initEditors: initQuillEditors, + getEditors: window.getQuillEditors, + getEditorByIndex: window.getQuillEditorByIndex, + getEditorByElementId: window.getQuillEditorByElementId + }; + + // Make available globally + window.QuillEditor = QuillEditor; + + // Don't auto-initialize when used as a module - let the importing code decide + // This allows the importing module to ensure Quill is loaded first + + // Export for module usage + if (typeof module !== 'undefined' && module.exports) { + module.exports = QuillEditor; + } +})(); \ No newline at end of file