diff --git a/client/app/globals.css b/client/app/globals.css index 4d1491e..51e4d50 100644 --- a/client/app/globals.css +++ b/client/app/globals.css @@ -210,6 +210,16 @@ box-shadow: 0 0 0 2px var(--primary); outline: none; } + + /* Hide scrollbars */ + .scrollbar-hide { + -ms-overflow-style: none; + scrollbar-width: none; + } + + .scrollbar-hide::-webkit-scrollbar { + display: none; + } } diff --git a/client/app/page.tsx b/client/app/page.tsx index a6494c4..0fa7e2d 100644 --- a/client/app/page.tsx +++ b/client/app/page.tsx @@ -9,6 +9,7 @@ import { InputOTPSlot, } from "@/components/ui/input-otp"; import { Card, CardContent } from "@/components/ui/card"; +import { Heart } from "lucide-react"; import { ThemeProvider } from "next-themes"; import { VSCODE_THEMES, @@ -17,12 +18,17 @@ import { saveThemeToCookie, getThemeFromCookie, } from "@/lib/themes"; +import { LegalFooter } from "@/components/Footer"; +import { DMCAModalComponent } from "@/components/DMCAModalComponent"; +import { DisclaimerModalComponent } from "@/components/DisclaimerModalComponent"; const Home = () => { const router = useRouter(); const [newRoomCode, setNewRoomCode] = useState(""); const [currentThemeIndex, setCurrentThemeIndex] = useState(0); const [isClient, setIsClient] = useState(false); + const [isDisclaimerOpen, setIsDisclaimerOpen] = useState(false); + const [isDMCAOpen, setIsDMCAOpen] = useState(false); const nextTheme = useCallback(() => { setCurrentThemeIndex((prevIndex) => { @@ -34,18 +40,6 @@ const Home = () => { }); }, []); - const prevTheme = useCallback(() => { - setCurrentThemeIndex((prevIndex) => { - const newIndex = prevIndex === 0 - ? VSCODE_THEMES.length - 1 - : prevIndex - 1; - const theme = VSCODE_THEMES[newIndex]; - applyTheme(theme); - saveThemeToCookie(theme.id); - return newIndex; - }); - }, []); - useEffect(() => { setIsClient(true); @@ -70,10 +64,7 @@ const Home = () => { // Simple keyboard navigation const handleKeyPress = (e: KeyboardEvent) => { - if (e.key === "ArrowLeft") { - e.preventDefault(); - prevTheme(); - } else if (e.key === "ArrowRight") { + if (e.key === "ArrowRight") { e.preventDefault(); nextTheme(); } @@ -83,7 +74,7 @@ const Home = () => { return () => { window.removeEventListener("keydown", handleKeyPress); }; - }, [nextTheme, prevTheme]); + }, [nextTheme]); useEffect(() => { const joinRoom = () => { @@ -115,41 +106,23 @@ const Home = () => { return (
- {/* Theme Slider - Simple Version */} -
-
- - -
-
- {currentTheme.name} -
-
- {currentThemeIndex + 1} of {VSCODE_THEMES.length} -
-
- - -
-
-
-

+

Osborne

+ + {/* Theme Switcher - Pill Button */} +
+ +
+ { > Create Room + + {/* Attribution */} +
+

+ made with {" "} + by{" "} + + WebArk + +

+
+ setIsDisclaimerOpen(true)} + onDMCAOpen={() => setIsDMCAOpen(true)} + /> + + {/* Modals */} + setIsDisclaimerOpen(false)} + /> + setIsDMCAOpen(false)} + />
); }; diff --git a/client/app/room/page.tsx b/client/app/room/page.tsx index 48bec02..8bc3d40 100644 --- a/client/app/room/page.tsx +++ b/client/app/room/page.tsx @@ -21,7 +21,7 @@ import { } from "lucide-react"; import { Skeleton } from "@/components/ui/skeleton"; import { CommentsPanel } from "@/components/RightPanel"; -import { CodeEditor, CodeEditorRef } from "@/components/CodeEditor"; +import { CodeEditor, CodeEditorRef } from "@/components/Editor"; import { LeftPanel } from "@/components/LeftPanel"; import { getThemeById, @@ -34,6 +34,10 @@ import debounce from "lodash/debounce"; import dotenv from "dotenv"; import { JetBrains_Mono } from "next/font/google"; import { ThemeProvider } from "next-themes"; +import { LegalFooter } from "@/components/Footer"; +import { ContentWarningModal } from "@/components/ContentWarningModal"; +import { DMCAModalComponent } from "@/components/DMCAModalComponent"; +import { DisclaimerModalComponent } from "@/components/DisclaimerModalComponent"; dotenv.config(); @@ -222,6 +226,8 @@ const Room = () => { const [rightPanelForced, setRightPanelForced] = useState(false); const [popupMessage, setPopupMessage] = useState<{text: string; type?: 'default' | 'warning'} | null>(null); const [isMobile, setIsMobile] = useState(false); + const [isDisclaimerOpen, setIsDisclaimerOpen] = useState(false); + const [isDMCAOpen, setIsDMCAOpen] = useState(false); // Detect mobile screen size useEffect(() => { @@ -1076,6 +1082,25 @@ const Room = () => { )} + + {/* Content Warning Modal */} + + + {/* Legal Footer */} + setIsDisclaimerOpen(true)} + onDMCAOpen={() => setIsDMCAOpen(true)} + /> + + {/* Modals */} + setIsDisclaimerOpen(false)} + /> + setIsDMCAOpen(false)} + /> ); }; diff --git a/client/components/CommentsPanel.tsx b/client/components/CommentBox.tsx similarity index 100% rename from client/components/CommentsPanel.tsx rename to client/components/CommentBox.tsx diff --git a/client/components/ConnectionStatus.tsx b/client/components/ConnectionModal.tsx similarity index 100% rename from client/components/ConnectionStatus.tsx rename to client/components/ConnectionModal.tsx diff --git a/client/components/ContentWarningModal.tsx b/client/components/ContentWarningModal.tsx new file mode 100644 index 0000000..3f5689f --- /dev/null +++ b/client/components/ContentWarningModal.tsx @@ -0,0 +1,56 @@ +"use client"; + +import { useState, useEffect } from "react"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; + +export const ContentWarningModal = () => { + const [showWarning, setShowWarning] = useState(false); + + useEffect(() => { + // Check if user has already acknowledged the warning + const hasAcknowledged = localStorage.getItem('content-warning-acknowledged'); + if (!hasAcknowledged) { + setShowWarning(true); + } + }, []); + + const handleAcknowledge = () => { + localStorage.setItem('content-warning-acknowledged', 'true'); + setShowWarning(false); + }; + + if (!showWarning) return null; + + return ( +
+ + + ⚠️ Content Disclaimer + + +
+

+ This is a public collaborative text editor. +

+

+ Users can upload and share any type of content. We do not monitor, + review, or control user-generated content and are not responsible for + anything shared in these rooms. +

+

+ Proceed at your own discretion and use appropriate judgment when + viewing or sharing content. +

+
+ +
+
+
+ ); +}; \ No newline at end of file diff --git a/client/components/DMCAButton.tsx b/client/components/DMCAButton.tsx new file mode 100644 index 0000000..e69de29 diff --git a/client/components/DMCAModal.tsx b/client/components/DMCAModal.tsx new file mode 100644 index 0000000..8791f4f --- /dev/null +++ b/client/components/DMCAModal.tsx @@ -0,0 +1,224 @@ +"use client"; + +import { useState } from "react"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; + +export const DMCAComponent = () => { + const [isOpen, setIsOpen] = useState(false); + + return ( + <> + {/* DMCA Button */} + + + {/* DMCA Modal */} + {isOpen && ( +
+ + + + DMCA Copyright Policy & Takedown Notice + + + + + {/* Introduction */} +
+

+ Osborne respects the intellectual property rights of others and expects users + to do the same. In accordance with the Digital Millennium Copyright Act (DMCA), + we will respond to valid takedown notices for copyrighted material. +

+
+ + {/* DMCA Takedown Process */} +
+

Filing a DMCA Takedown Notice

+

+ If you believe that content on Osborne infringes your copyright, you may + submit a DMCA takedown notice. Your notice must include all of the following: +

+
+

+ 1. Identification of the copyrighted work: Describe the + copyrighted work that you claim has been infringed, or if multiple works + are involved, provide a representative list. +

+

+ 2. Identification of the infringing material: Identify + the specific content that is allegedly infringing, including the room code, + specific text, files, or other content, and provide enough detail for us + to locate it. +

+

+ 3. Your contact information: Include your name, mailing + address, telephone number, and email address. +

+

+ 4. Good faith statement: Include the following statement: + "I have a good faith belief that use of the copyrighted material described + above is not authorized by the copyright owner, its agent, or the law." +

+

+ 5. Accuracy statement: Include the following statement: + "I swear, under penalty of perjury, that the information in this + notification is accurate and that I am the copyright owner or am authorized + to act on behalf of the owner of an exclusive right that is allegedly infringed." +

+

+ 6. Your signature: Provide your physical or electronic signature. +

+
+
+ + {/* Contact Information */} +
+

DMCA Agent Contact

+
+

+ DMCA Agent: [Your Name or Designated Agent] +

+

+ Email: dmca@[your-domain].com +

+

+ Mailing Address:
+ [Your Name/Company]
+ [Street Address]
+ [City, State ZIP Code]
+ [Country] +

+

+ Please note: Only DMCA takedown notices should be sent to this contact. + Other inquiries will not receive a response. +

+
+
+ + {/* Counter-Notification */} +
+

Counter-Notification Process

+

+ If you believe your content was removed in error, you may file a + counter-notification under Section 512(g)(3) of the DMCA. Your + counter-notification must include: +

+
+

+ 1. Your physical or electronic signature +

+

+ 2. Identification of the content that was removed + and its location before removal +

+

+ 3. A statement under penalty of perjury that you + have a good faith belief the content was removed due to mistake or + misidentification +

+

+ 4. Your name, address, and telephone number +

+

+ 5. A statement consenting to jurisdiction in your + district or the district where the service provider is located +

+
+
+ + {/* Safe Harbor and Liability */} +
+

Safe Harbor Protection

+
+

+ Service Provider Status: Osborne qualifies as a service + provider under the DMCA safe harbor provisions. We do not pre-screen, + monitor, or exercise editorial control over user-generated content. +

+

+ No Knowledge of Infringement: We have no actual knowledge + of infringing activity and are not aware of facts or circumstances from + which infringing activity is apparent. +

+

+ Expeditious Removal: Upon receiving a valid DMCA takedown + notice, we will expeditiously remove or disable access to the allegedly + infringing content. +

+

+ No Financial Benefit: We do not receive a financial + benefit directly attributable to infringing activity when we have the + right and ability to control such activity. +

+
+
+ + {/* Response Timeline */} +
+

Response Timeline

+
+

+ Takedown Notices: We will respond to valid DMCA takedown + notices within 24-48 hours of receipt. +

+

+ Counter-Notifications: Counter-notifications will be + forwarded to the original complainant within 10 business days, and content + may be restored 10-14 business days after forwarding unless the complainant + files a court action. +

+

+ Invalid Notices: Notices that do not substantially comply + with DMCA requirements may not be processed. +

+
+
+ + {/* Repeat Offender Policy */} +
+

Repeat Offender Policy

+

+ In appropriate circumstances, Osborne will terminate users who are repeat + infringers. We may also, at our sole discretion, limit access to the service + and/or terminate accounts of users who infringe any intellectual property + rights of others, whether or not there is any repeat infringement. +

+
+ + {/* False Claims Warning */} +
+

False Claims Warning

+
+

+ Important: Under Section 512(f) of the DMCA, any person + who knowingly materially misrepresents that content is infringing may be + subject to liability for damages. Do not submit false claims. +

+
+
+ + {/* Footer */} +
+

Last Updated: {new Date().toLocaleDateString()}

+

+ This DMCA policy is designed to comply with the Digital Millennium Copyright Act + and protect both content creators and service providers. +

+
+
+
+
+ )} + + ); +}; \ No newline at end of file diff --git a/client/components/DMCAModalComponent.tsx b/client/components/DMCAModalComponent.tsx new file mode 100644 index 0000000..57ac1db --- /dev/null +++ b/client/components/DMCAModalComponent.tsx @@ -0,0 +1,125 @@ +"use client"; + +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; + +interface DMCAModalProps { + isOpen: boolean; + onClose: () => void; +} + +export const DMCAModalComponent = ({ isOpen, onClose }: DMCAModalProps) => { + if (!isOpen) return null; + + return ( +
+ + + + DMCA Copyright Policy & Takedown Notice + + + + +
+
+

Digital Millennium Copyright Act (DMCA) Notice

+

+ We respect the intellectual property rights of others and expect our users to do the same. + In accordance with the Digital Millennium Copyright Act of 1998 ("DMCA"), we will respond + expeditiously to claims of copyright infringement committed using our service. +

+
+ +
+

Notification of Infringement

+

+ If you believe that your copyrighted work has been copied in a way that constitutes copyright + infringement and is accessible via our service, please notify our copyright agent as set forth below. +

+

For your complaint to be valid under the DMCA, you must provide the following information:

+
    +
  • A physical or electronic signature of a person authorized to act on behalf of the copyright owner
  • +
  • Identification of the copyrighted work claimed to have been infringed
  • +
  • Identification of the material that is claimed to be infringing and information reasonably sufficient to permit us to locate the material
  • +
  • Information reasonably sufficient to permit us to contact you, including your address, telephone number, and email address
  • +
  • A statement that you have a good faith belief that use of the material is not authorized by the copyright owner, its agent, or the law
  • +
  • A statement that the information in the notification is accurate, and under penalty of perjury, that you are authorized to act on behalf of the copyright owner
  • +
+
+ +
+

Copyright Agent Contact Information

+
+

Email: copyright@webark.in

+

Subject Line: DMCA Takedown Notice - Osborne Platform

+
+
+ +
+

Counter-Notification

+

+ If you believe that your material has been removed or disabled by mistake or misidentification, + you may file a counter-notification with us by providing the following information: +

+
    +
  • Your physical or electronic signature
  • +
  • Identification of the material that has been removed or disabled and the location where it appeared before removal
  • +
  • A statement under penalty of perjury that you have a good faith belief that the material was removed as a result of mistake or misidentification
  • +
  • Your name, address, telephone number, and email address
  • +
  • A statement that you consent to the jurisdiction of the federal court in your district
  • +
+
+ +
+

Repeat Infringer Policy

+

+ We have adopted a policy of terminating, in appropriate circumstances and at our sole discretion, + users who are deemed to be repeat infringers. We may also limit access to our service and/or + terminate accounts of users who infringe any intellectual property rights of others. +

+
+ +
+

User-Generated Content

+

+ Users are solely responsible for the content they upload, share, or collaborate on through our platform. + We do not pre-screen user content but reserve the right to remove content that violates our terms + or applicable laws, including copyrighted material. +

+
+ +
+

Safe Harbor Compliance

+

+ This service qualifies for safe harbor protections under Section 512 of the DMCA. We act as a + service provider and do not have actual knowledge of infringing activity on our system. Upon + receiving proper notification of claimed infringement, we will expeditiously remove or disable + access to the allegedly infringing material. +

+
+ +
+

Processing Timeline

+
    +
  • Valid DMCA notices will be processed within 24-48 hours of receipt
  • +
  • The alleged infringing content will be removed or access disabled pending investigation
  • +
  • Users will be notified of takedown actions taken against their content
  • +
  • Counter-notifications will be processed within 10-14 business days as required by law
  • +
+
+ +
+

+ Last Updated: October 31, 2025
+ This DMCA policy is subject to change. Users will be notified of significant changes through our platform. +

+
+
+
+
+
+ ); +}; \ No newline at end of file diff --git a/client/components/DisclaimerButton.tsx b/client/components/DisclaimerButton.tsx new file mode 100644 index 0000000..e69de29 diff --git a/client/components/DisclaimerModal.tsx b/client/components/DisclaimerModal.tsx new file mode 100644 index 0000000..83bc9f9 --- /dev/null +++ b/client/components/DisclaimerModal.tsx @@ -0,0 +1,199 @@ +"use client"; + +import { useState } from "react"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; + +export const DisclaimerComponent = () => { + const [isOpen, setIsOpen] = useState(false); + + return ( + <> + {/* Disclaimer Button */} + + + {/* Disclaimer Modal */} + {isOpen && ( +
+ + + + Legal Terms & Disclaimers + + + + + {/* Terms of Service */} +
+

Terms of Service

+
+

+ 1. Acceptance of Terms: By accessing or using Osborne ("the Service"), + you agree to be bound by these Terms of Service. If you do not agree to these terms, + you may not use the Service. +

+

+ 2. Service Description: Osborne is a real-time collaborative text editor + that allows users to create and join rooms for collaborative editing. The Service is + provided "as is" without warranty of any kind. +

+

+ 3. User Responsibilities: You are solely responsible for all content + you upload, share, or transmit through the Service. You agree not to use the Service + for any illegal, harmful, or inappropriate purposes. +

+

+ 4. Content Ownership: You retain ownership of your content. However, + by using the Service, you grant us a non-exclusive, royalty-free license to host, + store, and transmit your content as necessary to provide the Service. +

+

+ 5. Prohibited Conduct: You agree not to upload, share, or transmit + content that is illegal, harmful, threatening, abusive, defamatory, obscene, or + otherwise objectionable. +

+

+ 6. Service Availability: We do not guarantee that the Service will + be available at all times or that it will be error-free. We may modify, suspend, + or discontinue the Service at any time without notice. +

+
+
+ + {/* Disclaimer */} +
+

Disclaimer of Liability

+
+

+ 1. User-Generated Content: The Service allows users to upload and + share content. We do not monitor, review, or control user-generated content and + are not responsible for any content uploaded by users. +

+

+ 2. No Warranty: THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE" + WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. +

+

+ 3. Limitation of Liability: TO THE MAXIMUM EXTENT PERMITTED BY LAW, + WE SHALL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR + PUNITIVE DAMAGES, OR ANY LOSS OF PROFITS OR REVENUES, WHETHER INCURRED DIRECTLY + OR INDIRECTLY, OR ANY LOSS OF DATA, USE, OR OTHER INTANGIBLE LOSSES. +

+

+ 4. Third-Party Content: We are not responsible for content uploaded + by third parties. Users upload content at their own risk. We do not endorse, + support, or guarantee the accuracy or reliability of any user-generated content. +

+

+ 5. Security: While we implement reasonable security measures, we + cannot guarantee the security of data transmitted through the Service. Users + transmit data at their own risk. +

+

+ 6. Indemnification: You agree to indemnify and hold us harmless + from any claims, damages, losses, or expenses arising from your use of the Service + or violation of these terms. +

+
+
+ + {/* Copyright and DMCA */} +
+

Copyright & Intellectual Property

+
+

+ 1. Respect for Intellectual Property: Users must respect the + intellectual property rights of others. Do not upload content that infringes + on copyrights, trademarks, or other intellectual property rights. +

+

+ 2. DMCA Compliance: We respond to valid DMCA takedown notices. + If you believe your copyrighted work has been infringed, please contact us with + appropriate documentation. +

+

+ 3. Safe Harbor: We qualify for safe harbor protections under + applicable copyright laws as we are a service provider that hosts user-generated + content without prior review or knowledge of its contents. +

+

+ 4. Content Removal: We reserve the right to remove any content + that we believe, in our sole discretion, violates these terms or applicable laws. +

+

+ 5. User License: By uploading content, you represent that you + have the right to upload such content and grant others the ability to view and + collaborate on such content through the Service. +

+
+
+ + {/* Data and Privacy */} +
+

Data and Privacy

+
+

+ 1. Data Collection: We collect minimal data necessary to provide + the Service. We do not sell or share personal information with third parties + except as necessary to operate the Service. +

+

+ 2. Content Storage: Content uploaded to the Service may be + temporarily stored to enable collaboration. We make no guarantees about data + persistence or backup. +

+

+ 3. No Monitoring: We do not actively monitor user content or + communications. Any moderation is reactive and based on reports or automated systems. +

+
+
+ + {/* General Provisions */} +
+

General Provisions

+
+

+ 1. Changes to Terms: We may update these terms at any time. + Continued use of the Service constitutes acceptance of updated terms. +

+

+ 2. Governing Law: These terms are governed by the laws of the + jurisdiction where the service operator resides, without regard to conflict + of law provisions. +

+

+ 3. Severability: If any provision of these terms is found + unenforceable, the remaining provisions will remain in effect. +

+

+ 4. Contact: For questions about these terms or to report + violations, contact the service administrator. +

+
+
+ +
+

Last Updated: {new Date().toLocaleDateString()}

+

+ BY USING THIS SERVICE, YOU ACKNOWLEDGE THAT YOU HAVE READ, UNDERSTOOD, + AND AGREE TO BE BOUND BY THESE TERMS. +

+
+
+
+
+ )} + + ); +}; \ No newline at end of file diff --git a/client/components/DisclaimerModalComponent.tsx b/client/components/DisclaimerModalComponent.tsx new file mode 100644 index 0000000..be5f9dd --- /dev/null +++ b/client/components/DisclaimerModalComponent.tsx @@ -0,0 +1,159 @@ +"use client"; + +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; + +interface DisclaimerModalProps { + isOpen: boolean; + onClose: () => void; +} + +export const DisclaimerModalComponent = ({ isOpen, onClose }: DisclaimerModalProps) => { + if (!isOpen) return null; + + return ( +
+ + + + Legal Terms & Disclaimers + + + + +
+
+

Terms of Service & User Agreement

+

+ By accessing and using this collaborative text editing service ("Osborne"), you acknowledge + that you have read, understood, and agree to be bound by these terms and conditions. + If you do not agree to these terms, please do not use our service. +

+
+ +
+

Service Description

+

+ Osborne is a real-time collaborative text editing platform that allows multiple users to + simultaneously edit documents, share code, and collaborate on text-based projects. The service + is provided "as is" without warranties of any kind. +

+
+ +
+

User Content & Liability Disclaimer

+

+ IMPORTANT: Users are solely responsible for all content they create, upload, + share, or collaborate on through our platform. We do not monitor, review, or control user-generated content. +

+
+

Content Liability Waiver

+
    +
  • We are not responsible for any content created or shared by users
  • +
  • We do not endorse, verify, or guarantee the accuracy of user content
  • +
  • Users assume full legal responsibility for their content and actions
  • +
  • We reserve the right to remove content that violates our terms or applicable laws
  • +
+
+
+ +
+

Privacy & Data Handling

+

Your privacy is important to us. Here's how we handle your data:

+
    +
  • Document Content: Stored temporarily for collaboration; users control persistence
  • +
  • No Personal Data Collection: We don't require registration or collect personal information
  • +
  • Session Data: Room codes and collaborative sessions are temporary
  • +
  • No Tracking: We don't use analytics or tracking cookies
  • +
+
+ +
+

Acceptable Use Policy

+
+
+

✓ Permitted Uses:

+
    +
  • Collaborative document editing and code sharing
  • +
  • Educational and professional projects
  • +
  • Open source development and documentation
  • +
  • Creative writing and content creation
  • +
+
+
+

✗ Prohibited Uses:

+
    +
  • Illegal activities or content that violates applicable laws
  • +
  • Harassment, hate speech, or discriminatory content
  • +
  • Copyrighted material without proper authorization
  • +
  • Malicious code, viruses, or security threats
  • +
  • Spam, phishing, or fraudulent activities
  • +
+
+
+
+ +
+

Service Availability & Technical Disclaimers

+
+

No Uptime Guarantees: Service availability is not guaranteed; planned and unplanned outages may occur.

+

Data Loss Risk: Users should maintain backups; we're not liable for any data loss or corruption.

+

Beta Software: This service may contain bugs, errors, or incomplete features.

+

No Support Obligation: Technical support is provided on a best-effort basis.

+
+
+ +
+

Limitation of Liability

+

+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, WE SHALL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, + SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO LOSS OF PROFITS, + DATA, OR USE, ARISING OUT OF OR RELATING TO YOUR USE OF THE SERVICE. +

+
+ +
+

Intellectual Property

+

+ Users retain ownership of their original content. By using our service, users grant us a + limited license to host, store, and facilitate collaboration on their content solely for + the purpose of providing the service. +

+

+ The Osborne platform, its code, design, and functionality are protected by intellectual + property laws and remain the property of WebArk and its licensors. +

+
+ +
+

Termination

+

+ We reserve the right to terminate or suspend access to our service at any time, without + prior notice, for conduct that we believe violates these terms or is harmful to other + users, us, or third parties. +

+
+ +
+

Governing Law

+

+ These terms shall be interpreted and governed in accordance with applicable laws. + Any disputes shall be resolved through appropriate legal channels. +

+
+ +
+

+ Last Updated: October 31, 2025
+ These terms are subject to change. Continued use of the service constitutes acceptance of any modifications. + For questions or concerns, contact: legal@webark.in +

+
+
+
+
+
+ ); +}; \ No newline at end of file diff --git a/client/components/CodeEditor.tsx b/client/components/Editor.tsx similarity index 100% rename from client/components/CodeEditor.tsx rename to client/components/Editor.tsx diff --git a/client/components/Footer.tsx b/client/components/Footer.tsx new file mode 100644 index 0000000..cb763ff --- /dev/null +++ b/client/components/Footer.tsx @@ -0,0 +1,54 @@ +"use client"; + +interface LegalFooterProps { + onDisclaimerOpen: () => void; + onDMCAOpen: () => void; +} + +export const LegalFooter = ({ onDisclaimerOpen, onDMCAOpen }: LegalFooterProps) => { + return ( + <> + {/* Legal Notice Footer */} +
+
+

+ By using this service, you agree to our Terms of Service and acknowledge our disclaimers. + User uploaded content is not monitored or endorsed by us. +

+
+ + +
+
+
+ + ); +}; \ No newline at end of file diff --git a/client/lib/themes.ts b/client/lib/themes.ts index 38de91f..a2fe37a 100644 --- a/client/lib/themes.ts +++ b/client/lib/themes.ts @@ -23,48 +23,6 @@ export interface ThemeConfig { } export const VSCODE_THEMES: ThemeConfig[] = [ - { - id: 'one-dark-pro', - name: 'One Dark Pro', - type: 'dark', - colors: { - background: 'hsl(220, 13%, 18%)', - foreground: 'hsl(220, 9%, 55%)', - card: 'hsl(220, 13%, 20%)', - cardForeground: 'hsl(220, 9%, 55%)', - popover: 'hsl(220, 13%, 20%)', - popoverForeground: 'hsl(220, 9%, 55%)', - border: 'hsl(220, 13%, 25%)', - primary: 'hsl(187, 47%, 55%)', - primaryForeground: 'hsl(220, 13%, 18%)', - muted: 'hsl(220, 13%, 22%)', - mutedForeground: 'hsl(220, 9%, 40%)', - accent: 'hsl(220, 13%, 22%)', - accentForeground: 'hsl(220, 9%, 55%)', - destructive: 'hsl(355, 65%, 65%)', - destructiveForeground: 'hsl(220, 13%, 18%)', - } - }, - { - id: 'dracula', - name: 'Dracula Official', - type: 'dark', - colors: { - background: 'hsl(231, 15%, 18%)', - foreground: 'hsl(60, 30%, 96%)', - card: 'hsl(232, 14%, 20%)', - cardForeground: 'hsl(60, 30%, 96%)', - border: 'hsl(231, 11%, 27%)', - primary: 'hsl(265, 89%, 78%)', - primaryForeground: 'hsl(231, 15%, 18%)', - muted: 'hsl(232, 14%, 22%)', - mutedForeground: 'hsl(233, 15%, 41%)', - accent: 'hsl(232, 14%, 22%)', - accentForeground: 'hsl(60, 30%, 96%)', - destructive: 'hsl(0, 100%, 67%)', - destructiveForeground: 'hsl(231, 15%, 18%)', - } - }, { id: 'github-dark', name: 'GitHub Dark', @@ -146,8 +104,8 @@ export const VSCODE_THEMES: ThemeConfig[] = [ } }, { - id: 'monokai-pro', - name: 'Monokai Pro', + id: 'monokai', + name: 'Monokai', type: 'dark', colors: { background: 'hsl(60, 3%, 15%)', @@ -227,7 +185,7 @@ export const VSCODE_THEMES: ThemeConfig[] = [ }, { id: 'light-plus', - name: 'Light+ (default light)', + name: 'Light+', type: 'light', colors: { background: 'hsl(0, 0%, 100%)', @@ -266,8 +224,8 @@ export const VSCODE_THEMES: ThemeConfig[] = [ } }, { - id: 'one-dark-pro', - name: 'One Dark Pro', + id: 'one-dark', + name: 'One Dark', type: 'dark', colors: { background: 'hsl(220, 13%, 18%)', diff --git a/client/package-lock.json b/client/package-lock.json index 4b7177f..f0e699d 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9652,7 +9652,6 @@ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", - "peer": true, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }