| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // @refresh reload
- import { render } from "solid-js/web"
- import { AppBaseProviders, AppInterface } from "@/app"
- import { Platform, PlatformProvider } from "@/context/platform"
- import pkg from "../package.json"
- const root = document.getElementById("root")
- if (import.meta.env.DEV && !(root instanceof HTMLElement)) {
- throw new Error(
- "Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?",
- )
- }
- const platform: Platform = {
- platform: "web",
- version: pkg.version,
- openLink(url: string) {
- window.open(url, "_blank")
- },
- restart: async () => {
- window.location.reload()
- },
- notify: async (title, description, href) => {
- if (!("Notification" in window)) return
- const permission =
- Notification.permission === "default"
- ? await Notification.requestPermission().catch(() => "denied")
- : Notification.permission
- if (permission !== "granted") return
- const inView = document.visibilityState === "visible" && document.hasFocus()
- if (inView) return
- await Promise.resolve()
- .then(() => {
- const notification = new Notification(title, {
- body: description ?? "",
- icon: "https://opencode.ai/favicon-96x96-v2.png",
- })
- notification.onclick = () => {
- window.focus()
- if (href) {
- window.history.pushState(null, "", href)
- window.dispatchEvent(new PopStateEvent("popstate"))
- }
- notification.close()
- }
- })
- .catch(() => undefined)
- },
- }
- render(
- () => (
- <PlatformProvider value={platform}>
- <AppBaseProviders>
- <AppInterface />
- </AppBaseProviders>
- </PlatformProvider>
- ),
- root!,
- )
|