diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..00ad71fb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules\\typescript\\lib" +} \ No newline at end of file diff --git a/apps/www/.eslintrc.cjs b/apps/www/.eslintrc.cjs index 92574ffc..728e75f8 100644 --- a/apps/www/.eslintrc.cjs +++ b/apps/www/.eslintrc.cjs @@ -1,7 +1,7 @@ /** @type {import("eslint").Linter.Config} */ module.exports = { root: true, - extends: ["@nestri/eslint-config/react-internal.js"], + extends: ["@nestri/eslint-config/qwik.js"], parser: "@typescript-eslint/parser", parserOptions: { //Find some way to use the lint tsconfig diff --git a/apps/www/src/routes/layout.tsx b/apps/www/src/routes/layout.tsx index f799e429..38176ed0 100644 --- a/apps/www/src/routes/layout.tsx +++ b/apps/www/src/routes/layout.tsx @@ -1,5 +1,6 @@ import { component$, Slot } from "@builder.io/qwik"; -import type { RequestHandler } from "@builder.io/qwik-city"; +import { NavProgress } from "@nestri/ui"; +import type { DocumentHead, RequestHandler } from "@builder.io/qwik-city"; export const onGet: RequestHandler = async ({ cacheControl }) => { // Control caching for this request for best performance and to reduce hosting costs: @@ -13,5 +14,40 @@ export const onGet: RequestHandler = async ({ cacheControl }) => { }; export default component$(() => { - return ; + return ( + <> + + + + ); }); + +export const head: DocumentHead = { + title: 'Nestri – Your games. Your rules.', + meta: [ + { + name: 'description', + content: 'Nestri – Your games. Your rules.', + }, + { + name: "og:title", + content: "Nestri – Your games. Your rules.", + }, + { + name: "og:description", + content: "Play games with friends right from your browser.", + }, + { + name: "twitter:title", + content: "Nestri – Your games. Your rules.", + }, + { + name: "twitter:description", + content: "Play games with friends right from your browser.", + }, + { + name: "twitter:card", + content: "summary_large_image", + }, + ], +}; diff --git a/bun.lockb b/bun.lockb index bffc2693..e269eec7 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js index 124efcbf..95d22f23 100644 --- a/packages/ui/.eslintrc.js +++ b/packages/ui/.eslintrc.js @@ -1,7 +1,7 @@ /** @type {import("eslint").Linter.Config} */ module.exports = { root: true, - extends: ["@nestri/eslint-config/react-internal.js"], + extends: ["@nestri/eslint-config/qwik.js"], parser: "@typescript-eslint/parser", parserOptions: { project: "./tsconfig.lint.json", diff --git a/packages/ui/package.json b/packages/ui/package.json index c5e6e762..f86c8a00 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -3,31 +3,39 @@ "version": "0.0.0", "private": true, "exports": { - "./button": "./src/button.tsx", - "./card": "./src/card.tsx", - "./code": "./src/code.tsx", + ".": "./src/index.ts", + "./react": "./src/react/index.ts", "./tailwind.config": "./tailwind.config.js", "./globals.css": "./globals.css", "./postcss": "./post.config.js" }, - "files": ["tailwind.config.js", "post.config.js", "globals.css", "postcss.config.js"], + "files": [ + "tailwind.config.js", + "post.config.js", + "globals.css", + "postcss.config.js" + ], "scripts": { - "lint": "eslint . --max-warnings 0", - "generate:component": "turbo gen react-component" + "lint": "eslint . --max-warnings 0" }, "devDependencies": { "@builder.io/qwik": "^1.8.0", + "@builder.io/qwik-city": "^1.8.0", "@builder.io/qwik-react": "^0.5.5", + "@fontsource/bricolage-grotesque": "^5.0.7", + "@fontsource/geist-sans": "^5.0.3", "@nestri/eslint-config": "*", "@nestri/typescript-config": "*", "@turbo/gen": "^1.12.4", - "@types/eslint": "^8.56.5", + "@types/eslint": "^9.6.1", "@types/node": "^20.11.24", + "@types/nprogress": "^0.2.3", "@types/react": "^18.3.4", "@types/react-dom": "^18.3.0", "autoprefixer": "^10.4.20", - "eslint": "^8.57.0", + "eslint": "^9.9.1", "framer-motion": "^11.3.31", + "nprogress": "^0.2.0", "postcss": "^8.4.41", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -36,4 +44,4 @@ "tailwindcss": "^3.4.10", "typescript": "^5.3.3" } -} +} \ No newline at end of file diff --git a/packages/ui/src/button.tsx b/packages/ui/src/button.tsx deleted file mode 100644 index 78e5420c..00000000 --- a/packages/ui/src/button.tsx +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; - -import { ReactNode } from "react"; - -interface ButtonProps { - children: ReactNode; - className?: string; - appName: string; -} - -export const Button = ({ children, className, appName }: ButtonProps) => { - return ( - - ); -}; diff --git a/packages/ui/src/card.tsx b/packages/ui/src/card.tsx deleted file mode 100644 index f69672e1..00000000 --- a/packages/ui/src/card.tsx +++ /dev/null @@ -1,25 +0,0 @@ -export function Card({ - className, - title, - children, - href, -}: { - className?: string; - title: string; - children: React.ReactNode; - href: string; -}): JSX.Element { - return ( - -

- {title} -> -

-

{children}

-
- ); -} diff --git a/packages/ui/src/code.tsx b/packages/ui/src/code.tsx deleted file mode 100644 index 769d9711..00000000 --- a/packages/ui/src/code.tsx +++ /dev/null @@ -1,9 +0,0 @@ -export function Code({ - children, - className, -}: { - children: React.ReactNode; - className?: string; -}): JSX.Element { - return {children}; -} diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts new file mode 100644 index 00000000..4ff4d92c --- /dev/null +++ b/packages/ui/src/index.ts @@ -0,0 +1 @@ +export * from "./nav-progress" \ No newline at end of file diff --git a/packages/ui/src/nav-progress/index.tsx b/packages/ui/src/nav-progress/index.tsx new file mode 100644 index 00000000..8bf19acb --- /dev/null +++ b/packages/ui/src/nav-progress/index.tsx @@ -0,0 +1,43 @@ +import { component$, useStyles$, useVisibleTask$ } from '@builder.io/qwik' +import { useLocation } from '@builder.io/qwik-city' +import type { NProgressOptions } from 'nprogress' +import nProgress from 'nprogress' +import nProgressStyles from 'nprogress/nprogress.css?inline' +import nPrStyles from './npr.css?inline' + +interface Props { + options?: Partial & + Partial<{ + color: string + height: string + }> +} + +export const NavProgress = component$(({ options = {} }: Props) => { + // const CSS_VAR_PREFIX = '--nav-progress-' + + useStyles$(nProgressStyles + nPrStyles) + + nProgress.configure({ showSpinner: false, ...options }) + + const location = useLocation() + + // eslint-disable-next-line qwik/no-use-visible-task + useVisibleTask$(({ track }) => { + const isNavigating = track(() => location.isNavigating) + if (isNavigating) nProgress.start() + else nProgress.done() + }) + + // return ( + // + // ) + return
+}) \ No newline at end of file diff --git a/packages/ui/src/nav-progress/npr.css b/packages/ui/src/nav-progress/npr.css new file mode 100644 index 00000000..05504c32 --- /dev/null +++ b/packages/ui/src/nav-progress/npr.css @@ -0,0 +1,53 @@ +#nprogress .bar { + background: theme("colors.primary.500"); + height: 2px; + z-index: 80; +} + +/* Fancy blur effect */ +#nprogress .peg { + box-shadow: 0 0 10px theme("colors.primary.500"), + 0 0 5px theme("colors.primary.500"); + z-index: 80; +} + +#nprogress .spinner-icon { + border-top-color: theme("colors.primary.500"); + border-left-color: theme("colors.primary.500"); + display: none; +} + +html.dark #nprogress .bar { + background: theme("colors.primary.500"); + height: 2px; +} + +html.dark #nprogress .peg { + box-shadow: 0 0 10px theme("colors.primary.500"), + 0 0 5px theme("colors.primary.500"); +} + +html.dark .spinner-icon { + border-top-color: theme("colors.primary.500"); + border-left-color: theme("colors.primary.500"); + display: none; +} + +@media (prefers-color-scheme: dark) { + + #nprogress .bar { + background: theme("colors.primary.500"); + height: 2px; + } + + #nprogress .peg { + box-shadow: 0 0 10px theme("colors.primary.500"), + 0 0 5px theme("colors.primary.500"); + } + + .spinner-icon { + border-top-color: theme("colors.primary.500"); + border-left-color: theme("colors.primary.500"); + display: none; + } +} \ No newline at end of file diff --git a/packages/ui/src/types/misc.d.ts b/packages/ui/src/types/misc.d.ts new file mode 100644 index 00000000..b4ac795b --- /dev/null +++ b/packages/ui/src/types/misc.d.ts @@ -0,0 +1,4 @@ +declare module '*?inline' { + const content: string; + export default content; +} \ No newline at end of file diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 2f7007fc..96ef040e 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,8 +1,13 @@ { "extends": "@nestri/typescript-config/base.json", "compilerOptions": { - "outDir": "dist" + "outDir": "tmp", + "rootDir": ".", + "allowImportingTsExtensions": true, + "paths": { + "@/*": ["./src/*"] + } }, - "include": ["src"], + "include": ["src", "./*.d.ts"], "exclude": ["node_modules", "dist"] } diff --git a/packages/ui/tsconfig.lint.json b/packages/ui/tsconfig.lint.json index cca55c95..06cf1b6e 100644 --- a/packages/ui/tsconfig.lint.json +++ b/packages/ui/tsconfig.lint.json @@ -3,6 +3,6 @@ "compilerOptions": { "outDir": "dist" }, - "include": ["src", "./*.config.js"], + "include": ["src", "./*.config.js", "./.eslintrc.js"], "exclude": ["node_modules", "dist"] } diff --git a/packages/ui/turbo/generators/config.ts b/packages/ui/turbo/generators/config.ts deleted file mode 100644 index 40100baa..00000000 --- a/packages/ui/turbo/generators/config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { PlopTypes } from "@turbo/gen"; - -// Learn more about Turborepo Generators at https://turbo.build/repo/docs/core-concepts/monorepos/code-generation - -export default function generator(plop: PlopTypes.NodePlopAPI): void { - // A simple generator to add a new React component to the internal UI library - plop.setGenerator("react-component", { - description: "Adds a new react component", - prompts: [ - { - type: "input", - name: "name", - message: "What is the name of the component?", - }, - ], - actions: [ - { - type: "add", - path: "src/{{kebabCase name}}.tsx", - templateFile: "templates/component.hbs", - }, - { - type: "append", - path: "package.json", - pattern: /"exports": {(?)/g, - template: ' "./{{kebabCase name}}": "./src/{{kebabCase name}}.tsx",', - }, - ], - }); -} diff --git a/packages/ui/turbo/generators/templates/component.hbs b/packages/ui/turbo/generators/templates/component.hbs deleted file mode 100644 index d968b9e3..00000000 --- a/packages/ui/turbo/generators/templates/component.hbs +++ /dev/null @@ -1,8 +0,0 @@ -export const {{ pascalCase name }} = ({ children }: { children: React.ReactNode }) => { - return ( -
-

{{ pascalCase name }} Component

- {children} -
- ); -};