From 6e0d1fec13e672cc7e1c950ae4a00350a3eae927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Rafael=20Siqueira?= Date: Tue, 4 Nov 2025 13:45:02 -0300 Subject: [PATCH] add turborepo --- .gitignore | 5 + apps/id.saladeaula.digital/README.md | 3 + apps/id.saladeaula.digital/app/app.css | 134 + .../app/components/logo.svg | 7 + .../app/components/ui/button.tsx | 59 + .../app/components/ui/checkbox.tsx | 30 + .../app/components/ui/form.tsx | 167 + .../app/components/ui/input.tsx | 21 + .../app/components/ui/label.tsx | 22 + .../app/entry.server.tsx | 43 + apps/id.saladeaula.digital/app/lib/utils.ts | 6 + apps/id.saladeaula.digital/app/root.tsx | 63 + apps/id.saladeaula.digital/app/routes.ts | 17 + .../app/routes/authorize.ts | 69 + .../id.saladeaula.digital/app/routes/deny.tsx | 20 + .../app/routes/forgot.tsx | 111 + .../app/routes/index.tsx | 228 + .../app/routes/layout.tsx | 29 + .../app/routes/signup.tsx | 173 + .../app/routes/upstream.ts | 31 + apps/id.saladeaula.digital/components.json | 21 + apps/id.saladeaula.digital/package-lock.json | 5337 +++++++++++ apps/id.saladeaula.digital/package.json | 47 + apps/id.saladeaula.digital/public/favicon.svg | 8 + .../react-router.config.ts | 8 + .../tsconfig.cloudflare.json | 28 + apps/id.saladeaula.digital/tsconfig.json | 18 + apps/id.saladeaula.digital/tsconfig.node.json | 13 + apps/id.saladeaula.digital/vite.config.ts | 14 + .../worker-configuration.d.ts | 8374 +++++++++++++++++ apps/id.saladeaula.digital/workers/app.ts | 23 + apps/id.saladeaula.digital/wrangler.toml | 15 + apps/insights.saladeaula.digital/.gitignore | 15 + apps/insights.saladeaula.digital/README.md | 79 + apps/insights.saladeaula.digital/app/app.css | 15 + .../app/entry.server.tsx | 43 + apps/insights.saladeaula.digital/app/root.tsx | 75 + .../insights.saladeaula.digital/app/routes.ts | 3 + .../app/routes/home.tsx | 17 + .../app/welcome/logo-dark.svg | 23 + .../app/welcome/logo-light.svg | 23 + .../app/welcome/welcome.tsx | 90 + apps/insights.saladeaula.digital/package.json | 33 + .../public/favicon.ico | Bin 0 -> 15086 bytes .../react-router.config.ts | 8 + .../tsconfig.cloudflare.json | 28 + .../insights.saladeaula.digital/tsconfig.json | 18 + .../tsconfig.node.json | 13 + .../vite.config.ts | 14 + .../workers/app.ts | 23 + .../insights.saladeaula.digital/wrangler.toml | 16 + enrollments-events/app/app.py | 2 +- enrollments-events/app/config.py | 4 +- .../app/{docseal.py => docuseal.py} | 6 +- enrollments-events/app/events/ask_to_sign.py | 2 +- enrollments-events/template.yaml | 5 +- enrollments-events/tests/conftest.py | 2 +- .../{test_docseal.py => test_docuseal.py} | 4 +- id.saladeaula.digital/app/private.pem | 28 + id.saladeaula.digital/app/public.pem | 9 + .../tests/routes/test_userinfo.py | 23 + konviva-events/app/enrollment.py | 8 +- package-lock.json | 5553 +++++++++++ package.json | 24 + turbo.json | 19 + 65 files changed, 21351 insertions(+), 18 deletions(-) create mode 100644 apps/id.saladeaula.digital/README.md create mode 100644 apps/id.saladeaula.digital/app/app.css create mode 100644 apps/id.saladeaula.digital/app/components/logo.svg create mode 100644 apps/id.saladeaula.digital/app/components/ui/button.tsx create mode 100644 apps/id.saladeaula.digital/app/components/ui/checkbox.tsx create mode 100644 apps/id.saladeaula.digital/app/components/ui/form.tsx create mode 100644 apps/id.saladeaula.digital/app/components/ui/input.tsx create mode 100644 apps/id.saladeaula.digital/app/components/ui/label.tsx create mode 100644 apps/id.saladeaula.digital/app/entry.server.tsx create mode 100644 apps/id.saladeaula.digital/app/lib/utils.ts create mode 100644 apps/id.saladeaula.digital/app/root.tsx create mode 100644 apps/id.saladeaula.digital/app/routes.ts create mode 100644 apps/id.saladeaula.digital/app/routes/authorize.ts create mode 100644 apps/id.saladeaula.digital/app/routes/deny.tsx create mode 100644 apps/id.saladeaula.digital/app/routes/forgot.tsx create mode 100644 apps/id.saladeaula.digital/app/routes/index.tsx create mode 100644 apps/id.saladeaula.digital/app/routes/layout.tsx create mode 100644 apps/id.saladeaula.digital/app/routes/signup.tsx create mode 100644 apps/id.saladeaula.digital/app/routes/upstream.ts create mode 100644 apps/id.saladeaula.digital/components.json create mode 100644 apps/id.saladeaula.digital/package-lock.json create mode 100644 apps/id.saladeaula.digital/package.json create mode 100644 apps/id.saladeaula.digital/public/favicon.svg create mode 100644 apps/id.saladeaula.digital/react-router.config.ts create mode 100644 apps/id.saladeaula.digital/tsconfig.cloudflare.json create mode 100644 apps/id.saladeaula.digital/tsconfig.json create mode 100644 apps/id.saladeaula.digital/tsconfig.node.json create mode 100644 apps/id.saladeaula.digital/vite.config.ts create mode 100644 apps/id.saladeaula.digital/worker-configuration.d.ts create mode 100644 apps/id.saladeaula.digital/workers/app.ts create mode 100644 apps/id.saladeaula.digital/wrangler.toml create mode 100644 apps/insights.saladeaula.digital/.gitignore create mode 100644 apps/insights.saladeaula.digital/README.md create mode 100644 apps/insights.saladeaula.digital/app/app.css create mode 100644 apps/insights.saladeaula.digital/app/entry.server.tsx create mode 100644 apps/insights.saladeaula.digital/app/root.tsx create mode 100644 apps/insights.saladeaula.digital/app/routes.ts create mode 100644 apps/insights.saladeaula.digital/app/routes/home.tsx create mode 100644 apps/insights.saladeaula.digital/app/welcome/logo-dark.svg create mode 100644 apps/insights.saladeaula.digital/app/welcome/logo-light.svg create mode 100644 apps/insights.saladeaula.digital/app/welcome/welcome.tsx create mode 100644 apps/insights.saladeaula.digital/package.json create mode 100644 apps/insights.saladeaula.digital/public/favicon.ico create mode 100644 apps/insights.saladeaula.digital/react-router.config.ts create mode 100644 apps/insights.saladeaula.digital/tsconfig.cloudflare.json create mode 100644 apps/insights.saladeaula.digital/tsconfig.json create mode 100644 apps/insights.saladeaula.digital/tsconfig.node.json create mode 100644 apps/insights.saladeaula.digital/vite.config.ts create mode 100644 apps/insights.saladeaula.digital/workers/app.ts create mode 100644 apps/insights.saladeaula.digital/wrangler.toml rename enrollments-events/app/{docseal.py => docuseal.py} (87%) rename enrollments-events/tests/{test_docseal.py => test_docuseal.py} (91%) create mode 100644 id.saladeaula.digital/app/private.pem create mode 100644 id.saladeaula.digital/app/public.pem create mode 100644 id.saladeaula.digital/tests/routes/test_userinfo.py create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 turbo.json diff --git a/.gitignore b/.gitignore index 584543f..88408d5 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,8 @@ requirements.txt .elastic_volume/ .env node_modules/ +.turbo +.postgres_data +.react-router +.wrangler +build/ \ No newline at end of file diff --git a/apps/id.saladeaula.digital/README.md b/apps/id.saladeaula.digital/README.md new file mode 100644 index 0000000..87188eb --- /dev/null +++ b/apps/id.saladeaula.digital/README.md @@ -0,0 +1,3 @@ +# [id.saladeaula.digital](https://id.saladeaula.digital) + +O código-fonte para [id.saladeaula.digital](https://id.saladeaula.digital), construído com [React Router](https://github.com/remix-run/react-router). diff --git a/apps/id.saladeaula.digital/app/app.css b/apps/id.saladeaula.digital/app/app.css new file mode 100644 index 0000000..7fde78f --- /dev/null +++ b/apps/id.saladeaula.digital/app/app.css @@ -0,0 +1,134 @@ +@import 'tailwindcss' source('.'); +@import 'tw-animate-css'; + +@custom-variant dark (&:is(.dark *)); + +@theme { + --font-sans: + 'Inter', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; +} + +html, +body { + @media (prefers-color-scheme: dark) { + color-scheme: dark; + } +} + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +:root { + --radius: 0.65rem; + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --radius: 0.625rem; + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.205 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.556 0 0); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/apps/id.saladeaula.digital/app/components/logo.svg b/apps/id.saladeaula.digital/app/components/logo.svg new file mode 100644 index 0000000..bbe178c --- /dev/null +++ b/apps/id.saladeaula.digital/app/components/logo.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/apps/id.saladeaula.digital/app/components/ui/button.tsx b/apps/id.saladeaula.digital/app/components/ui/button.tsx new file mode 100644 index 0000000..a2df8dc --- /dev/null +++ b/apps/id.saladeaula.digital/app/components/ui/button.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90", + destructive: + "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80", + ghost: + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2 has-[>svg]:px-3", + sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", + lg: "h-10 rounded-md px-6 has-[>svg]:px-4", + icon: "size-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +function Button({ + className, + variant, + size, + asChild = false, + ...props +}: React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean + }) { + const Comp = asChild ? Slot : "button" + + return ( + + ) +} + +export { Button, buttonVariants } diff --git a/apps/id.saladeaula.digital/app/components/ui/checkbox.tsx b/apps/id.saladeaula.digital/app/components/ui/checkbox.tsx new file mode 100644 index 0000000..defeb01 --- /dev/null +++ b/apps/id.saladeaula.digital/app/components/ui/checkbox.tsx @@ -0,0 +1,30 @@ +import * as React from "react" +import * as CheckboxPrimitive from "@radix-ui/react-checkbox" +import { CheckIcon } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Checkbox({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + + + ) +} + +export { Checkbox } diff --git a/apps/id.saladeaula.digital/app/components/ui/form.tsx b/apps/id.saladeaula.digital/app/components/ui/form.tsx new file mode 100644 index 0000000..524b986 --- /dev/null +++ b/apps/id.saladeaula.digital/app/components/ui/form.tsx @@ -0,0 +1,167 @@ +"use client" + +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { Slot } from "@radix-ui/react-slot" +import { + Controller, + FormProvider, + useFormContext, + useFormState, + type ControllerProps, + type FieldPath, + type FieldValues, +} 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 = FieldPath, +> = { + name: TName +} + +const FormFieldContext = React.createContext( + {} as FormFieldContextValue +) + +const FormField = < + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath, +>({ + ...props +}: ControllerProps) => { + return ( + + + + ) +} + +const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext) + const itemContext = React.useContext(FormItemContext) + const { getFieldState } = useFormContext() + const formState = useFormState({ name: fieldContext.name }) + const fieldState = getFieldState(fieldContext.name, formState) + + if (!fieldContext) { + throw new Error("useFormField should be used within ") + } + + 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( + {} as FormItemContextValue +) + +function FormItem({ className, ...props }: React.ComponentProps<"div">) { + const id = React.useId() + + return ( + +
+ + ) +} + +function FormLabel({ + className, + ...props +}: React.ComponentProps) { + const { error, formItemId } = useFormField() + + return ( +