From 7054052602d83d8ba97b5f3485aeddb2db124b23 Mon Sep 17 00:00:00 2001 From: TZGyn Date: Tue, 7 Nov 2023 23:06:53 +0800 Subject: [PATCH] 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()] +});