bullet_train 1.0.70 → 1.0.74

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d858c21dd3351d3b8b623fadb26203198a91ff33834b94179a77482297a57db
4
- data.tar.gz: d5c25d4dbab2ed901eb3b74ef07ffd9839897a1d8e64ec52f5c4dfbe75286ca9
3
+ metadata.gz: 7294b50cc6079a8483055c3a7f47ca4a4478c03abdb6eb34324631fc685787cf
4
+ data.tar.gz: c4e08c260f151571f5b1910ad9d5a81fc875727b3bd9440fa820f06b740e45d6
5
5
  SHA512:
6
- metadata.gz: cbb4f90898d045b010e568eb0f5695ab2c618d60634ba6581a9c59b2a7b86cc6a147f8b589c8ac119a8f087f8b452094e17739f10839db130270ad29b89e5663
7
- data.tar.gz: ac92ffb6bf0b0618365ea9cbdd4261f40d8c49cb84bfa68eeea0871109a4eb74f4d94a55cf18bdd8d3947433fcaf21d18709b1853c263cb614c45e6895e1cd91
6
+ metadata.gz: 3978e046f569d024af01cfb3170c4c468e8a6429b7793a04aaebf90221af6d18ef37a922c7b63509529e5d6c86400a0da070f9efcb956cd49a663506d07ada27
7
+ data.tar.gz: a641a2368ea1bd3b3e25cf2fcd9229fea5d99e22acc39c9aaf440a88da5935d15081b5ba727ed6bb9833e2e7d6883a6e0d51f74dd508f9b0c8c9f93c1f190d85
data/.bt-link ADDED
File without changes
@@ -1,6 +1,3 @@
1
- # TODO Why is this required?
2
- require "pagy"
3
-
4
1
  module Helpers::Base
5
2
  include Pagy::Frontend
6
3
  include Pagy::Backend
@@ -3,14 +3,19 @@ module Users::Base
3
3
 
4
4
  included do
5
5
  if two_factor_authentication_enabled?
6
- devise :two_factor_authenticatable, :two_factor_backupable, :omniauthable,
7
- :registerable, :recoverable, :rememberable, :trackable, :validatable,
8
- otp_secret_encryption_key: ENV["TWO_FACTOR_ENCRYPTION_KEY"]
6
+ devise :two_factor_authenticatable, :two_factor_backupable, otp_secret_encryption_key: ENV["TWO_FACTOR_ENCRYPTION_KEY"]
9
7
  else
10
- devise :omniauthable, :database_authenticatable, :registerable,
11
- :recoverable, :rememberable, :trackable, :validatable
8
+ devise :database_authenticatable
12
9
  end
13
10
 
11
+ devise :omniauthable
12
+ devise :pwned_password
13
+ devise :registerable
14
+ devise :recoverable
15
+ devise :rememberable
16
+ devise :trackable
17
+ devise :validatable
18
+
14
19
  # teams
15
20
  has_many :memberships, dependent: :destroy
16
21
  has_many :scaffolding_absolutely_abstract_creative_concepts_collaborators, through: :memberships
@@ -1,425 +1 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
5
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
- <title>Welcome to <%= t('application.name') %>!</title>
7
- <% # TODO This is not what we want to do long-term. Would love to see this powered by Tailwind CSS. %>
8
- <style type="text/css">
9
- *:not(br):not(tr):not(html) {
10
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
11
- box-sizing: border-box;
12
- }
13
-
14
- body {
15
- width: 100% !important;
16
- height: 100%;
17
- margin: 0;
18
- line-height: 1.4;
19
- background-color: #F6F7F8;
20
- color: #3E4B5B;
21
- font-size: 16px;
22
- -webkit-text-size-adjust: none;
23
- }
24
-
25
- p,
26
- ul,
27
- ol,
28
- blockquote {
29
- line-height: 1.4;
30
- text-align: left;
31
- }
32
-
33
- a {
34
- color: #047BF8;
35
- }
36
-
37
- a img {
38
- border: none;
39
- }
40
- /* Layout ------------------------------ */
41
-
42
- .email-wrapper {
43
- width: 100%;
44
- margin: 0;
45
- padding: 0;
46
- background-color: #F6F7F8;
47
- }
48
-
49
- .email-content {
50
- width: 100%;
51
- margin: 0;
52
- padding: 0;
53
- }
54
- /* Masthead ----------------------- */
55
-
56
- .email-masthead {
57
- padding: 25px 0;
58
- text-align: center;
59
- }
60
-
61
- .email-masthead_logo {
62
- width: 94px;
63
- }
64
-
65
- .email-masthead_name {
66
- font-size: 16px;
67
- /*font-weight: bold;*/
68
- color: #bbbfc3;
69
- text-decoration: none;
70
- /*text-shadow: 0 1px 0 white;*/
71
- }
72
- /* Body ------------------------------ */
73
-
74
- .email-body {
75
- width: 100%;
76
- margin: 0;
77
- padding: 0;
78
- border-top: 1px solid #EDEFF2;
79
- border-bottom: 1px solid #EDEFF2;
80
- background-color: #FFFFFF;
81
-
82
- }
83
-
84
- .email-body_inner {
85
- width: 570px;
86
- margin: 0 auto;
87
- padding: 0;
88
- background-color: #FFFFFF;
89
- }
90
-
91
- .email-footer {
92
- width: 570px;
93
- margin: 0 auto;
94
- padding: 0;
95
- text-align: center;
96
- }
97
-
98
- .email-footer p {
99
- color: #AAAAAA;
100
- }
101
-
102
- .body-action {
103
- width: 100%;
104
- margin: 30px auto;
105
- padding: 0;
106
- text-align: center;
107
- }
108
-
109
- .body-sub {
110
- margin-top: 25px;
111
- padding-top: 25px;
112
- border-top: 1px solid #EDEFF2;
113
- }
114
-
115
- .content-cell {
116
- padding: 35px;
117
- }
118
-
119
- .preheader {
120
- display: none !important;
121
- }
122
- /* Attribute list ------------------------------ */
123
-
124
- .attributes {
125
- margin: 0 0 21px;
126
- }
127
-
128
- .attributes_content {
129
- background-color: #EDEFF2;
130
- padding: 16px;
131
- }
132
-
133
- .attributes_item {
134
- padding: 0;
135
- }
136
- /* Related Items ------------------------------ */
137
-
138
- .related {
139
- width: 100%;
140
- margin: 0;
141
- padding: 25px 0 0 0;
142
- }
143
-
144
- .related_item {
145
- padding: 10px 0;
146
- color: #3E4B5B;
147
- font-size: 15px;
148
- line-height: 18px;
149
- }
150
-
151
- .related_item-title {
152
- display: block;
153
- margin: .5em 0 0;
154
- }
155
-
156
- .related_item-thumb {
157
- display: block;
158
- padding-bottom: 10px;
159
- }
160
-
161
- .related_heading {
162
- border-top: 1px solid #EDEFF2;
163
- text-align: center;
164
- padding: 25px 0 10px;
165
- }
166
- /* Discount Code ------------------------------ */
167
-
168
- .discount {
169
- width: 100%;
170
- margin: 0;
171
- padding: 24px;
172
- background-color: #EDEFF2;
173
- border: 2px dashed #9BA2AB;
174
- }
175
-
176
- .discount_heading {
177
- text-align: center;
178
- }
179
-
180
- .discount_body {
181
- text-align: center;
182
- font-size: 15px;
183
- }
184
- /* Social Icons ------------------------------ */
185
-
186
- .social {
187
- width: auto;
188
- }
189
-
190
- .social td {
191
- padding: 0;
192
- width: auto;
193
- }
194
-
195
- .social_icon {
196
- height: 20px;
197
- margin: 0 8px 10px 8px;
198
- padding: 0;
199
- }
200
- /* Data table ------------------------------ */
201
-
202
- .purchase {
203
- width: 100%;
204
- margin: 0;
205
- padding: 35px 0;
206
- }
207
-
208
- .purchase_content {
209
- width: 100%;
210
- margin: 0;
211
- padding: 25px 0 0 0;
212
- }
213
-
214
- .purchase_item {
215
- padding: 10px 0;
216
- color: #3E4B5B;
217
- font-size: 15px;
218
- line-height: 18px;
219
- }
220
-
221
- .purchase_heading {
222
- padding-bottom: 8px;
223
- border-bottom: 1px solid #EDEFF2;
224
- }
225
-
226
- .purchase_heading p {
227
- margin: 0;
228
- color: #9BA2AB;
229
- font-size: 12px;
230
- }
231
-
232
- .purchase_footer {
233
- padding-top: 15px;
234
- border-top: 1px solid #EDEFF2;
235
- }
236
-
237
- .purchase_total {
238
- margin: 0;
239
- text-align: right;
240
- /*font-weight: bold;*/
241
- color: #3E4B5B;
242
- }
243
-
244
- .purchase_total--label {
245
- padding: 0 15px 0 0;
246
- }
247
- /* Utilities ------------------------------ */
248
-
249
- .align-right {
250
- text-align: right;
251
- }
252
-
253
- .align-left {
254
- text-align: left;
255
- }
256
-
257
- .align-center {
258
- text-align: center;
259
- }
260
- /*Media Queries ------------------------------ */
261
-
262
- @media only screen and (max-width: 600px) {
263
- .email-body_inner,
264
- .email-footer {
265
- width: 100% !important;
266
- }
267
- }
268
-
269
- @media only screen and (max-width: 500px) {
270
- .button {
271
- width: 100% !important;
272
- }
273
- }
274
- /* Buttons ------------------------------ */
275
-
276
- .button {
277
- background-color: #047BF8;
278
- border-top: 10px solid #047BF8;
279
- border-right: 18px solid #047BF8;
280
- border-bottom: 10px solid #047BF8;
281
- border-left: 18px solid #047BF8;
282
- display: inline-block;
283
- color: #FFF;
284
- text-decoration: none;
285
- border-radius: 3px;
286
- -webkit-text-size-adjust: none;
287
- line-height: 22px;
288
- font-size: 16px;
289
- color: #FFF;
290
- }
291
-
292
- .button--link {
293
- background-color: transparent;
294
- border-top: 10px solid transparent;
295
- border-right: 18px solid transparent;
296
- border-bottom: 10px solid transparent;
297
- border-left: 18px solid transparent;
298
- display: inline-block;
299
- color: #047BF8;
300
- text-decoration: underline;
301
- border-radius: 3px;
302
- /*box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16);*/
303
- -webkit-text-size-adjust: none;
304
- }
305
-
306
- .button--green {
307
- background-color: #22BC66;
308
- border-top: 10px solid #22BC66;
309
- border-right: 18px solid #22BC66;
310
- border-bottom: 10px solid #22BC66;
311
- border-left: 18px solid #22BC66;
312
- }
313
-
314
- .button--red {
315
- background-color: #FF6136;
316
- border-top: 10px solid #FF6136;
317
- border-right: 18px solid #FF6136;
318
- border-bottom: 10px solid #FF6136;
319
- border-left: 18px solid #FF6136;
320
- }
321
- /* Type ------------------------------ */
322
-
323
- h1 {
324
- margin-top: 0;
325
- color: #3E4B5B;
326
- font-size: 19px;
327
- font-weight: bold;
328
- text-align: left;
329
- }
330
-
331
- h2 {
332
- margin-top: 0;
333
- color: #3E4B5B;
334
- font-size: 16px;
335
- font-weight: bold;
336
- text-align: left;
337
- }
338
-
339
- h3 {
340
- margin-top: 0;
341
- color: #3E4B5B;
342
- font-size: 14px;
343
- font-weight: bold;
344
- text-align: left;
345
- }
346
-
347
- p {
348
- margin-top: 0;
349
- color: #3E4B5B;
350
- font-size: 16px;
351
- line-height: 1.5em;
352
- text-align: left;
353
- }
354
-
355
- p.sub {
356
- font-size: 12px;
357
- }
358
-
359
- p.center {
360
- text-align: center;
361
- }
362
-
363
- .body-action.less-footer {
364
- margin-bottom: 10px;
365
- }
366
- </style>
367
- </head>
368
- <body>
369
- <% if content_for? :preheader %>
370
- <span class="preheader"><% yield :preheader %></span>
371
- <% end %>
372
- <table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0">
373
- <tr>
374
- <td align="center">
375
- <table class="email-content" width="100%" cellpadding="0" cellspacing="0">
376
- <tr>
377
- <td class="email-masthead">
378
- <a href="<%= root_url %>" class="email-masthead_name">
379
- <%= email_image_tag("logo/logo.png", width: image_width_for_height("logo/logo.png", BulletTrain::Themes.logo_height), height: BulletTrain::Themes.logo_height, style: "width: #{image_width_for_height('logo/logo.png', BulletTrain::Themes.logo_height)}px; height: #{BulletTrain::Themes.logo_height}px;") %>
380
- </a>
381
- </td>
382
- </tr>
383
- <!-- Email Body -->
384
- <tr>
385
- <td class="email-body" width="100%" cellpadding="0" cellspacing="0">
386
- <table class="email-body_inner" align="center" width="570" cellpadding="0" cellspacing="0">
387
- <!-- Body content -->
388
- <tr>
389
- <td class="content-cell">
390
-
391
- <%= yield %>
392
-
393
- <% if false %>
394
- <!-- Sub copy -->
395
- <table class="body-sub">
396
- <tr>
397
- <td>
398
- <p class="sub"><%= t('.trouble') %></p>
399
- <p class="sub">{{action_url}}</p>
400
- </td>
401
- </tr>
402
- </table>
403
- <% end %>
404
- </td>
405
- </tr>
406
- </table>
407
- </td>
408
- </tr>
409
- <tr>
410
- <td>
411
- <table class="email-footer" align="center" width="570" cellpadding="0" cellspacing="0">
412
- <tr>
413
- <td class="content-cell" align="center">
414
- <p class="sub align-center">&copy; <%= t('.all_rights_reserved', year: Date.today.year, product_name: t('application.name')) %></p>
415
- </td>
416
- </tr>
417
- </table>
418
- </td>
419
- </tr>
420
- </table>
421
- </td>
422
- </tr>
423
- </table>
424
- </body>
425
- </html>
1
+ <%= render "themes/#{current_theme}/layouts/mailer" %>
@@ -108,3 +108,4 @@ en:
108
108
  not_saved:
109
109
  one: "1 error prohibited this %{resource} from being saved:"
110
110
  other: "%{count} errors prohibited this %{resource} from being saved:"
111
+ pwned_password: "has previously appeared in a data breach and should never be used"
@@ -1,3 +1,3 @@
1
1
  module BulletTrain
2
- VERSION = "1.0.70"
2
+ VERSION = "1.0.74"
3
3
  end
data/lib/bullet_train.rb CHANGED
@@ -31,6 +31,8 @@ require "figaro"
31
31
  require "valid_email"
32
32
  require "commonmarker"
33
33
  require "extended_email_reply_parser"
34
+ require "pagy"
35
+ require "devise/pwned_password"
34
36
 
35
37
  module BulletTrain
36
38
  mattr_accessor :routing_concerns, default: []
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.70
4
+ version: 1.0.74
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-16 00:00:00.000000000 Z
11
+ date: 2022-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard
@@ -402,6 +402,20 @@ dependencies:
402
402
  - - ">="
403
403
  - !ruby/object:Gem::Version
404
404
  version: '0'
405
+ - !ruby/object:Gem::Dependency
406
+ name: devise-pwned_password
407
+ requirement: !ruby/object:Gem::Requirement
408
+ requirements:
409
+ - - ">="
410
+ - !ruby/object:Gem::Version
411
+ version: '0'
412
+ type: :runtime
413
+ prerelease: false
414
+ version_requirements: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - ">="
417
+ - !ruby/object:Gem::Version
418
+ version: '0'
405
419
  description: Bullet Train
406
420
  email:
407
421
  - andrew.culver@gmail.com
@@ -409,12 +423,11 @@ executables: []
409
423
  extensions: []
410
424
  extra_rdoc_files: []
411
425
  files:
426
+ - ".bt-link"
412
427
  - MIT-LICENSE
413
428
  - README.md
414
429
  - Rakefile
415
430
  - app/assets/config/bullet_train_manifest.js
416
- - app/assets/javascripts/bullet-train.js
417
- - app/assets/javascripts/bullet-train.js.map
418
431
  - app/controllers/account/invitations_controller.rb
419
432
  - app/controllers/account/memberships_controller.rb
420
433
  - app/controllers/account/onboarding/user_details_controller.rb
@@ -1,2 +0,0 @@
1
- import{identifierForContextKey as e}from"@hotwired/stimulus-webpack-helpers";import{Controller as t}from"@hotwired/stimulus";class i extends t{copy(){this.inputTarget.value=this.sourceTarget.innerText,this.inputTarget.select(),document.execCommand("copy"),this.buttonTarget.innerHTML='<i id="copied" class="fas fa-check w-4 h-4 block text-green-600"></i>',setTimeout(function(){document.getElementById("copied").innerHTML='<i class="far fa-copy w-4 h-4 block text-gray-600"></i>'},1500)}}i.targets=["source","input","button"];class r extends t{constructor(){super(...arguments),this.removeTrailingNewlines=e=>{e.element.innerHTML.match(/<br><\/div>$/)&&(e.element.innerHTML=e.element.innerHTML.slice(0,-10)+"</div>",this.removeTrailingNewlines(e))},this.removeTrailingWhitespace=e=>{e.element.innerHTML.match(/&nbsp;<\/div>$/)?(e.element.innerHTML=e.element.innerHTML.slice(0,-12)+"</div>",this.removeTrailingWhitespace(e)):e.element.innerHTML.match(/&nbsp; <\/div>$/)&&(e.element.innerHTML=e.element.innerHTML.slice(0,-13)+"</div>",this.removeTrailingWhitespace(e))}}resetOnSuccess(e){e.detail.success&&e.target.reset()}stripTrix(){this.trixFieldTargets.forEach(e=>{this.removeTrailingNewlines(e.editor),this.removeTrailingWhitespace(e.editor),e.parentElement.querySelector("input").value=e.innerHTML})}submitOnReturn(e){if((e.metaKey||e.ctrlKey)&&13==e.keyCode){e.preventDefault();let t=e.target.closest("form");this.submitForm(t)}}submitForm(e){e.requestSubmit?e.requestSubmit():e.querySelector("[type=submit]").click()}}r.targets=["trixField","scroll"];class s extends t{toggle(){const e=this.isWrapperHidden?this.showEventNameValue:this.hideEventNameValue;this.isWrapperHidden&&this.showWrapper(),this.wrapperTarget.dispatchEvent(new CustomEvent(e))}get isWrapperHidden(){return this.wrapperTarget.classList.contains(this.hiddenClass)}showWrapper(){this.wrapperTarget.classList.remove(this.hiddenClass)}hideWrapper(){this.wrapperTarget.classList.add(this.hiddenClass)}}s.targets=["wrapper"],s.classes=["hidden"],s.values={showEventName:String,hideEventName:String};const n=[[i,"clipboard_controller.js"],[r,"form_controller.js"],[s,"mobile_menu_controller.js"]].map(function(t){const i=t[0];return{identifier:e(t[1]),controllerConstructor:i}});document.addEventListener("turbo:load",()=>{navigator.userAgent.toLocaleLowerCase().includes("electron")&&document.body.classList.add("electron")});export{n as controllerDefinitions};
2
- //# sourceMappingURL=bullet-train.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bullet-train.js","sources":["../../javascript/controllers/clipboard_controller.js","../../javascript/controllers/form_controller.js","../../javascript/controllers/mobile_menu_controller.js","../../javascript/controllers/index.js","../../javascript/electron/index.js"],"sourcesContent":["import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = ['source', 'input', 'button']\n\n copy() {\n this.inputTarget.value = this.sourceTarget.innerText\n this.inputTarget.select()\n document.execCommand('copy')\n this.buttonTarget.innerHTML = '<i id=\"copied\" class=\"fas fa-check w-4 h-4 block text-green-600\"></i>'\n setTimeout(function () {\n document.getElementById('copied').innerHTML = '<i class=\"far fa-copy w-4 h-4 block text-gray-600\"></i>'\n }, 1500)\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// TODO Some of this feels really specific to the conversation messages form. Should we rename this controller?\nexport default class extends Controller {\n static targets = ['trixField', 'scroll']\n\n resetOnSuccess(e){\n if(e.detail.success) {\n e.target.reset();\n }\n }\n\n stripTrix(){\n this.trixFieldTargets.forEach(element => {\n this.removeTrailingNewlines(element.editor)\n this.removeTrailingWhitespace(element.editor)\n // When doing this as part of the form submission, Trix does not update the input element's value attribute fast enough.\n // In order to submit the stripped value, we manually update it here to fix the race condition\n element.parentElement.querySelector(\"input\").value = element.innerHTML\n })\n }\n\n submitOnReturn(e) {\n if((e.metaKey || e.ctrlKey) && e.keyCode == 13) {\n e.preventDefault();\n let form = e.target.closest(\"form\")\n this.submitForm(form)\n }\n }\n\n removeTrailingNewlines = (trixEditor) => {\n if (trixEditor.element.innerHTML.match(/<br><\\/div>$/)) {\n trixEditor.element.innerHTML = trixEditor.element.innerHTML.slice(0, -10) + \"</div>\"\n this.removeTrailingNewlines(trixEditor)\n }\n }\n\n removeTrailingWhitespace = (trixEditor) => {\n if (trixEditor.element.innerHTML.match(/&nbsp;<\\/div>$/)) {\n trixEditor.element.innerHTML = trixEditor.element.innerHTML.slice(0, -12) + \"</div>\"\n this.removeTrailingWhitespace(trixEditor)\n } else if (trixEditor.element.innerHTML.match(/&nbsp; <\\/div>$/)) {\n trixEditor.element.innerHTML = trixEditor.element.innerHTML.slice(0, -13) + \"</div>\"\n this.removeTrailingWhitespace(trixEditor)\n }\n }\n\n submitForm(form) {\n // Right now, Safari and IE don't support the requestSubmit method which is required for Turbo\n // Doing form.submit() doesn't actually fire the submit event which Turbo needs\n if (form.requestSubmit) {\n form.requestSubmit()\n } else {\n form.querySelector(\"[type=submit]\").click()\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"wrapper\"]\n static classes = [ \"hidden\" ] // necessary because stimulus-reveal will mess with the [hidden] attribute on the wrapper\n static values = {\n showEventName: String,\n hideEventName: String,\n }\n\n toggle() {\n const eventName = this.isWrapperHidden? this.showEventNameValue: this.hideEventNameValue\n if (this.isWrapperHidden) {\n this.showWrapper()\n }\n \n this.wrapperTarget.dispatchEvent(new CustomEvent(eventName))\n }\n \n get isWrapperHidden() {\n return this.wrapperTarget.classList.contains(this.hiddenClass)\n }\n \n showWrapper() {\n this.wrapperTarget.classList.remove(this.hiddenClass)\n }\n \n hideWrapper() {\n this.wrapperTarget.classList.add(this.hiddenClass)\n }\n}","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport ClipboardController from './clipboard_controller'\nimport FormController from './form_controller'\nimport MobileMenuController from './mobile_menu_controller'\n\nexport const controllerDefinitions = [\n [ClipboardController, 'clipboard_controller.js'],\n [FormController, 'form_controller.js'],\n [MobileMenuController, 'mobile_menu_controller.js'],\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n","document.addEventListener(\"turbo:load\", () => {\n if (navigator.userAgent.toLocaleLowerCase().includes('electron')) {\n document.body.classList.add('electron')\n }\n})"],"names":["Controller","copy","this","inputTarget","value","sourceTarget","innerText","select","document","execCommand","buttonTarget","innerHTML","setTimeout","getElementById","targets","constructor","super","arguments","removeTrailingNewlines","trixEditor","element","match","slice","removeTrailingWhitespace","resetOnSuccess","e","detail","success","target","reset","stripTrix","trixFieldTargets","forEach","editor","parentElement","querySelector","submitOnReturn","metaKey","ctrlKey","keyCode","preventDefault","form","closest","submitForm","requestSubmit","click","toggle","eventName","isWrapperHidden","showEventNameValue","hideEventNameValue","showWrapper","wrapperTarget","dispatchEvent","CustomEvent","classList","contains","hiddenClass","remove","hideWrapper","add","classes","values","showEventName","String","hideEventName","controllerDefinitions","ClipboardController","FormController","MobileMenuController","map","d","controller","identifier","identifierForContextKey","controllerConstructor","addEventListener","navigator","userAgent","toLocaleLowerCase","includes","body"],"mappings":"6HAE6BA,MAAAA,UAAAA,EAG3BC,OACEC,KAAKC,YAAYC,MAAQF,KAAKG,aAAaC,UAC3CJ,KAAKC,YAAYI,SACjBC,SAASC,YAAY,QACrBP,KAAKQ,aAAaC,UAAY,wEAC9BC,WAAW,WACTJ,SAASK,eAAe,UAAUF,UAAY,2DAC7C,SATEG,QAAU,CAAC,SAAU,QAAS,UCAVd,MAAAA,UAAAA,EAAWe,cAAAC,SAAAC,WAAAf,KA2BtCgB,uBAA0BC,IACpBA,EAAWC,QAAQT,UAAUU,MAAM,kBACrCF,EAAWC,QAAQT,UAAYQ,EAAWC,QAAQT,UAAUW,MAAM,GAAI,IAAM,SAC5EpB,KAAKgB,uBAAuBC,KA9BMjB,KAkCtCqB,yBAA4BJ,IACtBA,EAAWC,QAAQT,UAAUU,MAAM,mBACrCF,EAAWC,QAAQT,UAAYQ,EAAWC,QAAQT,UAAUW,MAAM,GAAI,IAAM,SAC5EpB,KAAKqB,yBAAyBJ,IACrBA,EAAWC,QAAQT,UAAUU,MAAM,qBAC5CF,EAAWC,QAAQT,UAAYQ,EAAWC,QAAQT,UAAUW,MAAM,GAAI,IAAM,SAC5EpB,KAAKqB,yBAAyBJ,KArClCK,eAAeC,GACVA,EAAEC,OAAOC,SACVF,EAAEG,OAAOC,QAIbC,YACE5B,KAAK6B,iBAAiBC,QAAQZ,IAC5BlB,KAAKgB,uBAAuBE,EAAQa,QACpC/B,KAAKqB,yBAAyBH,EAAQa,QAGtCb,EAAQc,cAAcC,cAAc,SAAS/B,MAAQgB,EAAQT,YAIjEyB,eAAeX,GACb,IAAIA,EAAEY,SAAWZ,EAAEa,UAA0B,IAAbb,EAAEc,QAAe,CAC/Cd,EAAEe,iBACF,IAAIC,EAAOhB,EAAEG,OAAOc,QAAQ,QAC5BxC,KAAKyC,WAAWF,IAqBpBE,WAAWF,GAGLA,EAAKG,cACPH,EAAKG,gBAELH,EAAKN,cAAc,iBAAiBU,WAjDjC/B,QAAU,CAAC,YAAa,UCFJd,MAAAA,UAAAA,EAQ3B8C,SACE,MAAMC,EAAY7C,KAAK8C,gBAAiB9C,KAAK+C,mBAAoB/C,KAAKgD,mBAClEhD,KAAK8C,iBACP9C,KAAKiD,cAGPjD,KAAKkD,cAAcC,cAAc,IAAIC,YAAYP,IAG/CC,sBACF,OAAO9C,KAAKkD,cAAcG,UAAUC,SAAStD,KAAKuD,aAGpDN,cACEjD,KAAKkD,cAAcG,UAAUG,OAAOxD,KAAKuD,aAG3CE,cACEzD,KAAKkD,cAAcG,UAAUK,IAAI1D,KAAKuD,gBAzBjC3C,QAAU,CAAE,WACZ+C,EAAAA,QAAU,CAAE,YACZC,OAAS,CACdC,cAAeC,OACfC,cAAeD,QCDNE,MAAAA,EAAwB,CACnC,CAACC,EAAqB,2BACtB,CAACC,EAAgB,sBACjB,CAACC,EAAsB,8BACvBC,IAAI,SAASC,GACb,MACMC,EAAaD,EAAE,GACrB,MAAO,CACLE,WAAYC,EAHFH,EAAE,IAIZI,sBAAuBH,KCf3BhE,SAASoE,iBAAiB,aAAc,KAClCC,UAAUC,UAAUC,oBAAoBC,SAAS,aACnDxE,SAASyE,KAAK1B,UAAUK,IAAI"}