Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
sevenpro-frontend
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
FAP
sevenpro-frontend
Commits
2061f4d3
Commit
2061f4d3
authored
Aug 05, 2024
by
Wellton Quirino
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: create add course page
parent
50a22852
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1095 additions
and
213 deletions
+1095
-213
package-lock.json
package-lock.json
+371
-201
package.json
package.json
+8
-3
page.tsx
src/app/admin/curso/page.tsx
+289
-0
page.tsx
src/app/login/page.tsx
+12
-2
header.tsx
src/components/header.tsx
+1
-1
inputs.tsx
src/components/mui/inputs.tsx
+28
-6
selects.tsx
src/components/mui/selects.tsx
+66
-0
styled-inputs.ts
src/components/mui/styled-inputs.ts
+45
-0
calendar.tsx
src/components/ui/calendar.tsx
+66
-0
form.tsx
src/components/ui/form.tsx
+178
-0
popover.tsx
src/components/ui/popover.tsx
+31
-0
No files found.
package-lock.json
View file @
2061f4d3
...
...
@@ -10,26 +10,31 @@
"dependencies"
:
{
"@emotion/react"
:
"^11.13.0"
,
"@emotion/styled"
:
"^11.13.0"
,
"@hookform/resolvers"
:
"^3.9.0"
,
"@mui/material"
:
"^5.16.4"
,
"@radix-ui/react-accordion"
:
"^1.2.0"
,
"@radix-ui/react-checkbox"
:
"^1.1.1"
,
"@radix-ui/react-dialog"
:
"^1.0.5"
,
"@radix-ui/react-label"
:
"^2.1.0"
,
"@radix-ui/react-popover"
:
"^1.1.1"
,
"@radix-ui/react-select"
:
"^2.1.1"
,
"@radix-ui/react-separator"
:
"^1.1.0"
,
"@radix-ui/react-slot"
:
"^1.
0.2
"
,
"@radix-ui/react-slot"
:
"^1.
1.0
"
,
"axios"
:
"^1.7.2"
,
"class-variance-authority"
:
"^0.7.0"
,
"clsx"
:
"^2.1.1"
,
"date-fns"
:
"^3.6.0"
,
"embla-carousel-react"
:
"^8.1.5"
,
"lucide-react"
:
"^0.383.0"
,
"next"
:
"14.2.3"
,
"next-themes"
:
"^0.3.0"
,
"react"
:
"^18"
,
"react-day-picker"
:
"^8.10.1"
,
"react-dom"
:
"^18"
,
"react-hook-form"
:
"^7.52.
0
"
,
"react-hook-form"
:
"^7.52.
2
"
,
"tailwind-merge"
:
"^2.3.0"
,
"tailwindcss-animate"
:
"^1.0.7"
"tailwindcss-animate"
:
"^1.0.7"
,
"zod"
:
"^3.23.8"
},
"devDependencies"
:
{
"@rocketseat/eslint-config"
:
"^2.2.2"
,
...
...
@@ -530,6 +535,14 @@
"resolved"
:
"https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.3.tgz"
,
"integrity"
:
"sha512-XGndio0l5/Gvd6CLIABvsav9HHezgDFFhDfHk1bvLfr9ni8dojqLSvBbotJEjmIwNHL7vK4QzBJTdBRoB+c1ww=="
},
"node_modules/@hookform/resolvers"
:
{
"version"
:
"3.9.0"
,
"resolved"
:
"https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.0.tgz"
,
"integrity"
:
"sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg=="
,
"peerDependencies"
:
{
"react-hook-form"
:
"^7.0.0"
}
},
"node_modules/@humanwhocodes/config-array"
:
{
"version"
:
"0.11.14"
,
"resolved"
:
"https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz"
,
...
...
@@ -1173,23 +1186,6 @@
}
}
},
"node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-use-callback-ref"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz"
,
...
...
@@ -1257,20 +1253,6 @@
}
}
},
"node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-compose-refs"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz"
,
"integrity"
:
"sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw=="
,
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-primitive"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz"
,
...
...
@@ -1293,23 +1275,6 @@
}
}
},
"node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-checkbox"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.1.tgz"
,
...
...
@@ -1417,23 +1382,6 @@
}
}
},
"node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-callback-ref"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz"
,
...
...
@@ -1603,23 +1551,6 @@
}
}
},
"node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-callback-ref"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz"
,
...
...
@@ -1740,23 +1671,6 @@
}
}
},
"node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-compose-refs"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz"
,
...
...
@@ -1827,6 +1741,24 @@
}
}
},
"node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz"
,
"integrity"
:
"sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg=="
,
"dependencies"
:
{
"@babel/runtime"
:
"^7.13.10"
,
"@radix-ui/react-compose-refs"
:
"1.0.1"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-direction"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz"
,
...
...
@@ -1950,7 +1882,70 @@
}
}
},
"node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-compose-refs"
:
{
"node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz"
,
"integrity"
:
"sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw=="
,
"dependencies"
:
{
"@radix-ui/react-slot"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"@types/react-dom"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
,
"react-dom"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
},
"@types/react-dom"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.1.tgz"
,
"integrity"
:
"sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g=="
,
"dependencies"
:
{
"@radix-ui/primitive"
:
"1.1.0"
,
"@radix-ui/react-compose-refs"
:
"1.1.0"
,
"@radix-ui/react-context"
:
"1.1.0"
,
"@radix-ui/react-dismissable-layer"
:
"1.1.0"
,
"@radix-ui/react-focus-guards"
:
"1.1.0"
,
"@radix-ui/react-focus-scope"
:
"1.1.0"
,
"@radix-ui/react-id"
:
"1.1.0"
,
"@radix-ui/react-popper"
:
"1.2.0"
,
"@radix-ui/react-portal"
:
"1.1.1"
,
"@radix-ui/react-presence"
:
"1.1.0"
,
"@radix-ui/react-primitive"
:
"2.0.0"
,
"@radix-ui/react-slot"
:
"1.1.0"
,
"@radix-ui/react-use-controllable-state"
:
"1.1.0"
,
"aria-hidden"
:
"^1.1.1"
,
"react-remove-scroll"
:
"2.5.7"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"@types/react-dom"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
,
"react-dom"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
},
"@types/react-dom"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/primitive"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz"
,
"integrity"
:
"sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA=="
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-compose-refs"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz"
,
"integrity"
:
"sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw=="
,
...
...
@@ -1964,7 +1959,148 @@
}
}
},
"node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive"
:
{
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-context"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz"
,
"integrity"
:
"sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A=="
,
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-dismissable-layer"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz"
,
"integrity"
:
"sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig=="
,
"dependencies"
:
{
"@radix-ui/primitive"
:
"1.1.0"
,
"@radix-ui/react-compose-refs"
:
"1.1.0"
,
"@radix-ui/react-primitive"
:
"2.0.0"
,
"@radix-ui/react-use-callback-ref"
:
"1.1.0"
,
"@radix-ui/react-use-escape-keydown"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"@types/react-dom"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
,
"react-dom"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
},
"@types/react-dom"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-focus-guards"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz"
,
"integrity"
:
"sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw=="
,
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-focus-scope"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz"
,
"integrity"
:
"sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
,
"@radix-ui/react-primitive"
:
"2.0.0"
,
"@radix-ui/react-use-callback-ref"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"@types/react-dom"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
,
"react-dom"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
},
"@types/react-dom"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-id"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz"
,
"integrity"
:
"sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA=="
,
"dependencies"
:
{
"@radix-ui/react-use-layout-effect"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-portal"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz"
,
"integrity"
:
"sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g=="
,
"dependencies"
:
{
"@radix-ui/react-primitive"
:
"2.0.0"
,
"@radix-ui/react-use-layout-effect"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"@types/react-dom"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
,
"react-dom"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
},
"@types/react-dom"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-presence"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz"
,
"integrity"
:
"sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
,
"@radix-ui/react-use-layout-effect"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"@types/react-dom"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
,
"react-dom"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
},
"@types/react-dom"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-primitive"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz"
,
"integrity"
:
"sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw=="
,
...
...
@@ -1986,12 +2122,43 @@
}
}
},
"node_modules/@radix-ui/react-
label/node_modules/@radix-ui/react-slot
"
:
{
"node_modules/@radix-ui/react-
popover/node_modules/@radix-ui/react-use-callback-ref
"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz"
,
"integrity"
:
"sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw=="
,
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-controllable-state"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz"
,
"integrity"
:
"sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
"@radix-ui/react-use-callback-ref"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-escape-keydown"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz"
,
"integrity"
:
"sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw=="
,
"dependencies"
:
{
"@radix-ui/react-use-callback-ref"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
...
...
@@ -2003,6 +2170,44 @@
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-layout-effect"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz"
,
"integrity"
:
"sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="
,
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popover/node_modules/react-remove-scroll"
:
{
"version"
:
"2.5.7"
,
"resolved"
:
"https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz"
,
"integrity"
:
"sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA=="
,
"dependencies"
:
{
"react-remove-scroll-bar"
:
"^2.3.4"
,
"react-style-singleton"
:
"^2.2.1"
,
"tslib"
:
"^2.1.0"
,
"use-callback-ref"
:
"^1.3.0"
,
"use-sidecar"
:
"^1.1.2"
},
"engines"
:
{
"node"
:
">=10"
},
"peerDependencies"
:
{
"@types/react"
:
"^16.8.0 || ^17.0.0 || ^18.0.0"
,
"react"
:
"^16.8.0 || ^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popper"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz"
,
...
...
@@ -2084,23 +2289,6 @@
}
}
},
"node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-use-callback-ref"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz"
,
...
...
@@ -2199,6 +2387,24 @@
}
}
},
"node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz"
,
"integrity"
:
"sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg=="
,
"dependencies"
:
{
"@babel/runtime"
:
"^7.13.10"
,
"@radix-ui/react-compose-refs"
:
"1.0.1"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-select"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.1.tgz"
,
...
...
@@ -2400,23 +2606,6 @@
}
}
},
"node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-callback-ref"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz"
,
...
...
@@ -2525,20 +2714,6 @@
}
}
},
"node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-compose-refs"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz"
,
"integrity"
:
"sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw=="
,
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz"
,
...
...
@@ -2561,7 +2736,7 @@
}
}
},
"node_modules/@radix-ui/react-s
eparator/node_modules/@radix-ui/react-s
lot"
:
{
"node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
...
...
@@ -2578,17 +2753,13 @@
}
}
},
"node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz"
,
"integrity"
:
"sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg=="
,
"dependencies"
:
{
"@babel/runtime"
:
"^7.13.10"
,
"@radix-ui/react-compose-refs"
:
"1.0.1"
},
"node_modules/@radix-ui/react-slot/node_modules/@radix-ui/react-compose-refs"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz"
,
"integrity"
:
"sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw=="
,
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0"
"react"
:
"^16.8 || ^17.0 || ^18.0
|| ^19.0 || ^19.0.0-rc
"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
...
...
@@ -2750,20 +2921,6 @@
}
}
},
"node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-compose-refs"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz"
,
"integrity"
:
"sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw=="
,
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz"
,
...
...
@@ -2786,23 +2943,6 @@
}
}
},
"node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz"
,
"integrity"
:
"sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw=="
,
"dependencies"
:
{
"@radix-ui/react-compose-refs"
:
"1.1.0"
},
"peerDependencies"
:
{
"@types/react"
:
"*"
,
"react"
:
"^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta"
:
{
"@types/react"
:
{
"optional"
:
true
}
}
},
"node_modules/@radix-ui/rect"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz"
,
...
...
@@ -3847,6 +3987,15 @@
"url"
:
"https://github.com/sponsors/ljharb"
}
},
"node_modules/date-fns"
:
{
"version"
:
"3.6.0"
,
"resolved"
:
"https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz"
,
"integrity"
:
"sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="
,
"funding"
:
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/kossnocorp"
}
},
"node_modules/debug"
:
{
"version"
:
"4.3.5"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-4.3.5.tgz"
,
...
...
@@ -6680,6 +6829,19 @@
"node"
:
">=0.10.0"
}
},
"node_modules/react-day-picker"
:
{
"version"
:
"8.10.1"
,
"resolved"
:
"https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz"
,
"integrity"
:
"sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA=="
,
"funding"
:
{
"type"
:
"individual"
,
"url"
:
"https://github.com/sponsors/gpbl"
},
"peerDependencies"
:
{
"date-fns"
:
"^2.28.0 || ^3.0.0"
,
"react"
:
"^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/react-dom"
:
{
"version"
:
"18.3.1"
,
"resolved"
:
"https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz"
,
...
...
@@ -6693,11 +6855,11 @@
}
},
"node_modules/react-hook-form"
:
{
"version"
:
"7.52.
0
"
,
"resolved"
:
"https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.52.
0
.tgz"
,
"integrity"
:
"sha512-
mJX506Xc6mirzLsmXUJyqlAI3Kj9Ph2RhplYhUVffeOQSnubK2uVqBFOBJmvKikvbFV91pxVXmDiR+QMF19x
6A=="
,
"version"
:
"7.52.
2
"
,
"resolved"
:
"https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.52.
2
.tgz"
,
"integrity"
:
"sha512-
pqfPEbERnxxiNMPd0bzmt1tuaPcVccywFDpyk2uV5xCIBphHV5T8SVnX9/o3kplPE1zzKt77+YIoq+EMwJp5
6A=="
,
"engines"
:
{
"node"
:
">=1
2.22
.0"
"node"
:
">=1
8.0
.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
...
...
@@ -7938,6 +8100,14 @@
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/zod"
:
{
"version"
:
"3.23.8"
,
"resolved"
:
"https://registry.npmjs.org/zod/-/zod-3.23.8.tgz"
,
"integrity"
:
"sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="
,
"funding"
:
{
"url"
:
"https://github.com/sponsors/colinhacks"
}
}
}
}
package.json
View file @
2061f4d3
...
...
@@ -11,26 +11,31 @@
"dependencies"
:
{
"
@emotion/react
"
:
"
^11.13.0
"
,
"
@emotion/styled
"
:
"
^11.13.0
"
,
"
@hookform/resolvers
"
:
"
^3.9.0
"
,
"
@mui/material
"
:
"
^5.16.4
"
,
"
@radix-ui/react-accordion
"
:
"
^1.2.0
"
,
"
@radix-ui/react-checkbox
"
:
"
^1.1.1
"
,
"
@radix-ui/react-dialog
"
:
"
^1.0.5
"
,
"
@radix-ui/react-label
"
:
"
^2.1.0
"
,
"
@radix-ui/react-popover
"
:
"
^1.1.1
"
,
"
@radix-ui/react-select
"
:
"
^2.1.1
"
,
"
@radix-ui/react-separator
"
:
"
^1.1.0
"
,
"
@radix-ui/react-slot
"
:
"
^1.
0.2
"
,
"
@radix-ui/react-slot
"
:
"
^1.
1.0
"
,
"
axios
"
:
"
^1.7.2
"
,
"
class-variance-authority
"
:
"
^0.7.0
"
,
"
clsx
"
:
"
^2.1.1
"
,
"
date-fns
"
:
"
^3.6.0
"
,
"
embla-carousel-react
"
:
"
^8.1.5
"
,
"
lucide-react
"
:
"
^0.383.0
"
,
"
next
"
:
"
14.2.3
"
,
"
next-themes
"
:
"
^0.3.0
"
,
"
react
"
:
"
^18
"
,
"
react-day-picker
"
:
"
^8.10.1
"
,
"
react-dom
"
:
"
^18
"
,
"
react-hook-form
"
:
"
^7.52.
0
"
,
"
react-hook-form
"
:
"
^7.52.
2
"
,
"
tailwind-merge
"
:
"
^2.3.0
"
,
"
tailwindcss-animate
"
:
"
^1.0.7
"
"
tailwindcss-animate
"
:
"
^1.0.7
"
,
"
zod
"
:
"
^3.23.8
"
},
"devDependencies"
:
{
"
@rocketseat/eslint-config
"
:
"
^2.2.2
"
,
...
...
src/app/admin/curso/page.tsx
0 → 100644
View file @
2061f4d3
'use client'
import
{
StyledInputs
}
from
'@/components/mui/styled-inputs'
import
{
Button
}
from
'@/components/ui/button'
import
{
Calendar
}
from
'@/components/ui/calendar'
import
{
Checkbox
}
from
'@/components/ui/checkbox'
import
{
Label
}
from
'@/components/ui/label'
import
{
Popover
,
PopoverContent
,
PopoverTrigger
,
}
from
'@/components/ui/popover'
import
{
Separator
}
from
'@/components/ui/separator'
import
{
cn
}
from
'@/lib/utils'
import
{
Autocomplete
,
TextField
}
from
'@mui/material'
import
{
format
}
from
'date-fns'
import
{
CalendarIcon
,
PlusIcon
,
Trash
}
from
'lucide-react'
import
{
useState
}
from
'react'
const
options
=
[
{
label
:
'The Godfather'
,
id
:
1
},
{
label
:
'Pulp Fiction'
,
id
:
2
},
]
export
default
function
Curso
()
{
const
[
date
,
setDate
]
=
useState
<
Date
>
()
return
(
<
section
className=
"container py-10"
>
<
form
>
<
div
className=
"flex items-center gap-6"
>
<
h1
className=
"text-green-700 text-3xl font-bold"
>
Criar curso
</
h1
>
<
Button
variant=
"third"
className=
"uppercase"
>
Salvar como rascunho
</
Button
>
<
Button
variant=
"secondary"
className=
"uppercase"
>
Salvar e publicar
</
Button
>
<
Button
variant=
"ghost"
className=
"uppercase flex items-center gap-2 text-orange-100 hover:text-orange-100"
>
<
span
>
Apagar curso
</
span
>
<
Trash
/>
</
Button
>
</
div
>
<
div
className=
"flex w-full mt-10"
>
<
div
className=
"flex-1 flex flex-col border-r border-gray-50 pr-6 space-y-4"
>
<
h6
className=
"text-xl text-purple-100"
>
Informações sobre o curso
</
h6
>
<
TextField
label=
"Nome do curso"
variant=
"standard"
type=
"text"
sx=
{
StyledInputs
(
'#26AAA7'
)
}
/>
<
Autocomplete
options=
{
options
}
sx=
{
StyledInputs
(
'#26AAA7'
)
}
renderInput=
{
(
params
)
=>
(
<
TextField
{
...
params
}
label=
"Área"
variant=
"standard"
/>
)
}
/>
<
TextField
label=
"Descrição do Curso"
variant=
"standard"
type=
"text"
multiline
rows=
{
4
}
sx=
{
StyledInputs
(
'#26AAA7'
)
}
/>
<
TextField
label=
"Nome dos(as) Professores(as):"
variant=
"standard"
type=
"text"
sx=
{
StyledInputs
(
'#26AAA7'
)
}
/>
<
div
className=
"flex justify-between flex-wrap gap-6"
>
<
div
className=
"flex flex-col flex-1 mt-6"
>
<
h6
className=
"text-xl text-purple-100"
>
Banner Desktop
</
h6
>
<
span
className=
"mt-4"
>
Dimensões recomendadas:
</
span
>
<
span
>
Formatos aceitos: .png, .jpg
</
span
>
<
Button
variant=
"third"
className=
"border border-dotted border-green-400 rounded-sm mt-6 mx-auto md:w-[436px]"
>
Adicionar banner
</
Button
>
</
div
>
<
div
className=
"flex flex-col flex-1 mt-6"
>
<
h6
className=
"text-xl text-purple-100"
>
Banner Desktop
</
h6
>
<
span
className=
"mt-4"
>
Dimensões recomendadas:
</
span
>
<
span
>
Formatos aceitos: .png, .jpg
</
span
>
<
Button
variant=
"third"
className=
"border border-dotted border-green-400 rounded-sm mt-6 mx-auto md:w-[436px]"
>
Adicionar banner
</
Button
>
</
div
>
</
div
>
<
Separator
className=
"!mt-10 !mb-4"
/>
<
h6
className=
"text-xl text-purple-100 mb-4"
>
Datas
</
h6
>
<
div
className=
"flex flex-col space-y-6"
>
<
div
className=
"flex justify-between items-center"
>
<
div
className=
"flex items-center gap-2"
>
<
Checkbox
id=
"start"
/>
<
label
htmlFor=
"start"
className=
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Definir data de início
</
label
>
</
div
>
<
div
className=
"flex flex-col"
>
<
Label
>
Data de início
</
Label
>
<
Popover
>
<
PopoverTrigger
asChild
>
<
Button
variant=
{
'ghost'
}
className=
{
cn
(
'w-[450px] justify-start text-left font-normal border-b rounded-none pl-0'
,
!
date
&&
'text-muted-foreground'
,
)
}
>
{
date
?
(
format
(
date
,
'dd/MM/yyyy'
)
)
:
(
<
span
className=
"text-gray-600"
>
MM/DD/YYYY
</
span
>
)
}
<
CalendarIcon
className=
"ml-auto h-4 w-4 text-green-400"
/>
</
Button
>
</
PopoverTrigger
>
<
PopoverContent
className=
"w-auto p-0"
>
<
Calendar
mode=
"single"
selected=
{
date
}
onSelect=
{
setDate
}
initialFocus
/>
</
PopoverContent
>
</
Popover
>
</
div
>
</
div
>
<
div
className=
"flex justify-between items-center"
>
<
div
className=
"flex items-center gap-2"
>
<
Checkbox
id=
"closure"
/>
<
label
htmlFor=
"closure"
className=
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Definir data de encerramento
</
label
>
</
div
>
<
div
className=
"flex flex-col"
>
<
Label
>
Data de encerramento
</
Label
>
<
Popover
>
<
PopoverTrigger
asChild
>
<
Button
variant=
{
'ghost'
}
className=
{
cn
(
'w-[450px] justify-start text-left font-normal border-b rounded-none pl-0'
,
!
date
&&
'text-muted-foreground'
,
)
}
>
{
date
?
(
format
(
date
,
'dd/MM/yyyy'
)
)
:
(
<
span
className=
"text-gray-600"
>
MM/DD/YYYY
</
span
>
)
}
<
CalendarIcon
className=
"ml-auto h-4 w-4 text-green-400"
/>
</
Button
>
</
PopoverTrigger
>
<
PopoverContent
className=
"w-auto p-0"
>
<
Calendar
mode=
"single"
selected=
{
date
}
onSelect=
{
setDate
}
initialFocus
/>
</
PopoverContent
>
</
Popover
>
</
div
>
</
div
>
</
div
>
<
Separator
className=
"!mt-10 !mb-4"
/>
<
h6
className=
"text-xl text-purple-100 mb-4"
>
Módulos
</
h6
>
<
div
className=
"flex flex-col p-4 gap-6 border border-green-900"
>
<
TextField
label=
"Título"
variant=
"standard"
type=
"text"
sx=
{
StyledInputs
(
'#26AAA7'
)
}
/>
<
TextField
label=
"Descrição"
variant=
"standard"
type=
"text"
multiline
rows=
{
4
}
sx=
{
StyledInputs
(
'#26AAA7'
)
}
/>
</
div
>
<
Button
variant=
"third"
className=
"uppercase w-52 flex items-center gap-2 !mt-8"
>
<
PlusIcon
size=
{
20
}
/>
<
span
>
Adicionar Módulo
</
span
>
</
Button
>
</
div
>
<
div
className=
"w-[380px] pl-6 flex flex-col gap-4"
>
<
h6
className=
"text-xl text-purple-100 mb-4"
>
Qual o público alvo?
</
h6
>
<
div
className=
"flex items-center gap-2 ml-4"
>
<
Checkbox
id=
"terms"
/>
<
label
htmlFor=
"terms"
className=
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Estudante
</
label
>
</
div
>
<
div
className=
"flex items-center gap-2 ml-4"
>
<
Checkbox
id=
"terms"
/>
<
label
htmlFor=
"terms"
className=
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Profissionais
</
label
>
</
div
>
<
div
className=
"flex items-center gap-2 ml-4"
>
<
Checkbox
id=
"terms"
/>
<
label
htmlFor=
"terms"
className=
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Empresas
</
label
>
</
div
>
<
h6
className=
"text-xl text-purple-100 my-4"
>
Qual o tipo de curso?
</
h6
>
<
div
className=
"flex items-center gap-2 ml-4"
>
<
Checkbox
id=
"terms"
/>
<
label
htmlFor=
"terms"
className=
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Curso rápido
</
label
>
</
div
>
<
div
className=
"flex items-center gap-2 ml-4"
>
<
Checkbox
id=
"terms"
/>
<
label
htmlFor=
"terms"
className=
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Curso de aprofundamento
</
label
>
</
div
>
<
div
className=
"flex items-center gap-2 ml-4"
>
<
Checkbox
id=
"terms"
/>
<
label
htmlFor=
"terms"
className=
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Curso Corporativo
</
label
>
</
div
>
</
div
>
</
div
>
</
form
>
</
section
>
)
}
src/app/login/page.tsx
View file @
2061f4d3
...
...
@@ -25,8 +25,18 @@ export default function Login() {
>
<
div
className=
"flex flex-col space-y-6"
>
<
div
className=
"flex flex-col space-y-4"
>
<
InputMui
label=
"E-mail"
variant=
"outlined"
type=
"email"
/>
<
InputMui
label=
"Senha"
variant=
"outlined"
type=
"password"
/>
<
InputMui
label=
"E-mail"
variant=
"outlined"
type=
"email"
color=
"white"
/>
<
InputMui
label=
"Senha"
variant=
"outlined"
type=
"password"
color=
"white"
/>
</
div
>
<
div
className=
"flex items-center space-x-2"
>
<
Checkbox
id=
"remember"
/>
...
...
src/components/header.tsx
View file @
2061f4d3
...
...
@@ -16,7 +16,7 @@ export function Header() {
<
header
className=
"w-full md:px-6 py-5"
>
<
div
className=
"container mx-auto flex justify-between gap-4"
>
<
Link
href=
"/"
>
<
LogoComponent
width=
{
115
}
height=
{
32
}
className=
"fill-primary"
/>
<
LogoComponent
width=
{
230
}
height=
{
64
}
className=
"fill-primary"
/>
</
Link
>
<
div
className=
"flex items-center flex-1 lg:flex-none"
>
<
div
className=
"hidden lg:block"
>
...
...
src/components/mui/inputs.tsx
View file @
2061f4d3
...
...
@@ -4,9 +4,10 @@ type InputMuiProps = {
label
:
string
variant
:
'standard'
|
'filled'
|
'outlined'
type
:
string
color
:
string
}
export
function
InputMui
({
label
,
variant
,
type
}:
InputMuiProps
)
{
export
function
InputMui
({
label
,
variant
,
type
,
color
}:
InputMuiProps
)
{
return
(
<
TextField
label=
{
label
}
...
...
@@ -15,24 +16,45 @@ export function InputMui({ label, variant, type }: InputMuiProps) {
sx=
{
{
'& .MuiOutlinedInput-root'
:
{
'& fieldset'
:
{
borderColor
:
'white'
,
// Inicialmente transparente
borderColor
:
color
,
// Inicialmente transparente
},
'&:hover fieldset'
:
{
borderColor
:
'white'
,
// Mantém transparente ao passar o mouse
borderColor
:
color
,
// Mantém transparente ao passar o mouse
},
'&.Mui-focused fieldset'
:
{
borderColor
:
'white'
,
// Mantém transparente ao focar
borderColor
:
color
,
// Mantém transparente ao focar
},
},
'& label.Mui-focused'
:
{
color
:
'#B7B7B7'
,
color
,
},
'& label'
:
{
color
:
'white'
,
color
,
},
'& input'
:
{
color
,
},
'& .MuiInputBase-input'
:
{
color
:
'white'
,
},
'& .MuiInput-underline:before'
:
{
borderBottomColor
:
color
,
},
'& .MuiInput-underline:hover:before'
:
{
borderBottomColor
:
`${color} !important`
,
},
'& .MuiInput-underline:after'
:
{
borderBottomColor
:
color
,
},
'& .MuiFilledInput-underline:before'
:
{
borderBottomColor
:
color
,
},
'& .MuiFilledInput-underline:hover:before'
:
{
borderBottomColor
:
`${color} !important`
,
},
'& .MuiFilledInput-underline:after'
:
{
borderBottomColor
:
color
,
},
}
}
/>
)
...
...
src/components/mui/selects.tsx
0 → 100644
View file @
2061f4d3
import
{
Autocomplete
,
TextField
}
from
'@mui/material'
type
SelectMuiProps
=
{
label
:
string
variant
?:
'standard'
|
'filled'
|
'outlined'
color
:
string
}
const
options
=
[
{
label
:
'The Godfather'
,
id
:
1
},
{
label
:
'Pulp Fiction'
,
id
:
2
},
]
export
function
SelectMui
({
label
,
color
}:
SelectMuiProps
)
{
return
(
<
Autocomplete
options=
{
options
}
sx=
{
{
'& .MuiOutlinedInput-root'
:
{
'& fieldset'
:
{
borderColor
:
color
,
// Inicialmente transparente
},
'&:hover fieldset'
:
{
borderColor
:
color
,
// Mantém transparente ao passar o mouse
},
'&.Mui-focused fieldset'
:
{
borderColor
:
color
,
// Mantém transparente ao focar
},
},
'& label.Mui-focused'
:
{
color
,
},
'& label'
:
{
color
,
},
'& input'
:
{
color
,
},
'& .MuiInputBase-input'
:
{
color
:
'white'
,
},
'& .MuiInput-underline:before'
:
{
borderBottomColor
:
color
,
},
'& .MuiInput-underline:hover:before'
:
{
borderBottomColor
:
`${color} !important`
,
},
'& .MuiInput-underline:after'
:
{
borderBottomColor
:
color
,
},
'& .MuiFilledInput-underline:before'
:
{
borderBottomColor
:
color
,
},
'& .MuiFilledInput-underline:hover:before'
:
{
borderBottomColor
:
`${color} !important`
,
},
'& .MuiFilledInput-underline:after'
:
{
borderBottomColor
:
color
,
},
}
}
renderInput=
{
(
params
)
=>
(
<
TextField
{
...
params
}
label=
{
label
}
variant=
"standard"
/>
)
}
/>
)
}
src/components/mui/styled-inputs.ts
0 → 100644
View file @
2061f4d3
export
function
StyledInputs
(
color
:
string
)
{
return
{
'& .MuiOutlinedInput-root'
:
{
'& fieldset'
:
{
borderColor
:
color
,
// Inicialmente transparente
},
'&:hover fieldset'
:
{
borderColor
:
color
,
// Mantém transparente ao passar o mouse
},
'&.Mui-focused fieldset'
:
{
borderColor
:
color
,
// Mantém transparente ao focar
},
},
'& label.Mui-focused'
:
{
color
,
},
'& label'
:
{
color
,
},
'& input'
:
{
color
,
},
'& .MuiInputBase-input'
:
{
color
:
'white'
,
},
'& .MuiInput-underline:before'
:
{
borderBottomColor
:
color
,
},
'& .MuiInput-underline:hover:before'
:
{
borderBottomColor
:
`
${
color
}
!important`
,
},
'& .MuiInput-underline:after'
:
{
borderBottomColor
:
color
,
},
'& .MuiFilledInput-underline:before'
:
{
borderBottomColor
:
color
,
},
'& .MuiFilledInput-underline:hover:before'
:
{
borderBottomColor
:
`
${
color
}
!important`
,
},
'& .MuiFilledInput-underline:after'
:
{
borderBottomColor
:
color
,
},
}
}
src/components/ui/calendar.tsx
0 → 100644
View file @
2061f4d3
"use client"
import
*
as
React
from
"react"
import
{
ChevronLeft
,
ChevronRight
}
from
"lucide-react"
import
{
DayPicker
}
from
"react-day-picker"
import
{
cn
}
from
"@/lib/utils"
import
{
buttonVariants
}
from
"@/components/ui/button"
export
type
CalendarProps
=
React
.
ComponentProps
<
typeof
DayPicker
>
function
Calendar
({
className
,
classNames
,
showOutsideDays
=
true
,
...
props
}:
CalendarProps
)
{
return
(
<
DayPicker
showOutsideDays=
{
showOutsideDays
}
className=
{
cn
(
"p-3"
,
className
)
}
classNames=
{
{
months
:
"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0"
,
month
:
"space-y-4"
,
caption
:
"flex justify-center pt-1 relative items-center"
,
caption_label
:
"text-sm font-medium"
,
nav
:
"space-x-1 flex items-center"
,
nav_button
:
cn
(
buttonVariants
({
variant
:
"outline"
}),
"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
),
nav_button_previous
:
"absolute left-1"
,
nav_button_next
:
"absolute right-1"
,
table
:
"w-full border-collapse space-y-1"
,
head_row
:
"flex"
,
head_cell
:
"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]"
,
row
:
"flex w-full mt-2"
,
cell
:
"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20"
,
day
:
cn
(
buttonVariants
({
variant
:
"ghost"
}),
"h-9 w-9 p-0 font-normal aria-selected:opacity-100"
),
day_range_end
:
"day-range-end"
,
day_selected
:
"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground"
,
day_today
:
"bg-accent text-accent-foreground"
,
day_outside
:
"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30"
,
day_disabled
:
"text-muted-foreground opacity-50"
,
day_range_middle
:
"aria-selected:bg-accent aria-selected:text-accent-foreground"
,
day_hidden
:
"invisible"
,
...
classNames
,
}
}
components=
{
{
IconLeft
:
({
...
props
})
=>
<
ChevronLeft
className=
"h-4 w-4"
/>,
IconRight
:
({
...
props
})
=>
<
ChevronRight
className=
"h-4 w-4"
/>,
}
}
{
...
props
}
/>
)
}
Calendar
.
displayName
=
"Calendar"
export
{
Calendar
}
src/components/ui/form.tsx
0 → 100644
View file @
2061f4d3
"use client"
import
*
as
React
from
"react"
import
*
as
LabelPrimitive
from
"@radix-ui/react-label"
import
{
Slot
}
from
"@radix-ui/react-slot"
import
{
Controller
,
ControllerProps
,
FieldPath
,
FieldValues
,
FormProvider
,
useFormContext
,
}
from
"react-hook-form"
import
{
cn
}
from
"@/lib/utils"
import
{
Label
}
from
"@/components/ui/label"
const
Form
=
FormProvider
type
FormFieldContextValue
<
TFieldValues
extends
FieldValues
=
FieldValues
,
TName
extends
FieldPath
<
TFieldValues
>
=
FieldPath
<
TFieldValues
>
>
=
{
name
:
TName
}
const
FormFieldContext
=
React
.
createContext
<
FormFieldContextValue
>
(
{}
as
FormFieldContextValue
)
const
FormField
=
<
TFieldValues
extends
FieldValues
=
FieldValues
,
TName
extends
FieldPath
<
TFieldValues
>
= FieldPath
<
TFieldValues
>
>
(
{
...
props
}
: ControllerProps
<
TFieldValues
,
TName
>
) =
>
{
return
(
<
FormFieldContext
.
Provider
value=
{
{
name
:
props
.
name
}
}
>
<
Controller
{
...
props
}
/>
</
FormFieldContext
.
Provider
>
)
}
const useFormField = () =
>
{
const
fieldContext
=
React
.
useContext
(
FormFieldContext
)
const
itemContext
=
React
.
useContext
(
FormItemContext
)
const
{
getFieldState
,
formState
}
=
useFormContext
()
const
fieldState
=
getFieldState
(
fieldContext
.
name
,
formState
)
if
(
!
fieldContext
)
{
throw
new
Error
(
"useFormField should be used within <FormField>"
)
}
const
{
id
}
=
itemContext
return
{
id
,
name
:
fieldContext
.
name
,
formItemId
:
`${id}-form-item`
,
formDescriptionId
:
`${id}-form-item-description`
,
formMessageId
:
`${id}-form-item-message`
,
...
fieldState
,
}
}
type FormItemContextValue =
{
id
:
string
}
const FormItemContext = React.createContext
<
FormItemContextValue
>
(
{}
as FormItemContextValue
)
const FormItem = React.forwardRef
<
HTMLDivElement
,
React
.
HTMLAttributes
<
HTMLDivElement
>
>
((
{
className
,
...
props
}
, ref) =
>
{
const
id
=
React
.
useId
()
return
(
<
FormItemContext
.
Provider
value=
{
{
id
}
}
>
<
div
ref=
{
ref
}
className=
{
cn
(
"space-y-2"
,
className
)
}
{
...
props
}
/>
</
FormItemContext
.
Provider
>
)
}
)
FormItem.displayName = "FormItem"
const FormLabel = React.forwardRef
<
React
.
ElementRef
<
typeof
LabelPrimitive
.
Root
>
,
React.ComponentPropsWithoutRef
<
typeof
LabelPrimitive
.
Root
>
>
((
{
className
,
...
props
}
, ref) =
>
{
const
{
error
,
formItemId
}
=
useFormField
()
return
(
<
Label
ref=
{
ref
}
className=
{
cn
(
error
&&
"text-destructive"
,
className
)
}
htmlFor=
{
formItemId
}
{
...
props
}
/>
)
}
)
FormLabel.displayName = "FormLabel"
const FormControl = React.forwardRef
<
React
.
ElementRef
<
typeof
Slot
>
,
React.ComponentPropsWithoutRef
<
typeof
Slot
>
>
((
{
...
props
}
, ref) =
>
{
const
{
error
,
formItemId
,
formDescriptionId
,
formMessageId
}
=
useFormField
()
return
(
<
Slot
ref=
{
ref
}
id=
{
formItemId
}
aria
-
describedby=
{
!
error
?
`${formDescriptionId}`
:
`${formDescriptionId} ${formMessageId}`
}
aria
-
invalid=
{
!!
error
}
{
...
props
}
/>
)
}
)
FormControl.displayName = "FormControl"
const FormDescription = React.forwardRef
<
HTMLParagraphElement
,
React
.
HTMLAttributes
<
HTMLParagraphElement
>
>
((
{
className
,
...
props
}
, ref) =
>
{
const
{
formDescriptionId
}
=
useFormField
()
return
(
<
p
ref=
{
ref
}
id=
{
formDescriptionId
}
className=
{
cn
(
"text-sm text-muted-foreground"
,
className
)
}
{
...
props
}
/>
)
}
)
FormDescription.displayName = "FormDescription"
const FormMessage = React.forwardRef
<
HTMLParagraphElement
,
React
.
HTMLAttributes
<
HTMLParagraphElement
>
>
((
{
className
,
children
,
...
props
}
, ref) =
>
{
const
{
error
,
formMessageId
}
=
useFormField
()
const
body
=
error
?
String
(
error
?.
message
)
:
children
if
(
!
body
)
{
return
null
}
return
(
<
p
ref=
{
ref
}
id=
{
formMessageId
}
className=
{
cn
(
"text-sm font-medium text-destructive"
,
className
)
}
{
...
props
}
>
{
body
}
</
p
>
)
}
)
FormMessage.displayName = "FormMessage"
export
{
useFormField
,
Form
,
FormItem
,
FormLabel
,
FormControl
,
FormDescription
,
FormMessage
,
FormField
,
}
src/components/ui/popover.tsx
0 → 100644
View file @
2061f4d3
"use client"
import
*
as
React
from
"react"
import
*
as
PopoverPrimitive
from
"@radix-ui/react-popover"
import
{
cn
}
from
"@/lib/utils"
const
Popover
=
PopoverPrimitive
.
Root
const
PopoverTrigger
=
PopoverPrimitive
.
Trigger
const
PopoverContent
=
React
.
forwardRef
<
React
.
ElementRef
<
typeof
PopoverPrimitive
.
Content
>
,
React
.
ComponentPropsWithoutRef
<
typeof
PopoverPrimitive
.
Content
>
>
(({
className
,
align
=
"center"
,
sideOffset
=
4
,
...
props
},
ref
)
=>
(
<
PopoverPrimitive
.
Portal
>
<
PopoverPrimitive
.
Content
ref=
{
ref
}
align=
{
align
}
sideOffset=
{
sideOffset
}
className=
{
cn
(
"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"
,
className
)
}
{
...
props
}
/>
</
PopoverPrimitive
.
Portal
>
))
PopoverContent
.
displayName
=
PopoverPrimitive
.
Content
.
displayName
export
{
Popover
,
PopoverTrigger
,
PopoverContent
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment