@hed-hog/lms 0.0.330 → 0.0.331

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 (31) hide show
  1. package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +3 -3
  2. package/hedhog/frontend/app/certificates/models/page.tsx.ejs +1 -1
  3. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +17 -17
  4. package/hedhog/frontend/app/courses/[id]/_components/CourseMultiEntityPicker.tsx.ejs +2 -2
  5. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +3 -3
  6. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-dnd.tsx.ejs +1 -1
  7. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +228 -152
  8. package/hedhog/frontend/app/courses/[id]/structure/_components/shortcuts-help.tsx.ejs +71 -31
  9. package/hedhog/frontend/app/enterprise/[id]/page.tsx.ejs +37 -41
  10. package/hedhog/frontend/app/evaluations/_components/evaluation-topic-form-sheet.tsx.ejs +1 -1
  11. package/hedhog/frontend/app/exams/page.tsx.ejs +6 -2
  12. package/hedhog/frontend/app/instructors/_components/instructor-form-sheet.tsx.ejs +145 -119
  13. package/hedhog/frontend/app/instructors/page.tsx.ejs +71 -52
  14. package/hedhog/frontend/app/paths/page.tsx.ejs +11 -7
  15. package/hedhog/frontend/app/reports/courses/page.tsx.ejs +5 -5
  16. package/hedhog/frontend/app/reports/dashboard/page.tsx.ejs +8 -8
  17. package/hedhog/frontend/app/reports/page.tsx.ejs +7 -7
  18. package/hedhog/frontend/app/reports/students/page.tsx.ejs +6 -6
  19. package/hedhog/frontend/app/training/page.tsx.ejs +5 -5
  20. package/hedhog/frontend/messages/en.json +294 -46
  21. package/hedhog/frontend/messages/pt.json +289 -39
  22. package/hedhog/frontend/widgets/active-classes-kpi.tsx.ejs +1 -1
  23. package/hedhog/frontend/widgets/active-courses-kpi.tsx.ejs +1 -1
  24. package/hedhog/frontend/widgets/approval-rate-kpi.tsx.ejs +1 -1
  25. package/hedhog/frontend/widgets/class-calendar.tsx.ejs +2 -2
  26. package/hedhog/frontend/widgets/completion-rate-kpi.tsx.ejs +1 -1
  27. package/hedhog/frontend/widgets/issued-certificates-kpi.tsx.ejs +1 -1
  28. package/hedhog/frontend/widgets/total-students-kpi.tsx.ejs +1 -1
  29. package/hedhog/table/instructor_qualification.yaml +1 -1
  30. package/hedhog/table/instructor_skill.yaml +1 -1
  31. package/package.json +7 -7
@@ -526,14 +526,14 @@ export function CourseFormSheet({
526
526
  </Field>
527
527
 
528
528
  <Field>
529
- <FieldLabel htmlFor="descricao">
529
+ <FieldLabel htmlFor="descricao">
530
530
  {t('form.fields.description.label')}
531
531
  </FieldLabel>
532
532
  <Textarea
533
- id="descricao"
533
+ id="descricao"
534
534
  rows={3}
535
535
  placeholder={t('form.fields.description.placeholder')}
536
- {...form.register('descricao')}
536
+ {...form.register('descricao')}
537
537
  />
538
538
  <FieldError>{form.formState.errors.descricao?.message}</FieldError>
539
539
  </Field>
@@ -789,7 +789,7 @@ export default function ModelsPage() {
789
789
  }
790
790
  }}
791
791
  >
792
- <SheetContent className="overflow-y-auto sm:max-w-xl">
792
+ <SheetContent className="overflow-y-auto sm:max-w-xl">
793
793
  <SheetHeader>
794
794
  <SheetTitle>{t('editSheet.title')}</SheetTitle>
795
795
  <SheetDescription>{t('editSheet.description')}</SheetDescription>
@@ -2452,13 +2452,13 @@ export default function TurmaDetalhePage() {
2452
2452
  },
2453
2453
  {
2454
2454
  key: 'next-session',
2455
- title: 'Proxima aula',
2455
+ title: t('kpis.nextClass'),
2456
2456
  value: nextSession
2457
2457
  ? format(nextSessionStartsAt!, 'dd/MM', { locale: dateLocale })
2458
- : 'Sem aula',
2458
+ : t('kpis.noClass'),
2459
2459
  description: nextSession
2460
2460
  ? `${nextSession.horaInicio} - ${nextSession.horaFim}`
2461
- : 'Crie a proxima sessao',
2461
+ : t('kpis.createNext'),
2462
2462
  icon: Clock,
2463
2463
  iconContainerClassName: 'bg-emerald-500/10 text-emerald-700',
2464
2464
  accentClassName: 'from-emerald-500/25 via-green-500/10 to-transparent',
@@ -2466,9 +2466,9 @@ export default function TurmaDetalhePage() {
2466
2466
  },
2467
2467
  {
2468
2468
  key: 'calendar',
2469
- title: 'Calendario',
2469
+ title: t('kpis.calendar'),
2470
2470
  value: totalSessionsCount,
2471
- description: `${completedSessionsCount} concluidas`,
2471
+ description: t('kpis.completed', { count: completedSessionsCount }),
2472
2472
  icon: CalendarIcon,
2473
2473
  iconContainerClassName: 'bg-violet-500/10 text-violet-700',
2474
2474
  accentClassName: 'from-violet-500/25 via-violet-500/10 to-transparent',
@@ -2582,7 +2582,7 @@ export default function TurmaDetalhePage() {
2582
2582
  variant: 'outline',
2583
2583
  },
2584
2584
  {
2585
- label: 'Editar turma',
2585
+ label: t('actions.editClass'),
2586
2586
  onClick: () => setEditSheetOpen(true),
2587
2587
  variant: 'default',
2588
2588
  },
@@ -2660,7 +2660,7 @@ export default function TurmaDetalhePage() {
2660
2660
  key={i}
2661
2661
  className="overflow-hidden border-border/70 py-0"
2662
2662
  >
2663
- <div className="h-1 w-full bg-gradient-to-r from-slate-300/70 via-slate-200 to-transparent" />
2663
+ <div className="h-1 w-full bg-linear-to-r from-slate-300/70 via-slate-200 to-transparent" />
2664
2664
  <CardContent className="p-4">
2665
2665
  <Skeleton className="mb-2 h-8 w-16" />
2666
2666
  <Skeleton className="h-4 w-28" />
@@ -2803,7 +2803,7 @@ export default function TurmaDetalhePage() {
2803
2803
  #
2804
2804
  </TableHead>
2805
2805
  <TableHead>Sessão</TableHead>
2806
- <TableHead className="w-[120px]">Data</TableHead>
2806
+ <TableHead className="w-30">Data</TableHead>
2807
2807
  <TableHead className="w-[105px]">Horário</TableHead>
2808
2808
  <TableHead className="w-[90px]">Tipo</TableHead>
2809
2809
  <TableHead>Instrutor</TableHead>
@@ -2814,7 +2814,7 @@ export default function TurmaDetalhePage() {
2814
2814
  Materiais
2815
2815
  </TableHead>
2816
2816
  <TableHead className="w-[90px]">Link</TableHead>
2817
- <TableHead className="w-[44px]" />
2817
+ <TableHead className="w-11" />
2818
2818
  </TableRow>
2819
2819
  </TableHeader>
2820
2820
  <TableBody>
@@ -3359,7 +3359,7 @@ export default function TurmaDetalhePage() {
3359
3359
  src={getPersonAvatarUrl(aluno.avatarId)}
3360
3360
  alt={aluno.nome}
3361
3361
  />
3362
- <AvatarFallback className="bg-gradient-to-br from-blue-100 to-blue-200 text-[11px] font-medium text-blue-700">
3362
+ <AvatarFallback className="bg-linear-to-br from-blue-100 to-blue-200 text-[11px] font-medium text-blue-700">
3363
3363
  {getPersonInitials(aluno.nome)}
3364
3364
  </AvatarFallback>
3365
3365
  </Avatar>
@@ -3616,7 +3616,7 @@ export default function TurmaDetalhePage() {
3616
3616
  {tClasses(`type.${aula.tipo}`)}
3617
3617
  </Badge>
3618
3618
  </TableCell>
3619
- <TableCell className="max-w-[180px] truncate text-sm text-muted-foreground">
3619
+ <TableCell className="max-w-45 truncate text-sm text-muted-foreground">
3620
3620
  {aula.meetingUrl || aula.local || '—'}
3621
3621
  </TableCell>
3622
3622
  <TableCell className="text-sm text-muted-foreground">
@@ -3857,7 +3857,7 @@ export default function TurmaDetalhePage() {
3857
3857
  <Table>
3858
3858
  <TableHeader>
3859
3859
  <TableRow className="bg-muted/40 hover:bg-muted/40">
3860
- <TableHead className="sticky left-0 z-10 min-w-[260px] bg-muted/40 font-semibold">
3860
+ <TableHead className="sticky left-0 z-10 min-w-65 bg-muted/40 font-semibold">
3861
3861
  {t('tabs.students')}
3862
3862
  </TableHead>
3863
3863
  {aulasState.map((aula) => {
@@ -3886,14 +3886,14 @@ export default function TurmaDetalhePage() {
3886
3886
  key={aluno.id}
3887
3887
  className="hover:bg-muted/30"
3888
3888
  >
3889
- <TableCell className="sticky left-0 z-10 min-w-[260px] border-r border-border/40 bg-background">
3889
+ <TableCell className="sticky left-0 z-10 min-w-65 border-r border-border/40 bg-background">
3890
3890
  <div className="flex min-w-0 items-center gap-3">
3891
3891
  <Avatar className="size-8 shrink-0">
3892
3892
  <AvatarImage
3893
3893
  src={getPersonAvatarUrl(aluno.avatarId)}
3894
3894
  alt={aluno.nome}
3895
3895
  />
3896
- <AvatarFallback className="bg-gradient-to-br from-blue-100 to-blue-200 text-[11px] font-medium text-blue-700">
3896
+ <AvatarFallback className="bg-linear-to-br from-blue-100 to-blue-200 text-[11px] font-medium text-blue-700">
3897
3897
  {getPersonInitials(aluno.nome)}
3898
3898
  </AvatarFallback>
3899
3899
  </Avatar>
@@ -4195,7 +4195,7 @@ export default function TurmaDetalhePage() {
4195
4195
  globalLinkTitleEditedRef.current =
4196
4196
  e.target.value.length > 0;
4197
4197
  }}
4198
- placeholder="Ex: Referência de estudo"
4198
+ placeholder={t('links.studyRefPlaceholder')}
4199
4199
  />
4200
4200
  </Field>
4201
4201
  <div className="flex gap-2">
@@ -4615,7 +4615,7 @@ export default function TurmaDetalhePage() {
4615
4615
  src={getPersonAvatarUrl(selectedStudentProfile.avatarId)}
4616
4616
  alt={selectedStudentProfile.nome}
4617
4617
  />
4618
- <AvatarFallback className="bg-gradient-to-br from-blue-100 to-blue-200 text-xs font-medium text-blue-700">
4618
+ <AvatarFallback className="bg-linear-to-br from-blue-100 to-blue-200 text-xs font-medium text-blue-700">
4619
4619
  {getPersonInitials(selectedStudentProfile.nome)}
4620
4620
  </AvatarFallback>
4621
4621
  </Avatar>
@@ -5655,7 +5655,7 @@ export default function TurmaDetalhePage() {
5655
5655
  linkTitleEditedRef.current =
5656
5656
  e.target.value.length > 0;
5657
5657
  }}
5658
- placeholder="Ex: Slides da aula"
5658
+ placeholder={t('links.lessonSlidesPlaceholder')}
5659
5659
  />
5660
5660
  </Field>
5661
5661
  <div className="flex gap-2">
@@ -1,7 +1,7 @@
1
1
  import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
2
+ import { Badge } from '@/components/ui/badge';
2
3
  import { Button } from '@/components/ui/button';
3
4
  import { EntityPicker } from '@/components/ui/entity-picker';
4
- import { Badge } from '@/components/ui/badge';
5
5
  import { cn } from '@/lib/utils';
6
6
  import { Grip, Plus, X } from 'lucide-react';
7
7
  import { useMemo, useState } from 'react';
@@ -211,7 +211,7 @@ export function CourseMultiEntityPicker({
211
211
  variant="secondary"
212
212
  className="flex items-center gap-1.5 rounded-full border border-border/60 bg-background px-3 py-1.5 text-xs font-medium text-foreground"
213
213
  >
214
- <span className="max-w-[180px] truncate">{option.label}</span>
214
+ <span className="max-w-45 truncate">{option.label}</span>
215
215
  <button
216
216
  type="button"
217
217
  className="cursor-pointer text-muted-foreground transition-colors hover:text-foreground"
@@ -30,6 +30,7 @@ import {
30
30
  import { useTranslations } from 'next-intl';
31
31
  import { useRouter } from 'next/navigation';
32
32
 
33
+ import { CourseAvatar } from '../../_components/course-avatar';
33
34
  import { ConfirmDialog } from './structure/_components/confirm-dialog';
34
35
  import { CourseTreePanel } from './structure/_components/course-tree-panel';
35
36
  import { CourseTreeSkeleton } from './structure/_components/course-tree-skeleton';
@@ -43,7 +44,6 @@ import {
43
44
  import { useStructureStore } from './structure/_components/store';
44
45
  import { TreeDisplaySettingsPopover } from './structure/_components/tree-display-settings-popover';
45
46
  import { useCourseStructureShortcuts } from './structure/_components/use-course-structure-shortcuts';
46
- import { CourseAvatar } from '../../_components/course-avatar';
47
47
  import {
48
48
  useDuplicateLessonMutation,
49
49
  useDuplicateSessionMutation,
@@ -261,8 +261,8 @@ export default function CourseStructurePage({ params }: Props) {
261
261
  <Page>
262
262
  <PageHeader
263
263
  breadcrumbs={[
264
- { label: 'LMS', href: '/lms' },
265
- { label: 'Cursos', href: '/lms/courses' },
264
+ { label: t('breadcrumbs.lms'), href: '/lms' },
265
+ { label: t('breadcrumbs.courses'), href: '/lms/courses' },
266
266
  { label: course.name },
267
267
  ]}
268
268
  title={
@@ -295,7 +295,7 @@ export function CourseTreeDnd() {
295
295
  <p className="text-sm font-medium text-foreground/70">
296
296
  Nenhuma sessão
297
297
  </p>
298
- <p className="text-xs text-muted-foreground leading-relaxed max-w-[180px]">
298
+ <p className="text-xs text-muted-foreground leading-relaxed max-w-45">
299
299
  Adicione a primeira sessão para começar a organizar o conteúdo
300
300
  do curso.
301
301
  </p>