lesli 5.0.12 → 5.0.13

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/lesli/brand/app-logo.png +0 -0
  3. data/app/assets/javascripts/lesli/templates/application.js +14 -0
  4. data/app/assets/javascripts/lesli/templates/public.js +14 -0
  5. data/app/assets/stylesheets/lesli/templates/application.css +851 -21432
  6. data/app/assets/stylesheets/lesli/templates/public.css +1 -19098
  7. data/app/controllers/lesli/application_controller.rb +1 -0
  8. data/app/controllers/lesli/interfaces/application/authorization.rb +1 -1
  9. data/app/helpers/lesli/assets_helper.rb +24 -6
  10. data/app/helpers/lesli/navigation_helper.rb +15 -11
  11. data/app/lib/date2.rb +8 -0
  12. data/app/lib/lesli/system.rb +13 -1
  13. data/app/models/concerns/user_extensions.rb +6 -0
  14. data/app/models/lesli/user.rb +2 -2
  15. data/app/operators/lesli/controller_operator.rb +4 -1
  16. data/app/services/lesli/user_service.rb +1 -1
  17. data/app/views/lesli/layouts/application-lesli.html.erb +2 -0
  18. data/app/views/lesli/partials/_application-data.html.erb +3 -3
  19. data/app/views/lesli/partials/_application-lesli-header.html.erb +47 -22
  20. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +2 -2
  21. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +8 -1
  22. data/app/views/lesli/partials/_application-lesli-scss.html.erb +2 -2
  23. data/app/views/lesli/wrappers/_application-devise-simple.erb +1 -1
  24. data/config/initializers/lesli.rb +7 -1
  25. data/config/locales/translations.en.yml +5 -3
  26. data/config/locales/translations.es.yml +5 -3
  27. data/config/locales/translations.fr.yml +5 -3
  28. data/config/locales/translations.it.yml +5 -3
  29. data/config/locales/translations.pt.yml +5 -3
  30. data/lib/generators/application_lesli_generator.rb +164 -0
  31. data/lib/generators/lesli/spec/USAGE +8 -0
  32. data/lib/generators/lesli/spec/spec_generator.rb +25 -0
  33. data/lib/generators/lesli/spec/templates/spec-factory.template +17 -0
  34. data/lib/generators/lesli/spec/templates/spec-model.template +70 -0
  35. data/lib/lesli/configuration.rb +1 -1
  36. data/lib/lesli/engine.rb +2 -3
  37. data/lib/lesli/r_spec.rb +40 -0
  38. data/lib/lesli/routing.rb +57 -0
  39. data/lib/lesli/version.rb +2 -2
  40. data/lib/lesli.rb +2 -0
  41. data/lib/scss/layouts/application-component.scss +1 -1
  42. data/lib/scss/layouts/application-content.scss +35 -0
  43. data/lib/scss/layouts/application-header.scss +37 -109
  44. data/lib/scss/layouts/{application-navbar.scss → application-navigation.scss} +21 -4
  45. data/lib/scss/layouts/application-search.scss +1 -1
  46. data/lib/scss/settings/variables.scss +1 -1
  47. data/lib/scss/templates/application.scss +8 -37
  48. data/lib/scss/templates/public.scss +6 -4
  49. data/lib/tasks/lesli_tasks.rake +3 -3
  50. data/lib/vue/application.js +6 -4
  51. data/lib/vue/layouts/application-component.vue +2 -2
  52. data/lib/vue/layouts/application-header.vue +108 -87
  53. data/lib/vue/panels/panel-support-tickets.vue +4 -2
  54. data/lib/vue/shared/dashboards/apps/edit.vue +1 -1
  55. data/lib/vue/shared/dashboards/components/form.vue +2 -2
  56. data/lib/vue/stores/translations.json +10 -0
  57. data/lib/webpack/base.js +11 -6
  58. data/lib/webpack/core.js +8 -6
  59. data/lib/webpack/engines.js +3 -1
  60. data/lib/webpack/root.js +105 -0
  61. data/lib/webpack/version.js +37 -0
  62. metadata +17 -24
  63. data/app/assets/stylesheets/lesli/users/confirmations.css +0 -19219
  64. data/app/assets/stylesheets/lesli/users/passwords.css +0 -19202
  65. data/app/assets/stylesheets/lesli/users/registrations.css +0 -19594
  66. data/app/assets/stylesheets/lesli/users/sessions.css +0 -19594
  67. data/lib/scss/bulma/loader.scss +0 -92
@@ -0,0 +1,164 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails Development Platform.
21
+
22
+ Made with ♥ by https://www.lesli.tech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ =end
32
+
33
+
34
+ =begin
35
+
36
+ Information reference:
37
+
38
+
39
+ rails generate lesli:test CloudEngine/Things
40
+
41
+ @info = {
42
+ :engine=>"CloudEngine",
43
+ :engine_code=>"cloud_engine",
44
+ :engine_name=>"engine",
45
+ :resources=>"Things",
46
+ :resources_code=>"things",
47
+ :resources_camel=>"things",
48
+ :resource=>"Thing",
49
+ :resource_camel=>"thing"
50
+ }
51
+
52
+ @vue = {
53
+ :path_base=> "~/engines/cloud_engine/lib/vue",
54
+ :path_apps=> "~/engines/cloud_engine/lib/vue/apps/thing",
55
+ :path_store=> "~/engines/cloud_engine/lib/vue/stores/thing.js",
56
+ :path_components=> "~/engines/cloud_engine/lib/vue/apps/thing/components"
57
+ }
58
+
59
+ @services = {
60
+ :path=> "~/engines/cloud_engine/app/services/thing_services.rb"
61
+ }
62
+
63
+ @rspec = {
64
+ :path_request=> "~/engines/cloud_engine/spec/requests/thing"
65
+ }
66
+ =end
67
+ module Lesli
68
+ class ApplicationLesliGenerator < Rails::Generators::NamedBase
69
+
70
+ @info;
71
+ @model;
72
+ @factory;
73
+ @services;
74
+ @rspec;
75
+ @vue;
76
+
77
+ def parse_info
78
+
79
+ engine, resource = name.split("/")
80
+
81
+ # engine information
82
+ engine_code = engine.underscore
83
+
84
+ # resource information
85
+ resource_code = resource.underscore
86
+
87
+ @info = {
88
+ :engine => engine,
89
+ :engine_code => engine_code,
90
+
91
+ :resource => resource,
92
+ :resource_code => resource_code,
93
+
94
+ :engine_resource => "#{engine}::#{resource}",
95
+ :engine_resource_code => "#{engine_code}_#{resource_code}"
96
+ }
97
+ end
98
+
99
+ def parse_model
100
+
101
+ tabla = "#{@info[:engine_resource]}".constantize
102
+ .columns.map do |column|
103
+
104
+ if column.type == :string
105
+ value = '""'
106
+ faker = "Faker::String.random"
107
+ end
108
+
109
+ if column.type == :integer
110
+ value = 1
111
+ faker = "Faker::Number.digit"
112
+ end
113
+
114
+ if column.type == :datetime
115
+ value = "'#{Time.now}'"
116
+ faker = 'Faker::Date.between(from: 2.days.ago, to: Date.today)'
117
+ end
118
+
119
+ {
120
+ :name => column.name,
121
+ :type => column.type,
122
+ :null => column.null,
123
+ :value => value,
124
+ :faker => faker
125
+ }
126
+ end
127
+
128
+ @model = {
129
+ :name => @info[:engine_resource],
130
+ :columns => tabla
131
+ }
132
+ end
133
+
134
+ # def parse_services
135
+
136
+ # path_base = Rails.root.join("engines", @info[:engine_code], "app", "services")
137
+
138
+ # @services = {
139
+ # :path => path_base.join(@info[:resource].downcase + "_services.rb")
140
+ # }
141
+ # end
142
+
143
+ # def parse_vue
144
+
145
+ # path_base = Rails.root.join("engines", @info[:engine_code], "lib", "vue")
146
+
147
+ # @vue = {
148
+ # :path_base => path_base,
149
+ # :path_apps => path_base.join("apps", @info[:resources_code]),
150
+ # :path_store => path_base.join("stores", "#{ @info[:resources_camel] }.js"),
151
+ # :path_components => path_base.join("apps", @info[:resources_code], "components")
152
+ # }
153
+ # end
154
+
155
+ # def parse_rspec
156
+ # path_base = Rails.root.join("engines", @info[:engine_code], "spec")
157
+
158
+ # @rspec = {
159
+ # :path_request => path_base.join("requests", @info[:resources_code]),
160
+ # :url => @info[:engine_name] + "/" + @info[:resources_code]
161
+ # }
162
+ # end
163
+ end
164
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ bin/rails generate lesli:spec Lesli/Account
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,25 @@
1
+
2
+
3
+ # ·
4
+ require "#{Lesli::Engine.root}/lib/generators/application_lesli_generator.rb"
5
+
6
+ module Lesli
7
+ class SpecGenerator < ApplicationLesliGenerator
8
+ source_root File.expand_path("templates", __dir__)
9
+
10
+ def generator
11
+ L2.msg "Generating Lesli Model spec"
12
+
13
+ pp @info;
14
+ pp "--- --- --- --- --- ---"
15
+ pp @model;
16
+ pp "--- --- --- --- --- ---"
17
+ pp @services;
18
+ pp "--- --- --- --- --- ---"
19
+ pp @rspec;
20
+
21
+ #template("spec-factory.template", "#{(@info[:engine].constantize)::Engine.root.join('spec', 'factories', @info[:engine_resource_code])}.rb")
22
+ template("spec-model.template", "#{(@info[:engine].constantize)::Engine.root.join('spec', 'models', @info[:engine_resource_code])}_spec.rb")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ =begin
2
+ <%# TODO: Use the license file if no lesli.txt file found %>
3
+ <%= File.read(Lesli::Engine.root.join("lesli.txt")).to_s.force_encoding("ASCII-8BIT") %>=end
4
+
5
+ FactoryBot.define do
6
+ factory :<%= @info[:engine_resource_code] %>, class: <%= @info[:engine_resource] %> do
7
+ name { Faker::Company.name }
8
+
9
+ <% @model[:columns].each do |column| %>
10
+ <%= column[:name] %> { <%= column[:faker] %> }<% end %>
11
+
12
+ after(:create) do |account, evaluator|
13
+ account.user = FactoryBot.create(:user, account_id: account.id)
14
+ account.save
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,70 @@
1
+ =begin
2
+ <%# TODO: Use the license file if no lesli.txt file found %>
3
+ <%= File.read(Lesli::Engine.root.join("lesli.txt")).to_s.force_encoding("ASCII-8BIT") %>=end
4
+
5
+ require "rails_helper"
6
+ require Lesli::Engine.root.join("spec/support/testers/model")
7
+
8
+ RSpec.describe <%= @model[:name]%>, type: :model do
9
+
10
+ # Setup runs before each test
11
+ let(:<%= @info[:engine_resource_code] %>) { FactoryBot.create(:<%= @info[:engine_resource_code] %>) }
12
+
13
+ it "is valid with valid attributes" do
14
+ expect(<%= @info[:engine_resource_code] %>).to be_valid
15
+ end
16
+
17
+ <% @model[:columns].each do |column| %>
18
+ <% next if ["id", "created_at", "updated_at"].include?(column[:name]) %>
19
+ <% if !column[:null] %>
20
+ it "is valid with valid attributes" do
21
+ <%= @info[:engine_resource_code] %>.<%= column[:name]%> = nil
22
+ expect(<%= @info[:engine_resource_code] %>).not_to be_valid
23
+ end
24
+ <% end %>
25
+ <% end %>
26
+
27
+ =begin
28
+
29
+
30
+ it "is invalid without a name" do
31
+ account.name = nil
32
+ expect(account).not_to be_valid
33
+ end
34
+
35
+ it "is invalid without an email" do
36
+ account.email = nil
37
+ expect(account).not_to be_valid
38
+ end
39
+
40
+ it "is invalid with a duplicate email" do
41
+ account.save
42
+ duplicate_account = Account.new(name: "Test Account 2", email: "test@example.com", balance: 50.0)
43
+ expect(duplicate_account).not_to be_valid
44
+ end
45
+
46
+ it "is invalid without a balance" do
47
+ account.balance = nil
48
+ expect(account).not_to be_valid
49
+ end
50
+
51
+ it "is invalid with a negative balance" do
52
+ account.balance = -1
53
+ expect(account).not_to be_valid
54
+ end
55
+
56
+ # Test associations
57
+ it "has many transactions" do
58
+ expect(account).to respond_to(:transactions)
59
+ end
60
+
61
+ # Test custom methods
62
+ describe "#update_balance" do
63
+ it "updates the balance correctly" do
64
+ account.save
65
+ account.update_balance(50.0)
66
+ expect(account.reload.balance).to eq(150.0)
67
+ end
68
+ end
69
+ =end
70
+ end
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
20
  Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
data/lib/lesli/engine.rb CHANGED
@@ -19,11 +19,11 @@ along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
20
  Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
26
- @website https://www.lesli.dev
26
+ @website https://www.lesli.tech
27
27
  @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
28
 
29
29
  // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
@@ -36,7 +36,6 @@ require "kaminari"
36
36
 
37
37
  # · Tools used to build the Lesli Framework
38
38
  require "L2"
39
- #require "devise"
40
39
  require "ancestry"
41
40
  require "useragent"
42
41
  require "acts_as_paranoid"
@@ -0,0 +1,40 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
+
22
+ Made with ♥ by LesliTech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ =end
32
+
33
+ # ·
34
+ module Lesli
35
+ module RSpec
36
+ def self.testers_request
37
+ Lesli::Engine.root.join("spec/support/testers/request")
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,57 @@
1
+ =begin
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
+
22
+ Made with ♥ by LesliTech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ =end
32
+
33
+ # ·
34
+ module Lesli
35
+ module Routing
36
+ def self.mount_dashboard_for lesli_engine
37
+
38
+ lesli_engine::Engine.routes.draw do
39
+
40
+ # Dashboard alias
41
+ root to: "dashboards#show"
42
+
43
+ # Dashboard management
44
+ resource :dashboard, only: [:show]
45
+ resources :dashboards do
46
+ collection do
47
+ post "list" => :index
48
+ get :options
49
+ end
50
+ scope module: :dashboard do
51
+ resources :components
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
data/lib/lesli/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Lesli
2
- VERSION = "5.0.12"
3
- BUILD = "1713121383"
2
+ VERSION = "5.0.13"
3
+ BUILD = "1728877698"
4
4
  end
data/lib/lesli.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require "lesli/configuration"
2
+ require "lesli/routing"
2
3
  require "lesli/version"
3
4
  require "lesli/engine"
5
+ require "lesli/r_spec"
4
6
 
5
7
  module Lesli
6
8
  end
@@ -35,5 +35,5 @@ Building a better future, one line of code at a time.
35
35
  .lesli-application-component {
36
36
  border-radius: .6rem;
37
37
  box-shadow: $lesli-box-shadow;
38
- background-color: lesli-css-color(solid, white);
38
+ background-color: white;
39
39
  }
@@ -0,0 +1,35 @@
1
+ /*
2
+ Lesli
3
+
4
+ Copyright (c) 2023, Lesli Technologies, S. A.
5
+
6
+ This program is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program. If not, see http://www.gnu.org/licenses/.
18
+
19
+ Lesli · Ruby on Rails SaaS Development Framework.
20
+
21
+ Made with ♥ by LesliTech
22
+ Building a better future, one line of code at a time.
23
+
24
+ @contact hello@lesli.tech
25
+ @website https://www.lesli.tech
26
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
27
+
28
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
29
+ // ·
30
+ */
31
+
32
+ // ·
33
+ section.lesli-application-content {
34
+ display: flex;
35
+ }
@@ -19,11 +19,11 @@ along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
20
  Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
26
- @website https://www.lesli.dev
26
+ @website https://www.lesli.tech
27
27
  @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
28
 
29
29
  // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
@@ -33,130 +33,58 @@ Building a better future, one line of code at a time.
33
33
 
34
34
  // ·
35
35
  header.lesli-application-header {
36
- height: var(--lesli-header-height);
37
36
  background-color: var(--lesli-header-color);
38
- border-bottom: 1px solid rgba(172,179,194,.2);
39
- width: 100%;
40
-
41
-
42
- // · main logo
43
- .lesli-brand {
44
- img {
45
- height: var(--lesli-header-height);
46
- }
47
- }
48
-
49
-
50
- // · Navigation and icons contianer
51
- .lesli-application-header-container {
52
- width: 100%;
53
- height: 100%;
54
- display: flex;
55
- align-items: center;
56
- flex-direction: row;
57
- justify-content: space-between;
58
- padding: 0 1.2rem;
59
- }
60
-
61
-
62
- // · Logo and search container
63
- .lesli-application-header-left {
64
- flex: 1;
37
+ border-bottom: 1px solid rgba(172,179,194,.3);
38
+ height: var(--lesli-header-height);
65
39
 
66
- .control {
67
- flex: 1;
40
+ nav.lesli-navbar {
68
41
 
69
- .icon {
70
- height: 100%;
71
- display: flex;
72
- align-items: center;
73
- justify-content: center;
74
- }
75
-
76
- .material-icons {
77
- font-size: 25px;
78
- }
79
-
80
- input {
81
- font-size: 1.15rem;
82
- padding-left: 2.7rem;
83
- border-radius: 8px;
84
- border: 1px solid transparent;
85
- transition: all linear .3s;
86
- background-color: transparent;
87
-
88
- &::placeholder {
89
- color: lesli-css-color(silver, 700);
90
- }
91
-
92
- &:focus {
93
- max-width: 98%;
94
- border-color: lesli-css-color(silver);
95
- }
42
+ .navbar-brand {
43
+ img {
44
+ height: var(--lesli-header-height);
96
45
  }
97
46
  }
98
- }
99
47
 
48
+ .navbar-item {
49
+ padding: 0;
100
50
 
101
- // · Indicator icons container
102
- .lesli-application-header-right {
103
-
104
- .header-language-selector {
105
- height: 24px;
106
- }
107
-
108
- // Notification icon & count
109
- .header-indicator {
110
- margin-left: 20px;
111
- position: relative;
51
+ // navigation icon containers
52
+ span {
53
+ line-height: 1;
54
+ }
112
55
 
113
- // icons
56
+ // navigation icons
114
57
  [class^="ri-"] {
115
58
  font-size: 25px;
116
- color: lesli-css-color(black, 700);
117
- }
118
-
119
- .count {
120
- top: -8px;
121
- right: -4px;
122
- width: 8px;
123
- height: 8px;
124
- font-size: 0px;
125
- text-align: center;
126
- border-radius: 50%;
127
- background-color: lesli-css-color(berry, 300);
128
- color: lesli-css-color(silver, 100);
129
- font-family: sans-serif;
130
- position: absolute;
131
- }
132
- }
133
-
134
- //
135
- .header-user-options {
136
- margin-left: 20px;
137
-
138
- .dropdown-trigger .ri-user-smile-line {
139
- font-size: 26px;
59
+ padding: 0 0.6rem;
140
60
  color: lesli-css-color(black, 700);
141
61
  }
142
62
 
143
- .dropdown-menu {
144
- min-width: 15rem;
63
+ // Notification icon & count
64
+ .header-indicator {
65
+ position: relative;
145
66
 
146
- .dropdown-content {
147
- width: 100%;
148
- padding: 0;
149
-
150
- hr.dropdown-divider {
151
- margin: 0;
152
- }
67
+ // icons
68
+ [class^="ri-"] {
69
+ font-size: 25px;
70
+ color: lesli-css-color(black, 700);
71
+ }
72
+
73
+ .count {
74
+ top: -4px;
75
+ right: 6px;
76
+ width: 8px;
77
+ height: 8px;
78
+ border-radius: 50%;
79
+ background-color: lesli-css-color(berry, 300);
80
+ position: absolute;
153
81
  }
154
82
  }
83
+ }
155
84
 
156
- .dropdown-item {
157
- [class^="ri-"] {
158
- font-size: 22px;
159
- }
85
+ .dropdown {
86
+ .icon-text {
87
+ align-items: center;
160
88
  }
161
89
  }
162
90
  }