From 7054052602d83d8ba97b5f3485aeddb2db124b23 Mon Sep 17 00:00:00 2001 From: TZGyn Date: Tue, 7 Nov 2023 23:06:53 +0800 Subject: [PATCH 01/65] init --- .gitignore | 10 +++ .npmrc | 1 + .prettierignore | 13 +++ .prettierrc | 9 ++ README.md | 38 +++++++++ bun.lockb | Bin 0 -> 77613 bytes components.json | 13 +++ package.json | 38 +++++++++ postcss.config.cjs | 13 +++ src/app.d.ts | 12 +++ src/app.html | 12 +++ src/app.postcss | 78 ++++++++++++++++++ src/lib/components/theme-toggle.svelte | 26 ++++++ src/lib/components/ui/button/button.svelte | 25 ++++++ src/lib/components/ui/button/index.ts | 51 ++++++++++++ .../dropdown-menu-checkbox-item.svelte | 35 ++++++++ .../dropdown-menu-content.svelte | 25 ++++++ .../dropdown-menu/dropdown-menu-item.svelte | 31 +++++++ .../dropdown-menu/dropdown-menu-label.svelte | 19 +++++ .../dropdown-menu-radio-group.svelte | 11 +++ .../dropdown-menu-radio-item.svelte | 35 ++++++++ .../dropdown-menu-separator.svelte | 14 ++++ .../dropdown-menu-shortcut.svelte | 16 ++++ .../dropdown-menu-sub-content.svelte | 30 +++++++ .../dropdown-menu-sub-trigger.svelte | 32 +++++++ src/lib/components/ui/dropdown-menu/index.ts | 48 +++++++++++ src/lib/index.ts | 1 + src/lib/utils.ts | 62 ++++++++++++++ src/routes/+layout.svelte | 9 ++ src/routes/+page.svelte | 2 + static/favicon.png | Bin 0 -> 1571 bytes svelte.config.js | 18 ++++ tailwind.config.js | 64 ++++++++++++++ tsconfig.json | 17 ++++ vite.config.ts | 6 ++ 35 files changed, 814 insertions(+) create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 components.json create mode 100644 package.json create mode 100644 postcss.config.cjs create mode 100644 src/app.d.ts create mode 100644 src/app.html create mode 100644 src/app.postcss create mode 100644 src/lib/components/theme-toggle.svelte create mode 100644 src/lib/components/ui/button/button.svelte create mode 100644 src/lib/components/ui/button/index.ts create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte create mode 100644 src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte create mode 100644 src/lib/components/ui/dropdown-menu/index.ts create mode 100644 src/lib/index.ts create mode 100644 src/lib/utils.ts create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/+page.svelte create mode 100644 static/favicon.png create mode 100644 svelte.config.js create mode 100644 tailwind.config.js create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6635cf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..3897265 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,13 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example + +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..a77fdde --- /dev/null +++ b/.prettierrc @@ -0,0 +1,9 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte"], + "pluginSearchDirs": ["."], + "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..5c91169 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# create-svelte + +Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npm create svelte@latest + +# create a new project in my-app +npm create svelte@latest my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..2d2d60f6dbcb4717c8306c0568bdfbc1ad02742b GIT binary patch literal 77613 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 literal 0 HcmV?d00001 diff --git a/components.json b/components.json new file mode 100644 index 0000000..ad1c19c --- /dev/null +++ b/components.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://shadcn-svelte.com/schema.json", + "style": "default", + "tailwind": { + "config": "tailwind.config.js", + "css": "src/app.postcss", + "baseColor": "zinc" + }, + "aliases": { + "components": "$lib/components", + "utils": "$lib/utils" + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..fbadbcd --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "link-shortener-svelte", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --plugin-search-dir . --check .", + "format": "prettier --plugin-search-dir . --write ." + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/kit": "^1.20.4", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.24", + "postcss-load-config": "^4.0.1", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.10.1", + "svelte": "^4.0.5", + "svelte-check": "^3.4.3", + "tailwindcss": "^3.3.2", + "tslib": "^2.4.1", + "typescript": "^5.0.0", + "vite": "^4.4.2" + }, + "type": "module", + "dependencies": { + "bits-ui": "^0.9.1", + "clsx": "^2.0.0", + "lucide-svelte": "^0.292.0", + "mode-watcher": "^0.0.7", + "tailwind-merge": "^2.0.0", + "tailwind-variants": "^0.1.18" + } +} diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..fe10e55 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,13 @@ +const tailwindcss = require('tailwindcss'); +const autoprefixer = require('autoprefixer'); + +const config = { + plugins: [ + //Some plugins, like tailwindcss/nesting, need to run before Tailwind, + tailwindcss(), + //But others, like autoprefixer, need to run after, + autoprefixer + ] +}; + +module.exports = config; diff --git a/src/app.d.ts b/src/app.d.ts new file mode 100644 index 0000000..f59b884 --- /dev/null +++ b/src/app.d.ts @@ -0,0 +1,12 @@ +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface Platform {} + } +} + +export {}; diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..6769ed5 --- /dev/null +++ b/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/src/app.postcss b/src/app.postcss new file mode 100644 index 0000000..8a04b2b --- /dev/null +++ b/src/app.postcss @@ -0,0 +1,78 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + + --primary: 240 5.9% 10%; + --primary-foreground: 0 0% 98%; + + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + + --ring: 240 10% 3.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 240 10% 3.9%; + --foreground: 0 0% 98%; + + --muted: 240 3.7% 15.9%; + --muted-foreground: 240 5% 64.9%; + + --popover: 240 10% 3.9%; + --popover-foreground: 0 0% 98%; + + --card: 240 10% 3.9%; + --card-foreground: 0 0% 98%; + + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + + --primary: 0 0% 98%; + --primary-foreground: 240 5.9% 10%; + + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + + --accent: 240 3.7% 15.9%; + --accent-foreground: 0 0% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + + --ring: 240 4.9% 83.9%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/src/lib/components/theme-toggle.svelte b/src/lib/components/theme-toggle.svelte new file mode 100644 index 0000000..24fa938 --- /dev/null +++ b/src/lib/components/theme-toggle.svelte @@ -0,0 +1,26 @@ + + + + + + + + setMode('light')}>Light + setMode('dark')}>Dark + resetMode()}>System + + diff --git a/src/lib/components/ui/button/button.svelte b/src/lib/components/ui/button/button.svelte new file mode 100644 index 0000000..a128f14 --- /dev/null +++ b/src/lib/components/ui/button/button.svelte @@ -0,0 +1,25 @@ + + + + + diff --git a/src/lib/components/ui/button/index.ts b/src/lib/components/ui/button/index.ts new file mode 100644 index 0000000..927556e --- /dev/null +++ b/src/lib/components/ui/button/index.ts @@ -0,0 +1,51 @@ +import Root from "./button.svelte"; +import { tv, type VariantProps } from "tailwind-variants"; +import type { Button as ButtonPrimitive } from "bits-ui"; + +const buttonVariants = tv({ + base: "inline-flex items-center justify-center rounded-md text-sm font-medium whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline" + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10" + } + }, + defaultVariants: { + variant: "default", + size: "default" + } +}); + +type Variant = VariantProps["variant"]; +type Size = VariantProps["size"]; + +type Props = ButtonPrimitive.Props & { + variant?: Variant; + size?: Size; +}; + +type Events = ButtonPrimitive.Events; + +export { + Root, + type Props, + type Events, + // + Root as Button, + type Props as ButtonProps, + type Events as ButtonEvents, + buttonVariants +}; diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte new file mode 100644 index 0000000..23e83e1 --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte @@ -0,0 +1,35 @@ + + + + + + + + + + diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte new file mode 100644 index 0000000..81de2e2 --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte @@ -0,0 +1,25 @@ + + + + + diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte new file mode 100644 index 0000000..c8e6719 --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte @@ -0,0 +1,31 @@ + + + + + diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte new file mode 100644 index 0000000..a7fb3c4 --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte new file mode 100644 index 0000000..1c74ae1 --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte @@ -0,0 +1,11 @@ + + + + + diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte new file mode 100644 index 0000000..21d4b3a --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte @@ -0,0 +1,35 @@ + + + + + + + + + + diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte new file mode 100644 index 0000000..775f8fe --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte @@ -0,0 +1,14 @@ + + + diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte new file mode 100644 index 0000000..caf24ad --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte new file mode 100644 index 0000000..6690085 --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte @@ -0,0 +1,30 @@ + + + + + diff --git a/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte b/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte new file mode 100644 index 0000000..75cf264 --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte @@ -0,0 +1,32 @@ + + + + + + diff --git a/src/lib/components/ui/dropdown-menu/index.ts b/src/lib/components/ui/dropdown-menu/index.ts new file mode 100644 index 0000000..313213a --- /dev/null +++ b/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/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..230a1fb --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,62 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; +import { cubicOut } from "svelte/easing"; +import type { TransitionConfig } from "svelte/transition"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +type FlyAndScaleParams = { + y?: number; + x?: number; + start?: number; + duration?: number; +}; + +export const flyAndScale = ( + node: Element, + params: FlyAndScaleParams = { y: -8, x: 0, start: 0.95, duration: 150 } +): TransitionConfig => { + const style = getComputedStyle(node); + const transform = style.transform === "none" ? "" : style.transform; + + const scaleConversion = ( + valueA: number, + scaleA: [number, number], + scaleB: [number, number] + ) => { + const [minA, maxA] = scaleA; + const [minB, maxB] = scaleB; + + const percentage = (valueA - minA) / (maxA - minA); + const valueB = percentage * (maxB - minB) + minB; + + return valueB; + }; + + const styleToString = ( + style: Record + ): string => { + return Object.keys(style).reduce((str, key) => { + if (style[key] === undefined) return str; + return str + `${key}:${style[key]};`; + }, ""); + }; + + return { + duration: params.duration ?? 200, + delay: 0, + css: (t) => { + const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]); + const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]); + const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]); + + return styleToString({ + transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`, + opacity: t + }); + }, + easing: cubicOut + }; +}; \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..240d26f --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..0341747 --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,2 @@ +

Welcome to SvelteKit

+

Visit kit.svelte.dev to read the documentation

diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 GIT binary patch literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH)", + input: "hsl(var(--input) / )", + ring: "hsl(var(--ring) / )", + background: "hsl(var(--background) / )", + foreground: "hsl(var(--foreground) / )", + primary: { + DEFAULT: "hsl(var(--primary) / )", + foreground: "hsl(var(--primary-foreground) / )" + }, + secondary: { + DEFAULT: "hsl(var(--secondary) / )", + foreground: "hsl(var(--secondary-foreground) / )" + }, + destructive: { + DEFAULT: "hsl(var(--destructive) / )", + foreground: "hsl(var(--destructive-foreground) / )" + }, + muted: { + DEFAULT: "hsl(var(--muted) / )", + foreground: "hsl(var(--muted-foreground) / )" + }, + accent: { + DEFAULT: "hsl(var(--accent) / )", + foreground: "hsl(var(--accent-foreground) / )" + }, + popover: { + DEFAULT: "hsl(var(--popover) / )", + foreground: "hsl(var(--popover-foreground) / )" + }, + card: { + DEFAULT: "hsl(var(--card) / )", + foreground: "hsl(var(--card-foreground) / )" + } + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)" + }, + fontFamily: { + sans: [...fontFamily.sans] + } + } + }, +}; + +export default config; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..6ae0c8c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true + } + // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..bbf8c7d --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,6 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [sveltekit()] +}); From 778baefa054c91adb689f99c1c1d012780601f4e Mon Sep 17 00:00:00 2001 From: TZGyn Date: Thu, 9 Nov 2023 02:25:56 +0800 Subject: [PATCH 02/65] adding docker --- Dockerfile | 17 +++++++++++++++++ bun.lockb | Bin 77613 -> 78019 bytes package.json | 1 + svelte.config.js | 2 +- 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e6271da --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM docker.io/oven/bun + +RUN mkdir /shortener +WORKDIR /shortener + +COPY ./package.json ./ +COPY ./bun.lockb ./ + +RUN bun install --production + +COPY . . + +RUN bun run build + +EXPOSE 3000 + +ENTRYPOINT [ "bun", "./build/index.js"] \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 2d2d60f6dbcb4717c8306c0568bdfbc1ad02742b..5341896f7e2633b1f15931d2d6abcbb42e89aa0b 100755 GIT binary patch delta 10868 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 delta 10663 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 diff --git a/package.json b/package.json index fbadbcd..21551b5 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "prettier": "^2.8.0", "prettier-plugin-svelte": "^2.10.1", "svelte": "^4.0.5", + "svelte-adapter-bun": "^0.5.1", "svelte-check": "^3.4.3", "tailwindcss": "^3.3.2", "tslib": "^2.4.1", diff --git a/svelte.config.js b/svelte.config.js index cf464a5..d1e7e21 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,4 +1,4 @@ -import adapter from '@sveltejs/adapter-auto'; +import adapter from 'svelte-adapter-bun'; import { vitePreprocess } from '@sveltejs/kit/vite'; /** @type {import('@sveltejs/kit').Config} */ From 416557b585e9482f1740e6fcdb37ebd0de3227af Mon Sep 17 00:00:00 2001 From: TZGyn Date: Thu, 9 Nov 2023 02:28:46 +0800 Subject: [PATCH 03/65] update dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e6271da..98529bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /shortener COPY ./package.json ./ COPY ./bun.lockb ./ -RUN bun install --production +RUN bun install COPY . . From 9e133b02950c333308c54fd5ddf963136714a0fc Mon Sep 17 00:00:00 2001 From: TZGyn Date: Thu, 9 Nov 2023 02:58:40 +0800 Subject: [PATCH 04/65] fixed origin issue --- bun.lockb | Bin 78019 -> 77218 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 5341896f7e2633b1f15931d2d6abcbb42e89aa0b..08a94da18b8bb5c1df8db5094f15e4cb77641be8 100755 GIT binary patch delta 10024 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 Date: Thu, 9 Nov 2023 03:01:37 +0800 Subject: [PATCH 05/65] update dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 98529bd..f7ca32b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,4 +14,4 @@ RUN bun run build EXPOSE 3000 -ENTRYPOINT [ "bun", "./build/index.js"] \ No newline at end of file +ENTRYPOINT [ "bun", "run", "start"] \ No newline at end of file From dbe0efb4d7599090f8bf4506ba81355af0732d22 Mon Sep 17 00:00:00 2001 From: TZGyn Date: Thu, 9 Nov 2023 03:09:27 +0800 Subject: [PATCH 06/65] update dockerfile --- Dockerfile | 2 +- package.json | 73 ++++++++++++++++++++++++++-------------------------- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/Dockerfile b/Dockerfile index f7ca32b..98529bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,4 +14,4 @@ RUN bun run build EXPOSE 3000 -ENTRYPOINT [ "bun", "run", "start"] \ No newline at end of file +ENTRYPOINT [ "bun", "./build/index.js"] \ No newline at end of file diff --git a/package.json b/package.json index 81ca916..5da5c26 100644 --- a/package.json +++ b/package.json @@ -1,39 +1,38 @@ { - "name": "link-shortener-svelte", - "version": "0.0.1", - "private": true, - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "start": "ORIGIN=https://link-shortener-svelte-production.up.railway.app bun build/index.js", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --plugin-search-dir . --check .", - "format": "prettier --plugin-search-dir . --write ." - }, - "devDependencies": { - "@sveltejs/kit": "^1.20.4", - "autoprefixer": "^10.4.14", - "postcss": "^8.4.24", - "postcss-load-config": "^4.0.1", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.10.1", - "svelte": "^4.0.5", - "svelte-adapter-bun": "^0.5.1", - "svelte-check": "^3.4.3", - "tailwindcss": "^3.3.2", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "vite": "^4.4.2" - }, - "type": "module", - "dependencies": { - "bits-ui": "^0.9.1", - "clsx": "^2.0.0", - "lucide-svelte": "^0.292.0", - "mode-watcher": "^0.0.7", - "tailwind-merge": "^2.0.0", - "tailwind-variants": "^0.1.18" - } + "name": "link-shortener-svelte", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --plugin-search-dir . --check .", + "format": "prettier --plugin-search-dir . --write ." + }, + "devDependencies": { + "@sveltejs/kit": "^1.20.4", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.24", + "postcss-load-config": "^4.0.1", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.10.1", + "svelte": "^4.0.5", + "svelte-adapter-bun": "^0.5.1", + "svelte-check": "^3.4.3", + "tailwindcss": "^3.3.2", + "tslib": "^2.4.1", + "typescript": "^5.0.0", + "vite": "^4.4.2" + }, + "type": "module", + "dependencies": { + "bits-ui": "^0.9.1", + "clsx": "^2.0.0", + "lucide-svelte": "^0.292.0", + "mode-watcher": "^0.0.7", + "tailwind-merge": "^2.0.0", + "tailwind-variants": "^0.1.18" + } } From 08d83a439d8fb8551c705ee94b3ec6884f988453 Mon Sep 17 00:00:00 2001 From: TZGyn Date: Thu, 9 Nov 2023 03:10:52 +0800 Subject: [PATCH 07/65] added env example --- .env.example | 2 ++ Dockerfile | 1 + 2 files changed, 3 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..08366a9 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +ORIGIN=https://link-shortener-svelte-production.up.railway.app +PORT=3000 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 98529bd..9850414 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,7 @@ COPY ./bun.lockb ./ RUN bun install COPY . . +COPY ./.env.example ./.env RUN bun run build From 60d0a07eba1767d39efa3afc740fe4c4247fd34e Mon Sep 17 00:00:00 2001 From: TZGyn Date: Thu, 9 Nov 2023 03:21:24 +0800 Subject: [PATCH 08/65] update dockerfile --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9850414..327069d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,15 @@ -FROM docker.io/oven/bun +FROM node:18 -RUN mkdir /shortener -WORKDIR /shortener +WORKDIR /app COPY ./package.json ./ COPY ./bun.lockb ./ +RUN npm install -g bun RUN bun install COPY . . -COPY ./.env.example ./.env +# COPY ./.env.example ./.env RUN bun run build From d97c7900572f54f0bacb828cbfb07cca8e1256af Mon Sep 17 00:00:00 2001 From: TZGyn Date: Thu, 9 Nov 2023 03:42:54 +0800 Subject: [PATCH 09/65] added demo login page --- src/lib/components/ui/input/index.ts | 25 +++++++ src/lib/components/ui/input/input.svelte | 33 +++++++++ src/lib/components/ui/label/index.ts | 7 ++ src/lib/components/ui/label/label.svelte | 21 ++++++ src/routes/(app)/+layout.svelte | 6 ++ src/routes/{ => (app)}/+page.svelte | 0 .../login/(components)/user-auth-form.svelte | 61 ++++++++++++++++ src/routes/(auth)/login/+page.svelte | 73 +++++++++++++++++++ src/routes/(auth)/login/+page.ts | 7 ++ src/routes/+layout.svelte | 2 - 10 files changed, 233 insertions(+), 2 deletions(-) create mode 100644 src/lib/components/ui/input/index.ts create mode 100644 src/lib/components/ui/input/input.svelte create mode 100644 src/lib/components/ui/label/index.ts create mode 100644 src/lib/components/ui/label/label.svelte create mode 100644 src/routes/(app)/+layout.svelte rename src/routes/{ => (app)}/+page.svelte (100%) create mode 100644 src/routes/(auth)/login/(components)/user-auth-form.svelte create mode 100644 src/routes/(auth)/login/+page.svelte create mode 100644 src/routes/(auth)/login/+page.ts diff --git a/src/lib/components/ui/input/index.ts b/src/lib/components/ui/input/index.ts new file mode 100644 index 0000000..914dce5 --- /dev/null +++ b/src/lib/components/ui/input/index.ts @@ -0,0 +1,25 @@ +import Root from "./input.svelte"; + +type FormInputEvent = T & { + currentTarget: EventTarget & HTMLInputElement; +}; +export type InputEvents = { + blur: FormInputEvent; + change: FormInputEvent; + click: FormInputEvent; + focus: FormInputEvent; + keydown: FormInputEvent; + keypress: FormInputEvent; + keyup: FormInputEvent; + mouseover: FormInputEvent; + mouseenter: FormInputEvent; + mouseleave: FormInputEvent; + paste: FormInputEvent; + input: FormInputEvent; +}; + +export { + Root, + // + Root as Input +}; diff --git a/src/lib/components/ui/input/input.svelte b/src/lib/components/ui/input/input.svelte new file mode 100644 index 0000000..a10ad75 --- /dev/null +++ b/src/lib/components/ui/input/input.svelte @@ -0,0 +1,33 @@ + + + diff --git a/src/lib/components/ui/label/index.ts b/src/lib/components/ui/label/index.ts new file mode 100644 index 0000000..2c3128c --- /dev/null +++ b/src/lib/components/ui/label/index.ts @@ -0,0 +1,7 @@ +import Root from "./label.svelte"; + +export { + Root, + // + Root as Label +}; diff --git a/src/lib/components/ui/label/label.svelte b/src/lib/components/ui/label/label.svelte new file mode 100644 index 0000000..264c8fd --- /dev/null +++ b/src/lib/components/ui/label/label.svelte @@ -0,0 +1,21 @@ + + + + + diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte new file mode 100644 index 0000000..b1e32a8 --- /dev/null +++ b/src/routes/(app)/+layout.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/routes/+page.svelte b/src/routes/(app)/+page.svelte similarity index 100% rename from src/routes/+page.svelte rename to src/routes/(app)/+page.svelte diff --git a/src/routes/(auth)/login/(components)/user-auth-form.svelte b/src/routes/(auth)/login/(components)/user-auth-form.svelte new file mode 100644 index 0000000..ed13b9c --- /dev/null +++ b/src/routes/(auth)/login/(components)/user-auth-form.svelte @@ -0,0 +1,61 @@ + + +
+
+
+
+ + +
+ +
+
+
+
+ +
+
+ Or continue with +
+
+ +
diff --git a/src/routes/(auth)/login/+page.svelte b/src/routes/(auth)/login/+page.svelte new file mode 100644 index 0000000..fad0292 --- /dev/null +++ b/src/routes/(auth)/login/+page.svelte @@ -0,0 +1,73 @@ + + +
+ Authentication + +
+