diff --git a/app/routes/__auth/logout.tsx b/app/routes/__auth/logout.tsx index 9196e23..234d375 100644 --- a/app/routes/__auth/logout.tsx +++ b/app/routes/__auth/logout.tsx @@ -12,13 +12,11 @@ export const loader:LoaderFunction = async ({ request, context }) => { return {} } -const Logout = () => { +export const Logout = () => { return ( - <> -
- -
- +
+ +
) } diff --git a/app/routes/app.tsx b/app/routes/app.tsx new file mode 100644 index 0000000..352eab8 --- /dev/null +++ b/app/routes/app.tsx @@ -0,0 +1,63 @@ +import type { LoaderFunction } from "@remix-run/cloudflare"; +import { Form, Link, Outlet } from "@remix-run/react"; +import { Typography } from "@supabase/ui"; +import { Users } from "react-feather"; +import { getSession } from "~/auth.server"; +import Logout from "./__auth/logout"; + +export const loader: LoaderFunction = async ({ request, context }) => { + await getSession(context, request); + return {}; +}; + +const Sidebar = () => { + return ( +
+
+

+ + reconfigured + +

+
+ +
+
+
+ ); +}; + +export default function App() { + return ( + <> +
+ +
+ {/*
*/} + + {/*
*/} +
+
+ + ); +} diff --git a/app/routes/app/index.tsx b/app/routes/app/index.tsx new file mode 100644 index 0000000..9b9bb84 --- /dev/null +++ b/app/routes/app/index.tsx @@ -0,0 +1,16 @@ +import type { LoaderFunction } from "@remix-run/cloudflare"; +import Title from "@supabase/ui/dist/cjs/components/Typography/Title"; +import { getSession } from "~/auth.server"; + +export const loader: LoaderFunction = async ({ request, context }) => { + await getSession(context, request) + return {} +} + +export default function App() { + return ( + <> + This is app + + ) +} \ No newline at end of file diff --git a/app/routes/app/teams.tsx b/app/routes/app/teams.tsx new file mode 100644 index 0000000..98f7c66 --- /dev/null +++ b/app/routes/app/teams.tsx @@ -0,0 +1,40 @@ +import type { ActionFunction, LoaderFunction } from "@remix-run/cloudflare"; +import { Form, useTransition } from "@remix-run/react"; +import { Button, Input } from "@supabase/ui"; +import Title from "@supabase/ui/dist/cjs/components/Typography/Title"; +import { getSession, getSupabase } from "~/auth.server"; + +export const loader: LoaderFunction = async ({ request, context }) => { + await getSession(context, request); + return {}; +}; + +export const action: ActionFunction = async ({ request, context }) => { + const session = await getSession(context, request); + const supabase = await getSupabase(context, session); + const formData = await request.formData(); + const { error } = await supabase + .rpc('create_group', { + group_name: (formData.get('name') as string) + }) + if (error) throw error; + return {}; +} + +export default function Teams() { + const { state } = useTransition() + return ( + <> + Teams +
+
+ + +
+ +
+ + ); +} diff --git a/app/routes/userprofile.tsx b/app/routes/app/userprofile.tsx similarity index 96% rename from app/routes/userprofile.tsx rename to app/routes/app/userprofile.tsx index c0e8a66..7367f0b 100644 --- a/app/routes/userprofile.tsx +++ b/app/routes/app/userprofile.tsx @@ -59,12 +59,12 @@ const Profile = () => { User Profile
-
+
{ await getSession(context, request); - return {}; + return redirect('/app'); }; const Index = () => { return ( <> hello - ); }; diff --git a/app/tailwind.css b/app/tailwind.css index 2209b4e..7bf58f7 100644 --- a/app/tailwind.css +++ b/app/tailwind.css @@ -16,7 +16,7 @@ /* 2 */ border-style: solid; /* 2 */ - border-color: #e5e7eb; + border-color: #E5E7EB; /* 2 */ } @@ -349,14 +349,14 @@ textarea { input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; /* 1 */ - color: #9ca3af; + color: #9CA3AF; /* 2 */ } input:-ms-input-placeholder, textarea:-ms-input-placeholder { opacity: 1; /* 1 */ - color: #9ca3af; + color: #9CA3AF; /* 2 */ } @@ -364,7 +364,7 @@ input::placeholder, textarea::placeholder { opacity: 1; /* 1 */ - color: #9ca3af; + color: #9CA3AF; /* 2 */ } @@ -452,7 +452,7 @@ body { --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-color: rgb(63 131 248 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; @@ -477,12 +477,166 @@ body { --tw-backdrop-sepia: ; } -.w-10 { - width: 2.5rem; +.m-8 { + margin: 2rem; } -.min-w-\[50\] { - min-width: 50; +.mt-6 { + margin-top: 1.5rem; +} + +.flex { + display: flex; +} + +.table { + display: table; +} + +.h-full { + height: 100%; +} + +.h-screen { + height: 100vh; +} + +.w-64 { + width: 16rem; +} + +.w-20 { + width: 5rem; +} + +.w-24 { + width: 6rem; +} + +.w-full { + width: 100%; +} + +.flex-col { + flex-direction: column; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.space-y-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); +} + +.overflow-y-auto { + overflow-y: auto; +} + +.rounded { + border-radius: 0.25rem; +} + +.rounded-md { + border-radius: 0.375rem; +} + +.border-4 { + border-width: 4px; +} + +.border-r { + border-right-width: 1px; +} + +.border-dotted { + border-style: dotted; +} + +.bg-gray-50 { + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity)); +} + +.bg-gray-100 { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity)); +} + +.p-4 { + padding: 1rem; +} + +.p-40 { + padding: 10rem; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.text-center { + text-align: center; +} + +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.font-semibold { + font-weight: 600; +} + +.text-blue-800 { + --tw-text-opacity: 1; + color: rgb(30 66 159 / var(--tw-text-opacity)); +} + +.text-gray-700 { + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity)); +} + +.text-red-500 { + --tw-text-opacity: 1; + color: rgb(240 82 82 / var(--tw-text-opacity)); } .auth-container { @@ -542,4 +696,9 @@ body { padding: 0.625rem; font-size: 0.875rem; line-height: 1.25rem; +} + +.dark .dark\:bg-gray-800 { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity)); } \ No newline at end of file diff --git a/app/types/supabase.ts b/app/types/supabase.ts index 9eeae78..d86f670 100644 --- a/app/types/supabase.ts +++ b/app/types/supabase.ts @@ -12,6 +12,201 @@ export interface paths { }; }; }; + "/group_members": { + get: { + parameters: { + query: { + id?: parameters["rowFilter.group_members.id"]; + created_at?: parameters["rowFilter.group_members.created_at"]; + user_id?: parameters["rowFilter.group_members.user_id"]; + group_id?: parameters["rowFilter.group_members.group_id"]; + roles?: parameters["rowFilter.group_members.roles"]; + deleted?: parameters["rowFilter.group_members.deleted"]; + /** Filtering Columns */ + select?: parameters["select"]; + /** Ordering */ + order?: parameters["order"]; + /** Limiting and Pagination */ + offset?: parameters["offset"]; + /** Limiting and Pagination */ + limit?: parameters["limit"]; + }; + header: { + /** Limiting and Pagination */ + Range?: parameters["range"]; + /** Limiting and Pagination */ + "Range-Unit"?: parameters["rangeUnit"]; + /** Preference */ + Prefer?: parameters["preferCount"]; + }; + }; + responses: { + /** OK */ + 200: { + schema: definitions["group_members"][]; + }; + /** Partial Content */ + 206: unknown; + }; + }; + post: { + parameters: { + body: { + /** group_members */ + group_members?: definitions["group_members"]; + }; + query: { + /** Filtering Columns */ + select?: parameters["select"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** Created */ + 201: unknown; + }; + }; + delete: { + parameters: { + query: { + id?: parameters["rowFilter.group_members.id"]; + created_at?: parameters["rowFilter.group_members.created_at"]; + user_id?: parameters["rowFilter.group_members.user_id"]; + group_id?: parameters["rowFilter.group_members.group_id"]; + roles?: parameters["rowFilter.group_members.roles"]; + deleted?: parameters["rowFilter.group_members.deleted"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** No Content */ + 204: never; + }; + }; + patch: { + parameters: { + query: { + id?: parameters["rowFilter.group_members.id"]; + created_at?: parameters["rowFilter.group_members.created_at"]; + user_id?: parameters["rowFilter.group_members.user_id"]; + group_id?: parameters["rowFilter.group_members.group_id"]; + roles?: parameters["rowFilter.group_members.roles"]; + deleted?: parameters["rowFilter.group_members.deleted"]; + }; + body: { + /** group_members */ + group_members?: definitions["group_members"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** No Content */ + 204: never; + }; + }; + }; + "/groups": { + get: { + parameters: { + query: { + id?: parameters["rowFilter.groups.id"]; + created_at?: parameters["rowFilter.groups.created_at"]; + name?: parameters["rowFilter.groups.name"]; + /** Filtering Columns */ + select?: parameters["select"]; + /** Ordering */ + order?: parameters["order"]; + /** Limiting and Pagination */ + offset?: parameters["offset"]; + /** Limiting and Pagination */ + limit?: parameters["limit"]; + }; + header: { + /** Limiting and Pagination */ + Range?: parameters["range"]; + /** Limiting and Pagination */ + "Range-Unit"?: parameters["rangeUnit"]; + /** Preference */ + Prefer?: parameters["preferCount"]; + }; + }; + responses: { + /** OK */ + 200: { + schema: definitions["groups"][]; + }; + /** Partial Content */ + 206: unknown; + }; + }; + post: { + parameters: { + body: { + /** groups */ + groups?: definitions["groups"]; + }; + query: { + /** Filtering Columns */ + select?: parameters["select"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** Created */ + 201: unknown; + }; + }; + delete: { + parameters: { + query: { + id?: parameters["rowFilter.groups.id"]; + created_at?: parameters["rowFilter.groups.created_at"]; + name?: parameters["rowFilter.groups.name"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** No Content */ + 204: never; + }; + }; + patch: { + parameters: { + query: { + id?: parameters["rowFilter.groups.id"]; + created_at?: parameters["rowFilter.groups.created_at"]; + name?: parameters["rowFilter.groups.name"]; + }; + body: { + /** groups */ + groups?: definitions["groups"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** No Content */ + 204: never; + }; + }; + }; "/users": { get: { parameters: { @@ -111,9 +306,76 @@ export interface paths { }; }; }; + "/rpc/create_group": { + post: { + parameters: { + body: { + args: { + /** Format: text */ + group_name: string; + }; + }; + header: { + /** Preference */ + Prefer?: parameters["preferParams"]; + }; + }; + responses: { + /** OK */ + 200: unknown; + }; + }; + }; } export interface definitions { + group_members: { + /** + * Format: uuid + * @description Note: + * This is a Primary Key. + * @default extensions.uuid_generate_v4() + */ + id: string; + /** + * Format: timestamp with time zone + * @default now() + */ + created_at: string; + /** + * Format: uuid + * @description Note: + * This is a Foreign Key to `users.id`. + */ + user_id: string; + /** + * Format: uuid + * @description Note: + * This is a Foreign Key to `groups.id`. + */ + group_id: string; + /** Format: ARRAY */ + roles: unknown[]; + /** Format: timestamp with time zone */ + deleted?: string; + }; + /** @description This is teams and such, but in generic form */ + groups: { + /** + * Format: uuid + * @description Note: + * This is a Primary Key. + * @default extensions.uuid_generate_v4() + */ + id: string; + /** + * Format: timestamp with time zone + * @default now() + */ + created_at: string; + /** Format: text */ + name: string; + }; /** @description stores users */ users: { /** @@ -160,6 +422,28 @@ export interface parameters { offset: string; /** @description Limiting and Pagination */ limit: string; + /** @description group_members */ + "body.group_members": definitions["group_members"]; + /** Format: uuid */ + "rowFilter.group_members.id": string; + /** Format: timestamp with time zone */ + "rowFilter.group_members.created_at": string; + /** Format: uuid */ + "rowFilter.group_members.user_id": string; + /** Format: uuid */ + "rowFilter.group_members.group_id": string; + /** Format: ARRAY */ + "rowFilter.group_members.roles": string; + /** Format: timestamp with time zone */ + "rowFilter.group_members.deleted": string; + /** @description groups */ + "body.groups": definitions["groups"]; + /** Format: uuid */ + "rowFilter.groups.id": string; + /** Format: timestamp with time zone */ + "rowFilter.groups.created_at": string; + /** Format: text */ + "rowFilter.groups.name": string; /** @description users */ "body.users": definitions["users"]; /** Format: uuid */ diff --git a/package-lock.json b/package-lock.json index cabe94e..d36a696 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@supabase/supabase-js": "^1.34.1", "@supabase/ui": "^0.36.5", "cross-env": "^7.0.3", + "flowbite": "^1.4.4", "react": "^18.0.0", "react-dom": "^18.0.0", "react-feather": "^2.0.9", @@ -894,8 +895,7 @@ "node_modules/@cloudflare/workers-types": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.5.1.tgz", - "integrity": "sha512-3InFTahEqziyJ2DSRL29TmrukGvxsijxwOP+Jb1gdihEuRLhwwtY49hgpExGm21HBu6E6Qr/RxlPUp2+o+qoUg==", - "dev": true + "integrity": "sha512-3InFTahEqziyJ2DSRL29TmrukGvxsijxwOP+Jb1gdihEuRLhwwtY49hgpExGm21HBu6E6Qr/RxlPUp2+o+qoUg==" }, "node_modules/@esbuild-plugins/node-globals-polyfill": { "version": "0.1.1", @@ -1357,6 +1357,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@popperjs/core": { + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", + "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@remix-run/cloudflare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@remix-run/cloudflare/-/cloudflare-1.4.0.tgz", @@ -5966,6 +5975,15 @@ "node": ">=0.4.0" } }, + "node_modules/flowbite": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-1.4.4.tgz", + "integrity": "sha512-64MNLAYIC39nJhyfaPPWVFHIRAGYP+fW9vxQBJOT2SkaCAh1/s+FjON7sqT5agf9hEsSiNLPJo3th0oCrnTjkQ==", + "dependencies": { + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -8976,6 +8994,14 @@ "node": ">=4" } }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, "node_modules/miniflare": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-2.4.0.tgz", @@ -12794,7 +12820,6 @@ "version": "4.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14489,14 +14514,14 @@ "@cloudflare/workers-types": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-3.5.1.tgz", - "integrity": "sha512-3InFTahEqziyJ2DSRL29TmrukGvxsijxwOP+Jb1gdihEuRLhwwtY49hgpExGm21HBu6E6Qr/RxlPUp2+o+qoUg==", - "dev": true + "integrity": "sha512-3InFTahEqziyJ2DSRL29TmrukGvxsijxwOP+Jb1gdihEuRLhwwtY49hgpExGm21HBu6E6Qr/RxlPUp2+o+qoUg==" }, "@esbuild-plugins/node-globals-polyfill": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", - "dev": true + "dev": true, + "requires": {} }, "@esbuild-plugins/node-modules-polyfill": { "version": "0.1.4", @@ -14683,7 +14708,8 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -14781,7 +14807,8 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -14840,6 +14867,11 @@ "json-parse-even-better-errors": "^2.3.1" } }, + "@popperjs/core": { + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", + "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" + }, "@remix-run/cloudflare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@remix-run/cloudflare/-/cloudflare-1.4.0.tgz", @@ -15589,7 +15621,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-node": { "version": "1.8.2", @@ -15855,7 +15888,8 @@ "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true + "dev": true, + "requires": {} }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", @@ -17656,7 +17690,8 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz", "integrity": "sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-testing-library": { "version": "5.2.1", @@ -18300,6 +18335,15 @@ "integrity": "sha512-gYes5/nxeLYiu02MMb+WH4KaOIYrVcTVIuV9M4aP/4hqJ+zULxxS/In+WEj/tEBsQ+8/wSHo9IDWKQL1FhrLmA==", "dev": true }, + "flowbite": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-1.4.4.tgz", + "integrity": "sha512-64MNLAYIC39nJhyfaPPWVFHIRAGYP+fW9vxQBJOT2SkaCAh1/s+FjON7sqT5agf9hEsSiNLPJo3th0oCrnTjkQ==", + "requires": { + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -20465,6 +20509,11 @@ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, + "mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==" + }, "miniflare": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-2.4.0.tgz", @@ -21927,7 +21976,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/remix-esbuild-override/-/remix-esbuild-override-3.0.2.tgz", "integrity": "sha512-LmL1moauiNTVZheUOXos8QIlj+yNRyJVwpNAPtlF0BpmB1WWpvAiIYwdf7ewiJRnOKTFDqEExVtwB+4iUDN83Q==", - "dev": true + "dev": true, + "requires": {} }, "remix-utils": { "version": "2.11.1", @@ -22181,7 +22231,8 @@ "schema-dts": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.0.tgz", - "integrity": "sha512-vdmbs/5ycj4zyKpZIDqTcy+IZi4s7c38RVAYuDmRi7zgxUT8wRWPMLzg0jr7FjdVunYu9yZ00F3+XcZTTFcTOQ==" + "integrity": "sha512-vdmbs/5ycj4zyKpZIDqTcy+IZi4s7c38RVAYuDmRi7zgxUT8wRWPMLzg0jr7FjdVunYu9yZ00F3+XcZTTFcTOQ==", + "requires": {} }, "selfsigned": { "version": "2.0.1", @@ -23373,8 +23424,7 @@ "typescript": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", - "dev": true + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==" }, "unbox-primitive": { "version": "1.0.1", @@ -23991,7 +24041,8 @@ "version": "7.5.7", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "dev": true + "dev": true, + "requires": {} }, "xdm": { "version": "2.1.0", diff --git a/package.json b/package.json index 5c0b345..bed41f9 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@supabase/supabase-js": "^1.34.1", "@supabase/ui": "^0.36.5", "cross-env": "^7.0.3", + "flowbite": "^1.4.4", "react": "^18.0.0", "react-dom": "^18.0.0", "react-feather": "^2.0.9", diff --git a/tailwind.config.js b/tailwind.config.js index 6e82bc8..06080be 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -4,5 +4,5 @@ module.exports = { theme: { extend: {}, }, - plugins: [], + plugins: [] }