shoelace-rails 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +11 -61
- data/.gitignore +1 -6
- data/Appraisals +6 -0
- data/CHANGELOG.md +22 -5
- data/Gemfile +0 -3
- data/Rakefile +2 -17
- data/app/helpers/shoelace/form_helper.rb +63 -14
- data/gemfiles/rails_60.gemfile +0 -1
- data/gemfiles/rails_61.gemfile +0 -1
- data/gemfiles/rails_70.gemfile +0 -1
- data/gemfiles/rails_71.gemfile +10 -0
- data/gemfiles/rails_edge.gemfile +0 -1
- data/lib/shoelace/rails/version.rb +1 -1
- data/shoelace-rails.gemspec +1 -1
- data/test/helpers/form_helper_test.rb +40 -11
- data/test/helpers/translation_test.rb +160 -0
- metadata +7 -58
- data/dist/.keep +0 -0
- data/dist/types/.keep +0 -0
- data/package.json +0 -50
- data/rollup.config.js +0 -49
- data/src/index.ts +0 -2
- data/src/turbo/index.ts +0 -6
- data/src/turbo/polyfills/formdata-event.js +0 -27
- data/src/turbo/sl-turbo-form.ts +0 -110
- data/src/turbolinks/features/confirm.ts +0 -42
- data/src/turbolinks/features/disable.ts +0 -94
- data/src/turbolinks/features/remote.ts +0 -107
- data/src/turbolinks/index.ts +0 -6
- data/src/turbolinks/selectors.ts +0 -38
- data/src/turbolinks/start.ts +0 -38
- data/src/turbolinks/turbolinks.ts +0 -78
- data/src/turbolinks/utils/ajax.ts +0 -146
- data/src/turbolinks/utils/csp.ts +0 -20
- data/src/turbolinks/utils/csrf.ts +0 -33
- data/src/turbolinks/utils/dom.ts +0 -40
- data/src/turbolinks/utils/event.ts +0 -57
- data/src/turbolinks/utils/form.ts +0 -58
- data/test/dummy_app/Gemfile +0 -19
- data/test/dummy_app/Rakefile +0 -6
- data/test/dummy_app/app/controllers/hotwire_forms_controller.rb +0 -46
- data/test/dummy_app/app/controllers/turbolinks_forms_controller.rb +0 -37
- data/test/dummy_app/app/models/user.rb +0 -16
- data/test/dummy_app/app/packs/entrypoints/hotwire.js +0 -1
- data/test/dummy_app/app/packs/entrypoints/turbolinks.js +0 -5
- data/test/dummy_app/app/views/hotwire_forms/form.html.erb +0 -45
- data/test/dummy_app/app/views/hotwire_forms/show.html.erb +0 -5
- data/test/dummy_app/app/views/layouts/application.html.erb +0 -39
- data/test/dummy_app/app/views/turbolinks_forms/form.html.erb +0 -44
- data/test/dummy_app/app/views/turbolinks_forms/show.html.erb +0 -5
- data/test/dummy_app/bin/rails +0 -5
- data/test/dummy_app/bin/webpack +0 -18
- data/test/dummy_app/bin/yarn +0 -18
- data/test/dummy_app/config/application.rb +0 -16
- data/test/dummy_app/config/boot.rb +0 -4
- data/test/dummy_app/config/environment.rb +0 -2
- data/test/dummy_app/config/environments/development.rb +0 -10
- data/test/dummy_app/config/environments/test.rb +0 -18
- data/test/dummy_app/config/routes.rb +0 -4
- data/test/dummy_app/config/webpack/development.js +0 -5
- data/test/dummy_app/config/webpack/production.js +0 -1
- data/test/dummy_app/config/webpack/test.js +0 -5
- data/test/dummy_app/config/webpacker.yml +0 -33
- data/test/dummy_app/config.ru +0 -6
- data/test/dummy_app/package.json +0 -24
- data/test/dummy_app/test/system/hotwire_form_test.rb +0 -63
- data/test/dummy_app/test/system/turbolinks_form_test.rb +0 -38
- data/test/dummy_app/test/test_helper.rb +0 -68
- data/tsconfig.json +0 -19
- data/yarn.lock +0 -249
| @@ -0,0 +1,160 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            require 'test_helper'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require_relative '../../app/helpers/shoelace/form_helper'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            class TranslationTest < ActionView::TestCase
         | 
| 7 | 
            +
              include ActionView::Helpers::TranslationHelper
         | 
| 8 | 
            +
              include Shoelace::FormHelper
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              AUTOCOMPLETE_ATTRIBUTE = ActionView::VERSION::STRING >= '6.1.0' ? 'autocomplete="off"' : ''
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              setup do
         | 
| 13 | 
            +
                I18n.backend.store_translations :en,
         | 
| 14 | 
            +
                                                helpers: {
         | 
| 15 | 
            +
                                                  label: {
         | 
| 16 | 
            +
                                                    user: { name: "Full Name" }
         | 
| 17 | 
            +
                                                  }
         | 
| 18 | 
            +
                                                }
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                view_paths = ActionController::Base.view_paths
         | 
| 21 | 
            +
                view_paths.each(&:clear_cache)
         | 
| 22 | 
            +
                @view = ::ActionView::Base.with_empty_template_cache.with_view_paths(view_paths, {})
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              teardown do
         | 
| 26 | 
            +
                I18n.backend.reload!
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              test "Form helpers should respect label translations" do
         | 
| 30 | 
            +
                sl_form_for(User.new, url: "/") do |form|
         | 
| 31 | 
            +
                  assert_dom_equal <<~HTML, form.text_field(:name)
         | 
| 32 | 
            +
                    <sl-input label="Full Name" type="text" name="user[name]" id="user_name"></sl-input>
         | 
| 33 | 
            +
                  HTML
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              test "#color_field should respect label translations" do
         | 
| 38 | 
            +
                sl_form_for(User.new, url: "/") do |form|
         | 
| 39 | 
            +
                  assert_dom_equal <<~HTML, form.color_field(:name)
         | 
| 40 | 
            +
                    <sl-color-picker name="user[name]" id="user_name" label="Full Name"></sl-color-picker>
         | 
| 41 | 
            +
                  HTML
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              test "#range_field should respect label translations" do
         | 
| 46 | 
            +
                sl_form_for(User.new, url: "/") do |form|
         | 
| 47 | 
            +
                  assert_dom_equal <<~HTML, form.range_field(:name)
         | 
| 48 | 
            +
                    <sl-range label="Full Name" name="user[name]" id="user_name"></sl-range>
         | 
| 49 | 
            +
                  HTML
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              test "#switch_field should respect label translations" do
         | 
| 54 | 
            +
                sl_form_for(User.new, url: "/") do |form|
         | 
| 55 | 
            +
                  assert_dom_equal <<~HTML, form.switch_field(:name)
         | 
| 56 | 
            +
                    <sl-switch name="user[name]" id="user_name">Full Name</sl-switch>
         | 
| 57 | 
            +
                  HTML
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              test "#text_area should respect label translations" do
         | 
| 62 | 
            +
                sl_form_for(User.new, url: "/") do |form|
         | 
| 63 | 
            +
                  assert_dom_equal <<~HTML, form.text_area(:name)
         | 
| 64 | 
            +
                    <sl-textarea label="Full Name" resize="auto" name="user[name]" id="user_name"></sl-textarea>
         | 
| 65 | 
            +
                  HTML
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
              test "#check_box should respect label translations" do
         | 
| 70 | 
            +
                sl_form_for(User.new, url: "/") do |form|
         | 
| 71 | 
            +
                  assert_dom_equal <<~HTML, form.check_box(:name)
         | 
| 72 | 
            +
                    <input name="user[name]" type="hidden" value="0" #{AUTOCOMPLETE_ATTRIBUTE} />
         | 
| 73 | 
            +
                    <sl-checkbox value="1" name="user[name]" id="user_name">Full Name</sl-checkbox>
         | 
| 74 | 
            +
                  HTML
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              test "#selec should respect label translationst" do
         | 
| 79 | 
            +
                users = {
         | 
| 80 | 
            +
                  "Yuki Nishijima" => 1,
         | 
| 81 | 
            +
                  "Matz" => 2,
         | 
| 82 | 
            +
                  "Koichi Sasada" => 3
         | 
| 83 | 
            +
                }
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                sl_form_for(User.new, url: "/") do |form|
         | 
| 86 | 
            +
                  assert_dom_equal <<~HTML, form.select(:name, users)
         | 
| 87 | 
            +
                    <sl-select label="Full Name" name="user[name]" id="user_name">
         | 
| 88 | 
            +
                      <sl-option value="1">Yuki Nishijima</sl-option>
         | 
| 89 | 
            +
                      <sl-option value="2">Matz</sl-option>
         | 
| 90 | 
            +
                      <sl-option value="3">Koichi Sasada</sl-option>
         | 
| 91 | 
            +
                    </sl-select>
         | 
| 92 | 
            +
                  HTML
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              test "#collection_select should respect label translations" do
         | 
| 97 | 
            +
                users = {
         | 
| 98 | 
            +
                  1 => "Yuki Nishijima",
         | 
| 99 | 
            +
                  2 => "Matz",
         | 
| 100 | 
            +
                  3 => "Koichi Sasada",
         | 
| 101 | 
            +
                }
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                sl_form_for(User.new, url: "/") do |form|
         | 
| 104 | 
            +
                  assert_dom_equal <<~HTML, form.collection_select(:name, users, :first, :last)
         | 
| 105 | 
            +
                    <sl-select label="Full Name" name="user[name]" id="user_name">
         | 
| 106 | 
            +
                      <sl-option value="1">Yuki Nishijima</sl-option>
         | 
| 107 | 
            +
                      <sl-option value="2">Matz</sl-option>
         | 
| 108 | 
            +
                      <sl-option value="3">Koichi Sasada</sl-option>
         | 
| 109 | 
            +
                    </sl-select>
         | 
| 110 | 
            +
                  HTML
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
              test "#grouped_collection_select should respect label translations" do
         | 
| 115 | 
            +
                users = [
         | 
| 116 | 
            +
                  OpenStruct.new(
         | 
| 117 | 
            +
                    group_name: "Main maintainers",
         | 
| 118 | 
            +
                    members: [
         | 
| 119 | 
            +
                      OpenStruct.new(id: 1, name: "Matz"),
         | 
| 120 | 
            +
                      OpenStruct.new(id: 2, name: "Koichi Sasada"),
         | 
| 121 | 
            +
                    ]
         | 
| 122 | 
            +
                  ),
         | 
| 123 | 
            +
                  OpenStruct.new(
         | 
| 124 | 
            +
                    group_name: "Default gem maintainers",
         | 
| 125 | 
            +
                    members: [OpenStruct.new(id: 3, name: "Yuki Nishijima")]
         | 
| 126 | 
            +
                  ),
         | 
| 127 | 
            +
                ]
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                sl_form_for(User.new(name: "2"), url: "/") do |form|
         | 
| 130 | 
            +
                  assert_dom_equal <<~HTML, form.grouped_collection_select(:name, users, :members, :group_name, :id, :name)
         | 
| 131 | 
            +
                    <sl-select label="Full Name" name="user[name]" id="user_name" value="2">
         | 
| 132 | 
            +
                      <small>Main maintainers</small>
         | 
| 133 | 
            +
                      <sl-option value="1">Matz</sl-option>
         | 
| 134 | 
            +
                      <sl-option value="2" checked="checked">Koichi Sasada</sl-option>
         | 
| 135 | 
            +
                      <sl-divider></sl-divider>
         | 
| 136 | 
            +
                      <small>Default gem maintainers</small>
         | 
| 137 | 
            +
                      <sl-option value="3">Yuki Nishijima</sl-option>
         | 
| 138 | 
            +
                    </sl-select>
         | 
| 139 | 
            +
                  HTML
         | 
| 140 | 
            +
                end
         | 
| 141 | 
            +
              end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
              test "#collection_radio_buttons should respect label translations" do
         | 
| 144 | 
            +
                users = {
         | 
| 145 | 
            +
                  1 => "Yuki Nishijima",
         | 
| 146 | 
            +
                  2 => "Matz",
         | 
| 147 | 
            +
                  3 => "Koichi Sasada",
         | 
| 148 | 
            +
                }
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                sl_form_for(User.new, url: "/") do |form|
         | 
| 151 | 
            +
                  assert_dom_equal <<~HTML, form.collection_radio_buttons(:name, users, :first, :last)
         | 
| 152 | 
            +
                    <sl-radio-group label="Full Name" name="user[name]" id="user_name">
         | 
| 153 | 
            +
                      <sl-radio value="1" id="user_name_1">Yuki Nishijima</sl-radio>
         | 
| 154 | 
            +
                      <sl-radio value="2" id="user_name_2">Matz</sl-radio>
         | 
| 155 | 
            +
                      <sl-radio value="3" id="user_name_3">Koichi Sasada</sl-radio>
         | 
| 156 | 
            +
                    </sl-radio-group>
         | 
| 157 | 
            +
                  HTML
         | 
| 158 | 
            +
                end
         | 
| 159 | 
            +
              end
         | 
| 160 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: shoelace-rails
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yuki Nishijima
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2024-03-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: actionview
         | 
| @@ -72,14 +72,14 @@ dependencies: | |
| 72 72 | 
             
                requirements:
         | 
| 73 73 | 
             
                - - ">="
         | 
| 74 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: 2.0 | 
| 75 | 
            +
                    version: 2.2.0
         | 
| 76 76 | 
             
              type: :development
         | 
| 77 77 | 
             
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 80 | 
             
                - - ">="
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: 2.0 | 
| 82 | 
            +
                    version: 2.2.0
         | 
| 83 83 | 
             
            description: The shoelace-rails gem adds useful view helper methods for using Shoalace
         | 
| 84 84 | 
             
              Web Components.
         | 
| 85 85 | 
             
            email:
         | 
| @@ -101,14 +101,13 @@ files: | |
| 101 101 | 
             
            - app/helpers/shoelace/tag_helper.rb
         | 
| 102 102 | 
             
            - bin/console
         | 
| 103 103 | 
             
            - bin/setup
         | 
| 104 | 
            -
            - dist/.keep
         | 
| 105 | 
            -
            - dist/types/.keep
         | 
| 106 104 | 
             
            - gemfiles/rails_50.gemfile
         | 
| 107 105 | 
             
            - gemfiles/rails_51.gemfile
         | 
| 108 106 | 
             
            - gemfiles/rails_52.gemfile
         | 
| 109 107 | 
             
            - gemfiles/rails_60.gemfile
         | 
| 110 108 | 
             
            - gemfiles/rails_61.gemfile
         | 
| 111 109 | 
             
            - gemfiles/rails_70.gemfile
         | 
| 110 | 
            +
            - gemfiles/rails_71.gemfile
         | 
| 112 111 | 
             
            - gemfiles/rails_edge.gemfile
         | 
| 113 112 | 
             
            - lib/shoelace/engine.rb
         | 
| 114 113 | 
             
            - lib/shoelace/rails.rb
         | 
| @@ -116,61 +115,11 @@ files: | |
| 116 115 | 
             
            - lib/shoelace/railtie.rb
         | 
| 117 116 | 
             
            - lib/shoelace/testing.rb
         | 
| 118 117 | 
             
            - lib/tasks/shoelace.rake
         | 
| 119 | 
            -
            - package.json
         | 
| 120 | 
            -
            - rollup.config.js
         | 
| 121 118 | 
             
            - shoelace-rails.gemspec
         | 
| 122 | 
            -
            - src/index.ts
         | 
| 123 | 
            -
            - src/turbo/index.ts
         | 
| 124 | 
            -
            - src/turbo/polyfills/formdata-event.js
         | 
| 125 | 
            -
            - src/turbo/sl-turbo-form.ts
         | 
| 126 | 
            -
            - src/turbolinks/features/confirm.ts
         | 
| 127 | 
            -
            - src/turbolinks/features/disable.ts
         | 
| 128 | 
            -
            - src/turbolinks/features/remote.ts
         | 
| 129 | 
            -
            - src/turbolinks/index.ts
         | 
| 130 | 
            -
            - src/turbolinks/selectors.ts
         | 
| 131 | 
            -
            - src/turbolinks/start.ts
         | 
| 132 | 
            -
            - src/turbolinks/turbolinks.ts
         | 
| 133 | 
            -
            - src/turbolinks/utils/ajax.ts
         | 
| 134 | 
            -
            - src/turbolinks/utils/csp.ts
         | 
| 135 | 
            -
            - src/turbolinks/utils/csrf.ts
         | 
| 136 | 
            -
            - src/turbolinks/utils/dom.ts
         | 
| 137 | 
            -
            - src/turbolinks/utils/event.ts
         | 
| 138 | 
            -
            - src/turbolinks/utils/form.ts
         | 
| 139 | 
            -
            - test/dummy_app/Gemfile
         | 
| 140 | 
            -
            - test/dummy_app/Rakefile
         | 
| 141 | 
            -
            - test/dummy_app/app/controllers/hotwire_forms_controller.rb
         | 
| 142 | 
            -
            - test/dummy_app/app/controllers/turbolinks_forms_controller.rb
         | 
| 143 | 
            -
            - test/dummy_app/app/models/user.rb
         | 
| 144 | 
            -
            - test/dummy_app/app/packs/entrypoints/hotwire.js
         | 
| 145 | 
            -
            - test/dummy_app/app/packs/entrypoints/turbolinks.js
         | 
| 146 | 
            -
            - test/dummy_app/app/views/hotwire_forms/form.html.erb
         | 
| 147 | 
            -
            - test/dummy_app/app/views/hotwire_forms/show.html.erb
         | 
| 148 | 
            -
            - test/dummy_app/app/views/layouts/application.html.erb
         | 
| 149 | 
            -
            - test/dummy_app/app/views/turbolinks_forms/form.html.erb
         | 
| 150 | 
            -
            - test/dummy_app/app/views/turbolinks_forms/show.html.erb
         | 
| 151 | 
            -
            - test/dummy_app/bin/rails
         | 
| 152 | 
            -
            - test/dummy_app/bin/webpack
         | 
| 153 | 
            -
            - test/dummy_app/bin/yarn
         | 
| 154 | 
            -
            - test/dummy_app/config.ru
         | 
| 155 | 
            -
            - test/dummy_app/config/application.rb
         | 
| 156 | 
            -
            - test/dummy_app/config/boot.rb
         | 
| 157 | 
            -
            - test/dummy_app/config/environment.rb
         | 
| 158 | 
            -
            - test/dummy_app/config/environments/development.rb
         | 
| 159 | 
            -
            - test/dummy_app/config/environments/test.rb
         | 
| 160 | 
            -
            - test/dummy_app/config/routes.rb
         | 
| 161 | 
            -
            - test/dummy_app/config/webpack/development.js
         | 
| 162 | 
            -
            - test/dummy_app/config/webpack/production.js
         | 
| 163 | 
            -
            - test/dummy_app/config/webpack/test.js
         | 
| 164 | 
            -
            - test/dummy_app/config/webpacker.yml
         | 
| 165 | 
            -
            - test/dummy_app/package.json
         | 
| 166 | 
            -
            - test/dummy_app/test/system/hotwire_form_test.rb
         | 
| 167 | 
            -
            - test/dummy_app/test/system/turbolinks_form_test.rb
         | 
| 168 | 
            -
            - test/dummy_app/test/test_helper.rb
         | 
| 169 119 | 
             
            - test/helpers/form_helper_test.rb
         | 
| 170 120 | 
             
            - test/helpers/tag_helper_test.rb
         | 
| 121 | 
            +
            - test/helpers/translation_test.rb
         | 
| 171 122 | 
             
            - test/test_helper.rb
         | 
| 172 | 
            -
            - tsconfig.json
         | 
| 173 | 
            -
            - yarn.lock
         | 
| 174 123 | 
             
            homepage: https://github.com/yuki24/shoelace-rails
         | 
| 175 124 | 
             
            licenses:
         | 
| 176 125 | 
             
            - MIT
         | 
| @@ -193,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 193 142 | 
             
                - !ruby/object:Gem::Version
         | 
| 194 143 | 
             
                  version: '0'
         | 
| 195 144 | 
             
            requirements: []
         | 
| 196 | 
            -
            rubygems_version: 3. | 
| 145 | 
            +
            rubygems_version: 3.5.3
         | 
| 197 146 | 
             
            signing_key:
         | 
| 198 147 | 
             
            specification_version: 4
         | 
| 199 148 | 
             
            summary: Rails view helpers Shoelace.style, the design system.
         | 
    
        data/dist/.keep
    DELETED
    
    | 
            File without changes
         | 
    
        data/dist/types/.keep
    DELETED
    
    | 
            File without changes
         | 
    
        data/package.json
    DELETED
    
    | @@ -1,50 +0,0 @@ | |
| 1 | 
            -
            {
         | 
| 2 | 
            -
              "name": "@yuki24/shoelace-rails",
         | 
| 3 | 
            -
              "version": "0.1.0-beta.5",
         | 
| 4 | 
            -
              "author": "Yuki Nishijima <yuki24@hey.com>",
         | 
| 5 | 
            -
              "license": "MIT",
         | 
| 6 | 
            -
              "description": "Unobtrusive Javascript and Turbolinks support for shoelace.style",
         | 
| 7 | 
            -
              "homepage": "https://github.com/yuki24/shoelace-rails",
         | 
| 8 | 
            -
              "module": "dist/shoelace-rails.es2017-esm.js",
         | 
| 9 | 
            -
              "main": "dist/shoelace-rails.es2017-umd.js",
         | 
| 10 | 
            -
              "types": "dist/types/index.d.ts",
         | 
| 11 | 
            -
              "files": [
         | 
| 12 | 
            -
                "dist/*.js",
         | 
| 13 | 
            -
                "dist/*.js.map",
         | 
| 14 | 
            -
                "dist/types/**/*"
         | 
| 15 | 
            -
              ],
         | 
| 16 | 
            -
              "repository": {
         | 
| 17 | 
            -
                "type": "git",
         | 
| 18 | 
            -
                "url": "git+https://github.com/yuki24/shoelace-rails.git"
         | 
| 19 | 
            -
              },
         | 
| 20 | 
            -
              "bugs": {
         | 
| 21 | 
            -
                "url": "https://github.com/yuki24/shoelace-rails"
         | 
| 22 | 
            -
              },
         | 
| 23 | 
            -
              "scripts": {
         | 
| 24 | 
            -
                "build": "yarn types && rollup -c",
         | 
| 25 | 
            -
                "clean": "rm -fr dist",
         | 
| 26 | 
            -
                "prettier-project": "yarn run prettier-write 'src/**/*.{ts,tsx,js,jsx}'",
         | 
| 27 | 
            -
                "prettier-write": "yarn run prettier --write",
         | 
| 28 | 
            -
                "release": "yarn clean && yarn build && npm publish --access public",
         | 
| 29 | 
            -
                "types": "tsc --noEmit false --emitDeclarationOnly true --outDir dist/types"
         | 
| 30 | 
            -
              },
         | 
| 31 | 
            -
              "devDependencies": {
         | 
| 32 | 
            -
                "@hotwired/turbo": "^7.0.1",
         | 
| 33 | 
            -
                "@rollup/plugin-node-resolve": "^13.0.4",
         | 
| 34 | 
            -
                "@rollup/plugin-typescript": "^8.2.5",
         | 
| 35 | 
            -
                "@shoelace-style/shoelace": "^2.0.0-beta.52",
         | 
| 36 | 
            -
                "prettier": "^2.3.2",
         | 
| 37 | 
            -
                "rollup": "^2.56.2",
         | 
| 38 | 
            -
                "tslib": "^2.3.1",
         | 
| 39 | 
            -
                "turbolinks": "5.x",
         | 
| 40 | 
            -
                "typescript": "^4.3.5"
         | 
| 41 | 
            -
              },
         | 
| 42 | 
            -
              "peerDependencies": {
         | 
| 43 | 
            -
                "@hotwired/turbo": "7.x",
         | 
| 44 | 
            -
                "turbolinks": "5.x"
         | 
| 45 | 
            -
              },
         | 
| 46 | 
            -
              "prettier": {
         | 
| 47 | 
            -
                "printWidth": 120,
         | 
| 48 | 
            -
                "semi": false
         | 
| 49 | 
            -
              }
         | 
| 50 | 
            -
            }
         | 
    
        data/rollup.config.js
    DELETED
    
    | @@ -1,49 +0,0 @@ | |
| 1 | 
            -
            import resolve from "@rollup/plugin-node-resolve"
         | 
| 2 | 
            -
            import typescript from "@rollup/plugin-typescript"
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            export default [
         | 
| 5 | 
            -
              {
         | 
| 6 | 
            -
                external: ['turbolinks'],
         | 
| 7 | 
            -
                input: "src/index.ts",
         | 
| 8 | 
            -
                output: [
         | 
| 9 | 
            -
                  {
         | 
| 10 | 
            -
                    name: "Shoelace Rails",
         | 
| 11 | 
            -
                    file: "dist/shoelace-rails.es5-umd.js",
         | 
| 12 | 
            -
                    format: "umd",
         | 
| 13 | 
            -
                    sourcemap: true,
         | 
| 14 | 
            -
                  }
         | 
| 15 | 
            -
                ],
         | 
| 16 | 
            -
                plugins: [
         | 
| 17 | 
            -
                  resolve(),
         | 
| 18 | 
            -
                  typescript({ target: "es5", downlevelIteration: true })
         | 
| 19 | 
            -
                ],
         | 
| 20 | 
            -
                watch: {
         | 
| 21 | 
            -
                  include: "src/**"
         | 
| 22 | 
            -
                }
         | 
| 23 | 
            -
              },
         | 
| 24 | 
            -
             | 
| 25 | 
            -
              {
         | 
| 26 | 
            -
                external: ['turbolinks'],
         | 
| 27 | 
            -
                input: "src/index.ts",
         | 
| 28 | 
            -
                output: [
         | 
| 29 | 
            -
                  {
         | 
| 30 | 
            -
                    name: "Shoelace Rails",
         | 
| 31 | 
            -
                    file: "dist/shoelace-rails.es2017-umd.js",
         | 
| 32 | 
            -
                    format: "umd",
         | 
| 33 | 
            -
                    sourcemap: true,
         | 
| 34 | 
            -
                  },
         | 
| 35 | 
            -
                  {
         | 
| 36 | 
            -
                    file: "dist/shoelace-rails.es2017-esm.js",
         | 
| 37 | 
            -
                    format: "es",
         | 
| 38 | 
            -
                    sourcemap: true,
         | 
| 39 | 
            -
                  }
         | 
| 40 | 
            -
                ],
         | 
| 41 | 
            -
                plugins: [
         | 
| 42 | 
            -
                  resolve(),
         | 
| 43 | 
            -
                  typescript()
         | 
| 44 | 
            -
                ],
         | 
| 45 | 
            -
                watch: {
         | 
| 46 | 
            -
                  include: "src/**"
         | 
| 47 | 
            -
                }
         | 
| 48 | 
            -
              }
         | 
| 49 | 
            -
            ]
         | 
    
        data/src/index.ts
    DELETED
    
    
    
        data/src/turbo/index.ts
    DELETED
    
    
| @@ -1,27 +0,0 @@ | |
| 1 | 
            -
            (function(){
         | 
| 2 | 
            -
            /*
         | 
| 3 | 
            -
             | 
| 4 | 
            -
             Copyright (c) 2020 The Polymer Project Authors. All rights reserved. This
         | 
| 5 | 
            -
             code may only be used under the BSD style license found at
         | 
| 6 | 
            -
             http://polymer.github.io/LICENSE.txt The complete set of authors may be
         | 
| 7 | 
            -
             found at http://polymer.github.io/AUTHORS.txt The complete set of
         | 
| 8 | 
            -
             contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code
         | 
| 9 | 
            -
             distributed by Google as part of the polymer project is also subject to an
         | 
| 10 | 
            -
             additional IP rights grant found at http://polymer.github.io/PATENTS.txt
         | 
| 11 | 
            -
            */
         | 
| 12 | 
            -
            'use strict';function aa(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}function n(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:aa(a)}}function ba(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c}var ca="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b};
         | 
| 13 | 
            -
            function da(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ea=da(this),q;
         | 
| 14 | 
            -
            if("function"==typeof Object.setPrototypeOf)q=Object.setPrototypeOf;else{var r;a:{var ha={a:!0},ia={};try{ia.__proto__=ha;r=ia.a;break a}catch(a){}r=!1}q=r?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ja=q,ka=window.Document.prototype,la=ka.createElement,ma=ka.createEvent;var t=window.Event,u=t.prototype,na=u.initEvent,oa=null===u||void 0===u?void 0:u.stopImmediatePropagation,pa=null===u||void 0===u?void 0:u.stopPropagation,w=Object.getOwnPropertyDescriptor(u,"defaultPrevented"),x=Object.getOwnPropertyDescriptor(u,"target");Object.getOwnPropertyDescriptor(u,"type");var qa=window.document;var ra=null===x||void 0===x?void 0:x.get,y=void 0!==ra?function(a){return ra.call(a)}:function(a){return a.target},sa=null===w||void 0===w?void 0:w.get,ta=void 0!==sa?function(a){return sa.call(a)}:function(a){return a.defaultPrevented};function ua(a,b,c){Object.setPrototypeOf(a,Object.getPrototypeOf(b));for(var d=n(Object.keys(b)),e=d.next();!e.done;e=d.next())e=e.value,"prototype"!==e&&Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(b,e));a.prototype=c;Object.defineProperty(c,"constructor",{writable:!0,configurable:!0,enumerable:!1,value:c.constructor})};var va=new WeakMap,wa=new WeakMap;function z(a,b){b=void 0===b?{}:b;try{var c=new t(a,b)}catch(e){c=ma.call(qa,"Event");var d=b.bubbles;b=b.cancelable;na.call(c,a,void 0===d?!1:d,void 0===b?!1:b)}Object.setPrototypeOf(c,Object.getPrototypeOf(this));return c}ua(z,t,u);
         | 
| 15 | 
            -
            function xa(){z.prototype.constructor=z;Object.setPrototypeOf(z,Function.prototype);z.prototype.stopImmediatePropagation=function(){wa.set(this,!0);return oa.call(this)};z.prototype.stopPropagation=function(){va.set(this,!0);return pa.call(this)};window.Event=z};var A=window.EventTarget,B=null===A||void 0===A?void 0:A.prototype,ya=null===B||void 0===B?void 0:B.addEventListener,za=null===B||void 0===B?void 0:B.removeEventListener,Aa=null===B||void 0===B?void 0:B.dispatchEvent;var C=window.Node.prototype,E=C.addEventListener,Ba=C.appendChild,Ca=C.dispatchEvent,Da=C.getRootNode,Ea=C.insertBefore,Fa=C.removeChild,Ga=C.removeEventListener,F=Object.getOwnPropertyDescriptor(C,"parentNode");var G=window.Window.prototype,H=G.addEventListener,Ha=G.removeEventListener,Ia=G.dispatchEvent;var Ja=A?ya:function(a,b,c){if(this instanceof Node)return E.call(this,a,b,c);if(this instanceof Window)return H.call(this,a,b,c);throw new TypeError("Unsupported.");},Ka=A?za:function(a,b,c){if(this instanceof Node)return Ga.call(this,a,b,c);if(this instanceof Window)return Ha.call(this,a,b,c);throw new TypeError("Unsupported.");},Ma=A?Aa:function(a){if(this instanceof Node)return Ca.call(this,a);if(this instanceof Window)return Ia.call(this,a);throw new TypeError("Unsupported.");};var Na=null===F||void 0===F?void 0:F.get,I=void 0!==Na?function(a){return Na.call(a)}:function(a){return a.parentNode};function Oa(a){if(void 0!==Da)return Da.call(a,void 0);for(var b=I(a);null!==b;)a=b,b=I(b);return a};var J=window.HTMLInputElement.prototype,K=Object.getOwnPropertyDescriptor(J,"name"),L=Object.getOwnPropertyDescriptor(J,"type"),M=Object.getOwnPropertyDescriptor(J,"value");var N,Pa,Qa,Ra=null!==(N=(null!==L&&void 0!==L?L:{}).set)&&void 0!==N?N:function(a){this.type=a},Sa=null!==(Pa=(null!==K&&void 0!==K?K:{}).set)&&void 0!==Pa?Pa:function(a){this.name=a},Ta=null!==(Qa=(null!==M&&void 0!==M?M:{}).set)&&void 0!==Qa?Qa:function(a){this.value=a};var O=window.Element.prototype,P=O.getAttribute,Ua=O.hasAttribute,Va=O.removeAttribute,Wa=O.setAttribute;var Xa=Object.getOwnPropertyDescriptor(window.HTMLCollection.prototype,"length");var Ya,Za=null!==(Ya=(null!==Xa&&void 0!==Xa?Xa:{}).get)&&void 0!==Ya?Ya:function(){return this.length};var Q=window.HTMLFormElement.prototype,$a=Q.submit,ab=Object.getOwnPropertyDescriptor(Q,"elements");var bb=window.FormData,R=bb.prototype,cb=R.append,db=R.delete,eb=R.set;var fb=new WeakMap;function S(a,b){b=void 0===b?{}:b;a=z.call(this,a,b)||this;b=b.formData;if(!(b instanceof FormData))throw new TypeError("Failed to construct 'FormDataEvent': member formData is not of type FormData.");fb.set(a,b);return a}S.prototype=ca(z.prototype);S.prototype.constructor=S;if(ja)ja(S,z);else for(var T in z)if("prototype"!=T)if(Object.defineProperties){var gb=Object.getOwnPropertyDescriptor(z,T);gb&&Object.defineProperty(S,T,gb)}else S[T]=z[T];
         | 
| 16 | 
            -
            ea.Object.defineProperties(S.prototype,{formData:{configurable:!0,enumerable:!0,get:function(){return fb.get(this)}}});var U=new WeakMap;function V(a){var b=new bb(a);Object.setPrototypeOf(b,Object.getPrototypeOf(this));U.set(b,[]);a instanceof HTMLFormElement&&Ma.call(a,new S("formdata",{bubbles:!0,formData:b}));return b}ua(V,bb,R);
         | 
| 17 | 
            -
            function hb(){V.prototype.constructor=V;V.prototype.append=function(a,b){var c=U.get(this);if("string"!==typeof b)throw Error("Unsupported.");c.push({i:"append",name:a,value:b});return cb.call(this,a,b)};void 0!==db&&(V.prototype["delete"]=function(a){U.get(this).push({i:"delete",name:a});return db.call(this,a)});void 0!==eb&&(V.prototype.set=function(a,b){var c=U.get(this);if("string"!==typeof b)throw Error("Unsupported.");c.push({i:"set",name:a,value:b});return eb.call(this,a,b)});window.FormData=
         | 
| 18 | 
            -
            V};function ib(a){function b(p){for(var h=ab.get.call(a),k=Za.call(h),m=0;m<k;m++){var v=h[m],fa;if(fa=P.call(v,"name")===p)fa=!Ua.call(v,"disabled");if(fa)return v}}function c(p){for(var h=ab.get.call(a),k=Za.call(h),m=0;m<k;m++){var v=h[m];P.call(v,"name")===p&&(f.has(v)||f.set(v,P.call(v,"disabled")),Wa.call(v,"disabled",""))}}function d(p,h,k){var m=la.call(qa,"input",void 0);Ra.call(m,"hidden");Sa.call(m,p);Ta.call(m,h);void 0!==k?(p=I(k),Ea.call(p,m,k)):Ba.call(a,m);g.push(m)}var e=new V(a),g=
         | 
| 19 | 
            -
            [],f=new Map;e=n(U.get(e));for(var l=e.next();!l.done;l=e.next())switch(l=l.value,l.i){case "append":d(l.name,l.value);break;case "delete":c(l.name);break;case "set":var D=l;l=D.name;D=D.value;var La=b(l);void 0===La?d(l,D):(c(l),d(l,D,La));break;default:throw Error("UNREACHABLE");}setTimeout(function(){for(var p=n(g),h=p.next();!h.done;h=p.next()){h=h.value;var k=I(h);k&&Fa.call(k,h)}p=n(f);for(h=p.next();!h.done;h=p.next())k=n(h.value),h=k.next().value,k=k.next().value,P.call(h,"disabled")!==k&&
         | 
| 20 | 
            -
            (null===k?Va.call(h,"disabled"):Wa.call(h,"disabled",k))})};function W(){this.h=[]}W.prototype.push=function(a){for(var b=a.g,c=a.capture,d=n(this.h),e=d.next();!e.done;e=d.next())if(e=e.value,b===e.g&&c===e.capture)return;this.h.push(a)};W.prototype.delete=function(a){var b=a.g;a=a.capture;for(var c=0;c<this.h.length;c++){var d=this.h[c];if(b===d.g&&a===d.capture){this.h.splice(c,1);break}}};
         | 
| 21 | 
            -
            ea.Object.defineProperties(W.prototype,{length:{configurable:!0,enumerable:!0,get:function(){return this.h.length}},l:{configurable:!0,enumerable:!0,get:function(){for(var a=this.h,b=a.length-1;0<=b;b--){var c=a[b];if(c.capture)return c.g}}},j:{configurable:!0,enumerable:!0,get:function(){for(var a=this.h,b=a.length-1;0<=b;b--){var c=a[b];if(!c.capture)return c.g}}}});var X=new WeakMap;function jb(a,b,c){var d;b&&(X.has(a)||X.set(a,new W),c="boolean"===typeof c?c:null!==(d=null===c||void 0===c?void 0:c.capture)&&void 0!==d?d:!1,X.get(a).push({g:b,capture:c}))}function kb(a,b,c){var d;b&&(a=X.get(a),void 0!==a&&(c="boolean"===typeof c?c:null!==(d=null===c||void 0===c?void 0:c.capture)&&void 0!==d?d:!1,a.delete({g:b,capture:c})))};var Y=new WeakMap,lb=new WeakMap,Z=new WeakMap;function mb(a){if(!lb.has(a)){lb.set(a,!0);var b=y(a);if(b instanceof HTMLFormElement){b=Oa(b);var c=nb(function(){});Z.set(a,{target:b,g:c});Ja.call(b,"submit",c);jb(b,c)}}}
         | 
| 22 | 
            -
            function nb(a){return function e(c,d){for(var g=[],f=1;f<arguments.length;++f)g[f-1]=arguments[f];g="function"===typeof a?a.call.apply(a,[this,c].concat(g instanceof Array?g:ba(n(g)))):a.handleEvent.apply(a,[c].concat(g instanceof Array?g:ba(n(g))));f=y(c)instanceof HTMLFormElement;if(wa.has(c)&&f)ob(c);else if(va.has(c)&&f){f=X.get(this);var l=f.j;e!==f.l&&e!==l||ob(c)}else Z.has(c)&&(f=Z.get(c),void 0!==f&&this===f.target&&(f=X.get(this).j,e===f&&ob(c)));return g}}
         | 
| 23 | 
            -
            function ob(a){var b=Z.get(a);if(b){var c=b.target;b=b.g;Ka.call(c,"submit",b);kb(c,b);Z.delete(a)}ta(a)||ib(y(a))};var pb=new WeakMap;function qb(a,b){a.addEventListener=function(c,d,e){if("submit"===c&&null!==d){var g=nb(d);pb.set(d,g);d=g}g=b.call(this,c,d,e);if("formdata"===c){c=d;var f;c&&(e="boolean"===typeof e?e:null!==(f=null===e||void 0===e?void 0:e.capture)&&void 0!==f?f:!1,f=Y.get(this),void 0===f?(f=new W,f.push({g:c,capture:e}),Y.set(this,f),Ja.call(this,"submit",mb,!0)):f.push({g:c,capture:e}))}else"submit"===c&&null!==d&&jb(this,d,e);return g}}
         | 
| 24 | 
            -
            function rb(a,b){a.removeEventListener=function(c,d,e){var g;"submit"===c&&null!==d&&(d=null!==(g=pb.get(d))&&void 0!==g?g:d);g=b.call(this,c,d,e);if("formdata"===c){c=d;var f;c&&(d=Y.get(this),void 0!==d&&(e="boolean"===typeof e?e:null!==(f=null===e||void 0===e?void 0:e.capture)&&void 0!==f?f:!1,d.delete({g:c,capture:e}),0===d.length&&(Y.delete(this),Ka.call(this,"submit",mb,!0))))}else"submit"===c&&null!==d&&kb(this,d,e);return g}};function sb(){Q.submit=function(){ib(this);return $a.call(this)}};void 0===window.FormDataEvent&&(xa(),B&&(qb(B,ya),rb(B,za)),E&&(qb(C,E),rb(C,Ga)),H&&(qb(G,H),rb(G,Ha)),hb(),Object.defineProperty(window,"FormDataEvent",{writable:!0,enumerable:!1,configurable:!0,value:S}),Q&&sb());
         | 
| 25 | 
            -
            }).call(self);
         | 
| 26 | 
            -
             | 
| 27 | 
            -
            //# sourceMappingURL=formdata-event.min.js.map
         | 
    
        data/src/turbo/sl-turbo-form.ts
    DELETED
    
    | @@ -1,110 +0,0 @@ | |
| 1 | 
            -
            interface SlForm extends HTMLElement {
         | 
| 2 | 
            -
              getFormData: () => FormData
         | 
| 3 | 
            -
            }
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            interface SlButton extends HTMLElement {
         | 
| 6 | 
            -
              submit: boolean
         | 
| 7 | 
            -
            }
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            interface FormDataEvent extends Event {
         | 
| 10 | 
            -
              formData: FormData
         | 
| 11 | 
            -
            }
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            interface SubmitEvent extends CustomEvent {
         | 
| 14 | 
            -
              submitter: Element
         | 
| 15 | 
            -
            }
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            const submittersByForm: WeakMap<HTMLFormElement, HTMLElement> = new WeakMap()
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            const cloneAttributes = (target, source) =>
         | 
| 20 | 
            -
              [...source.attributes]
         | 
| 21 | 
            -
                .filter(({ nodeName }) => !["id", "class"].includes(nodeName))
         | 
| 22 | 
            -
                .forEach(({ nodeName, nodeValue }) => target.setAttribute(nodeName, nodeValue))
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            const findSubmitterFromClickTarget = (target: EventTarget | null): HTMLElement => {
         | 
| 25 | 
            -
              const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null
         | 
| 26 | 
            -
             | 
| 27 | 
            -
              if (element?.tagName === "SL-BUTTON") {
         | 
| 28 | 
            -
                const slButton = element as SlButton
         | 
| 29 | 
            -
                return slButton.submit ? slButton : null
         | 
| 30 | 
            -
              } else {
         | 
| 31 | 
            -
                const candidate = element?.closest("input, button") as HTMLInputElement | HTMLFormElement
         | 
| 32 | 
            -
                return candidate?.type === "submit" ? candidate : null
         | 
| 33 | 
            -
              }
         | 
| 34 | 
            -
            }
         | 
| 35 | 
            -
             | 
| 36 | 
            -
            export class SlTurboFormElement extends HTMLElement {
         | 
| 37 | 
            -
              private readonly form: HTMLFormElement
         | 
| 38 | 
            -
              private called: boolean
         | 
| 39 | 
            -
             | 
| 40 | 
            -
              static template = `
         | 
| 41 | 
            -
                <sl-form>
         | 
| 42 | 
            -
                  <slot></slot>
         | 
| 43 | 
            -
                </sl-form>
         | 
| 44 | 
            -
              `
         | 
| 45 | 
            -
             | 
| 46 | 
            -
              static get observedAttributes() {
         | 
| 47 | 
            -
                return ["action", "method", "enctype", "accept-charset", "data"]
         | 
| 48 | 
            -
              }
         | 
| 49 | 
            -
             | 
| 50 | 
            -
              constructor() {
         | 
| 51 | 
            -
                super()
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                // The <sl-form> component needs to be rendered within the shadow DOM so we can safely use the <slot>, which
         | 
| 54 | 
            -
                // should contain shoelace form controls.
         | 
| 55 | 
            -
                const shadowRoot = this.attachShadow({ mode: "open" })
         | 
| 56 | 
            -
                shadowRoot.innerHTML = SlTurboFormElement.template
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                // The normal <form> element needs to be rendered within the light DOM so we can emit a custom 'submit' event
         | 
| 59 | 
            -
                // with appropriate formdata, target, etc.
         | 
| 60 | 
            -
                this.form = document.createElement("form")
         | 
| 61 | 
            -
                this.form.style.display = "none"
         | 
| 62 | 
            -
                cloneAttributes(this.form, this)
         | 
| 63 | 
            -
                this.appendChild(this.form)
         | 
| 64 | 
            -
              }
         | 
| 65 | 
            -
             | 
| 66 | 
            -
              connectedCallback() {
         | 
| 67 | 
            -
                this.addEventListener("click", this.clickCaptured, true)
         | 
| 68 | 
            -
                this.addEventListener("sl-submit", this.handleSubmit)
         | 
| 69 | 
            -
                this.addEventListener("formdata", this.handleFormData)
         | 
| 70 | 
            -
              }
         | 
| 71 | 
            -
             | 
| 72 | 
            -
              disconnectedCallback() {
         | 
| 73 | 
            -
                this.removeEventListener("click", this.clickCaptured, true)
         | 
| 74 | 
            -
                this.removeEventListener("sl-submit", this.handleSubmit)
         | 
| 75 | 
            -
                this.removeEventListener("formdata", this.handleFormData)
         | 
| 76 | 
            -
              }
         | 
| 77 | 
            -
             | 
| 78 | 
            -
              handleFormData = (event: FormDataEvent) => {
         | 
| 79 | 
            -
                const { formData, target } = event
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                if (this.form === target && !this.called) {
         | 
| 82 | 
            -
                  this.called = true
         | 
| 83 | 
            -
                  const slForm = this.shadowRoot.querySelector("sl-form") as SlForm
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                  for (const [key, value] of slForm.getFormData().entries()) {
         | 
| 86 | 
            -
                    formData.append(key, value)
         | 
| 87 | 
            -
                  }
         | 
| 88 | 
            -
                }
         | 
| 89 | 
            -
              }
         | 
| 90 | 
            -
             | 
| 91 | 
            -
              handleSubmit = (event: CustomEvent) => {
         | 
| 92 | 
            -
                event.stopImmediatePropagation()
         | 
| 93 | 
            -
                const submitter = submittersByForm.get(this.form)
         | 
| 94 | 
            -
                const submitEvent = new CustomEvent("submit", { bubbles: true, cancelable: true }) as SubmitEvent
         | 
| 95 | 
            -
                Object.defineProperty(submitEvent, "submitter", { get: () => submitter })
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                const cancelled = this.form.dispatchEvent(submitEvent)
         | 
| 98 | 
            -
                if (cancelled) {
         | 
| 99 | 
            -
                  this.form.submit()
         | 
| 100 | 
            -
                }
         | 
| 101 | 
            -
              }
         | 
| 102 | 
            -
             | 
| 103 | 
            -
              clickCaptured = (event: Event) => {
         | 
| 104 | 
            -
                const submitter = findSubmitterFromClickTarget(event.target)
         | 
| 105 | 
            -
             | 
| 106 | 
            -
                if (submitter) {
         | 
| 107 | 
            -
                  submittersByForm.set(this.form, submitter)
         | 
| 108 | 
            -
                }
         | 
| 109 | 
            -
              }
         | 
| 110 | 
            -
            }
         | 
| @@ -1,42 +0,0 @@ | |
| 1 | 
            -
            // This code was heavily inspired by the rails-ujs project.
         | 
| 2 | 
            -
            // Copyright (c) 2007-2021 Rails Core team.
         | 
| 3 | 
            -
            import { fire, stopEverything } from "../utils/event"
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            export const handleConfirm = (event) => {
         | 
| 6 | 
            -
              const { target } = event
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              if (!allowAction(target)) {
         | 
| 9 | 
            -
                return stopEverything(event)
         | 
| 10 | 
            -
              }
         | 
| 11 | 
            -
            }
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            // For 'data-confirm' attribute:
         | 
| 14 | 
            -
            // - Fires `confirm` event
         | 
| 15 | 
            -
            // - Shows the confirmation dialog
         | 
| 16 | 
            -
            // - Fires the `confirm:complete` event
         | 
| 17 | 
            -
            //
         | 
| 18 | 
            -
            // Returns `true` if no function stops the chain and user chose yes `false` otherwise.
         | 
| 19 | 
            -
            // Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.
         | 
| 20 | 
            -
            // Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function
         | 
| 21 | 
            -
            // return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.
         | 
| 22 | 
            -
            const allowAction = (element) => {
         | 
| 23 | 
            -
              const message = element.getAttribute("data-confirm")
         | 
| 24 | 
            -
             | 
| 25 | 
            -
              if (!message) {
         | 
| 26 | 
            -
                return true
         | 
| 27 | 
            -
              }
         | 
| 28 | 
            -
             | 
| 29 | 
            -
              let callback = null,
         | 
| 30 | 
            -
                answer = false
         | 
| 31 | 
            -
              if (fire(element, "confirm")) {
         | 
| 32 | 
            -
                try {
         | 
| 33 | 
            -
                  answer = confirm(message)
         | 
| 34 | 
            -
                } catch (error) {
         | 
| 35 | 
            -
                  // no-op...
         | 
| 36 | 
            -
                }
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                callback = fire(element, "confirm:complete", [answer])
         | 
| 39 | 
            -
              }
         | 
| 40 | 
            -
             | 
| 41 | 
            -
              return answer && callback
         | 
| 42 | 
            -
            }
         |