@hed-hog/lms 0.0.306 → 0.0.310

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 (120) hide show
  1. package/dist/course/course-structure.controller.d.ts +60 -0
  2. package/dist/course/course-structure.controller.d.ts.map +1 -1
  3. package/dist/course/course-structure.controller.js +79 -0
  4. package/dist/course/course-structure.controller.js.map +1 -1
  5. package/dist/course/course-structure.service.d.ts +61 -1
  6. package/dist/course/course-structure.service.d.ts.map +1 -1
  7. package/dist/course/course-structure.service.js +326 -1
  8. package/dist/course/course-structure.service.js.map +1 -1
  9. package/dist/course/course.controller.d.ts +52 -4
  10. package/dist/course/course.controller.d.ts.map +1 -1
  11. package/dist/course/course.service.d.ts +52 -5
  12. package/dist/course/course.service.d.ts.map +1 -1
  13. package/dist/course/course.service.js +78 -57
  14. package/dist/course/course.service.js.map +1 -1
  15. package/dist/course/dto/create-course-structure-lesson.dto.d.ts.map +1 -1
  16. package/dist/course/dto/create-course-structure-lesson.dto.js +5 -1
  17. package/dist/course/dto/create-course-structure-lesson.dto.js.map +1 -1
  18. package/dist/course/dto/create-course.dto.d.ts +1 -1
  19. package/dist/course/dto/create-course.dto.d.ts.map +1 -1
  20. package/dist/course/dto/create-course.dto.js +4 -1
  21. package/dist/course/dto/create-course.dto.js.map +1 -1
  22. package/dist/course/dto/move-lesson.dto.d.ts +10 -0
  23. package/dist/course/dto/move-lesson.dto.d.ts.map +1 -0
  24. package/dist/course/dto/move-lesson.dto.js +28 -0
  25. package/dist/course/dto/move-lesson.dto.js.map +1 -0
  26. package/dist/course/dto/paste-lessons.dto.d.ts +4 -0
  27. package/dist/course/dto/paste-lessons.dto.d.ts.map +1 -0
  28. package/dist/course/dto/paste-lessons.dto.js +24 -0
  29. package/dist/course/dto/paste-lessons.dto.js.map +1 -0
  30. package/dist/course/dto/reorder-lessons.dto.d.ts +5 -0
  31. package/dist/course/dto/reorder-lessons.dto.d.ts.map +1 -0
  32. package/dist/course/dto/reorder-lessons.dto.js +24 -0
  33. package/dist/course/dto/reorder-lessons.dto.js.map +1 -0
  34. package/dist/course/dto/reorder-sessions.dto.d.ts +5 -0
  35. package/dist/course/dto/reorder-sessions.dto.d.ts.map +1 -0
  36. package/dist/course/dto/reorder-sessions.dto.js +24 -0
  37. package/dist/course/dto/reorder-sessions.dto.js.map +1 -0
  38. package/dist/training/training.controller.js +1 -1
  39. package/dist/training/training.controller.js.map +1 -1
  40. package/hedhog/data/image_type.yaml +20 -0
  41. package/hedhog/data/menu.yaml +2 -2
  42. package/hedhog/data/route.yaml +60 -6
  43. package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +146 -165
  44. package/hedhog/frontend/app/_components/course-avatar.tsx.ejs +70 -0
  45. package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +372 -22
  46. package/hedhog/frontend/app/certificates/models/CanvasStage.tsx.ejs +10 -1
  47. package/hedhog/frontend/app/certificates/models/TopBar.tsx.ejs +44 -3
  48. package/hedhog/frontend/app/certificates/models/page.tsx.ejs +32 -0
  49. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +437 -77
  50. package/hedhog/frontend/app/classes/page.tsx.ejs +311 -289
  51. package/hedhog/frontend/app/courses/[id]/_components/CourseCertificateCard.tsx.ejs +10 -7
  52. package/hedhog/frontend/app/courses/[id]/_components/CourseClassificationCard.tsx.ejs +23 -32
  53. package/hedhog/frontend/app/courses/[id]/_components/CourseContentCard.tsx.ejs +3 -9
  54. package/hedhog/frontend/app/courses/[id]/_components/CourseDangerZoneCard.tsx.ejs +26 -16
  55. package/hedhog/frontend/app/courses/[id]/_components/CourseFlagsCard.tsx.ejs +19 -5
  56. package/hedhog/frontend/app/courses/[id]/_components/CourseMainInfoCard.tsx.ejs +10 -14
  57. package/hedhog/frontend/app/courses/[id]/_components/CourseMediaCard.tsx.ejs +131 -107
  58. package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +10 -7
  59. package/hedhog/frontend/app/courses/[id]/_components/CourseSectionCard.tsx.ejs +38 -19
  60. package/hedhog/frontend/app/courses/[id]/_components/CourseSummaryCard.tsx.ejs +1 -1
  61. package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +1 -1
  62. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +336 -1057
  63. package/hedhog/frontend/app/courses/[id]/structure/_components/confirm-dialog.tsx.ejs +45 -0
  64. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-dnd.tsx.ejs +362 -0
  65. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-panel.tsx.ejs +111 -0
  66. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-skeleton.tsx.ejs +64 -0
  67. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree.tsx.ejs +134 -0
  68. package/hedhog/frontend/app/courses/[id]/structure/_components/detail-course.tsx.ejs +113 -0
  69. package/hedhog/frontend/app/courses/[id]/structure/_components/detail-lesson.tsx.ejs +314 -0
  70. package/hedhog/frontend/app/courses/[id]/structure/_components/detail-panel.tsx.ejs +62 -0
  71. package/hedhog/frontend/app/courses/[id]/structure/_components/detail-session.tsx.ejs +174 -0
  72. package/hedhog/frontend/app/courses/[id]/structure/_components/drag-handle.tsx.ejs +58 -0
  73. package/hedhog/frontend/app/courses/[id]/structure/_components/drag-overlay.tsx.ejs +52 -0
  74. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-bulk.tsx.ejs +276 -0
  75. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +1216 -0
  76. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +1827 -0
  77. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-session.tsx.ejs +443 -0
  78. package/hedhog/frontend/app/courses/[id]/structure/_components/highlighted-text.tsx.ejs +41 -0
  79. package/hedhog/frontend/app/courses/[id]/structure/_components/mock-data.ts.ejs +184 -0
  80. package/hedhog/frontend/app/courses/[id]/structure/_components/multi-select-bar.tsx.ejs +264 -0
  81. package/hedhog/frontend/app/courses/[id]/structure/_components/search-filter.tsx.ejs +96 -0
  82. package/hedhog/frontend/app/courses/[id]/structure/_components/session-picker-dialog.tsx.ejs +74 -0
  83. package/hedhog/frontend/app/courses/[id]/structure/_components/shortcuts-help.tsx.ejs +136 -0
  84. package/hedhog/frontend/app/courses/[id]/structure/_components/sortable-tree-row.tsx.ejs +80 -0
  85. package/hedhog/frontend/app/courses/[id]/structure/_components/store.ts.ejs +948 -0
  86. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-context-menu.tsx.ejs +525 -0
  87. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-display-settings-popover.tsx.ejs +150 -0
  88. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-helpers.ts.ejs +182 -0
  89. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-course.tsx.ejs +52 -0
  90. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-lesson.tsx.ejs +271 -0
  91. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-session.tsx.ejs +167 -0
  92. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row.tsx.ejs +108 -0
  93. package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +122 -0
  94. package/hedhog/frontend/app/courses/[id]/structure/_components/use-course-structure-shortcuts.ts.ejs +318 -0
  95. package/hedhog/frontend/app/courses/[id]/structure/_components/use-tree-display-settings.ts.ejs +97 -0
  96. package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +347 -0
  97. package/hedhog/frontend/app/courses/[id]/structure/_data/course-structure-contract.ts.ejs +195 -0
  98. package/hedhog/frontend/app/courses/[id]/structure/_data/services/course-structure.service.ts.ejs +420 -0
  99. package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +254 -0
  100. package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-mutations.ts.ejs +987 -0
  101. package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-query.ts.ejs +86 -0
  102. package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure.ts.ejs +160 -0
  103. package/hedhog/frontend/app/courses/[id]/structure/page.tsx.ejs +10 -3212
  104. package/hedhog/frontend/app/courses/page.tsx.ejs +45 -26
  105. package/hedhog/frontend/app/{training → paths}/page.tsx.ejs +29 -7
  106. package/hedhog/frontend/messages/en.json +91 -11
  107. package/hedhog/frontend/messages/pt.json +91 -11
  108. package/hedhog/table/course.yaml +1 -1
  109. package/hedhog/table/image_type.yaml +14 -0
  110. package/package.json +7 -7
  111. package/src/course/course-structure.controller.ts +63 -0
  112. package/src/course/course-structure.service.ts +390 -3
  113. package/src/course/course.service.ts +59 -27
  114. package/src/course/dto/create-course-structure-lesson.dto.ts +3 -2
  115. package/src/course/dto/create-course.dto.ts +4 -1
  116. package/src/course/dto/move-lesson.dto.ts +17 -0
  117. package/src/course/dto/paste-lessons.dto.ts +9 -0
  118. package/src/course/dto/reorder-lessons.dto.ts +10 -0
  119. package/src/course/dto/reorder-sessions.dto.ts +10 -0
  120. package/src/training/training.controller.ts +1 -1
@@ -1,21 +1,27 @@
1
+ import { EntityPicker } from '@/components/ui/entity-picker';
1
2
  import {
2
3
  FormField,
3
4
  FormItem,
4
5
  FormLabel,
5
6
  FormMessage,
6
7
  } from '@/components/ui/form';
7
- import { EntityPicker } from '@/components/ui/entity-picker';
8
- import type { UseFormReturn } from 'react-hook-form';
9
8
  import { Award } from 'lucide-react';
9
+ import type { UseFormReturn } from 'react-hook-form';
10
10
 
11
11
  import { CourseSectionCard } from './CourseSectionCard';
12
- import type { CourseEditFormValues, PickerOption, TranslationFn } from './course-edit-types';
12
+ import type {
13
+ CourseEditFormValues,
14
+ PickerOption,
15
+ TranslationFn,
16
+ } from './course-edit-types';
13
17
 
14
18
  type CourseCertificateCardProps = {
15
19
  form: UseFormReturn<CourseEditFormValues>;
16
20
  t: TranslationFn;
17
21
  options: PickerOption[];
18
- onCreateTemplate: (values: Record<string, string>) => Promise<PickerOption | null>;
22
+ onCreateTemplate: (
23
+ values: Record<string, string>
24
+ ) => Promise<PickerOption | null>;
19
25
  };
20
26
 
21
27
  export function CourseCertificateCard({
@@ -68,9 +74,6 @@ export function CourseCertificateCard({
68
74
  option.description || option.meta || undefined
69
75
  }
70
76
  />
71
- <p className="text-sm text-muted-foreground">
72
- {t('form.fields.certificateModel.description')}
73
- </p>
74
77
  <FormMessage />
75
78
  </FormItem>
76
79
  )}
@@ -17,10 +17,7 @@ import { Palette, Settings2 } from 'lucide-react';
17
17
  import type { UseFormReturn } from 'react-hook-form';
18
18
 
19
19
  import { CourseSectionCard } from './CourseSectionCard';
20
- import type {
21
- CourseEditFormValues,
22
- TranslationFn,
23
- } from './course-edit-types';
20
+ import type { CourseEditFormValues, TranslationFn } from './course-edit-types';
24
21
 
25
22
  type SelectOption = {
26
23
  value: string;
@@ -36,24 +33,18 @@ type CourseClassificationCardProps = {
36
33
  offeringTypes: readonly SelectOption[];
37
34
  };
38
35
 
39
- function ColorPreview({
40
- color,
41
- label,
42
- }: {
43
- color: string;
44
- label: string;
45
- }) {
36
+ function ColorPreview({ color, label }: { color: string; label: string }) {
46
37
  return (
47
- <div className="flex items-center gap-2 rounded-xl border border-border/60 bg-muted/20 px-3 py-2">
38
+ <div className="flex items-center gap-2 rounded-lg border border-border/60 bg-muted/20 px-2.5 py-1.5">
48
39
  <span
49
- className="h-5 w-5 rounded-full border border-black/10"
40
+ className="h-4 w-4 shrink-0 rounded-full border border-black/10"
50
41
  style={{ backgroundColor: color }}
51
42
  />
52
43
  <div className="min-w-0">
53
- <p className="text-[11px] font-medium uppercase tracking-[0.14em] text-muted-foreground">
44
+ <p className="text-[10px] font-medium uppercase tracking-[0.14em] text-muted-foreground">
54
45
  {label}
55
46
  </p>
56
- <p className="truncate text-sm font-medium text-foreground">{color}</p>
47
+ <p className="truncate text-xs font-medium text-foreground">{color}</p>
57
48
  </div>
58
49
  </div>
59
50
  );
@@ -76,7 +67,7 @@ export function CourseClassificationCard({
76
67
  description="Defina estágio, formato e identidade visual do curso."
77
68
  icon={Settings2}
78
69
  >
79
- <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-3">
70
+ <div className="grid gap-3 md:grid-cols-2 xl:grid-cols-3">
80
71
  <FormField
81
72
  control={form.control}
82
73
  name="nivel"
@@ -86,7 +77,9 @@ export function CourseClassificationCard({
86
77
  <Select value={field.value} onValueChange={field.onChange}>
87
78
  <FormControl>
88
79
  <SelectTrigger className="w-full">
89
- <SelectValue placeholder={t('form.fields.level.placeholder')} />
80
+ <SelectValue
81
+ placeholder={t('form.fields.level.placeholder')}
82
+ />
90
83
  </SelectTrigger>
91
84
  </FormControl>
92
85
  <SelectContent>
@@ -111,7 +104,9 @@ export function CourseClassificationCard({
111
104
  <Select value={field.value} onValueChange={field.onChange}>
112
105
  <FormControl>
113
106
  <SelectTrigger className="w-full">
114
- <SelectValue placeholder={t('form.fields.status.placeholder')} />
107
+ <SelectValue
108
+ placeholder={t('form.fields.status.placeholder')}
109
+ />
115
110
  </SelectTrigger>
116
111
  </FormControl>
117
112
  <SelectContent>
@@ -149,10 +144,6 @@ export function CourseClassificationCard({
149
144
  ))}
150
145
  </SelectContent>
151
146
  </Select>
152
- <p className="text-sm text-muted-foreground">
153
- {offeringTypes.find((option) => option.value === watchedOfferingType)
154
- ?.description ?? t('form.fields.offeringType.description')}
155
- </p>
156
147
  <FormMessage />
157
148
  </FormItem>
158
149
  )}
@@ -165,18 +156,18 @@ export function CourseClassificationCard({
165
156
  <FormItem>
166
157
  <FormLabel>{t('form.fields.primaryColor.label')}</FormLabel>
167
158
  <FormControl>
168
- <div className="flex items-center gap-3 rounded-2xl border border-border/60 bg-muted/20 p-3">
159
+ <div className="flex items-center gap-2 rounded-lg border border-border/60 bg-muted/20 px-2 py-1.5">
169
160
  <Input
170
161
  type="color"
171
162
  value={field.value}
172
163
  onChange={field.onChange}
173
- className="h-11 w-16 cursor-pointer rounded-xl border border-border/60 bg-transparent p-1"
164
+ className="h-8 w-10 cursor-pointer rounded-md border border-border/60 bg-transparent p-0.5"
174
165
  />
175
166
  <Input
176
167
  value={field.value}
177
168
  onChange={field.onChange}
178
169
  placeholder={t('form.fields.primaryColor.placeholder')}
179
- className="font-mono"
170
+ className="h-8 font-mono"
180
171
  />
181
172
  </div>
182
173
  </FormControl>
@@ -192,18 +183,18 @@ export function CourseClassificationCard({
192
183
  <FormItem>
193
184
  <FormLabel>{t('form.fields.secondaryColor.label')}</FormLabel>
194
185
  <FormControl>
195
- <div className="flex items-center gap-3 rounded-2xl border border-border/60 bg-muted/20 p-3">
186
+ <div className="flex items-center gap-2 rounded-lg border border-border/60 bg-muted/20 px-2 py-1.5">
196
187
  <Input
197
188
  type="color"
198
189
  value={field.value}
199
190
  onChange={field.onChange}
200
- className="h-11 w-16 cursor-pointer rounded-xl border border-border/60 bg-transparent p-1"
191
+ className="h-8 w-10 cursor-pointer rounded-md border border-border/60 bg-transparent p-0.5"
201
192
  />
202
193
  <Input
203
194
  value={field.value}
204
195
  onChange={field.onChange}
205
196
  placeholder={t('form.fields.secondaryColor.placeholder')}
206
- className="font-mono"
197
+ className="h-8 font-mono"
207
198
  />
208
199
  </div>
209
200
  </FormControl>
@@ -212,10 +203,10 @@ export function CourseClassificationCard({
212
203
  )}
213
204
  />
214
205
 
215
- <div className="space-y-3 rounded-2xl border border-border/60 bg-gradient-to-br from-muted/30 to-background p-4">
216
- <div className="flex items-center gap-2 text-sm font-medium text-foreground">
217
- <Palette className="h-4 w-4 text-muted-foreground" />
218
- Preview rápido
206
+ <div className="space-y-2 rounded-lg border border-border/60 bg-linear-to-br from-muted/30 to-background p-3">
207
+ <div className="flex items-center gap-1.5 text-xs font-medium text-muted-foreground">
208
+ <Palette className="h-3.5 w-3.5" />
209
+ Preview
219
210
  </div>
220
211
  <ColorPreview color={watchedPrimary} label="Primária" />
221
212
  <ColorPreview color={watchedSecondary} label="Secundária" />
@@ -23,7 +23,7 @@ export function CourseContentCard({ form }: CourseContentCardProps) {
23
23
  description="Concentre os textos longos que apoiam venda, orientação pedagógica e publicação."
24
24
  icon={FileText}
25
25
  >
26
- <div className="grid gap-4">
26
+ <div className="grid gap-3">
27
27
  <FormField
28
28
  control={form.control}
29
29
  name="objetivos"
@@ -33,13 +33,10 @@ export function CourseContentCard({ form }: CourseContentCardProps) {
33
33
  <FormControl>
34
34
  <Textarea
35
35
  {...field}
36
- rows={4}
36
+ rows={3}
37
37
  placeholder="Explique o que o aluno será capaz de fazer ao concluir o curso."
38
38
  />
39
39
  </FormControl>
40
- <p className="text-sm text-muted-foreground">
41
- Use frases diretas para orientar catálogo, marketing e equipe acadêmica.
42
- </p>
43
40
  <FormMessage />
44
41
  </FormItem>
45
42
  )}
@@ -54,13 +51,10 @@ export function CourseContentCard({ form }: CourseContentCardProps) {
54
51
  <FormControl>
55
52
  <Textarea
56
53
  {...field}
57
- rows={4}
54
+ rows={3}
58
55
  placeholder="Descreva para quem este curso foi pensado."
59
56
  />
60
57
  </FormControl>
61
- <p className="text-sm text-muted-foreground">
62
- Ajuda a alinhar expectativa comercial e segmentação da oferta.
63
- </p>
64
58
  <FormMessage />
65
59
  </FormItem>
66
60
  )}
@@ -1,4 +1,10 @@
1
1
  import { Button } from '@/components/ui/button';
2
+ import {
3
+ Tooltip,
4
+ TooltipContent,
5
+ TooltipProvider,
6
+ TooltipTrigger,
7
+ } from '@/components/ui/tooltip';
2
8
  import { AlertTriangle, Trash2 } from 'lucide-react';
3
9
 
4
10
  import { CourseSectionCard } from './CourseSectionCard';
@@ -21,22 +27,26 @@ export function CourseDangerZoneCard({
21
27
  className="border-destructive/20"
22
28
  contentClassName="pt-0"
23
29
  >
24
- <div className="rounded-2xl border border-destructive/20 bg-destructive/5 p-4">
25
- <p className="text-sm leading-6 text-muted-foreground">
26
- Excluir o curso remove este registro da operação e pode afetar turmas,
27
- matrículas e certificados vinculados.
28
- </p>
29
-
30
- <Button
31
- type="button"
32
- variant="destructive"
33
- className="mt-4 w-full gap-2"
34
- onClick={onDelete}
35
- >
36
- <Trash2 className="h-4 w-4" />
37
- {t('form.actions.deleteCourse')}
38
- </Button>
39
- </div>
30
+ <TooltipProvider>
31
+ <Tooltip>
32
+ <TooltipTrigger asChild>
33
+ <Button
34
+ type="button"
35
+ variant="destructive"
36
+ size="sm"
37
+ className="gap-2"
38
+ onClick={onDelete}
39
+ >
40
+ <Trash2 className="h-3.5 w-3.5" />
41
+ {t('form.actions.deleteCourse')}
42
+ </Button>
43
+ </TooltipTrigger>
44
+ <TooltipContent side="top" className="max-w-[240px] text-xs">
45
+ Remove o curso, turmas, matrículas e certificados vinculados
46
+ permanentemente.
47
+ </TooltipContent>
48
+ </Tooltip>
49
+ </TooltipProvider>
40
50
  </CourseSectionCard>
41
51
  );
42
52
  }
@@ -5,6 +5,12 @@ import {
5
5
  FormLabel,
6
6
  } from '@/components/ui/form';
7
7
  import { Switch } from '@/components/ui/switch';
8
+ import {
9
+ Tooltip,
10
+ TooltipContent,
11
+ TooltipProvider,
12
+ TooltipTrigger,
13
+ } from '@/components/ui/tooltip';
8
14
  import { BadgeCheck } from 'lucide-react';
9
15
  import type { UseFormReturn } from 'react-hook-form';
10
16
 
@@ -28,11 +34,19 @@ function FlagRow({
28
34
  onCheckedChange: (value: boolean) => void;
29
35
  }) {
30
36
  return (
31
- <div className="flex items-start justify-between gap-4 rounded-2xl border border-border/60 bg-muted/20 px-4 py-3">
32
- <div className="space-y-1">
33
- <p className="text-sm font-medium text-foreground">{title}</p>
34
- <p className="text-xs leading-5 text-muted-foreground">{description}</p>
35
- </div>
37
+ <div className="flex items-center justify-between gap-3 rounded-lg border border-border/60 bg-muted/20 px-3 py-2">
38
+ <TooltipProvider>
39
+ <Tooltip>
40
+ <TooltipTrigger asChild>
41
+ <p className="cursor-default text-sm font-medium text-foreground">
42
+ {title}
43
+ </p>
44
+ </TooltipTrigger>
45
+ <TooltipContent side="right" className="max-w-55 text-xs">
46
+ {description}
47
+ </TooltipContent>
48
+ </Tooltip>
49
+ </TooltipProvider>
36
50
  <Switch checked={checked} onCheckedChange={onCheckedChange} />
37
51
  </div>
38
52
  );
@@ -1,3 +1,4 @@
1
+ import { RichTextEditor } from '@/components/rich-text-editor';
1
2
  import {
2
3
  FormControl,
3
4
  FormField,
@@ -6,7 +7,6 @@ import {
6
7
  FormMessage,
7
8
  } from '@/components/ui/form';
8
9
  import { Input } from '@/components/ui/input';
9
- import { RichTextEditor } from '@/components/rich-text-editor';
10
10
  import { Hash, NotebookPen } from 'lucide-react';
11
11
  import type { UseFormReturn } from 'react-hook-form';
12
12
 
@@ -18,32 +18,31 @@ type CourseMainInfoCardProps = {
18
18
  t: TranslationFn;
19
19
  };
20
20
 
21
- export function CourseMainInfoCard({
22
- form,
23
- t,
24
- }: CourseMainInfoCardProps) {
21
+ export function CourseMainInfoCard({ form, t }: CourseMainInfoCardProps) {
25
22
  return (
26
23
  <CourseSectionCard
27
24
  title={t('form.sections.basicInfo')}
28
25
  description="Os identificadores e a comunicação principal do curso ficam aqui."
29
26
  icon={NotebookPen}
30
27
  >
31
- <div className="grid gap-4 md:grid-cols-2">
28
+ <div className="grid gap-3 md:grid-cols-2">
32
29
  <FormField
33
30
  control={form.control}
34
- name="codigo"
31
+ name="slug"
35
32
  render={({ field }) => (
36
33
  <FormItem>
37
- <FormLabel>{t('form.fields.code.label')}</FormLabel>
34
+ <FormLabel>{t('form.fields.slug.label')}</FormLabel>
38
35
  <FormControl>
39
36
  <div className="relative">
40
37
  <Hash className="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
41
38
  <Input
42
39
  {...field}
43
- className="pl-9 uppercase"
44
- placeholder={t('form.fields.code.placeholder')}
40
+ className="pl-9 font-mono"
41
+ placeholder={t('form.fields.slug.placeholder')}
45
42
  onChange={(event) =>
46
- field.onChange(String(event.target.value || '').toUpperCase())
43
+ field.onChange(
44
+ String(event.target.value || '').toLowerCase()
45
+ )
47
46
  }
48
47
  />
49
48
  </div>
@@ -100,9 +99,6 @@ export function CourseMainInfoCard({
100
99
  className="w-full max-w-full"
101
100
  />
102
101
  </FormControl>
103
- <p className="text-sm text-muted-foreground">
104
- {t('form.fields.description.description')}
105
- </p>
106
102
  <FormMessage />
107
103
  </FormItem>
108
104
  )}