office-viewer-react 1.0.0

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 (36) hide show
  1. package/README.md +390 -0
  2. package/dist/client/assets/DocxViewer-NgAiZAEg.css +1 -0
  3. package/dist/client/assets/DocxViewer-gwdjm0mw.js +60 -0
  4. package/dist/client/assets/LogoIcon-BcnkueZW.js +1 -0
  5. package/dist/client/assets/PptxViewer-CLNaZa_4.js +59 -0
  6. package/dist/client/assets/PptxViewer-CYMXzyIj.css +1 -0
  7. package/dist/client/assets/XlsxViewer-BNso6L-X.css +1 -0
  8. package/dist/client/assets/XlsxViewer-C2ErMokS.js +64 -0
  9. package/dist/client/assets/_commonjs-dynamic-modules-DaXrHM_S.js +1 -0
  10. package/dist/client/assets/form-C1byQJR4.js +1 -0
  11. package/dist/client/assets/index-BDMLGHcR.js +2 -0
  12. package/dist/client/assets/index-CKjGwz9R.js +12 -0
  13. package/dist/client/assets/jszip.min-BwIaN_vk.js +2 -0
  14. package/dist/client/assets/login-DEy3R1iD.js +1 -0
  15. package/dist/client/assets/register-CUUVGLJE.js +1 -0
  16. package/dist/client/assets/styles-3a3CPFIV.css +1 -0
  17. package/dist/client/robots.txt +2 -0
  18. package/dist/index.cjs +1806 -0
  19. package/dist/index.d.cts +16 -0
  20. package/dist/index.d.ts +16 -0
  21. package/dist/index.js +1769 -0
  22. package/dist/server/assets/DocxViewer-Bm8UJY-7.js +469 -0
  23. package/dist/server/assets/LogoIcon-Dx0LU3or.js +26 -0
  24. package/dist/server/assets/PptxViewer-DS7Atucw.js +213 -0
  25. package/dist/server/assets/XlsxViewer-jzIgKmN2.js +841 -0
  26. package/dist/server/assets/_tanstack-start-manifest_v-CpFqMvFH.js +4 -0
  27. package/dist/server/assets/empty-plugin-adapters-BFgPZ6_d.js +6 -0
  28. package/dist/server/assets/form-CD9otjw-.js +236 -0
  29. package/dist/server/assets/index-gQHSGxNv.js +365 -0
  30. package/dist/server/assets/login-DvbAXNSQ.js +81 -0
  31. package/dist/server/assets/register-C2G9K9kP.js +102 -0
  32. package/dist/server/assets/router-F5YKPXkV.js +229 -0
  33. package/dist/server/assets/server-6Sfy37dh.js +1523 -0
  34. package/dist/server/assets/start-dMGD6DUy.js +56 -0
  35. package/dist/server/server.js +94 -0
  36. package/package.json +120 -0
@@ -0,0 +1,81 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { Link } from "@tanstack/react-router";
3
+ import { useForm } from "react-hook-form";
4
+ import { zodResolver } from "@hookform/resolvers/zod";
5
+ import { z } from "zod";
6
+ import { useState } from "react";
7
+ import { Loader2 } from "lucide-react";
8
+ import { B as BrandMark, F as Form, a as FormField, b as FormItem, c as FormLabel, d as FormControl, I as Input, e as FormMessage, P as PasswordInput, f as Button, T as TrustIndicators } from "./form-CD9otjw-.js";
9
+ import "./LogoIcon-Dx0LU3or.js";
10
+ import "@radix-ui/react-slot";
11
+ import "class-variance-authority";
12
+ import "clsx";
13
+ import "tailwind-merge";
14
+ import "@radix-ui/react-label";
15
+ const loginSchema = z.object({
16
+ email: z.string().email("Please enter a valid email address"),
17
+ password: z.string().min(6, "Password must be at least 6 characters")
18
+ });
19
+ function LoginPage() {
20
+ const [isLoading, setIsLoading] = useState(false);
21
+ const form = useForm({
22
+ resolver: zodResolver(loginSchema),
23
+ defaultValues: {
24
+ email: "",
25
+ password: ""
26
+ }
27
+ });
28
+ async function onSubmit(_values) {
29
+ setIsLoading(true);
30
+ try {
31
+ } finally {
32
+ setIsLoading(false);
33
+ }
34
+ }
35
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-h-screen flex-col items-center justify-center px-4 py-16", style: {
36
+ backgroundColor: "oklch(0.965 0.006 256)",
37
+ backgroundImage: "radial-gradient(rgba(15,23,42,0.045) 1px, transparent 1px)",
38
+ backgroundSize: "24px 24px"
39
+ }, children: [
40
+ /* @__PURE__ */ jsx("div", { className: "mb-10", children: /* @__PURE__ */ jsx(BrandMark, {}) }),
41
+ /* @__PURE__ */ jsxs("div", { className: "w-full max-w-xl overflow-hidden rounded-2xl border border-slate-200/80 bg-white", style: {
42
+ boxShadow: "0 1px 2px rgba(15,23,42,0.04), 0 4px 12px rgba(15,23,42,0.06), 0 16px 40px rgba(15,23,42,0.08)"
43
+ }, children: [
44
+ /* @__PURE__ */ jsxs("div", { className: "px-8 pb-8 pt-10 sm:px-12 sm:pt-12", children: [
45
+ /* @__PURE__ */ jsxs("div", { className: "mb-8", children: [
46
+ /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold tracking-tight text-slate-900", children: "Welcome back" }),
47
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-[15px] text-slate-500", children: "Sign in to your Office Viewer account" })
48
+ ] }),
49
+ /* @__PURE__ */ jsx(Form, { ...form, children: /* @__PURE__ */ jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-5", noValidate: true, children: [
50
+ /* @__PURE__ */ jsx(FormField, { control: form.control, name: "email", render: ({
51
+ field
52
+ }) => /* @__PURE__ */ jsxs(FormItem, { children: [
53
+ /* @__PURE__ */ jsx(FormLabel, { className: "text-sm font-medium text-slate-700", children: "Email address" }),
54
+ /* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(Input, { type: "email", placeholder: "you@example.com", autoComplete: "email", className: "h-11", ...field }) }),
55
+ /* @__PURE__ */ jsx(FormMessage, {})
56
+ ] }) }),
57
+ /* @__PURE__ */ jsx(FormField, { control: form.control, name: "password", render: ({
58
+ field
59
+ }) => /* @__PURE__ */ jsxs(FormItem, { children: [
60
+ /* @__PURE__ */ jsx(FormLabel, { className: "text-sm font-medium text-slate-700", children: "Password" }),
61
+ /* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(PasswordInput, { placeholder: "Enter your password", autoComplete: "current-password", className: "h-11", ...field }) }),
62
+ /* @__PURE__ */ jsx(FormMessage, {})
63
+ ] }) }),
64
+ /* @__PURE__ */ jsx(Button, { type: "submit", disabled: isLoading, className: "mt-2 h-12 w-full rounded-xl bg-blue-600 font-semibold text-white shadow-sm transition-colors hover:bg-blue-700", children: isLoading ? /* @__PURE__ */ jsxs(Fragment, { children: [
65
+ /* @__PURE__ */ jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }),
66
+ "Signing in…"
67
+ ] }) : "Sign in" })
68
+ ] }) })
69
+ ] }),
70
+ /* @__PURE__ */ jsx(TrustIndicators, {})
71
+ ] }),
72
+ /* @__PURE__ */ jsxs("p", { className: "mt-7 text-sm text-slate-500", children: [
73
+ "Don't have an account?",
74
+ " ",
75
+ /* @__PURE__ */ jsx(Link, { to: "/register", className: "font-semibold text-blue-600 transition-colors hover:text-blue-700", children: "Create one" })
76
+ ] })
77
+ ] });
78
+ }
79
+ export {
80
+ LoginPage as component
81
+ };
@@ -0,0 +1,102 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { Link } from "@tanstack/react-router";
3
+ import { useForm } from "react-hook-form";
4
+ import { zodResolver } from "@hookform/resolvers/zod";
5
+ import { z } from "zod";
6
+ import { useState } from "react";
7
+ import { Loader2 } from "lucide-react";
8
+ import { B as BrandMark, F as Form, a as FormField, b as FormItem, c as FormLabel, d as FormControl, I as Input, e as FormMessage, P as PasswordInput, f as Button, T as TrustIndicators } from "./form-CD9otjw-.js";
9
+ import "./LogoIcon-Dx0LU3or.js";
10
+ import "@radix-ui/react-slot";
11
+ import "class-variance-authority";
12
+ import "clsx";
13
+ import "tailwind-merge";
14
+ import "@radix-ui/react-label";
15
+ const registerSchema = z.object({
16
+ fullName: z.string().min(2, "Name must be at least 2 characters").max(100, "Name is too long"),
17
+ email: z.string().email("Please enter a valid email address"),
18
+ password: z.string().min(8, "Password must be at least 8 characters").regex(/[A-Z]/, "Must contain at least one uppercase letter").regex(/[0-9]/, "Must contain at least one number"),
19
+ confirmPassword: z.string()
20
+ }).refine((d) => d.password === d.confirmPassword, {
21
+ path: ["confirmPassword"],
22
+ message: "Passwords do not match"
23
+ });
24
+ function RegisterPage() {
25
+ const [isLoading, setIsLoading] = useState(false);
26
+ const form = useForm({
27
+ resolver: zodResolver(registerSchema),
28
+ defaultValues: {
29
+ fullName: "",
30
+ email: "",
31
+ password: "",
32
+ confirmPassword: ""
33
+ }
34
+ });
35
+ async function onSubmit(_values) {
36
+ setIsLoading(true);
37
+ try {
38
+ } finally {
39
+ setIsLoading(false);
40
+ }
41
+ }
42
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-h-screen flex-col items-center justify-center px-4 py-16", style: {
43
+ backgroundColor: "oklch(0.965 0.006 256)",
44
+ backgroundImage: "radial-gradient(rgba(15,23,42,0.045) 1px, transparent 1px)",
45
+ backgroundSize: "24px 24px"
46
+ }, children: [
47
+ /* @__PURE__ */ jsx("div", { className: "mb-10", children: /* @__PURE__ */ jsx(BrandMark, {}) }),
48
+ /* @__PURE__ */ jsxs("div", { className: "w-full max-w-xl overflow-hidden rounded-2xl border border-slate-200/80 bg-white", style: {
49
+ boxShadow: "0 1px 2px rgba(15,23,42,0.04), 0 4px 12px rgba(15,23,42,0.06), 0 16px 40px rgba(15,23,42,0.08)"
50
+ }, children: [
51
+ /* @__PURE__ */ jsxs("div", { className: "px-8 pb-8 pt-10 sm:px-12 sm:pt-12", children: [
52
+ /* @__PURE__ */ jsxs("div", { className: "mb-8", children: [
53
+ /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold tracking-tight text-slate-900", children: "Create your account" }),
54
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-[15px] text-slate-500", children: "Start viewing Word, Excel & PowerPoint files" })
55
+ ] }),
56
+ /* @__PURE__ */ jsx(Form, { ...form, children: /* @__PURE__ */ jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-5", noValidate: true, children: [
57
+ /* @__PURE__ */ jsx(FormField, { control: form.control, name: "fullName", render: ({
58
+ field
59
+ }) => /* @__PURE__ */ jsxs(FormItem, { children: [
60
+ /* @__PURE__ */ jsx(FormLabel, { className: "text-sm font-medium text-slate-700", children: "Full name" }),
61
+ /* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(Input, { type: "text", placeholder: "Jane Smith", autoComplete: "name", className: "h-11", ...field }) }),
62
+ /* @__PURE__ */ jsx(FormMessage, {})
63
+ ] }) }),
64
+ /* @__PURE__ */ jsx(FormField, { control: form.control, name: "email", render: ({
65
+ field
66
+ }) => /* @__PURE__ */ jsxs(FormItem, { children: [
67
+ /* @__PURE__ */ jsx(FormLabel, { className: "text-sm font-medium text-slate-700", children: "Email address" }),
68
+ /* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(Input, { type: "email", placeholder: "you@example.com", autoComplete: "email", className: "h-11", ...field }) }),
69
+ /* @__PURE__ */ jsx(FormMessage, {})
70
+ ] }) }),
71
+ /* @__PURE__ */ jsx(FormField, { control: form.control, name: "password", render: ({
72
+ field
73
+ }) => /* @__PURE__ */ jsxs(FormItem, { children: [
74
+ /* @__PURE__ */ jsx(FormLabel, { className: "text-sm font-medium text-slate-700", children: "Password" }),
75
+ /* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(PasswordInput, { placeholder: "Min. 8 characters", autoComplete: "new-password", className: "h-11", ...field }) }),
76
+ /* @__PURE__ */ jsx(FormMessage, {})
77
+ ] }) }),
78
+ /* @__PURE__ */ jsx(FormField, { control: form.control, name: "confirmPassword", render: ({
79
+ field
80
+ }) => /* @__PURE__ */ jsxs(FormItem, { children: [
81
+ /* @__PURE__ */ jsx(FormLabel, { className: "text-sm font-medium text-slate-700", children: "Confirm password" }),
82
+ /* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(PasswordInput, { placeholder: "Re-enter your password", autoComplete: "new-password", className: "h-11", ...field }) }),
83
+ /* @__PURE__ */ jsx(FormMessage, {})
84
+ ] }) }),
85
+ /* @__PURE__ */ jsx(Button, { type: "submit", disabled: isLoading, className: "mt-2 h-12 w-full rounded-xl bg-blue-600 font-semibold text-white shadow-sm transition-colors hover:bg-blue-700", children: isLoading ? /* @__PURE__ */ jsxs(Fragment, { children: [
86
+ /* @__PURE__ */ jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }),
87
+ "Creating account…"
88
+ ] }) : "Create account" })
89
+ ] }) })
90
+ ] }),
91
+ /* @__PURE__ */ jsx(TrustIndicators, {})
92
+ ] }),
93
+ /* @__PURE__ */ jsxs("p", { className: "mt-7 text-sm text-slate-500", children: [
94
+ "Already have an account?",
95
+ " ",
96
+ /* @__PURE__ */ jsx(Link, { to: "/login", className: "font-semibold text-blue-600 transition-colors hover:text-blue-700", children: "Sign in" })
97
+ ] })
98
+ ] });
99
+ }
100
+ export {
101
+ RegisterPage as component
102
+ };
@@ -0,0 +1,229 @@
1
+ import { QueryClientProvider, QueryClient } from "@tanstack/react-query";
2
+ import { createRootRouteWithContext, useRouter, Link, Outlet, HeadContent, Scripts, createFileRoute, lazyRouteComponent, createRouter } from "@tanstack/react-router";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { useEffect } from "react";
5
+ import { z } from "zod";
6
+ const appCss = "/assets/styles-3a3CPFIV.css";
7
+ function reportLovableError(error, context = {}) {
8
+ if (typeof window === "undefined") return;
9
+ window.__lovableEvents?.captureException?.(
10
+ error,
11
+ {
12
+ source: "react_error_boundary",
13
+ route: window.location.pathname,
14
+ ...context
15
+ },
16
+ {
17
+ mechanism: "react_error_boundary",
18
+ handled: false,
19
+ severity: "error"
20
+ }
21
+ );
22
+ }
23
+ function NotFoundComponent() {
24
+ return /* @__PURE__ */ jsx("div", { className: "flex min-h-screen items-center justify-center bg-background px-4", children: /* @__PURE__ */ jsxs("div", { className: "max-w-md text-center", children: [
25
+ /* @__PURE__ */ jsx("h1", { className: "text-7xl font-bold text-foreground", children: "404" }),
26
+ /* @__PURE__ */ jsx("h2", { className: "mt-4 text-xl font-semibold text-foreground", children: "Page not found" }),
27
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: "The page you're looking for doesn't exist or has been moved." }),
28
+ /* @__PURE__ */ jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsx(
29
+ Link,
30
+ {
31
+ to: "/",
32
+ className: "inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90",
33
+ children: "Go home"
34
+ }
35
+ ) })
36
+ ] }) });
37
+ }
38
+ function ErrorComponent({ error, reset }) {
39
+ console.error(error);
40
+ const router = useRouter();
41
+ useEffect(() => {
42
+ reportLovableError(error, { boundary: "tanstack_root_error_component" });
43
+ }, [error]);
44
+ return /* @__PURE__ */ jsx("div", { className: "flex min-h-screen items-center justify-center bg-background px-4", children: /* @__PURE__ */ jsxs("div", { className: "max-w-md text-center", children: [
45
+ /* @__PURE__ */ jsx("h1", { className: "text-xl font-semibold tracking-tight text-foreground", children: "This page didn't load" }),
46
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: "Something went wrong on our end. You can try refreshing or head back home." }),
47
+ /* @__PURE__ */ jsxs("div", { className: "mt-6 flex flex-wrap justify-center gap-2", children: [
48
+ /* @__PURE__ */ jsx(
49
+ "button",
50
+ {
51
+ onClick: () => {
52
+ router.invalidate();
53
+ reset();
54
+ },
55
+ className: "inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90",
56
+ children: "Try again"
57
+ }
58
+ ),
59
+ /* @__PURE__ */ jsx(
60
+ "a",
61
+ {
62
+ href: "/",
63
+ className: "inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground transition-colors hover:bg-accent",
64
+ children: "Go home"
65
+ }
66
+ )
67
+ ] })
68
+ ] }) });
69
+ }
70
+ const Route$4 = createRootRouteWithContext()({
71
+ head: () => ({
72
+ meta: [
73
+ { charSet: "utf-8" },
74
+ { name: "viewport", content: "width=device-width, initial-scale=1" },
75
+ { title: "Lovable App" },
76
+ { name: "description", content: "DocuView Pro is a React application for viewing DOCX, PPT, and Excel files." },
77
+ { name: "author", content: "Lovable" },
78
+ { property: "og:title", content: "Lovable App" },
79
+ { property: "og:description", content: "DocuView Pro is a React application for viewing DOCX, PPT, and Excel files." },
80
+ { property: "og:type", content: "website" },
81
+ { name: "twitter:card", content: "summary" },
82
+ { name: "twitter:site", content: "@Lovable" },
83
+ { name: "twitter:title", content: "Lovable App" },
84
+ { name: "twitter:description", content: "DocuView Pro is a React application for viewing DOCX, PPT, and Excel files." },
85
+ { property: "og:image", content: "https://pub-bb2e103a32db4e198524a2e9ed8f35b4.r2.dev/3a4a2296-566c-4b14-b351-3fbc08c7a9b9/id-preview-34571cfb--04b9844d-0c11-4bad-b6b9-9106cb808514.lovable.app-1780657852368.png" },
86
+ { name: "twitter:image", content: "https://pub-bb2e103a32db4e198524a2e9ed8f35b4.r2.dev/3a4a2296-566c-4b14-b351-3fbc08c7a9b9/id-preview-34571cfb--04b9844d-0c11-4bad-b6b9-9106cb808514.lovable.app-1780657852368.png" }
87
+ ],
88
+ links: [
89
+ {
90
+ rel: "stylesheet",
91
+ href: appCss
92
+ }
93
+ ]
94
+ }),
95
+ shellComponent: RootShell,
96
+ component: RootComponent,
97
+ notFoundComponent: NotFoundComponent,
98
+ errorComponent: ErrorComponent
99
+ });
100
+ function RootShell({ children }) {
101
+ return /* @__PURE__ */ jsxs("html", { lang: "en", children: [
102
+ /* @__PURE__ */ jsx("head", { children: /* @__PURE__ */ jsx(HeadContent, {}) }),
103
+ /* @__PURE__ */ jsxs("body", { children: [
104
+ children,
105
+ /* @__PURE__ */ jsx(Scripts, {})
106
+ ] })
107
+ ] });
108
+ }
109
+ function RootComponent() {
110
+ const { queryClient } = Route$4.useRouteContext();
111
+ return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(Outlet, {}) });
112
+ }
113
+ const BASE_URL = "";
114
+ const Route$3 = createFileRoute("/sitemap.xml")({
115
+ server: {
116
+ handlers: {
117
+ GET: async () => {
118
+ const xml = [
119
+ `<?xml version="1.0" encoding="UTF-8"?>`,
120
+ `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">`,
121
+ ` <url>`,
122
+ ` <loc>${BASE_URL}/</loc>`,
123
+ ` <changefreq>weekly</changefreq>`,
124
+ ` <priority>1.0</priority>`,
125
+ ` </url>`,
126
+ `</urlset>`
127
+ ].join("\n");
128
+ return new Response(xml, {
129
+ headers: { "Content-Type": "application/xml", "Cache-Control": "public, max-age=3600" }
130
+ });
131
+ }
132
+ }
133
+ }
134
+ });
135
+ const $$splitComponentImporter$2 = () => import("./register-C2G9K9kP.js");
136
+ const Route$2 = createFileRoute("/register")({
137
+ head: () => ({
138
+ meta: [{
139
+ title: "Create Account — Office Viewer"
140
+ }, {
141
+ name: "description",
142
+ content: "Create your Office Viewer account."
143
+ }]
144
+ }),
145
+ component: lazyRouteComponent($$splitComponentImporter$2, "component")
146
+ });
147
+ z.object({
148
+ fullName: z.string().min(2, "Name must be at least 2 characters").max(100, "Name is too long"),
149
+ email: z.string().email("Please enter a valid email address"),
150
+ password: z.string().min(8, "Password must be at least 8 characters").regex(/[A-Z]/, "Must contain at least one uppercase letter").regex(/[0-9]/, "Must contain at least one number"),
151
+ confirmPassword: z.string()
152
+ }).refine((d) => d.password === d.confirmPassword, {
153
+ path: ["confirmPassword"],
154
+ message: "Passwords do not match"
155
+ });
156
+ const $$splitComponentImporter$1 = () => import("./login-DvbAXNSQ.js");
157
+ const Route$1 = createFileRoute("/login")({
158
+ head: () => ({
159
+ meta: [{
160
+ title: "Sign In — Office Viewer"
161
+ }, {
162
+ name: "description",
163
+ content: "Sign in to your Office Viewer account."
164
+ }]
165
+ }),
166
+ component: lazyRouteComponent($$splitComponentImporter$1, "component")
167
+ });
168
+ z.object({
169
+ email: z.string().email("Please enter a valid email address"),
170
+ password: z.string().min(6, "Password must be at least 6 characters")
171
+ });
172
+ const $$splitComponentImporter = () => import("./index-gQHSGxNv.js");
173
+ const Route = createFileRoute("/")({
174
+ head: () => ({
175
+ meta: [{
176
+ title: "Office Viewer — Word, Excel & PowerPoint"
177
+ }, {
178
+ name: "description",
179
+ content: "Upload and view Word, Excel and PowerPoint files directly in your browser. Nothing is uploaded — everything renders locally."
180
+ }, {
181
+ property: "og:title",
182
+ content: "Office Viewer"
183
+ }, {
184
+ property: "og:description",
185
+ content: "View Word, Excel and PowerPoint files directly in your browser."
186
+ }]
187
+ }),
188
+ component: lazyRouteComponent($$splitComponentImporter, "component")
189
+ });
190
+ const SitemapDotxmlRoute = Route$3.update({
191
+ id: "/sitemap.xml",
192
+ path: "/sitemap.xml",
193
+ getParentRoute: () => Route$4
194
+ });
195
+ const RegisterRoute = Route$2.update({
196
+ id: "/register",
197
+ path: "/register",
198
+ getParentRoute: () => Route$4
199
+ });
200
+ const LoginRoute = Route$1.update({
201
+ id: "/login",
202
+ path: "/login",
203
+ getParentRoute: () => Route$4
204
+ });
205
+ const IndexRoute = Route.update({
206
+ id: "/",
207
+ path: "/",
208
+ getParentRoute: () => Route$4
209
+ });
210
+ const rootRouteChildren = {
211
+ IndexRoute,
212
+ LoginRoute,
213
+ RegisterRoute,
214
+ SitemapDotxmlRoute
215
+ };
216
+ const routeTree = Route$4._addFileChildren(rootRouteChildren)._addFileTypes();
217
+ const getRouter = () => {
218
+ const queryClient = new QueryClient();
219
+ const router = createRouter({
220
+ routeTree,
221
+ context: { queryClient },
222
+ scrollRestoration: true,
223
+ defaultPreloadStaleTime: 0
224
+ });
225
+ return router;
226
+ };
227
+ export {
228
+ getRouter
229
+ };