lesli_dashboard 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/lesli_dashboard/application.tailwind.css +33 -0
- data/app/views/lesli_dashboard/dashboards/_component-calendar.html.erb +15 -1
- data/app/views/lesli_dashboard/dashboards/_component-chart-bar.html.erb +3 -4
- data/app/views/lesli_dashboard/dashboards/_component-chart-line.html.erb +6 -7
- data/app/views/lesli_dashboard/dashboards/_component-weather.html.erb +10 -1
- data/app/views/lesli_dashboard/dashboards/shared/_header.html.erb +24 -13
- data/app/views/lesli_dashboard/dashboards/shared/show.html.erb +45 -34
- data/config/locales/translations.en.yml +6 -1
- data/config/locales/translations.es.yml +6 -1
- data/config/locales/translations.fr.yml +6 -1
- data/config/locales/translations.it.yml +6 -1
- data/config/locales/translations.pt.yml +6 -1
- data/db/seeds.rb +1 -1
- data/lib/lesli_dashboard/version.rb +2 -2
- data/readme.md +112 -49
- metadata +6 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 470a3490ccd8123513d348ba6b3dd443bf0e021dafe7b67470f584086da72d44
|
|
4
|
+
data.tar.gz: 16454047aebddbbed7c6a3788c4a4ecd15c0c5f9fd7d24b54f83a2b6e58094d9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2258eb9725588b3387d8c49a9c8e2da000d9d712e8d5d2394af8843d9c20deb528782f191032ce4ee13eefe8f20bbea691ea62f28a7570a4ec0e06c81358a539
|
|
7
|
+
data.tar.gz: 57652dd6ee2d053e9232b36cfb3a9644b74b220ed64265fc999b71a4c21283b158e6664a9299df345d8e0aa14b288b581948bb47017e90167c6f31aa6df548aa
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
+
/*!
|
|
3
|
+
|
|
4
|
+
Lesli
|
|
5
|
+
|
|
6
|
+
Copyright (c) 2026, Lesli Technologies, S. A.
|
|
7
|
+
|
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
|
9
|
+
it under the terms of the GNU General Public License as published by
|
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
(at your option) any later version.
|
|
12
|
+
|
|
13
|
+
This program is distributed in the hope that it will be useful,
|
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
GNU General Public License for more details.
|
|
17
|
+
|
|
18
|
+
You should have received a copy of the GNU General Public License
|
|
19
|
+
along with this program. If not, see http://www.gnu.org/licenses/.
|
|
20
|
+
|
|
21
|
+
Lesli · Ruby on Rails SaaS Development Framework.
|
|
22
|
+
|
|
23
|
+
Made with ♥ by LesliTech
|
|
24
|
+
Building a better future, one line of code at a time.
|
|
25
|
+
|
|
26
|
+
@contact hello@lesli.tech
|
|
27
|
+
@website https://www.lesli.tech
|
|
28
|
+
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
|
29
|
+
|
|
30
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
|
31
|
+
// ·
|
|
32
|
+
*/
|
|
33
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid}}}@layer theme{:root,:host{--color-slate-50:oklch(98.4% .003 247.858);--color-slate-300:oklch(86.9% .022 252.894);--spacing:.25rem;--radius-2xl:1rem}}@layer utilities{.col-span-12{grid-column:span 12/span 12}.mt-6{margin-top:calc(var(--spacing) * 6)}.grid{display:grid}.h-full{height:100%}.w-full{width:100%}.min-w-0{min-width:0}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.items-stretch{align-items:stretch}.gap-4{gap:calc(var(--spacing) * 4)}.rounded-2xl{border-radius:var(--radius-2xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-slate-300{border-color:var(--color-slate-300)}.bg-slate-50\/70{background-color:#f8fafcb3}@supports (color:color-mix(in lab, red, red)){.bg-slate-50\/70{background-color:color-mix(in oklab, var(--color-slate-50) 70%, transparent)}}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-12{padding-block:calc(var(--spacing) * 12)}@media (min-width:40rem){.sm\:gap-5{gap:calc(var(--spacing) * 5)}.sm\:py-16{padding-block:calc(var(--spacing) * 16)}}@media (min-width:48rem){.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-12{grid-column:span 12/span 12}}@media (min-width:64rem){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-9{grid-column:span 9/span 9}.lg\:col-span-10{grid-column:span 10/span 10}.lg\:col-span-11{grid-column:span 11/span 11}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:gap-6{gap:calc(var(--spacing) * 6)}}.\[\&_\.box\]\:h-full .box,.\[\&\>\*\]\:h-full>*{height:100%}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}
|
|
@@ -1 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
<%
|
|
2
|
+
# Demo dates keep the widget populated until dashboard events come from the backend.
|
|
3
|
+
# Replace this array with the account's event dates when that integration is available.
|
|
4
|
+
calendar_date = Date.current
|
|
5
|
+
calendar_events = [8, 10, 27].map { |day| calendar_date.change(day: day) }
|
|
6
|
+
%>
|
|
7
|
+
|
|
8
|
+
<%= render(
|
|
9
|
+
LesliView::Widgets::Calendar.new(
|
|
10
|
+
date: calendar_date,
|
|
11
|
+
events: calendar_events,
|
|
12
|
+
selected_date: calendar_date,
|
|
13
|
+
week_starts_on: :sunday
|
|
14
|
+
)
|
|
15
|
+
) %>
|
|
@@ -1 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
<%# Demo values; replace them with backend weather data when available. %>
|
|
2
|
+
<%= render(
|
|
3
|
+
LesliView::Widgets::Weather.new(
|
|
4
|
+
temperature: 26,
|
|
5
|
+
location: "Guatemala",
|
|
6
|
+
condition: "Showers",
|
|
7
|
+
unit: "C",
|
|
8
|
+
icon: "rainy"
|
|
9
|
+
)
|
|
10
|
+
) %>
|
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
|
|
2
2
|
<%
|
|
3
|
+
date = Date2.new
|
|
4
|
+
hour = date.date.get.hour
|
|
3
5
|
|
|
4
|
-
#
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
# Select the greeting using the application's configured time zone.
|
|
7
|
+
greeting_key =
|
|
8
|
+
case hour
|
|
9
|
+
when 0...12 then "morning"
|
|
10
|
+
when 12...18 then "afternoon"
|
|
11
|
+
else "evening"
|
|
12
|
+
end
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
greeting_defaults = {
|
|
15
|
+
"morning" => "Good morning",
|
|
16
|
+
"afternoon" => "Good afternoon",
|
|
17
|
+
"evening" => "Good evening"
|
|
18
|
+
}.freeze
|
|
19
|
+
|
|
20
|
+
greeting = I18n.t(
|
|
21
|
+
"lesli_dashboard.greetings.#{greeting_key}",
|
|
22
|
+
default: greeting_defaults.fetch(greeting_key)
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Avoid a trailing comma when the current user or full name is unavailable.
|
|
26
|
+
title = [greeting, current_user&.full_name.presence].compact.join(", ")
|
|
16
27
|
%>
|
|
17
28
|
|
|
18
29
|
<%= render(LesliView::Components::Header.new(
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
title,
|
|
31
|
+
date.date_words_day
|
|
21
32
|
)) %>
|
|
@@ -29,45 +29,56 @@ Building a better future, one line of code at a time.
|
|
|
29
29
|
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
|
30
30
|
// ·
|
|
31
31
|
%>
|
|
32
|
-
<style>
|
|
33
|
-
.dashboard-components .column > div,
|
|
34
|
-
.dashboard-components .column > div > .box{
|
|
35
|
-
height: 100%;
|
|
36
|
-
}
|
|
37
|
-
</style>
|
|
38
|
-
<%
|
|
39
|
-
|
|
40
|
-
# Returns the hour (0–23) based on the app's timezone
|
|
41
|
-
hour = Date2.new.date.get.hour
|
|
42
|
-
welcome_options = ["Good morning", "Good afternoon", "Good evening"]
|
|
43
|
-
welcome_text = ""
|
|
44
|
-
|
|
45
|
-
if hour < 12
|
|
46
|
-
welcome_text = welcome_options.first
|
|
47
|
-
elsif hour < 18
|
|
48
|
-
welcome_text = welcome_options.second
|
|
49
|
-
else
|
|
50
|
-
welcome_text = welcome_options.third
|
|
51
|
-
end
|
|
52
|
-
%>
|
|
53
32
|
|
|
54
|
-
<% @dashboard ||= { :id=>0, :name=>"" } %>
|
|
55
33
|
<% @components ||= [] %>
|
|
34
|
+
<%
|
|
35
|
+
# Dashboard component sizes use the same 12-column scale stored in the database.
|
|
36
|
+
# Components stack on small screens and retain their configured width on desktops.
|
|
37
|
+
component_width_classes = {
|
|
38
|
+
1 => "md:col-span-6 lg:col-span-1",
|
|
39
|
+
2 => "md:col-span-6 lg:col-span-2",
|
|
40
|
+
3 => "md:col-span-6 lg:col-span-3",
|
|
41
|
+
4 => "md:col-span-6 lg:col-span-4",
|
|
42
|
+
5 => "md:col-span-6 lg:col-span-5",
|
|
43
|
+
6 => "md:col-span-6 lg:col-span-6",
|
|
44
|
+
7 => "md:col-span-12 lg:col-span-7",
|
|
45
|
+
8 => "md:col-span-12 lg:col-span-8",
|
|
46
|
+
9 => "md:col-span-12 lg:col-span-9",
|
|
47
|
+
10 => "md:col-span-12 lg:col-span-10",
|
|
48
|
+
11 => "md:col-span-12 lg:col-span-11",
|
|
49
|
+
12 => "md:col-span-12 lg:col-span-12"
|
|
50
|
+
}.freeze
|
|
51
|
+
%>
|
|
56
52
|
|
|
57
53
|
<%= render(LesliView::Layout::Container.new("dashboards-show", :dashboard => false)) do %>
|
|
58
54
|
|
|
59
55
|
<%= render("lesli_dashboard/dashboards/shared/header") %>
|
|
60
56
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
57
|
+
<% if @components.empty? %>
|
|
58
|
+
<section
|
|
59
|
+
class="mt-6 rounded-2xl border border-dashed border-slate-300 bg-slate-50/70 px-6 py-12 sm:py-16"
|
|
60
|
+
aria-label="Empty dashboard">
|
|
61
|
+
<%= render(LesliView::Elements::Empty.new(text: "Empty dashboard")) %>
|
|
62
|
+
</section>
|
|
63
|
+
<% else %>
|
|
64
|
+
<section class="mt-6 w-full" aria-label="Dashboard widgets">
|
|
65
|
+
<div class="grid grid-cols-12 items-stretch gap-4 sm:gap-5 lg:gap-6">
|
|
66
|
+
<% @components.each do |component| %>
|
|
67
|
+
<%
|
|
68
|
+
component_size = component["size"].to_i
|
|
69
|
+
component_size = 4 unless component_width_classes.key?(component_size)
|
|
70
|
+
component_name = component["component"].to_s
|
|
71
|
+
component_path = "#{controller.controller_path}/component-#{component_name.dasherize}"
|
|
72
|
+
%>
|
|
73
|
+
<article
|
|
74
|
+
class="col-span-12 min-w-0 <%= component_width_classes.fetch(component_size) %>"
|
|
75
|
+
data-dashboard-component="<%= component_name %>">
|
|
76
|
+
<div class="h-full min-w-0 [&>*]:h-full [&_.box]:h-full">
|
|
77
|
+
<%= render(component_path, { :component => component }) %>
|
|
78
|
+
</div>
|
|
79
|
+
</article>
|
|
80
|
+
<% end %>
|
|
81
|
+
</div>
|
|
82
|
+
</section>
|
|
83
|
+
<% end %>
|
|
73
84
|
<% end %>
|
data/db/seeds.rb
CHANGED
|
@@ -30,7 +30,7 @@ Building a better future, one line of code at a time.
|
|
|
30
30
|
// ·
|
|
31
31
|
=end
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Termline.info("Loading seeds for: LesliDashboard #{LesliDashboard::VERSION} (#{LesliDashboard::BUILD})")
|
|
34
34
|
|
|
35
35
|
# · load specific environment seeds
|
|
36
36
|
if Rails.env.development? || Lesli.config.demo
|
data/readme.md
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<
|
|
3
|
-
|
|
2
|
+
<h1 align="center">
|
|
3
|
+
<img width="100" alt="LesliDashboard" src="./app/assets/images/lesli_dashboard/dashboard-logo.svg" />
|
|
4
|
+
</h1>
|
|
5
|
+
<h3 align="center">Configurable dashboards for the Lesli Framework.</h3>
|
|
4
6
|
</div>
|
|
5
7
|
|
|
6
8
|
<br />
|
|
7
|
-
<hr/>
|
|
8
9
|
|
|
9
10
|
<div align="center">
|
|
10
|
-
<a target="_blank" href="https://github.com/LesliTech/LesliDashboard/actions">
|
|
11
|
-
<img alt="
|
|
11
|
+
<a target="_blank" href="https://github.com/LesliTech/LesliDashboard/actions/workflows/lesli-ci.yaml">
|
|
12
|
+
<img alt="LesliDashboard test status" src="https://img.shields.io/github/actions/workflow/status/LesliTech/LesliDashboard/lesli-ci.yaml?branch=master&style=for-the-badge&logo=github&label=tests">
|
|
12
13
|
</a>
|
|
13
14
|
<a target="_blank" href="https://rubygems.org/gems/lesli_dashboard">
|
|
14
15
|
<img alt="Gem Version" src="https://img.shields.io/gem/v/lesli_dashboard?style=for-the-badge&logo=ruby">
|
|
@@ -16,83 +17,148 @@
|
|
|
16
17
|
<a target="_blank" href="https://codecov.io/github/LesliTech/LesliDashboard">
|
|
17
18
|
<img alt="Codecov" src="https://img.shields.io/codecov/c/github/LesliTech/LesliDashboard?style=for-the-badge&logo=codecov">
|
|
18
19
|
</a>
|
|
20
|
+
<a target="_blank" href="https://sonarcloud.io/project/overview?id=LesliTech_LesliDashboard">
|
|
21
|
+
<img alt="Sonar Quality Gate" src="https://img.shields.io/sonar/quality_gate/LesliTech_LesliDashboard?server=https%3A%2F%2Fsonarcloud.io&style=for-the-badge&logo=sonarqubecloud&label=Quality">
|
|
22
|
+
</a>
|
|
19
23
|
</div>
|
|
20
24
|
|
|
21
|
-
<hr/>
|
|
22
25
|
<br />
|
|
23
26
|
|
|
24
27
|
<div align="center">
|
|
25
28
|
<img
|
|
26
29
|
style="width:100%;max-width:800px;border-radius:6px;"
|
|
27
|
-
alt="
|
|
30
|
+
alt="LesliDashboard configurable dashboards"
|
|
31
|
+
src="./docs/images/screenshot.png" />
|
|
28
32
|
</div>
|
|
29
33
|
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
<br />
|
|
37
|
+
|
|
38
|
+
## Introduction
|
|
39
|
+
|
|
40
|
+
LesliDashboard is the official dashboard engine for the [Lesli Framework](https://github.com/LesliTech/Lesli).
|
|
41
|
+
|
|
42
|
+
It lets applications compose reusable, configurable dashboards from account-scoped components.
|
|
43
|
+
|
|
30
44
|
<br />
|
|
31
|
-
|
|
45
|
+
|
|
46
|
+
## Features
|
|
47
|
+
|
|
48
|
+
- Multiple account-scoped dashboards
|
|
49
|
+
- Reusable dashboard components
|
|
50
|
+
- Configurable component position and size
|
|
51
|
+
- Component-specific configuration
|
|
52
|
+
- Shared dashboards for teams and workflows
|
|
53
|
+
|
|
54
|
+
<br />
|
|
55
|
+
|
|
56
|
+
## Try LesliDashboard
|
|
57
|
+
|
|
58
|
+
- [Try the online demo](https://demo.lesli.dev/)
|
|
59
|
+
- [Run the Docker demo](https://github.com/LesliTech/lesli-docker-demo)
|
|
60
|
+
|
|
32
61
|
<br />
|
|
33
62
|
|
|
34
|
-
|
|
63
|
+
## Quick Start
|
|
64
|
+
|
|
65
|
+
### Requirements
|
|
66
|
+
|
|
67
|
+
- A Rails application with [Lesli](https://rubygems.org/gems/lesli)
|
|
68
|
+
- SQLite by default, or PostgreSQL when preferred by the host application
|
|
69
|
+
|
|
70
|
+
### Install LesliDashboard
|
|
71
|
+
|
|
72
|
+
Add the engine to the host Rails application and prepare its database:
|
|
35
73
|
|
|
36
74
|
```shell
|
|
37
|
-
# Add LesliDashboard engine gem
|
|
38
75
|
bundle add lesli_dashboard
|
|
76
|
+
bin/rails db:prepare
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Mount the engine
|
|
39
80
|
|
|
40
|
-
|
|
41
|
-
|
|
81
|
+
Applications using Lesli's standard router mount LesliDashboard automatically at `/dashboard`:
|
|
82
|
+
|
|
83
|
+
```ruby
|
|
84
|
+
# config/routes.rb
|
|
85
|
+
Rails.application.routes.draw do
|
|
86
|
+
Lesli::Router.mount(self)
|
|
87
|
+
end
|
|
42
88
|
```
|
|
43
89
|
|
|
90
|
+
If the application does not use the standard Lesli router, mount the engine directly:
|
|
91
|
+
|
|
44
92
|
```ruby
|
|
45
|
-
#
|
|
93
|
+
# config/routes.rb
|
|
46
94
|
Rails.application.routes.draw do
|
|
47
95
|
mount LesliDashboard::Engine => "/dashboard"
|
|
48
96
|
end
|
|
49
97
|
```
|
|
50
98
|
|
|
51
|
-
|
|
52
|
-
|
|
99
|
+
Start Rails and visit [http://127.0.0.1:3000/dashboard](http://127.0.0.1:3000/dashboard):
|
|
100
|
+
|
|
101
|
+
```shell
|
|
102
|
+
bin/rails server
|
|
103
|
+
```
|
|
104
|
+
|
|
53
105
|
<br />
|
|
54
106
|
|
|
55
|
-
|
|
107
|
+
## Development
|
|
108
|
+
|
|
109
|
+
Clone LesliDashboard into the host application's `engines` directory:
|
|
56
110
|
|
|
57
111
|
```shell
|
|
58
|
-
|
|
59
|
-
|
|
112
|
+
cd RailsApp
|
|
113
|
+
mkdir -p engines
|
|
114
|
+
git clone https://github.com/LesliTech/LesliDashboard.git engines/LesliDashboard
|
|
115
|
+
```
|
|
60
116
|
|
|
61
|
-
|
|
62
|
-
gem "lesli", path: "engines/LesliDashboard"
|
|
117
|
+
Reference the local engine from the host application's `Gemfile`:
|
|
63
118
|
|
|
64
|
-
|
|
119
|
+
```ruby
|
|
120
|
+
gem "lesli_dashboard", path: "engines/LesliDashboard"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Install dependencies, prepare the host database, and start Rails:
|
|
124
|
+
|
|
125
|
+
```shell
|
|
65
126
|
bundle install
|
|
127
|
+
bin/rails db:prepare
|
|
128
|
+
bin/rails server
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Tests
|
|
66
132
|
|
|
67
|
-
|
|
68
|
-
rake lesli:db:setup
|
|
133
|
+
From a complete Lesli development workspace, run the engine test suite from the LesliDashboard directory:
|
|
69
134
|
|
|
135
|
+
```shell
|
|
136
|
+
cd engines/LesliDashboard
|
|
137
|
+
bin/rails test
|
|
70
138
|
```
|
|
71
139
|
|
|
72
140
|
<br />
|
|
73
|
-
<hr/>
|
|
74
|
-
<br />
|
|
75
|
-
|
|
76
|
-
### Demo
|
|
77
141
|
|
|
78
|
-
|
|
79
|
-
* [docker demo](https://github.com/LesliTech/lesli-docker-demo)
|
|
142
|
+
## Documentation
|
|
80
143
|
|
|
144
|
+
- [Lesli website](https://www.lesli.dev/)
|
|
145
|
+
- [Documentation](https://www.lesli.dev/engines/dashboard)
|
|
146
|
+
- [Release notes](https://github.com/LesliTech/LesliDashboard/releases)
|
|
147
|
+
- [Issue tracker](https://github.com/LesliTech/LesliDashboard/issues)
|
|
148
|
+
- [Source code](https://github.com/LesliTech/LesliDashboard)
|
|
81
149
|
|
|
82
|
-
|
|
83
|
-
* [website](https://www.lesli.dev/)
|
|
84
|
-
* [documentation](https://www.lesli.dev/engines/dashboard)
|
|
150
|
+
<br />
|
|
85
151
|
|
|
152
|
+
## Community
|
|
86
153
|
|
|
87
|
-
|
|
154
|
+
- [X: @LesliTech](https://x.com/LesliTech)
|
|
155
|
+
- [hello@lesli.tech](mailto:hello@lesli.tech)
|
|
156
|
+
- [https://www.lesli.tech](https://www.lesli.tech)
|
|
88
157
|
|
|
89
|
-
|
|
90
|
-
* [Email: hello@lesli.tech](hello@lesli.tech)
|
|
91
|
-
* [Website: https://www.lesli.tech](https://www.lesli.tech)
|
|
158
|
+
<br />
|
|
92
159
|
|
|
160
|
+
## License
|
|
93
161
|
|
|
94
|
-
### License
|
|
95
|
-
-------
|
|
96
162
|
Copyright (c) 2026, Lesli Technologies, S. A.
|
|
97
163
|
|
|
98
164
|
This program is free software: you can redistribute it and/or modify
|
|
@@ -106,19 +172,16 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
106
172
|
GNU General Public License for more details.
|
|
107
173
|
|
|
108
174
|
You should have received a copy of the GNU General Public License
|
|
109
|
-
along with this program. If not, see
|
|
175
|
+
along with this program. If not, see [https://www.gnu.org/licenses/](https://www.gnu.org/licenses/).
|
|
110
176
|
|
|
111
|
-
|
|
112
|
-
<hr />
|
|
113
|
-
<br />
|
|
114
|
-
<br />
|
|
177
|
+
The complete license text is available in the [license file](./license).
|
|
115
178
|
|
|
116
|
-
|
|
117
|
-
<img width="200" alt="Lesli logo" src="https://cdn.lesli.tech/lesli/brand/app-logo.svg" />
|
|
118
|
-
<h3 align="center" class="mt-0">
|
|
119
|
-
The Open-Source SaaS Development Framework for Ruby on Rails.
|
|
120
|
-
</h3>
|
|
121
|
-
</div>
|
|
179
|
+
---
|
|
122
180
|
|
|
123
181
|
<br />
|
|
124
182
|
<br />
|
|
183
|
+
|
|
184
|
+
<div align="center">
|
|
185
|
+
<img width="80" alt="Lesli icon" src="https://cdn.lesli.tech/lesli/brand/app-icon.svg" />
|
|
186
|
+
<h3 align="center">The Open-Source SaaS Development Framework for Ruby on Rails.</h3>
|
|
187
|
+
</div>
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lesli_dashboard
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- The Lesli Development Team
|
|
@@ -23,7 +23,10 @@ dependencies:
|
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: 5.1.0
|
|
26
|
-
description:
|
|
26
|
+
description: |
|
|
27
|
+
Provides dashboard management capabilities for The Lesli Framework,
|
|
28
|
+
including configurable dashboards, widgets, metrics, and visual summaries
|
|
29
|
+
for monitoring business and system information.
|
|
27
30
|
email:
|
|
28
31
|
- hello@lesli.tech
|
|
29
32
|
executables: []
|
|
@@ -35,6 +38,7 @@ files:
|
|
|
35
38
|
- app/assets/images/lesli_dashboard/dashboard-logo.svg
|
|
36
39
|
- app/assets/javascripts/lesli_dashboard/application.js
|
|
37
40
|
- app/assets/stylesheets/lesli_dashboard/application.css
|
|
41
|
+
- app/assets/stylesheets/lesli_dashboard/application.tailwind.css
|
|
38
42
|
- app/controllers/lesli_dashboard/application_controller.rb
|
|
39
43
|
- app/controllers/lesli_dashboard/components_controller.rb
|
|
40
44
|
- app/controllers/lesli_dashboard/dashboard/components_controller.rb
|