lesli_calendar 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d310f76d18a83c8071670ec0cba38b693e05c50befc38e784b9304f3949b410
4
- data.tar.gz: 24b171d72eff91f6243bcf5be504e1fcbcc8d97d43d018a98ffa64832728de82
3
+ metadata.gz: '0138afb8c8a8a31c86a291dfff1287b7dd14818bdd9bfe79f2a2e585728f440f'
4
+ data.tar.gz: 4517bdea6939668d768ec483c0f7a8eab87cadf29013cff3cc3e8f3fa29e4ed3
5
5
  SHA512:
6
- metadata.gz: 2dcdf6b433da6afa3f0225d5cc5fa02d8e5ac09b96b8d1003b96d155621710d789897727b1e1e7fe6331ddd1987e028ab31552a1aaeb904976efec9c025e88d0
7
- data.tar.gz: 114e2c76c90670183657fd1405420cdbda9e0a5620744f6a2e710b1806f02140a5bb49a325f1166cd3d80f447d25a00a960a55b9ecc2ff0894163da6884f4460
6
+ metadata.gz: 2b22376481970417e56b09fb7b0a07177f2de2501d1d1dc9602a843af0165d679e95733059c6a1e203bdc23a73ffbfab74a55386de10039d444670da3eab3d4e
7
+ data.tar.gz: '059f684bdd0ec58b4ba848bd3b1b3f31375fe8a2f11daacabbe26809c43dff724452964d8a93a4b044bed52733732f49f2e8eefc09cfc3cb300f43acda1ab47a'
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
1
  require "bundler/setup"
2
2
 
3
- load "rails/tasks/statistics.rake"
3
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
+
5
+ load "rails/tasks/engine.rake"
4
6
 
5
7
  require "bundler/gem_tasks"
@@ -180,10 +180,11 @@ Building a better future, one line of code at a time.
180
180
  // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
181
181
  // ·
182
182
  */
183
- /**
183
+ /*
184
+
184
185
  Lesli
185
186
 
186
- Copyright (c) 2025, Lesli Technologies, S. A.
187
+ Copyright (c) 2026, Lesli Technologies, S. A.
187
188
 
188
189
  This program is free software: you can redistribute it and/or modify
189
190
  it under the terms of the GNU General Public License as published by
@@ -198,7 +199,7 @@ GNU General Public License for more details.
198
199
  You should have received a copy of the GNU General Public License
199
200
  along with this program. If not, see http://www.gnu.org/licenses/.
200
201
 
201
- Lesli - SCSS Utilities for websites, apps and web applications
202
+ Lesli · SCSS Utilities for websites and web applications.
202
203
 
203
204
  Made with ♥ by LesliTech
204
205
  Building a better future, one line of code at a time.
@@ -211,9 +212,10 @@ Building a better future, one line of code at a time.
211
212
  // ·
212
213
  */
213
214
  /*
215
+
214
216
  Lesli
215
217
 
216
- Copyright (c) 2020, Lesli Technologies, S. A.
218
+ Copyright (c) 2026, Lesli Technologies, S. A.
217
219
 
218
220
  This program is free software: you can redistribute it and/or modify
219
221
  it under the terms of the GNU General Public License as published by
@@ -226,18 +228,204 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
226
228
  GNU General Public License for more details.
227
229
 
228
230
  You should have received a copy of the GNU General Public License
229
- along with this program. If not, see <http://www.gnu.org/licenses/>.
231
+ along with this program. If not, see http://www.gnu.org/licenses/.
230
232
 
231
- LesliCSS - SCSS Utilities for websites, apps and web applications
233
+ Lesli · SCSS Utilities for websites and web applications.
232
234
 
233
- Powered by https://www.lesli.tech
235
+ Made with ♥ by LesliTech
234
236
  Building a better future, one line of code at a time.
235
237
 
236
- @contact <hello@lesli.tech>
237
- @website <https://lesli.tech>
238
+ @contact hello@lesli.tech
239
+ @website https://www.lesli.tech
238
240
  @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
239
241
 
240
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
242
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
243
+ // ·
244
+ */
245
+ /*
246
+
247
+ Lesli
248
+
249
+ Copyright (c) 2026, Lesli Technologies, S. A.
250
+
251
+ This program is free software: you can redistribute it and/or modify
252
+ it under the terms of the GNU General Public License as published by
253
+ the Free Software Foundation, either version 3 of the License, or
254
+ (at your option) any later version.
255
+
256
+ This program is distributed in the hope that it will be useful,
257
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
258
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
259
+ GNU General Public License for more details.
260
+
261
+ You should have received a copy of the GNU General Public License
262
+ along with this program. If not, see http://www.gnu.org/licenses/.
263
+
264
+ Lesli · SCSS Utilities for websites and web applications.
265
+
266
+ Made with ♥ by LesliTech
267
+ Building a better future, one line of code at a time.
268
+
269
+ @contact hello@lesli.tech
270
+ @website https://www.lesli.tech
271
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
272
+
273
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
274
+ // ·
275
+ */
276
+ /*
277
+
278
+ Lesli
279
+
280
+ Copyright (c) 2026, Lesli Technologies, S. A.
281
+
282
+ This program is free software: you can redistribute it and/or modify
283
+ it under the terms of the GNU General Public License as published by
284
+ the Free Software Foundation, either version 3 of the License, or
285
+ (at your option) any later version.
286
+
287
+ This program is distributed in the hope that it will be useful,
288
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
289
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
290
+ GNU General Public License for more details.
291
+
292
+ You should have received a copy of the GNU General Public License
293
+ along with this program. If not, see http://www.gnu.org/licenses/.
294
+
295
+ Lesli · SCSS Utilities for websites and web applications.
296
+
297
+ Made with ♥ by LesliTech
298
+ Building a better future, one line of code at a time.
299
+
300
+ @contact hello@lesli.tech
301
+ @website https://www.lesli.tech
302
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
303
+
304
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
305
+ // ·
306
+ */
307
+ /*
308
+
309
+ Lesli
310
+
311
+ Copyright (c) 2026, Lesli Technologies, S. A.
312
+
313
+ This program is free software: you can redistribute it and/or modify
314
+ it under the terms of the GNU General Public License as published by
315
+ the Free Software Foundation, either version 3 of the License, or
316
+ (at your option) any later version.
317
+
318
+ This program is distributed in the hope that it will be useful,
319
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
320
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
321
+ GNU General Public License for more details.
322
+
323
+ You should have received a copy of the GNU General Public License
324
+ along with this program. If not, see http://www.gnu.org/licenses/.
325
+
326
+ Lesli · SCSS Utilities for websites and web applications.
327
+
328
+ Made with ♥ by LesliTech
329
+ Building a better future, one line of code at a time.
330
+
331
+ @contact hello@lesli.tech
332
+ @website https://www.lesli.tech
333
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
334
+
335
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
336
+ // ·
337
+ */
338
+ /*
339
+
340
+ Lesli
341
+
342
+ Copyright (c) 2026, Lesli Technologies, S. A.
343
+
344
+ This program is free software: you can redistribute it and/or modify
345
+ it under the terms of the GNU General Public License as published by
346
+ the Free Software Foundation, either version 3 of the License, or
347
+ (at your option) any later version.
348
+
349
+ This program is distributed in the hope that it will be useful,
350
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
351
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
352
+ GNU General Public License for more details.
353
+
354
+ You should have received a copy of the GNU General Public License
355
+ along with this program. If not, see http://www.gnu.org/licenses/.
356
+
357
+ Lesli · SCSS Utilities for websites and web applications.
358
+
359
+ Made with ♥ by LesliTech
360
+ Building a better future, one line of code at a time.
361
+
362
+ @contact hello@lesli.tech
363
+ @website https://www.lesli.tech
364
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
365
+
366
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
367
+ // ·
368
+ */
369
+ /*
370
+
371
+ Lesli
372
+
373
+ Copyright (c) 2026, Lesli Technologies, S. A.
374
+
375
+ This program is free software: you can redistribute it and/or modify
376
+ it under the terms of the GNU General Public License as published by
377
+ the Free Software Foundation, either version 3 of the License, or
378
+ (at your option) any later version.
379
+
380
+ This program is distributed in the hope that it will be useful,
381
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
382
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
383
+ GNU General Public License for more details.
384
+
385
+ You should have received a copy of the GNU General Public License
386
+ along with this program. If not, see http://www.gnu.org/licenses/.
387
+
388
+ Lesli · SCSS Utilities for websites and web applications.
389
+
390
+ Made with ♥ by LesliTech
391
+ Building a better future, one line of code at a time.
392
+
393
+ @contact hello@lesli.tech
394
+ @website https://www.lesli.tech
395
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
396
+
397
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
398
+ // ·
399
+ */
400
+ /*
401
+
402
+ Lesli
403
+
404
+ Copyright (c) 2026, Lesli Technologies, S. A.
405
+
406
+ This program is free software: you can redistribute it and/or modify
407
+ it under the terms of the GNU General Public License as published by
408
+ the Free Software Foundation, either version 3 of the License, or
409
+ (at your option) any later version.
410
+
411
+ This program is distributed in the hope that it will be useful,
412
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
413
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
414
+ GNU General Public License for more details.
415
+
416
+ You should have received a copy of the GNU General Public License
417
+ along with this program. If not, see http://www.gnu.org/licenses/.
418
+
419
+ Lesli · SCSS Utilities for websites and web applications.
420
+
421
+ Made with ♥ by LesliTech
422
+ Building a better future, one line of code at a time.
423
+
424
+ @contact hello@lesli.tech
425
+ @website https://www.lesli.tech
426
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
427
+
428
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
241
429
  // ·
242
430
  */
243
431
  /**
@@ -586,7 +774,7 @@ body.lesli-calendar.calendars #lesli-calendar-engine .fc-scrollgrid .fc-scrollgr
586
774
  body.lesli-calendar.calendars #lesli-calendar-engine .fc-scrollgrid .fc-scrollgrid-section-header .fc-col-header-cell a {
587
775
  font-family: "OpenSans";
588
776
  font-weight: 600;
589
- color: #555761;
777
+ color: #313942;
590
778
  }
591
779
  body.lesli-calendar.calendars #lesli-calendar-engine .fc-scrollgrid .fc-scrollgrid-section-body .fc-day {
592
780
  border: 6px solid var(--lesli-color-background);
@@ -595,7 +783,7 @@ body.lesli-calendar.calendars #lesli-calendar-engine .fc-scrollgrid .fc-scrollgr
595
783
  padding: 5px 10px;
596
784
  }
597
785
  body.lesli-calendar.calendars #lesli-calendar-engine .fc-scrollgrid .fc-scrollgrid-section-body .fc-daygrid-day.fc-day-today .fc-daygrid-day-top .fc-daygrid-day-number {
598
- color: #0d52bf;
786
+ color: #245F93;
599
787
  font-weight: 800;
600
788
  }
601
789
  body.lesli-calendar.calendars #lesli-calendar-engine .fc-scrollgrid .fc-scrollgrid-section-body .fc-daygrid-day .fc-daygrid-event {
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
+ @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-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--color-slate-50:oklch(98.4% .003 247.858);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-extrabold:800;--tracking-wide:.025em;--radius-sm:.25rem;--radius-lg:.5rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer components{body.lesli-calendar.calendars #lesli-calendar-engine .fc-scrollgrid{border:0!important}body.lesli-calendar.calendars #lesli-calendar-engine .fc-scrollgrid th[role=presentation]{border-style:var(--tw-border-style);border-width:0;border-bottom-style:var(--tw-border-style);border-bottom-width:6px;border-bottom-color:var(--lesli-color-background)}body.lesli-calendar.calendars #lesli-calendar-engine .fc-col-header-cell{border-inline-style:var(--tw-border-style);padding-block:calc(var(--spacing) * 3);text-align:center;border-inline-width:0}body.lesli-calendar.calendars #lesli-calendar-engine .fc-col-header-cell a{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-slate-800)}body.lesli-calendar.calendars #lesli-calendar-engine .fc-day{border-style:var(--tw-border-style);border-width:6px;border-color:var(--lesli-color-background)}body.lesli-calendar.calendars #lesli-calendar-engine .fc-daygrid-day-number{padding-inline:calc(var(--spacing) * 2.5);padding-block:5px}body.lesli-calendar.calendars #lesli-calendar-engine .fc-day-today .fc-daygrid-day-number{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold);color:var(--lesli-color-primary)}body.lesli-calendar.calendars #lesli-calendar-engine .fc-daygrid-event{margin-bottom:calc(var(--spacing) * .5);margin-left:calc(var(--spacing) * 2);border-radius:var(--radius-sm);border-style:var(--tw-border-style);border-width:0;border-left-style:var(--tw-border-style);padding-block:calc(var(--spacing) * 1.5);padding-right:calc(var(--spacing) * 1.5);padding-left:calc(var(--spacing) * 3);border-left-width:5px;display:block;overflow:hidden}body.lesli-calendar.calendars #lesli-calendar-engine .fc-event-time,body.lesli-calendar.calendars #lesli-calendar-engine .fc-daygrid-event-dot{display:none!important}body.lesli-calendar.calendars #lesli-calendar-engine .fc-daygrid-event.lesli-calendar{background-color:#bed8f7;border-left-color:#3689e6}body.lesli-calendar.calendars #lesli-calendar-engine .fc-daygrid-event.lesli-calendar .fc-event-title{padding-left:var(--spacing);--tw-font-weight:var(--font-weight-normal);font-family:OpenSans;font-weight:var(--font-weight-normal);color:#0e3f75;text-transform:capitalize}body.lesli-calendar.calendars #lesli-calendar-engine .fc-daygrid-event.lesli-support{background-color:#f4edfb;border-left-color:#a56de2}body.lesli-calendar.calendars #lesli-calendar-engine .fc-daygrid-event.lesli-support .fc-event-title{color:#581e98}body.lesli-calendar.calendars #lesli-calendar-engine .fc-daygrid-event.lesli-tasks{background-color:#95e8da;border-left-color:#28bca3}body.lesli-calendar.calendars #lesli-calendar-engine .fc-daygrid-event.lesli-tasks .fc-event-title{color:#0d3e36}.lesli-calendar-agenda .agenda-event{border-left-color:var(--color-slate-400)}.lesli-calendar-agenda .agenda-event.lesli-calendar{border-left-color:#3689e6}.lesli-calendar-agenda .agenda-event.lesli-support{border-left-color:#a56de2}.lesli-calendar-agenda .agenda-event.cloud-focus-tasks,.lesli-calendar-agenda .agenda-event.lesli-tasks{border-left-color:#28bca3}}@layer utilities{.mt-1{margin-top:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.flex{display:flex}.inline-flex{display:inline-flex}.min-h-10{min-height:calc(var(--spacing) * 10)}.w-20{width:calc(var(--spacing) * 20)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-slate-200>:not(:last-child)){border-color:var(--color-slate-200)}.overflow-hidden{overflow:hidden}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-info-600{border-color:var(--lesli-color-info-600)}.border-slate-200{border-color:var(--color-slate-200)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-white{background-color:var(--color-white)}.p-0{padding:0}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-4{padding-block:calc(var(--spacing) * 4)}.text-center{text-align:center}.font-\[\'OpenSans\'\]{font-family:OpenSans}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-info-700{color:var(--lesli-color-info-700)}.text-slate-500{color:var(--color-slate-500)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.uppercase{text-transform:uppercase}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:bg-info-50:hover{background-color:var(--lesli-color-info-50)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-info-500\/40:focus-visible{--tw-ring-color:var(--lesli-color-info-500)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-info-500\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--lesli-color-info-500) 40%, transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
@@ -114,47 +114,69 @@ module LesliCalendar
114
114
  end
115
115
 
116
116
  def agenda
117
- # Get current date and time
118
- current_date = Time.now
117
+ current_time = Time.current
119
118
 
120
- # Combine events and support events into one array
121
- merged_events = self.index
119
+ # Convert FullCalendar's payload into the simpler shape consumed by the agenda view.
120
+ upcoming_events = index.filter_map do |event|
121
+ start_at = normalize_agenda_time(value_from(event, :start))
122
+ next if start_at.nil? || start_at < current_time.beginning_of_day
122
123
 
123
- # Filter out past events
124
- filtered_events = merged_events.select do |event|
125
- #event[:start_at] >= current_date.beginning_of_day
124
+ extended_props = value_from(event, :extendedProps) || {}
125
+
126
+ {
127
+ id: value_from(event, :id),
128
+ title: value_from(event, :title),
129
+ description: agenda_description(value_from(extended_props, :description)),
130
+ start_at: start_at,
131
+ end_at: normalize_agenda_time(value_from(event, :end)),
132
+ url: value_from(event, :url),
133
+ classnames: Array(value_from(event, :classNames)).join(" ")
134
+ }
126
135
  end
127
136
 
128
- # Group events by date
129
- grouped_events = filtered_events.each_with_object({}) do |event, acc|
137
+ # Sorting first preserves chronological order for both days and their events.
138
+ upcoming_events.sort_by { |event| event[:start_at] }.each_with_object({}) do |event, agenda|
139
+ start_at = event[:start_at]
140
+ date_key = start_at.to_date.iso8601
141
+ today = start_at.to_date == current_time.to_date
130
142
 
131
- date_key = event[:start_at].strftime('%Y-%m-%d')
143
+ agenda[date_key] ||= {
144
+ day_name: today ? "Today" : start_at.strftime("%a"),
145
+ day_number: today ? start_at.strftime("%H:%M") : start_at.strftime("%d"),
146
+ events: []
147
+ }
132
148
 
133
- unless acc.key?(date_key)
134
- day_name = event[:start_at].to_date == current_date.to_date ? 'Today' : event[:start_at].strftime('%a')
135
- day_number = event[:start_at].to_date == current_date.to_date ? event[:start_at].strftime('%H:%M') : event[:start_at].strftime('%d')
149
+ agenda[date_key][:events] << event
150
+ end
151
+ end
136
152
 
137
- acc[date_key] = {
138
- day_name: day_name,
139
- day_number: day_number,
140
- events: []
141
- }
142
- end
153
+ private
154
+
155
+ def value_from(hash, key)
156
+ return unless hash.respond_to?(:[])
143
157
 
144
- if event[:description]
145
- # Remove HTML tags and truncate description
146
- event[:description] = event[:description].gsub(/<[^>]*>?/, '')[0, 85] + '...'
147
- end
158
+ hash[key] || hash[key.to_s]
159
+ end
148
160
 
149
- # Add event to the array corresponding to its date
150
- acc[date_key][:events] << event
161
+ # FullCalendar sources may provide dates as Rails objects or ISO 8601 strings.
162
+ def normalize_agenda_time(value)
163
+ case value
164
+ when ActiveSupport::TimeWithZone
165
+ value
166
+ when Time, DateTime, Date
167
+ value.in_time_zone
168
+ when String
169
+ Time.zone.parse(value)
151
170
  end
171
+ rescue ArgumentError, TypeError
172
+ nil
173
+ end
152
174
 
153
- # Sort the groups by date
154
- sorted_grouped_events = grouped_events.sort.to_h
175
+ def agenda_description(description)
176
+ return if description.blank?
155
177
 
156
- # Assign to agenda
157
- sorted_grouped_events
158
- end
178
+ text = ActionController::Base.helpers.strip_tags(description.to_s).squish
179
+ ActionController::Base.helpers.truncate(text, length: 88)
180
+ end
159
181
  end
160
182
  end
@@ -1,21 +1,20 @@
1
1
  <%= render(LesliView::Layout::Container.new("calendar-calendar")) do %>
2
2
 
3
3
  <%= render(LesliView::Components::Header.new(Date2.new.date_words)) do %>
4
- <div class="field has-addons m-0">
5
- <div class="control">
6
- <%= render LesliView::Elements::Button.new("prev", icon:"arrow_back_ios") %>
4
+ <div class="flex flex-wrap items-center gap-2" role="group" aria-label="Agenda navigation">
5
+ <div>
6
+ <%= render LesliView::Elements::Button.new("Prev", icon:"arrow_back_ios") %>
7
7
  </div>
8
- <div class="control">
9
- <%= render LesliView::Elements::Button.new("today", icon:"today") %>
8
+ <div>
9
+ <%= render LesliView::Elements::Button.new("Today", icon:"today") %>
10
10
  </div>
11
- <div class="control">
12
- <button @click="storeCalendar.nextMonth()" class="button is-primary is-light is-outlined">
13
- <span>next</span>
14
- <span class="icon">
15
- <span class="material-symbols">
16
- arrow_forward_ios
17
- </span>
18
- </span>
11
+ <div>
12
+ <button
13
+ type="button"
14
+ @click="storeCalendar.nextMonth()"
15
+ class="inline-flex min-h-10 items-center justify-center gap-2 rounded-lg border border-info-600 bg-white px-4 py-2 text-sm font-semibold text-info-700 shadow-sm transition-colors hover:bg-info-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-info-500/40">
16
+ <span>Next</span>
17
+ <span class="material-symbols text-lg leading-none" aria-hidden="true">arrow_forward_ios</span>
19
18
  </button>
20
19
  </div>
21
20
  </div>
@@ -5,21 +5,20 @@
5
5
  <%= render(LesliView::Layout::Container.new("calendar-calendar")) do %>
6
6
 
7
7
  <%= render(LesliView::Components::Header.new(Date2.new.date_words)) do %>
8
- <div class="field has-addons m-0">
9
- <div class="control">
8
+ <div class="flex flex-wrap items-center gap-2" role="group" aria-label="Calendar navigation">
9
+ <div>
10
10
  <%= render LesliView::Elements::Button.new("Prev", icon:"arrow_back_ios") %>
11
11
  </div>
12
- <div class="control">
12
+ <div>
13
13
  <%= render LesliView::Elements::Button.new("Today", icon:"today") %>
14
14
  </div>
15
- <div class="control">
16
- <button @click="storeCalendar.nextMonth()" class="button is-primary is-light is-outlined">
15
+ <div>
16
+ <button
17
+ type="button"
18
+ @click="storeCalendar.nextMonth()"
19
+ class="inline-flex min-h-10 items-center justify-center gap-2 rounded-lg border border-info-600 bg-white px-4 py-2 text-sm font-semibold text-info-700 shadow-sm transition-colors hover:bg-info-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-info-500/40">
17
20
  <span>Next</span>
18
- <span class="icon">
19
- <span class="material-symbols">
20
- arrow_forward_ios
21
- </span>
22
- </span>
21
+ <span class="material-symbols text-lg leading-none" aria-hidden="true">arrow_forward_ios</span>
23
22
  </button>
24
23
  </div>
25
24
  </div>
@@ -1,20 +1,31 @@
1
1
 
2
- <div class="lesli-calendar-agenda box mt-4">
3
- <h3>Upcoming events</h3>
4
- <% @agenda.each do |day2, day| %>
5
- <div class="event is-flex is-align-items-center">
6
- <div class="date">
7
- <p class="day-name"><%= day[:day_name] %></p>
8
- <p class="day-number"><%= day[:day_number] %></p>
9
- </div>
10
- <div class="description">
2
+ <section
3
+ class="lesli-calendar-agenda mt-4 overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm"
4
+ aria-labelledby="upcoming-events-title">
5
+
6
+ <h2 id="upcoming-events-title" class="border-b border-slate-200 px-5 py-4 text-lg font-semibold text-slate-800">
7
+ Upcoming events
8
+ </h2>
9
+
10
+ <div class="divide-y divide-slate-200">
11
+ <% @agenda.each do |_date, day| %>
12
+ <article class="flex py-4 items-stretch">
13
+ <div class="flex w-20 shrink-0 flex-col items-center justify-center border-r border-slate-200 bg-slate-50 px-3 py-4 text-center text-slate-700">
14
+ <p class="text-xs font-medium uppercase tracking-wide text-slate-500"><%= day[:day_name] %></p>
15
+ <p class="mt-1 text-xl font-semibold"><%= day[:day_number] %></p>
16
+ </div>
17
+
18
+ <div class="min-w-0 flex-1 py-2">
11
19
  <% day[:events].each do |event| %>
12
- <div class="<%= event[:classnames] %>">
13
- <p><%= event[:title] %></p>
14
- <p><%= event[:description] %></p>
20
+ <div class="agenda-event <%= event[:classnames] %> border-l-4 px-4 py-2">
21
+ <p class="font-['OpenSans'] text-sm font-medium text-slate-800"><%= event[:title] %></p>
22
+ <% if event[:description].present? %>
23
+ <p class="mt-1 font-['OpenSans'] text-sm leading-5 text-slate-500"><%= event[:description] %></p>
24
+ <% end %>
15
25
  </div>
16
26
  <% end %>
17
- </div>
18
- </div>
19
- <% end %>
20
- </div>
27
+ </div>
28
+ </article>
29
+ <% end %>
30
+ </div>
31
+ </section>
@@ -1,3 +1,3 @@
1
- <div class="lesli-calendar-calendar box mt-4 p-0">
1
+ <div class="lesli-calendar-calendar mt-4 overflow-hidden rounded-xl border border-slate-200 bg-white p-0 shadow-sm">
2
2
  <div id="lesli-calendar-engine"></div>
3
3
  </div>
data/db/seeds.rb CHANGED
@@ -16,8 +16,7 @@ For more information read the license file including with this software.
16
16
  // ·
17
17
  =end
18
18
 
19
-
20
- L2.msg("LesliCalendar", "Version: #{LesliCalendar::VERSION}", "Build: #{LesliCalendar::BUILD}")
19
+ Termline.info("Loading seeds for: LesliCalendar #{LesliCalendar::VERSION} (#{LesliCalendar::BUILD})")
21
20
 
22
21
 
23
22
  # · load specific environment seeds
@@ -1,4 +1,4 @@
1
1
  module LesliCalendar
2
- VERSION = "1.0.0"
3
- BUILD = "1771710537"
2
+ VERSION = "1.1.1"
3
+ BUILD = "1791607001"
4
4
  end
data/readme.md CHANGED
@@ -1,14 +1,15 @@
1
1
  <div align="center">
2
- <img width="100" alt="LesliCalendar logo" src="./app/assets/images/lesli_calendar/calendar-logo.svg" />
3
- <h3 align="center">Unified calendar app for the Lesli Framework.</h3>
2
+ <h1 align="center">
3
+ <img width="100" alt="LesliCalendar" src="./app/assets/images/lesli_calendar/calendar-logo.svg" />
4
+ </h1>
5
+ <h3 align="center">Calendars and events 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/LesliCalendar/actions">
11
- <img alt="Tests passing" src="https://img.shields.io/badge/Tests-passing-green?style=for-the-badge&logo=github">
11
+ <a target="_blank" href="https://github.com/LesliTech/LesliCalendar/actions/workflows/lesli-ci.yaml">
12
+ <img alt="LesliCalendar test status" src="https://img.shields.io/github/actions/workflow/status/LesliTech/LesliCalendar/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_calendar">
14
15
  <img alt="Gem Version" src="https://img.shields.io/gem/v/lesli_calendar?style=for-the-badge&logo=ruby">
@@ -16,83 +17,166 @@
16
17
  <a target="_blank" href="https://codecov.io/github/LesliTech/LesliCalendar">
17
18
  <img alt="Codecov" src="https://img.shields.io/codecov/c/github/LesliTech/LesliCalendar?style=for-the-badge&logo=codecov">
18
19
  </a>
20
+ <a target="_blank" href="https://sonarcloud.io/project/overview?id=LesliTech_LesliCalendar">
21
+ <img alt="Sonar Quality Gate" src="https://img.shields.io/sonar/quality_gate/LesliTech_LesliCalendar?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="Lesli screenshot" src="./docs/images/screenshot.png" />
30
+ alt="LesliCalendar events and agenda"
31
+ src="./docs/images/screenshot.png" />
28
32
  </div>
29
33
 
34
+ ---
35
+
30
36
  <br />
31
- <hr/>
37
+
38
+ ## Introduction
39
+
40
+ LesliCalendar is the official calendar and event-management engine for the [Lesli Framework](https://github.com/LesliTech/Lesli).
41
+
42
+ It provides account-scoped calendars, events, agendas, and attendee management for Lesli applications.
43
+
32
44
  <br />
33
45
 
34
- ### Installation
46
+ ## Features
47
+
48
+ - Account-scoped calendars
49
+ - Responsive FullCalendar grid and chronological agenda views
50
+ - Event creation and scheduling
51
+ - Event attendee management
52
+ - Optional LesliSupport deadline integration
53
+ - Integration with Lesli users, permissions, and navigation
54
+
55
+ <br />
56
+
57
+ ## Try LesliCalendar
58
+
59
+ - [Try the online demo](https://demo.lesli.dev/)
60
+ - [Run the Docker demo](https://github.com/LesliTech/lesli-docker-demo)
61
+
62
+ <br />
63
+
64
+ ## Quick Start
65
+
66
+ ### Requirements
67
+
68
+ - A Rails application with [Lesli](https://rubygems.org/gems/lesli)
69
+ - SQLite by default, or PostgreSQL when preferred by the host application
70
+
71
+ ### Install LesliCalendar
72
+
73
+ Add the engine to the host Rails application and prepare its database:
35
74
 
36
75
  ```shell
37
- # Add LesliCalendar engine gem
38
76
  bundle add lesli_calendar
77
+ bin/rails lesli:db:prepare
78
+ ```
39
79
 
40
- # Setup & initialize the database
41
- rake lesli:db:setup
80
+ ### Mount the engine
81
+
82
+ Applications using Lesli's standard router mount LesliCalendar automatically at `/calendar`:
83
+
84
+ ```ruby
85
+ # config/routes.rb
86
+ Rails.application.routes.draw do
87
+ Lesli::Router.mount(self)
88
+ end
42
89
  ```
43
90
 
91
+ If the application does not use the standard Lesli router, mount the engine directly:
92
+
44
93
  ```ruby
45
- # Load LesliCalendar engine
94
+ # config/routes.rb
46
95
  Rails.application.routes.draw do
47
96
  mount LesliCalendar::Engine => "/calendar"
48
97
  end
49
98
  ```
50
99
 
100
+ Start Rails and visit [http://127.0.0.1:3000/calendar](http://127.0.0.1:3000/calendar):
101
+
102
+ ```shell
103
+ bin/rails server
104
+ ```
105
+
51
106
  <br />
52
- <hr/>
53
- <br />
54
107
 
55
- ### Development
108
+ ## Development
109
+
110
+ Clone LesliCalendar into the host application's `engines` directory:
56
111
 
57
112
  ```shell
58
- # clone the lesli repo inside your engine folder: RailsApp/engines
59
- git clone https://github.com/LesliTech/LesliCalendar.git
113
+ cd RailsApp
114
+ mkdir -p engines
115
+ git clone https://github.com/LesliTech/LesliCalendar.git engines/LesliCalendar
116
+ ```
117
+
118
+ Reference the local engine from the host application's `Gemfile`:
60
119
 
61
- # Load LesliCalendar as a Gem
62
- gem "lesli", path: "engines/LesliCalendar"
120
+ ```ruby
121
+ gem "lesli_calendar", path: "engines/LesliCalendar"
122
+ ```
63
123
 
64
- # Install the necessary Gems to run LesliCalendar
124
+ Install dependencies, prepare the host database, and start Rails:
125
+
126
+ ```shell
65
127
  bundle install
128
+ bin/rails lesli:db:prepare
129
+ bin/rails server
130
+ ```
131
+
132
+ ### Tests
66
133
 
67
- # Setup & initialize the database
68
- rake lesli:db:setup
134
+ From a complete Lesli development workspace, run the engine test suite from the LesliCalendar directory:
69
135
 
136
+ ```shell
137
+ cd engines/LesliCalendar
138
+ bin/rails test
70
139
  ```
71
140
 
72
- <br />
73
- <hr/>
74
- <br />
141
+ ### Tailwind styles
75
142
 
76
- ### Demo
143
+ Calendar and agenda templates use Tailwind CSS. FullCalendar-specific rules are maintained in `source/tailwind/application.tailwind.css`; the file under `app/assets/stylesheets` is generated and should not be edited directly.
77
144
 
78
- * [online demo](https://demo.lesli.dev/)
79
- * [docker demo](https://github.com/LesliTech/lesli-docker-demo)
145
+ From a complete Lesli workspace, rebuild the engine stylesheet through LesliAssets:
80
146
 
147
+ ```shell
148
+ cd gems/LesliAssets
149
+ make build.tailwind
150
+ ```
81
151
 
82
- ### Documentation
83
- * [website](https://www.lesli.dev/)
84
- * [documentation](https://www.lesli.dev/engines/calendar)
152
+ See [Calendar and Agenda](./docs/about/calendar-and-agenda.md) for the event pipeline, agenda data shape, and frontend conventions.
85
153
 
154
+ <br />
155
+
156
+ ## Documentation
86
157
 
87
- ### Connect with Lesli
158
+ - [Installation](./docs/about/installation.md)
159
+ - [Calendar and agenda](./docs/about/calendar-and-agenda.md)
160
+ - [Translations](./docs/about/translations.md)
161
+ - [Database](./docs/about/database.md)
162
+ - [Lesli website](https://www.lesli.dev/)
163
+ - [Documentation](https://www.lesli.dev/engines/calendar)
164
+ - [Release notes](https://github.com/LesliTech/LesliCalendar/releases)
165
+ - [Issue tracker](https://github.com/LesliTech/LesliCalendar/issues)
166
+ - [Source code](https://github.com/LesliTech/LesliCalendar)
167
+
168
+ <br />
88
169
 
89
- * [X: @LesliTech](https://x.com/LesliTech)
90
- * [Email: hello@lesli.tech](hello@lesli.tech)
91
- * [Website: https://www.lesli.tech](https://www.lesli.tech)
170
+ ## Community
171
+
172
+ - [X: @LesliTech](https://x.com/LesliTech)
173
+ - [hello@lesli.tech](mailto:hello@lesli.tech)
174
+ - [https://www.lesli.tech](https://www.lesli.tech)
175
+
176
+ <br />
92
177
 
178
+ ## License
93
179
 
94
- ### License
95
- -------
96
180
  Copyright (c) 2026, Lesli Technologies, S. A.
97
181
 
98
182
  This program is free software: you can redistribute it and/or modify
@@ -106,19 +190,16 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
106
190
  GNU General Public License for more details.
107
191
 
108
192
  You should have received a copy of the GNU General Public License
109
- along with this program. If not, see http://www.gnu.org/licenses/.
193
+ along with this program. If not, see [https://www.gnu.org/licenses/](https://www.gnu.org/licenses/).
110
194
 
111
- <br />
112
- <hr />
113
- <br />
114
- <br />
195
+ The complete license text is available in the [license file](./license).
115
196
 
116
- <div align="center" class="has-text-centered">
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>
197
+ ---
122
198
 
123
199
  <br />
124
200
  <br />
201
+
202
+ <div align="center">
203
+ <img width="80" alt="Lesli icon" src="https://cdn.lesli.tech/lesli/brand/app-icon.svg" />
204
+ <h3 align="center">The Open-Source SaaS Development Framework for Ruby on Rails.</h3>
205
+ </div>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lesli_calendar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Lesli Development Team
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '5.0'
18
+ version: 5.1.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '5.0'
25
+ version: 5.1.0
26
26
  description: Unified calendar app for The Lesli Framework.
27
27
  email:
28
28
  - hello@lesli.tech
@@ -35,6 +35,7 @@ files:
35
35
  - app/assets/images/lesli_calendar/calendar-logo.svg
36
36
  - app/assets/javascripts/lesli_calendar/application.js
37
37
  - app/assets/stylesheets/lesli_calendar/application.css
38
+ - app/assets/stylesheets/lesli_calendar/application.tailwind.css
38
39
  - app/controllers/lesli_calendar/agendas_controller.rb
39
40
  - app/controllers/lesli_calendar/application_controller.rb
40
41
  - app/controllers/lesli_calendar/calendars_controller.rb
@@ -109,9 +110,6 @@ files:
109
110
  - lib/lesli_calendar.rb
110
111
  - lib/lesli_calendar/engine.rb
111
112
  - lib/lesli_calendar/version.rb
112
- - lib/scss/_agenda.scss
113
- - lib/scss/_calendar.scss
114
- - lib/scss/application.scss
115
113
  - lib/tasks/lesli_calendar_tasks.rake
116
114
  - license
117
115
  - readme.md
@@ -1,99 +0,0 @@
1
- /*
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 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
- */
32
-
33
-
34
- // ·
35
- @import "Lesli/scss/templates/component";
36
-
37
-
38
- // ·
39
- $driver-color: #3689e6;
40
- $focus-color: #28bca3;
41
- $support-color: #a56de2;
42
-
43
-
44
- // ·
45
- .lesli-calendar-agenda {
46
- background-color: white;
47
-
48
- h3 {
49
- color: lesli-css-color(silver, 900);
50
- padding: 14px 0;
51
- }
52
-
53
- .event {
54
- border-bottom: 1px solid lesli-css-color(silver, 300);
55
- min-height: 100px;
56
-
57
- .date {
58
- flex: 0 0 70px;
59
- text-align: center;
60
- color: lesli-css-color(silver, 900);
61
-
62
- .day-number {
63
- font-weight: 700;
64
- font-size: 1.2rem;
65
- }
66
- }
67
-
68
- .description {
69
- line-height: 1.2;
70
- font-size: 0.9rem;
71
-
72
- p:nth-child(odd) {
73
- margin: 0;
74
- font-weight: 700;
75
- font-size: 0.9rem;
76
- }
77
-
78
- .lesli-calendar,
79
- .lesli-support {
80
- padding-top: 12px;
81
- padding-left: 12px;
82
- border-left: 4px solid lesli-css-color(silver);
83
- &:last-child { padding-bottom: 14px; }
84
- }
85
-
86
- .lesli-calendar {
87
- border-left-color: $driver-color;
88
- }
89
-
90
- .lesli-support {
91
- border-left-color: $support-color;
92
- }
93
-
94
- .cloud-focus-tasks {
95
- border-left-color: $focus-color;
96
- }
97
- }
98
- }
99
- }
@@ -1,137 +0,0 @@
1
- /*
2
-
3
- Lesli
4
-
5
- Copyright (c) 2025, 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
- */
32
-
33
-
34
- // ·
35
- @use "lesli-css" as lesli;
36
-
37
-
38
- // · Event colors
39
- $lesli-calendar-color: #3689e6;
40
- $lesli-support-color: #a56de2;
41
- $lesli-tasks-color: #28bca3;
42
- $border-grid: 6px solid var(--lesli-color-background);
43
-
44
-
45
- // ·
46
- body.lesli-calendar.calendars #lesli-calendar-engine {
47
-
48
- .fc-scrollgrid {
49
-
50
- // remove outside border of the calendar grid
51
- border: none !important;
52
-
53
- // remove the last right border for the header
54
- th[role="presentation"] {
55
- border: none;
56
- border-bottom: $border-grid
57
- }
58
-
59
- // calendar header (day names)
60
- .fc-scrollgrid-section-header {
61
-
62
- .fc-col-header-cell {
63
- padding: .8rem 0;
64
- text-align: center;
65
- border-left-width: 0;
66
- border-right-width: 0;
67
-
68
- a {
69
- font-family: "OpenSans";
70
- font-weight: 600;
71
- color: lesli.lesli-color(silver, 900)
72
- }
73
- }
74
- }
75
-
76
- .fc-scrollgrid-section-body {
77
-
78
- .fc-day {
79
- border: $border-grid
80
- }
81
-
82
- // grid of days of the month
83
- .fc-daygrid-day {
84
-
85
- // Day number
86
- .fc-daygrid-day-top .fc-daygrid-day-number {
87
- padding: 5px 10px;
88
- }
89
-
90
- // change current day indicator
91
- &.fc-day-today .fc-daygrid-day-top .fc-daygrid-day-number {
92
- color: lesli.lesli-color(lesli, primary);
93
- font-weight: 800;
94
- }
95
-
96
- // event in the calendar
97
- .fc-daygrid-event {
98
- border: none;
99
- display: block;
100
- border-left: 5px solid;
101
- border-radius: 3px;
102
- padding: .3rem;
103
- overflow: hidden;
104
- margin-bottom: .2rem;
105
-
106
- .fc-event-title {
107
- text-transform: capitalize;
108
- font-family: "OpenSans";
109
- }
110
-
111
- .fc-event-time,
112
- .fc-daygrid-event-dot { display: none !important; }
113
-
114
- &.lesli-calendar {
115
- border-left-color: $lesli-calendar-color;
116
- background-color: lesli.lesli-color-lighten($lesli-calendar-color, 30);
117
- .fc-event-title { color: lesli.lesli-color-darken($lesli-calendar-color, 30) }
118
- }
119
-
120
- // ticket events
121
- &.lesli-support {
122
- border-left-color: $lesli-support-color;
123
- background-color: lesli.lesli-color-lighten($lesli-support-color, 30);
124
- .fc-event-title { color: lesli.lesli-color-darken($lesli-support-color, 30) }
125
- }
126
-
127
- // focus events
128
- &.lesli-tasks {
129
- border-left-color: $lesli-tasks-color;
130
- background-color: lesli.lesli-color-lighten($lesli-tasks-color, 30);
131
- .fc-event-title { color: lesli.lesli-color-darken($lesli-tasks-color, 30) }
132
- }
133
- }
134
- }
135
- }
136
- }
137
- }
@@ -1,44 +0,0 @@
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 https://www.lesli.tech
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
- @use "calendar";
33
-
34
-
35
- /*
36
- body.lesli-calendar-calendar {
37
- @import "./calendar.scss";
38
- @import "./agenda.scss";
39
- }
40
-
41
- body.lesli-calendar-agenda {
42
- @import "./agenda.scss";
43
- }
44
- */