lesli_mailer 0.1.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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +5 -0
  3. data/app/assets/config/lesli_mailer_manifest.js +1 -0
  4. data/app/assets/images/lesli_mailer/mailer-logo.svg +7 -0
  5. data/app/assets/stylesheets/lesli_mailer/application.css +15 -0
  6. data/app/controllers/lesli_mailer/accounts_controller.rb +60 -0
  7. data/app/controllers/lesli_mailer/application_controller.rb +4 -0
  8. data/app/controllers/lesli_mailer/dashboards_controller.rb +4 -0
  9. data/app/helpers/lesli_mailer/accounts_helper.rb +4 -0
  10. data/app/helpers/lesli_mailer/application_helper.rb +4 -0
  11. data/app/helpers/lesli_mailer/dashboards_helper.rb +4 -0
  12. data/app/jobs/lesli_mailer/application_job.rb +4 -0
  13. data/app/mailers/lesli_mailer/application_mailer.rb +6 -0
  14. data/app/models/lesli_mailer/account.rb +12 -0
  15. data/app/models/lesli_mailer/application_record.rb +5 -0
  16. data/app/models/lesli_mailer/dashboard.rb +8 -0
  17. data/app/views/lesli_mailer/accounts/_account.html.erb +2 -0
  18. data/app/views/lesli_mailer/accounts/_form.html.erb +17 -0
  19. data/app/views/lesli_mailer/accounts/edit.html.erb +10 -0
  20. data/app/views/lesli_mailer/accounts/index.html.erb +14 -0
  21. data/app/views/lesli_mailer/accounts/new.html.erb +9 -0
  22. data/app/views/lesli_mailer/accounts/show.html.erb +10 -0
  23. data/app/views/lesli_mailer/dashboards/_dashboard.html.erb +2 -0
  24. data/app/views/lesli_mailer/dashboards/_form.html.erb +17 -0
  25. data/app/views/lesli_mailer/dashboards/edit.html.erb +10 -0
  26. data/app/views/lesli_mailer/dashboards/index.html.erb +14 -0
  27. data/app/views/lesli_mailer/dashboards/new.html.erb +9 -0
  28. data/app/views/lesli_mailer/dashboards/show.html.erb +1 -0
  29. data/app/views/lesli_mailer/emails/lesli/devise/confirmation_instructions.html.erb +122 -0
  30. data/app/views/lesli_mailer/emails/lesli/devise/reset_password_instructions.html.erb +122 -0
  31. data/app/views/lesli_mailer/emails/lesli/devise/welcome.html.erb +122 -0
  32. data/config/routes.rb +3 -0
  33. data/db/migrate/0205000110_create_lesli_mailer_accounts.rb +5 -0
  34. data/db/migrate/0205003010_create_lesli_mailer_dashboards.rb +5 -0
  35. data/lib/lesli_mailer/engine.rb +57 -0
  36. data/lib/lesli_mailer/version.rb +4 -0
  37. data/lib/lesli_mailer.rb +6 -0
  38. data/lib/lesli_mailer_builder/lesli/appstore.mjml +64 -0
  39. data/lib/lesli_mailer_builder/lesli/copy.mjml +43 -0
  40. data/lib/lesli_mailer_builder/lesli/debug.mjml +46 -0
  41. data/lib/lesli_mailer_builder/lesli/devise/confirmation_instructions.mjml +70 -0
  42. data/lib/lesli_mailer_builder/lesli/devise/reset_password_instructions.mjml +74 -0
  43. data/lib/lesli_mailer_builder/lesli/devise/welcome.mjml +79 -0
  44. data/lib/lesli_mailer_builder/lesli/footer.mjml +41 -0
  45. data/lib/lesli_mailer_builder/lesli/head.mjml +53 -0
  46. data/lib/lesli_mailer_builder/lesli/header.mjml +37 -0
  47. data/lib/lesli_mailer_builder/lesli/logo.mjml +48 -0
  48. data/lib/lesli_mailer_builder/lesli/social.mjml +50 -0
  49. data/lib/lesli_mailer_emails/lesli/devise/confirmation_instructions.html +122 -0
  50. data/lib/lesli_mailer_emails/lesli/devise/reset_password_instructions.html +122 -0
  51. data/lib/lesli_mailer_emails/lesli/devise/welcome.html +122 -0
  52. data/lib/lesli_mailer_previews/devise_mailer_preview.rb +54 -0
  53. data/lib/tasks/lesli_mailer_tasks.rake +4 -0
  54. data/license +674 -0
  55. data/readme.md +83 -0
  56. metadata +114 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 023a23cd774e4aec95498944c04ba0bfe633017b59ae90cb4eb672024cc5ef11
4
+ data.tar.gz: effa4c4d291d37cd90461c06dc367cdc59d11965fbbd811285f7686b75aabd97
5
+ SHA512:
6
+ metadata.gz: 62cd8c3073630f925b23995ef21edf7b47938a87238a72e15928767bb901fe9f129084b9c1debbdde1ff6f77bb32cdf5d77a69f39e25dae617913a91f88981db
7
+ data.tar.gz: ebec777997607e8b74250eeb0e350f7b980a59513ac3ae2578a5dd72f7027c1c7fcb58be5707b953b501852d72a8a3ca9f3d48e9938ebfbadebb8a87a21bdac2
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require "bundler/setup"
2
+
3
+ load "rails/tasks/statistics.rake"
4
+
5
+ require "bundler/gem_tasks"
@@ -0,0 +1 @@
1
+ //= link_directory ../stylesheets/lesli_mailer .css
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 2" viewBox="0 0 48 48.34">
2
+ <g data-name="Layer 1">
3
+ <path fill="#193d8d" d="M6.83 4.21v18.16L24 35.42l17.18-13.06V4.21zm2.85 2.98h14.59v2.02H9.68zm28.66 13.64H9.67v-2.02h28.66v2.02Zm0-5.81H9.67V13h28.66v2.02Zm3.99 6.6L48 17.31 42.33 13zM5.67 12.93 0 17.24l5.67 4.31zm22.51-9.75L24 0l-4.18 3.18z"/>
4
+ <path fill="#193d8d" d="M19.57 33.47 24 36.83l4.43-3.36L48 48.34H0z"/>
5
+ <path fill="#193d8d" d="M28.43 33.46v.01L48 48.34V18.59zm-8.86 0v.01L0 48.34V18.59z"/>
6
+ </g>
7
+ </svg>
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,60 @@
1
+ module LesliMailer
2
+ class AccountsController < ApplicationController
3
+ before_action :set_account, only: %i[ show edit update destroy ]
4
+
5
+ # GET /accounts
6
+ def index
7
+ @accounts = Account.all
8
+ end
9
+
10
+ # GET /accounts/1
11
+ def show
12
+ end
13
+
14
+ # GET /accounts/new
15
+ def new
16
+ @account = Account.new
17
+ end
18
+
19
+ # GET /accounts/1/edit
20
+ def edit
21
+ end
22
+
23
+ # POST /accounts
24
+ def create
25
+ @account = Account.new(account_params)
26
+
27
+ if @account.save
28
+ redirect_to @account, notice: "Account was successfully created."
29
+ else
30
+ render :new, status: :unprocessable_entity
31
+ end
32
+ end
33
+
34
+ # PATCH/PUT /accounts/1
35
+ def update
36
+ if @account.update(account_params)
37
+ redirect_to @account, notice: "Account was successfully updated.", status: :see_other
38
+ else
39
+ render :edit, status: :unprocessable_entity
40
+ end
41
+ end
42
+
43
+ # DELETE /accounts/1
44
+ def destroy
45
+ @account.destroy
46
+ redirect_to accounts_url, notice: "Account was successfully destroyed.", status: :see_other
47
+ end
48
+
49
+ private
50
+ # Use callbacks to share common setup or constraints between actions.
51
+ def set_account
52
+ @account = Account.find(params[:id])
53
+ end
54
+
55
+ # Only allow a list of trusted parameters through.
56
+ def account_params
57
+ params.fetch(:account, {})
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,4 @@
1
+ module LesliMailer
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module LesliMailer
2
+ class DashboardsController < Lesli::Shared::DashboardsController
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module LesliMailer
2
+ module AccountsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module LesliMailer
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module LesliMailer
2
+ module DashboardsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module LesliMailer
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module LesliMailer
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: "from@example.com"
4
+ layout "mailer"
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ module LesliMailer
2
+ class Account < ApplicationRecord
3
+ belongs_to :account, class_name: "Lesli::Account"
4
+ has_many :dashboards
5
+
6
+ after_create :initialize_account
7
+
8
+ def initialize_account
9
+ Dashboard.initialize_account(self)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ module LesliMailer
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ module LesliMailer
2
+ class Dashboard < Lesli::Shared::Dashboard
3
+ self.table_name = "lesli_mailer_dashboards"
4
+ belongs_to :account
5
+
6
+ COMPONENTS = %i[]
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ <div id="<%= dom_id account %>">
2
+ </div>
@@ -0,0 +1,17 @@
1
+ <%= form_with(model: account) do |form| %>
2
+ <% if account.errors.any? %>
3
+ <div style="color: red">
4
+ <h2><%= pluralize(account.errors.count, "error") %> prohibited this account from being saved:</h2>
5
+
6
+ <ul>
7
+ <% account.errors.each do |error| %>
8
+ <li><%= error.full_message %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div>
15
+ <%= form.submit %>
16
+ </div>
17
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <h1>Editing account</h1>
2
+
3
+ <%= render "form", account: @account %>
4
+
5
+ <br>
6
+
7
+ <div>
8
+ <%= link_to "Show this account", @account %> |
9
+ <%= link_to "Back to accounts", accounts_path %>
10
+ </div>
@@ -0,0 +1,14 @@
1
+ <p style="color: green"><%= notice %></p>
2
+
3
+ <h1>Accounts</h1>
4
+
5
+ <div id="accounts">
6
+ <% @accounts.each do |account| %>
7
+ <%= render account %>
8
+ <p>
9
+ <%= link_to "Show this account", account %>
10
+ </p>
11
+ <% end %>
12
+ </div>
13
+
14
+ <%= link_to "New account", new_account_path %>
@@ -0,0 +1,9 @@
1
+ <h1>New account</h1>
2
+
3
+ <%= render "form", account: @account %>
4
+
5
+ <br>
6
+
7
+ <div>
8
+ <%= link_to "Back to accounts", accounts_path %>
9
+ </div>
@@ -0,0 +1,10 @@
1
+ <p style="color: green"><%= notice %></p>
2
+
3
+ <%= render @account %>
4
+
5
+ <div>
6
+ <%= link_to "Edit this account", edit_account_path(@account) %> |
7
+ <%= link_to "Back to accounts", accounts_path %>
8
+
9
+ <%= button_to "Destroy this account", @account, method: :delete %>
10
+ </div>
@@ -0,0 +1,2 @@
1
+ <div id="<%= dom_id dashboard %>">
2
+ </div>
@@ -0,0 +1,17 @@
1
+ <%= form_with(model: dashboard) do |form| %>
2
+ <% if dashboard.errors.any? %>
3
+ <div style="color: red">
4
+ <h2><%= pluralize(dashboard.errors.count, "error") %> prohibited this dashboard from being saved:</h2>
5
+
6
+ <ul>
7
+ <% dashboard.errors.each do |error| %>
8
+ <li><%= error.full_message %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div>
15
+ <%= form.submit %>
16
+ </div>
17
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <h1>Editing dashboard</h1>
2
+
3
+ <%= render "form", dashboard: @dashboard %>
4
+
5
+ <br>
6
+
7
+ <div>
8
+ <%= link_to "Show this dashboard", @dashboard %> |
9
+ <%= link_to "Back to dashboards", dashboards_path %>
10
+ </div>
@@ -0,0 +1,14 @@
1
+ <p style="color: green"><%= notice %></p>
2
+
3
+ <h1>Dashboards</h1>
4
+
5
+ <div id="dashboards">
6
+ <% @dashboards.each do |dashboard| %>
7
+ <%= render dashboard %>
8
+ <p>
9
+ <%= link_to "Show this dashboard", dashboard %>
10
+ </p>
11
+ <% end %>
12
+ </div>
13
+
14
+ <%= link_to "New dashboard", new_dashboard_path %>
@@ -0,0 +1,9 @@
1
+ <h1>New dashboard</h1>
2
+
3
+ <%= render "form", dashboard: @dashboard %>
4
+
5
+ <br>
6
+
7
+ <div>
8
+ <%= link_to "Back to dashboards", dashboards_path %>
9
+ </div>
@@ -0,0 +1 @@
1
+ <%= render("/lesli/shared/dashboards/show") %>
@@ -0,0 +1,122 @@
1
+ <!doctype html><html lang="und" dir="auto" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"><head><title></title><!--[if !mso]><!--><meta http-equiv="X-UA-Compatible" content="IE=edge"><!--<![endif]--><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><!--[if mso]>
2
+ <noscript>
3
+ <xml>
4
+ <o:OfficeDocumentSettings>
5
+ <o:AllowPNG/>
6
+ <o:PixelsPerInch>96</o:PixelsPerInch>
7
+ </o:OfficeDocumentSettings>
8
+ </xml>
9
+ </noscript>
10
+ <![endif]--><!--[if lte mso 11]>
11
+ <style type="text/css">
12
+ .mj-outlook-group-fix { width:100% !important; }
13
+ </style>
14
+ <![endif]--><!--[if !mso]><!--><!--<![endif]--></head><body style="-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background-color: #ebecf0; margin: 0; padding: 0; word-spacing: normal;"><div style="background-color:#ebecf0;" lang="und" dir="auto"><!-- Email header --><!-- Lesli
15
+
16
+ Copyright (c) 2025, Lesli Technologies, S. A.
17
+
18
+ This program is free software: you can redistribute it and/or modify
19
+ it under the terms of the GNU General Public License as published by
20
+ the Free Software Foundation, either version 3 of the License, or
21
+ (at your option) any later version.
22
+
23
+ This program is distributed in the hope that it will be useful,
24
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26
+ GNU General Public License for more details.
27
+
28
+ You should have received a copy of the GNU General Public License
29
+ along with this program. If not, see http://www.gnu.org/licenses/.
30
+
31
+ Lesli · Ruby on Rails SaaS Development Framework.
32
+
33
+ Made with ♥ by LesliTech
34
+ Building a better future, one line of code at a time.
35
+
36
+ @contact hello@lesli.tech
37
+ @website https://www.lesli.tech
38
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
39
+
40
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
41
+ // · --><!-- Lesli header --><!-- Lesli
42
+
43
+ Copyright (c) 2025, Lesli Technologies, S. A.
44
+
45
+ This program is free software: you can redistribute it and/or modify
46
+ it under the terms of the GNU General Public License as published by
47
+ the Free Software Foundation, either version 3 of the License, or
48
+ (at your option) any later version.
49
+
50
+ This program is distributed in the hope that it will be useful,
51
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
52
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
53
+ GNU General Public License for more details.
54
+
55
+ You should have received a copy of the GNU General Public License
56
+ along with this program. If not, see http://www.gnu.org/licenses/.
57
+
58
+ Lesli · Ruby on Rails SaaS Development Framework.
59
+
60
+ Made with ♥ by LesliTech
61
+ Building a better future, one line of code at a time.
62
+
63
+ @contact hello@lesli.tech
64
+ @website https://www.lesli.tech
65
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
66
+
67
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
68
+ // · --><!-- Lesli logo --><!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]--><div style="margin:0px auto;max-width:600px;"><table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;"><tbody><tr><td style="border-collapse: collapse; direction: ltr; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 20px 0; text-align: center;"><!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]--><div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; vertical-align: top;" width="100%"><tbody><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 0px; padding-bottom: 0px; padding-left: 5px; padding-top: 60px; word-break: break-word;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; border-spacing: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt;"><tbody><tr><td style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 125px;"><img alt src="https://cdn.lesli.tech/leslicloud/brand/app-logo.png" style="-ms-interpolation-mode: bicubic; border: 0; display: block; font-size: 13px; height: auto; line-height: 100%; outline: none; text-decoration: none; width: 100%;" width="125" height="auto"></td></tr></tbody></table></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--><div style="height:5px;line-height:5px;">&#8202;</div><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:center;color:#4a5056;"><h1>Welcome to Lesli</h1></div><!-- Email content --><!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" bgcolor="#ffffff" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]--><div style="background:#ffffff;background-color:#ffffff;margin:0px auto;border-radius:15px;max-width:600px;"><table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="background: #ffffff; background-color: #ffffff; border-collapse: collapse; border-radius: 15px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;"><tbody><tr><td style="border-collapse: collapse; direction: ltr; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 40px; text-align: center;"><!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:520px;" ><![endif]--><div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; vertical-align: top;" width="100%"><tbody><tr><td align="left" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 10px 25px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:16px;line-height:1.2;text-align:left;color:#4a5056;">Please take a moment to validate your email address so that we know it's you.</div></td></tr><tr><td style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; word-break: break-word;"><div style="height:10px;line-height:10px;">&#8202;</div></td></tr><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 10px 25px; word-break: break-word;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: separate; line-height: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt;"><tbody><tr><td align="center" bgcolor="#eef6fc" role="presentation" style="background: #eef6fc; border: 1px solid #209cee; border-collapse: collapse; border-radius: 5px; cursor: auto; mso-padding-alt: 10px 25px; mso-table-lspace: 0pt; mso-table-rspace: 0pt;" valign="middle"><a href="<%= @params[:url] %>" style="display:inline-block;background:#eef6fc;color:#209cee;font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:5px;" target="_blank">Confirm my account</a></td></tr></tbody></table></td></tr><tr><td style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; word-break: break-word;"><div style="height:20px;line-height:20px;">&#8202;</div></td></tr><tr><td style="background: #95a3ab; border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; word-break: break-word;"><div style="height:1px;line-height:1px;">&#8202;</div></td></tr><tr><td style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; word-break: break-word;"><div style="height:20px;line-height:20px;">&#8202;</div></td></tr><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 10px 25px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:14px;line-height:1.2;text-align:center;color:#4a5056;">Please keep in mind that this link is valid for only 3 hours.</div></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--> <!-- Email footer --><!-- Lesli
69
+
70
+ Copyright (c) 2025, Lesli Technologies, S. A.
71
+
72
+ This program is free software: you can redistribute it and/or modify
73
+ it under the terms of the GNU General Public License as published by
74
+ the Free Software Foundation, either version 3 of the License, or
75
+ (at your option) any later version.
76
+
77
+ This program is distributed in the hope that it will be useful,
78
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
79
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
80
+ GNU General Public License for more details.
81
+
82
+ You should have received a copy of the GNU General Public License
83
+ along with this program. If not, see http://www.gnu.org/licenses/.
84
+
85
+ Lesli · Ruby on Rails SaaS Development Framework.
86
+
87
+ Made with ♥ by LesliTech
88
+ Building a better future, one line of code at a time.
89
+
90
+ @contact hello@lesli.tech
91
+ @website https://www.lesli.tech
92
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
93
+
94
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
95
+ // · --><!-- Lesli footer --><!-- <mj-spacer height="30px" /> --><!-- <mj-include path="social.mjml" /> --><!-- <mj-include path="appstore.mjml" /> --><!-- <mj-spacer height="10px" /> --><!-- Lesli
96
+
97
+ Copyright (c) 2025, Lesli Technologies, S. A.
98
+
99
+ This program is free software: you can redistribute it and/or modify
100
+ it under the terms of the GNU General Public License as published by
101
+ the Free Software Foundation, either version 3 of the License, or
102
+ (at your option) any later version.
103
+
104
+ This program is distributed in the hope that it will be useful,
105
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
106
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
107
+ GNU General Public License for more details.
108
+
109
+ You should have received a copy of the GNU General Public License
110
+ along with this program. If not, see http://www.gnu.org/licenses/.
111
+
112
+ Lesli · Ruby on Rails SaaS Development Framework.
113
+
114
+ Made with ♥ by LesliTech
115
+ Building a better future, one line of code at a time.
116
+
117
+ @contact hello@lesli.tech
118
+ @website https://www.lesli.tech
119
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
120
+
121
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
122
+ // · --><!-- Copyright --><!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]--><div style="margin:0px auto;max-width:600px;"><table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;"><tbody><tr><td style="border-collapse: collapse; direction: ltr; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 20px 0; text-align: center;"><!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]--><div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; vertical-align: top;" width="100%"><tbody><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 4px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:center;color:#666666;">Copyright &copy; 2025 Lesli</div></td></tr><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 4px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:center;color:#666666;">Guatemala.</div></td></tr><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 4px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:center;color:#666666;">All rights reserved.</div></td></tr><!-- <mj-text align="center" color="#666666" padding="4px" padding-top="20px">The Lesli Team</mj-text> --></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--></div></body></html>
@@ -0,0 +1,122 @@
1
+ <!doctype html><html lang="und" dir="auto" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"><head><title></title><!--[if !mso]><!--><meta http-equiv="X-UA-Compatible" content="IE=edge"><!--<![endif]--><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><!--[if mso]>
2
+ <noscript>
3
+ <xml>
4
+ <o:OfficeDocumentSettings>
5
+ <o:AllowPNG/>
6
+ <o:PixelsPerInch>96</o:PixelsPerInch>
7
+ </o:OfficeDocumentSettings>
8
+ </xml>
9
+ </noscript>
10
+ <![endif]--><!--[if lte mso 11]>
11
+ <style type="text/css">
12
+ .mj-outlook-group-fix { width:100% !important; }
13
+ </style>
14
+ <![endif]--><!--[if !mso]><!--><!--<![endif]--></head><body style="-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background-color: #ebecf0; margin: 0; padding: 0; word-spacing: normal;"><div style="background-color:#ebecf0;" lang="und" dir="auto"><!-- Email header --><!-- Lesli
15
+
16
+ Copyright (c) 2025, Lesli Technologies, S. A.
17
+
18
+ This program is free software: you can redistribute it and/or modify
19
+ it under the terms of the GNU General Public License as published by
20
+ the Free Software Foundation, either version 3 of the License, or
21
+ (at your option) any later version.
22
+
23
+ This program is distributed in the hope that it will be useful,
24
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26
+ GNU General Public License for more details.
27
+
28
+ You should have received a copy of the GNU General Public License
29
+ along with this program. If not, see http://www.gnu.org/licenses/.
30
+
31
+ Lesli · Ruby on Rails SaaS Development Framework.
32
+
33
+ Made with ♥ by LesliTech
34
+ Building a better future, one line of code at a time.
35
+
36
+ @contact hello@lesli.tech
37
+ @website https://www.lesli.tech
38
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
39
+
40
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
41
+ // · --><!-- Lesli header --><!-- Lesli
42
+
43
+ Copyright (c) 2025, Lesli Technologies, S. A.
44
+
45
+ This program is free software: you can redistribute it and/or modify
46
+ it under the terms of the GNU General Public License as published by
47
+ the Free Software Foundation, either version 3 of the License, or
48
+ (at your option) any later version.
49
+
50
+ This program is distributed in the hope that it will be useful,
51
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
52
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
53
+ GNU General Public License for more details.
54
+
55
+ You should have received a copy of the GNU General Public License
56
+ along with this program. If not, see http://www.gnu.org/licenses/.
57
+
58
+ Lesli · Ruby on Rails SaaS Development Framework.
59
+
60
+ Made with ♥ by LesliTech
61
+ Building a better future, one line of code at a time.
62
+
63
+ @contact hello@lesli.tech
64
+ @website https://www.lesli.tech
65
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
66
+
67
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
68
+ // · --><!-- Lesli logo --><!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]--><div style="margin:0px auto;max-width:600px;"><table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;"><tbody><tr><td style="border-collapse: collapse; direction: ltr; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 20px 0; text-align: center;"><!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]--><div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; vertical-align: top;" width="100%"><tbody><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 0px; padding-bottom: 0px; padding-left: 5px; padding-top: 60px; word-break: break-word;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; border-spacing: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt;"><tbody><tr><td style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 125px;"><img alt src="https://cdn.lesli.tech/leslicloud/brand/app-logo.png" style="-ms-interpolation-mode: bicubic; border: 0; display: block; font-size: 13px; height: auto; line-height: 100%; outline: none; text-decoration: none; width: 100%;" width="125" height="auto"></td></tr></tbody></table></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--><div style="height:5px;line-height:5px;">&#8202;</div><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:center;color:#4a5056;"><h1>Hello <%= @params[:full_name] %></h1></div><!-- Email content --><!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" bgcolor="#ffffff" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]--><div style="background:#ffffff;background-color:#ffffff;margin:0px auto;border-radius:15px;max-width:600px;"><table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="background: #ffffff; background-color: #ffffff; border-collapse: collapse; border-radius: 15px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;"><tbody><tr><td style="border-collapse: collapse; direction: ltr; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 40px; text-align: center;"><!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:520px;" ><![endif]--><div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; vertical-align: top;" width="100%"><tbody><tr><td align="left" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 10px 25px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:16px;line-height:1.2;text-align:left;color:#4a5056;">We've received a request to reset your password.</div></td></tr><tr><td align="left" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 10px 25px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:16px;line-height:1.2;text-align:left;color:#4a5056;">If you didn't make the request, please ignore this message. Otherwise, you can reset your password using this link:</div></td></tr><tr><td style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; word-break: break-word;"><div style="height:10px;line-height:10px;">&#8202;</div></td></tr><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 10px 25px; word-break: break-word;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: separate; line-height: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt;"><tbody><tr><td align="center" bgcolor="#eef6fc" role="presentation" style="background: #eef6fc; border: 1px solid #209cee; border-collapse: collapse; border-radius: 5px; cursor: auto; mso-padding-alt: 10px 25px; mso-table-lspace: 0pt; mso-table-rspace: 0pt;" valign="middle"><a href="<%= @params[:url] %>" style="display:inline-block;background:#eef6fc;color:#209cee;font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:5px;" target="_blank">Click here to reset password</a></td></tr></tbody></table></td></tr><tr><td style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; word-break: break-word;"><div style="height:20px;line-height:20px;">&#8202;</div></td></tr><tr><td style="background: #95a3ab; border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; word-break: break-word;"><div style="height:1px;line-height:1px;">&#8202;</div></td></tr><tr><td style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; word-break: break-word;"><div style="height:20px;line-height:20px;">&#8202;</div></td></tr><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 10px 25px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:14px;line-height:1.2;text-align:center;color:#4a5056;">Please keep in mind that this link is valid for only 3 hours.</div></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--> <!-- Email footer --><!-- Lesli
69
+
70
+ Copyright (c) 2025, Lesli Technologies, S. A.
71
+
72
+ This program is free software: you can redistribute it and/or modify
73
+ it under the terms of the GNU General Public License as published by
74
+ the Free Software Foundation, either version 3 of the License, or
75
+ (at your option) any later version.
76
+
77
+ This program is distributed in the hope that it will be useful,
78
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
79
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
80
+ GNU General Public License for more details.
81
+
82
+ You should have received a copy of the GNU General Public License
83
+ along with this program. If not, see http://www.gnu.org/licenses/.
84
+
85
+ Lesli · Ruby on Rails SaaS Development Framework.
86
+
87
+ Made with ♥ by LesliTech
88
+ Building a better future, one line of code at a time.
89
+
90
+ @contact hello@lesli.tech
91
+ @website https://www.lesli.tech
92
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
93
+
94
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
95
+ // · --><!-- Lesli footer --><!-- <mj-spacer height="30px" /> --><!-- <mj-include path="social.mjml" /> --><!-- <mj-include path="appstore.mjml" /> --><!-- <mj-spacer height="10px" /> --><!-- Lesli
96
+
97
+ Copyright (c) 2025, Lesli Technologies, S. A.
98
+
99
+ This program is free software: you can redistribute it and/or modify
100
+ it under the terms of the GNU General Public License as published by
101
+ the Free Software Foundation, either version 3 of the License, or
102
+ (at your option) any later version.
103
+
104
+ This program is distributed in the hope that it will be useful,
105
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
106
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
107
+ GNU General Public License for more details.
108
+
109
+ You should have received a copy of the GNU General Public License
110
+ along with this program. If not, see http://www.gnu.org/licenses/.
111
+
112
+ Lesli · Ruby on Rails SaaS Development Framework.
113
+
114
+ Made with ♥ by LesliTech
115
+ Building a better future, one line of code at a time.
116
+
117
+ @contact hello@lesli.tech
118
+ @website https://www.lesli.tech
119
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
120
+
121
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
122
+ // · --><!-- Copyright --><!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" role="presentation" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]--><div style="margin:0px auto;max-width:600px;"><table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;"><tbody><tr><td style="border-collapse: collapse; direction: ltr; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 20px 0; text-align: center;"><!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]--><div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;"><table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; vertical-align: top;" width="100%"><tbody><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 4px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:center;color:#666666;">Copyright &copy; 2025 Lesli</div></td></tr><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 4px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:center;color:#666666;">Guatemala.</div></td></tr><tr><td align="center" style="border-collapse: collapse; font-size: 0px; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 4px; word-break: break-word;"><div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:center;color:#666666;">All rights reserved.</div></td></tr><!-- <mj-text align="center" color="#666666" padding="4px" padding-top="20px">The Lesli Team</mj-text> --></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--></td></tr></tbody></table></div><!--[if mso | IE]></td></tr></table><![endif]--></div></body></html>