lesli 5.0.12 → 5.0.13

Sign up to get free protection for your applications and to get access to all the features.
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
  }