diff --git a/apps/web/package.json b/apps/web/package.json index df21861..33f9d75 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -38,6 +38,8 @@ "dependencies": { "bits-ui": "^0.15.1", "clsx": "^2.1.0", + "lucide-svelte": "^0.316.0", + "mode-watcher": "^0.1.2", "pocketbase": "^0.21.0", "radix-icons-svelte": "^1.2.1", "tailwind-merge": "^2.2.1", diff --git a/apps/web/pnpm-lock.yaml b/apps/web/pnpm-lock.yaml index 72d83b3..161bb8b 100644 --- a/apps/web/pnpm-lock.yaml +++ b/apps/web/pnpm-lock.yaml @@ -11,6 +11,12 @@ dependencies: clsx: specifier: ^2.1.0 version: 2.1.0 + lucide-svelte: + specifier: ^0.316.0 + version: 0.316.0(svelte@4.2.9) + mode-watcher: + specifier: ^0.1.2 + version: 0.1.2(svelte@4.2.9) pocketbase: specifier: ^0.21.0 version: 0.21.0 @@ -1651,6 +1657,14 @@ packages: yallist: 4.0.0 dev: true + /lucide-svelte@0.316.0(svelte@4.2.9): + resolution: {integrity: sha512-6mtBw/aU1IIVXfN6AXLSwsbeCFX/2/tTy84rrDTDsOq7BEijFbvObQsPEWPxJ0EyCjUXOYfAvfkZzMosYjyGqA==} + peerDependencies: + svelte: '>=3 <5' + dependencies: + svelte: 4.2.9 + dev: false + /magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -1703,6 +1717,14 @@ packages: minimist: 1.2.8 dev: true + /mode-watcher@0.1.2(svelte@4.2.9): + resolution: {integrity: sha512-XTdPCdqC3kqSvB+Q262Kor983YJkkB2Z3vj9uqg5IqKQpOdiz+xB99Jihp8sWbyM67drC7KKp0Nt5FzCypZi2g==} + peerDependencies: + svelte: ^4.0.0 + dependencies: + svelte: 4.2.9 + dev: false + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} diff --git a/apps/web/src/app.html b/apps/web/src/app.html index 77a5ff5..50bf0af 100644 --- a/apps/web/src/app.html +++ b/apps/web/src/app.html @@ -2,11 +2,23 @@ - - + + + + + + + + + %sveltekit.head% - -
%sveltekit.body%
+ +
+ %sveltekit.body% +
- + \ No newline at end of file diff --git a/apps/web/src/app.pcss b/apps/web/src/app.pcss index 5cd56fc..b97609b 100644 --- a/apps/web/src/app.pcss +++ b/apps/web/src/app.pcss @@ -3,69 +3,49 @@ @tailwind utilities; @layer base { - :root { - --background: 0 0% 100%; - --foreground: 0 0% 3.9%; - - --muted: 0 0% 96.1%; - --muted-foreground: 0 0% 45.1%; - - --popover: 0 0% 100%; - --popover-foreground: 0 0% 3.9%; - - --card: 0 0% 100%; - --card-foreground: 0 0% 3.9%; - - --border: 0 0% 89.8%; - --input: 0 0% 89.8%; - - --primary: 0 0% 9%; - --primary-foreground: 0 0% 98%; - - --secondary: 0 0% 96.1%; - --secondary-foreground: 0 0% 9%; - - --accent: 0 0% 96.1%; - --accent-foreground: 0 0% 9%; - - --destructive: 0 72.2% 50.6%; - --destructive-foreground: 0 0% 98%; - - --ring: 0 0% 3.9%; - - --radius: 0.5rem; - } - - .dark { - --background: 0 0% 3.9%; - --foreground: 0 0% 98%; - - --muted: 0 0% 14.9%; - --muted-foreground: 0 0% 63.9%; - - --popover: 0 0% 3.9%; - --popover-foreground: 0 0% 98%; - - --card: 0 0% 3.9%; - --card-foreground: 0 0% 98%; - - --border: 0 0% 14.9%; - --input: 0 0% 14.9%; - - --primary: 0 0% 98%; - --primary-foreground: 0 0% 9%; - - --secondary: 0 0% 14.9%; - --secondary-foreground: 0 0% 98%; - - --accent: 0 0% 14.9%; - --accent-foreground: 0 0% 98%; - - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 0% 98%; - - --ring: 0 0% 83.1%; - } + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --primary: 0 72.2% 50.6%; + --primary-foreground: 0 85.7% 97.3%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 72.22% 50.59%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --ring: 0 72.2% 50.6%; + --radius: 0rem; + } + .dark { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 72.2% 50.6%; + --primary-foreground: 0 85.7% 97.3%; + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + --ring: 0 72.2% 50.6%; + } } @layer base { diff --git a/apps/web/src/lib/components/site/icons/github.svelte b/apps/web/src/lib/components/site/icons/github.svelte new file mode 100644 index 0000000..47cce76 --- /dev/null +++ b/apps/web/src/lib/components/site/icons/github.svelte @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/src/lib/components/site/icons/index.ts b/apps/web/src/lib/components/site/icons/index.ts new file mode 100644 index 0000000..7a0a45b --- /dev/null +++ b/apps/web/src/lib/components/site/icons/index.ts @@ -0,0 +1,14 @@ +import type { Icon as LucideIcon } from 'lucide-svelte'; +import { GithubLogo, VercelLogo, LinkedinLogo } from 'radix-icons-svelte'; +import Logo from './logo.svelte'; +import Svelte from './svelte.svelte'; + +export type Icon = LucideIcon; + +export const Icons = { + logo: Logo, + gitHub: GithubLogo, + svelte: Svelte, + vercel: VercelLogo, + linkedIn: LinkedinLogo +}; diff --git a/apps/web/src/lib/components/site/icons/logo.svelte b/apps/web/src/lib/components/site/icons/logo.svelte new file mode 100644 index 0000000..4e83575 --- /dev/null +++ b/apps/web/src/lib/components/site/icons/logo.svelte @@ -0,0 +1,7 @@ + + + + + + diff --git a/apps/web/src/lib/components/site/icons/svelte.svelte b/apps/web/src/lib/components/site/icons/svelte.svelte new file mode 100644 index 0000000..a0694cf --- /dev/null +++ b/apps/web/src/lib/components/site/icons/svelte.svelte @@ -0,0 +1,15 @@ + diff --git a/apps/web/src/lib/components/site/icons/vercel.svelte b/apps/web/src/lib/components/site/icons/vercel.svelte new file mode 100644 index 0000000..b406fae --- /dev/null +++ b/apps/web/src/lib/components/site/icons/vercel.svelte @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/src/lib/components/site/index.ts b/apps/web/src/lib/components/site/index.ts new file mode 100644 index 0000000..a91975c --- /dev/null +++ b/apps/web/src/lib/components/site/index.ts @@ -0,0 +1,8 @@ +export { default as Metadata } from './metadata.svelte'; +export { default as SiteFooter } from './site-footer.svelte'; +export { default as SiteNavBar } from './site-navbar.svelte'; +export { default as TailwindIndicator } from './tailwind-indicator.svelte'; +export { default as ModeToggle } from './mode-toggle.svelte';; + +export * from './icons'; +export * from './nav'; diff --git a/apps/web/src/lib/components/site/metadata.svelte b/apps/web/src/lib/components/site/metadata.svelte new file mode 100644 index 0000000..03ff039 --- /dev/null +++ b/apps/web/src/lib/components/site/metadata.svelte @@ -0,0 +1,36 @@ + + + + {title} + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/src/lib/components/site/mode-toggle.svelte b/apps/web/src/lib/components/site/mode-toggle.svelte new file mode 100644 index 0000000..afffe5c --- /dev/null +++ b/apps/web/src/lib/components/site/mode-toggle.svelte @@ -0,0 +1,25 @@ + + + + + + + + setMode('light')}>Light + setMode('dark')}>Dark + resetMode()}>System + + diff --git a/apps/web/src/lib/components/site/nav/index.ts b/apps/web/src/lib/components/site/nav/index.ts new file mode 100644 index 0000000..c17dc31 --- /dev/null +++ b/apps/web/src/lib/components/site/nav/index.ts @@ -0,0 +1,2 @@ +export { default as MainNav } from './main-nav.svelte'; +export { default as MobileNav } from './mobile-nav.svelte'; diff --git a/apps/web/src/lib/components/site/nav/main-nav.svelte b/apps/web/src/lib/components/site/nav/main-nav.svelte new file mode 100644 index 0000000..d9dbf1f --- /dev/null +++ b/apps/web/src/lib/components/site/nav/main-nav.svelte @@ -0,0 +1,23 @@ + + + diff --git a/apps/web/src/lib/components/site/nav/mobile-link.svelte b/apps/web/src/lib/components/site/nav/mobile-link.svelte new file mode 100644 index 0000000..608aa0d --- /dev/null +++ b/apps/web/src/lib/components/site/nav/mobile-link.svelte @@ -0,0 +1,23 @@ + + + (open = false)} + class={cn( + $page.url.pathname === href ? 'text-foreground' : 'text-foreground/60', + 'hover:text-foreground', + className + )} + {...$$restProps} +> + + diff --git a/apps/web/src/lib/components/site/nav/mobile-nav.svelte b/apps/web/src/lib/components/site/nav/mobile-nav.svelte new file mode 100644 index 0000000..8777ca7 --- /dev/null +++ b/apps/web/src/lib/components/site/nav/mobile-nav.svelte @@ -0,0 +1,65 @@ + + + + + + + + + Logo icon (return home) + icon of hellob.art + {siteConfig.name} + +
+
+ {#each navConfig.mainNav as navItem, index (navItem + index.toString())} + {#if navItem.href} + + {navItem.title} + + {/if} + {/each} +
+
+ {#each navConfig.sidebarNav as navItem, index (index)} +
+

{navItem.title}

+ {#if navItem?.items?.length} + {#each navItem.items as item} + {#if !item.disabled && item.href} + + {item.title} + {#if item.label} + + {item.label} + + {/if} + + {/if} + {/each} + {/if} +
+ {/each} +
+
+
+
diff --git a/apps/web/src/lib/components/site/site-footer.svelte b/apps/web/src/lib/components/site/site-footer.svelte new file mode 100644 index 0000000..27493e4 --- /dev/null +++ b/apps/web/src/lib/components/site/site-footer.svelte @@ -0,0 +1,13 @@ + + + diff --git a/apps/web/src/lib/components/site/site-header.svelte b/apps/web/src/lib/components/site/site-header.svelte new file mode 100644 index 0000000..c916958 --- /dev/null +++ b/apps/web/src/lib/components/site/site-header.svelte @@ -0,0 +1,12 @@ + + + + {title} + + {subTitle} + + + diff --git a/apps/web/src/lib/components/site/site-navbar.svelte b/apps/web/src/lib/components/site/site-navbar.svelte new file mode 100644 index 0000000..cefdf38 --- /dev/null +++ b/apps/web/src/lib/components/site/site-navbar.svelte @@ -0,0 +1,52 @@ + + +
+
+ + Logo (return home) + + + + + +
+
diff --git a/apps/web/src/lib/components/site/tailwind-indicator.svelte b/apps/web/src/lib/components/site/tailwind-indicator.svelte new file mode 100644 index 0000000..2ed9cc6 --- /dev/null +++ b/apps/web/src/lib/components/site/tailwind-indicator.svelte @@ -0,0 +1,10 @@ +
+
xs
+ + + + + +
diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte new file mode 100644 index 0000000..727dbd5 --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte @@ -0,0 +1,35 @@ + + + + + + + + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte new file mode 100644 index 0000000..3d09fe9 --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte @@ -0,0 +1,26 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte new file mode 100644 index 0000000..aaf9d71 --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte @@ -0,0 +1,31 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte new file mode 100644 index 0000000..a7fb3c4 --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte new file mode 100644 index 0000000..1c74ae1 --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte @@ -0,0 +1,11 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte new file mode 100644 index 0000000..e518364 --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte @@ -0,0 +1,35 @@ + + + + + + + + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte new file mode 100644 index 0000000..775f8fe --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte @@ -0,0 +1,14 @@ + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte new file mode 100644 index 0000000..696d3bd --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte new file mode 100644 index 0000000..eec9bfa --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte @@ -0,0 +1,29 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte new file mode 100644 index 0000000..0ffc09b --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte @@ -0,0 +1,32 @@ + + + + + + diff --git a/apps/web/src/lib/components/ui/dropdown-menu/index.ts b/apps/web/src/lib/components/ui/dropdown-menu/index.ts new file mode 100644 index 0000000..313213a --- /dev/null +++ b/apps/web/src/lib/components/ui/dropdown-menu/index.ts @@ -0,0 +1,48 @@ +import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; +import Item from "./dropdown-menu-item.svelte"; +import Label from "./dropdown-menu-label.svelte"; +import Content from "./dropdown-menu-content.svelte"; +import Shortcut from "./dropdown-menu-shortcut.svelte"; +import RadioItem from "./dropdown-menu-radio-item.svelte"; +import Separator from "./dropdown-menu-separator.svelte"; +import RadioGroup from "./dropdown-menu-radio-group.svelte"; +import SubContent from "./dropdown-menu-sub-content.svelte"; +import SubTrigger from "./dropdown-menu-sub-trigger.svelte"; +import CheckboxItem from "./dropdown-menu-checkbox-item.svelte"; + +const Sub = DropdownMenuPrimitive.Sub; +const Root = DropdownMenuPrimitive.Root; +const Trigger = DropdownMenuPrimitive.Trigger; +const Group = DropdownMenuPrimitive.Group; + +export { + Sub, + Root, + Item, + Label, + Group, + Trigger, + Content, + Shortcut, + Separator, + RadioItem, + SubContent, + SubTrigger, + RadioGroup, + CheckboxItem, + // + Root as DropdownMenu, + Sub as DropdownMenuSub, + Item as DropdownMenuItem, + Label as DropdownMenuLabel, + Group as DropdownMenuGroup, + Content as DropdownMenuContent, + Trigger as DropdownMenuTrigger, + Shortcut as DropdownMenuShortcut, + RadioItem as DropdownMenuRadioItem, + Separator as DropdownMenuSeparator, + RadioGroup as DropdownMenuRadioGroup, + SubContent as DropdownMenuSubContent, + SubTrigger as DropdownMenuSubTrigger, + CheckboxItem as DropdownMenuCheckboxItem +}; diff --git a/apps/web/src/lib/components/ui/sheet/index.ts b/apps/web/src/lib/components/ui/sheet/index.ts new file mode 100644 index 0000000..b77b56b --- /dev/null +++ b/apps/web/src/lib/components/ui/sheet/index.ts @@ -0,0 +1,106 @@ +import { Dialog as SheetPrimitive } from "bits-ui"; +import { tv, type VariantProps } from "tailwind-variants"; + +import Portal from "./sheet-portal.svelte"; +import Overlay from "./sheet-overlay.svelte"; +import Content from "./sheet-content.svelte"; +import Header from "./sheet-header.svelte"; +import Footer from "./sheet-footer.svelte"; +import Title from "./sheet-title.svelte"; +import Description from "./sheet-description.svelte"; + +const Root = SheetPrimitive.Root; +const Close = SheetPrimitive.Close; +const Trigger = SheetPrimitive.Trigger; + +export { + Root, + Close, + Trigger, + Portal, + Overlay, + Content, + Header, + Footer, + Title, + Description, + // + Root as Sheet, + Close as SheetClose, + Trigger as SheetTrigger, + Portal as SheetPortal, + Overlay as SheetOverlay, + Content as SheetContent, + Header as SheetHeader, + Footer as SheetFooter, + Title as SheetTitle, + Description as SheetDescription +}; + +export const sheetVariants = tv({ + base: "fixed z-50 gap-4 bg-background p-6 shadow-lg", + variants: { + side: { + top: "inset-x-0 top-0 border-b ", + bottom: "inset-x-0 bottom-0 border-t", + left: "inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm", + right: "inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm" + } + }, + defaultVariants: { + side: "right" + } +}); + +export const sheetTransitions = { + top: { + in: { + y: "-100%", + duration: 500, + opacity: 1 + }, + out: { + y: "-100%", + duration: 300, + opacity: 1 + } + }, + bottom: { + in: { + y: "100%", + duration: 500, + opacity: 1 + }, + out: { + y: "100%", + duration: 300, + opacity: 1 + } + }, + left: { + in: { + x: "-100%", + duration: 500, + opacity: 1 + }, + out: { + x: "-100%", + duration: 300, + opacity: 1 + } + }, + right: { + in: { + x: "100%", + duration: 500, + opacity: 1 + }, + out: { + x: "100%", + duration: 300, + opacity: 1 + } + } +}; + +export type Side = VariantProps["side"]; diff --git a/apps/web/src/lib/components/ui/sheet/sheet-content.svelte b/apps/web/src/lib/components/ui/sheet/sheet-content.svelte new file mode 100644 index 0000000..47d5f9e --- /dev/null +++ b/apps/web/src/lib/components/ui/sheet/sheet-content.svelte @@ -0,0 +1,41 @@ + + + + + + + + + Close + + + diff --git a/apps/web/src/lib/components/ui/sheet/sheet-description.svelte b/apps/web/src/lib/components/ui/sheet/sheet-description.svelte new file mode 100644 index 0000000..6b348a5 --- /dev/null +++ b/apps/web/src/lib/components/ui/sheet/sheet-description.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/sheet/sheet-footer.svelte b/apps/web/src/lib/components/ui/sheet/sheet-footer.svelte new file mode 100644 index 0000000..3c41773 --- /dev/null +++ b/apps/web/src/lib/components/ui/sheet/sheet-footer.svelte @@ -0,0 +1,16 @@ + + +
+ +
diff --git a/apps/web/src/lib/components/ui/sheet/sheet-header.svelte b/apps/web/src/lib/components/ui/sheet/sheet-header.svelte new file mode 100644 index 0000000..b83aaad --- /dev/null +++ b/apps/web/src/lib/components/ui/sheet/sheet-header.svelte @@ -0,0 +1,13 @@ + + +
+ +
diff --git a/apps/web/src/lib/components/ui/sheet/sheet-overlay.svelte b/apps/web/src/lib/components/ui/sheet/sheet-overlay.svelte new file mode 100644 index 0000000..416468d --- /dev/null +++ b/apps/web/src/lib/components/ui/sheet/sheet-overlay.svelte @@ -0,0 +1,21 @@ + + + diff --git a/apps/web/src/lib/components/ui/sheet/sheet-portal.svelte b/apps/web/src/lib/components/ui/sheet/sheet-portal.svelte new file mode 100644 index 0000000..df9e1b9 --- /dev/null +++ b/apps/web/src/lib/components/ui/sheet/sheet-portal.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/sheet/sheet-title.svelte b/apps/web/src/lib/components/ui/sheet/sheet-title.svelte new file mode 100644 index 0000000..b50ea5f --- /dev/null +++ b/apps/web/src/lib/components/ui/sheet/sheet-title.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/apps/web/src/lib/config/nav.ts b/apps/web/src/lib/config/nav.ts new file mode 100644 index 0000000..489181f --- /dev/null +++ b/apps/web/src/lib/config/nav.ts @@ -0,0 +1,24 @@ +import type { NavItem, SidebarNavItem } from '$lib/types/nav'; + +interface NavConfig { + mainNav: NavItem[]; + sidebarNav: SidebarNavItem[]; +} + +export const navConfig: NavConfig = { + mainNav: [ + { + title: 'Home', + href: '/' + }, + { + title: 'Login', + href: '/login' + }, + { + title: 'Signup', + href: '/signup' + } + ], + sidebarNav: [] +}; diff --git a/apps/web/src/lib/config/site.ts b/apps/web/src/lib/config/site.ts new file mode 100644 index 0000000..8e8bd23 --- /dev/null +++ b/apps/web/src/lib/config/site.ts @@ -0,0 +1,17 @@ +const SITE_URL = + import.meta.env.VERCEL_ENV === 'preview' ? import.meta.env.VERCEL_URL : 'omnidash.io'; + +export const siteConfig = { + name: 'Omnidash', + author: 'Bart van der Braak', + url: SITE_URL, + description: 'Self-hostable dashboard using connectors to a multitude of ticketing systems.', + ogImage: `https://${SITE_URL}/og.png`, + links: { + gitHubProfile: 'https://github.com/bartvdbraak', + gitHubProject: 'https://github.com/bartvdbraak/omnidash', + }, + keywords: `Ticket,Dashboard,Self-hosted,${SITE_URL},Bart van der Braak,Omnidash`, +}; + +export type SiteConfig = typeof siteConfig; diff --git a/apps/web/src/lib/types/nav.ts b/apps/web/src/lib/types/nav.ts new file mode 100644 index 0000000..a4eecd2 --- /dev/null +++ b/apps/web/src/lib/types/nav.ts @@ -0,0 +1,18 @@ +import type { Icons } from '$lib/components/site/icons'; + +export type NavItem = { + title: string; + href: string; + disabled?: boolean; + external?: boolean; + icon?: keyof typeof Icons; + label?: string; +}; + +export type SidebarNavItem = NavItem & { + items: SidebarNavItem[]; +}; + +export type NavItemWithChildren = NavItem & { + items: NavItemWithChildren[]; +}; diff --git a/apps/web/src/routes/+layout.svelte b/apps/web/src/routes/+layout.svelte index 17abf18..30ac010 100644 --- a/apps/web/src/routes/+layout.svelte +++ b/apps/web/src/routes/+layout.svelte @@ -1,5 +1,26 @@ - - + + + + +
+ +
+ +
+ +
+ +
+ + {#if dev} + + {/if} +
diff --git a/apps/web/src/routes/+page.svelte b/apps/web/src/routes/+page.svelte index 51e11f3..188bb5b 100644 --- a/apps/web/src/routes/+page.svelte +++ b/apps/web/src/routes/+page.svelte @@ -16,11 +16,3 @@ {/if} - diff --git a/apps/web/static/apple-touch-icon.png b/apps/web/static/apple-touch-icon.png new file mode 100644 index 0000000..89fbaf5 Binary files /dev/null and b/apps/web/static/apple-touch-icon.png differ diff --git a/apps/web/static/favicon-16x16.png b/apps/web/static/favicon-16x16.png new file mode 100644 index 0000000..8936240 Binary files /dev/null and b/apps/web/static/favicon-16x16.png differ diff --git a/apps/web/static/favicon-32x32.png b/apps/web/static/favicon-32x32.png new file mode 100644 index 0000000..4c4bcca Binary files /dev/null and b/apps/web/static/favicon-32x32.png differ diff --git a/apps/web/static/favicon.ico b/apps/web/static/favicon.ico new file mode 100644 index 0000000..eabb654 Binary files /dev/null and b/apps/web/static/favicon.ico differ diff --git a/apps/web/static/favicon.png b/apps/web/static/favicon.png deleted file mode 100644 index 825b9e6..0000000 Binary files a/apps/web/static/favicon.png and /dev/null differ diff --git a/apps/web/static/omnidash.svg b/apps/web/static/omnidash.svg new file mode 100644 index 0000000..4e83575 --- /dev/null +++ b/apps/web/static/omnidash.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/apps/web/static/safari-pinned-tab.svg b/apps/web/static/safari-pinned-tab.svg new file mode 100644 index 0000000..7b9e6c2 --- /dev/null +++ b/apps/web/static/safari-pinned-tab.svg @@ -0,0 +1,40 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + + + diff --git a/apps/web/static/site.webmanifest b/apps/web/static/site.webmanifest new file mode 100644 index 0000000..b20abb7 --- /dev/null +++ b/apps/web/static/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +}