From 44a7fb8632b7eedad8669b09524c13dae0ebe66e Mon Sep 17 00:00:00 2001 From: nwrenger Date: Sun, 12 May 2024 21:55:20 +0200 Subject: [PATCH 1/9] :sparkles: Initial Commit --- .gitignore | 2 - .prettierrc | 2 +- README.md | 4 - bun.lockb | Bin 123191 -> 101126 bytes components.json | 14 + package.json | 84 ++--- postcss.config.cjs | 6 - postcss.config.js | 6 + src/app.d.ts | 16 +- src/app.html | 8 +- src/app.pcss | 110 ++++++ src/app.postcss | 21 -- .../ui/avatar/avatar-fallback.svelte | 16 + .../components/ui/avatar/avatar-image.svelte | 18 + src/lib/components/ui/avatar/avatar.svelte | 18 + src/lib/components/ui/avatar/index.ts | 13 + src/lib/components/ui/button/button.svelte | 25 ++ src/lib/components/ui/button/index.ts | 49 +++ .../dropdown-menu-checkbox-item.svelte | 35 ++ .../dropdown-menu-content.svelte | 27 ++ .../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 | 13 + .../dropdown-menu-sub-content.svelte | 30 ++ .../dropdown-menu-sub-trigger.svelte | 32 ++ src/lib/components/ui/dropdown-menu/index.ts | 48 +++ src/lib/components/ui/tooltip/index.ts | 15 + .../ui/tooltip/tooltip-content.svelte | 28 ++ src/lib/index.ts | 1 + src/lib/stores.ts | 7 - src/lib/types.ts | 75 ---- src/lib/utils.ts | 113 +++--- src/routes/+layout.svelte | 155 +++------ src/routes/+layout.ts | 3 +- src/routes/+page.svelte | 107 +++--- src/routes/Code.svelte | 81 +++++ src/routes/builder/+page.svelte | 75 +++- src/routes/builder/EditModal.svelte | 139 -------- src/routes/builder/Grid.svelte | 188 ---------- src/routes/builder/Menu.svelte | 329 ------------------ tailwind.config.ts | 96 +++-- tsconfig.json | 1 + vite.config.ts | 11 +- 46 files changed, 1025 insertions(+), 1106 deletions(-) create mode 100644 components.json delete mode 100644 postcss.config.cjs create mode 100644 postcss.config.js create mode 100644 src/app.pcss delete mode 100644 src/app.postcss create mode 100644 src/lib/components/ui/avatar/avatar-fallback.svelte create mode 100644 src/lib/components/ui/avatar/avatar-image.svelte create mode 100644 src/lib/components/ui/avatar/avatar.svelte create mode 100644 src/lib/components/ui/avatar/index.ts 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/components/ui/tooltip/index.ts create mode 100644 src/lib/components/ui/tooltip/tooltip-content.svelte create mode 100644 src/lib/index.ts delete mode 100644 src/lib/stores.ts delete mode 100644 src/lib/types.ts create mode 100644 src/routes/Code.svelte delete mode 100644 src/routes/builder/EditModal.svelte delete mode 100644 src/routes/builder/Grid.svelte delete mode 100644 src/routes/builder/Menu.svelte diff --git a/.gitignore b/.gitignore index 2677cc2..6635cf5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,6 @@ node_modules /build /.svelte-kit /package -/.vscode -/img .env .env.* !.env.example diff --git a/.prettierrc b/.prettierrc index 9573023..8bc6e86 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,6 +3,6 @@ "singleQuote": true, "trailingComma": "none", "printWidth": 100, - "plugins": ["prettier-plugin-svelte"], + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] } diff --git a/README.md b/README.md index 9378051..d830cb3 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,6 @@ _The UI Builder for the Flipper Zero_ **Flip** is an innovative UI builder designed for creating user interfaces specifically tailored for Flipper Zero applications. This tool simplifies the process of designing, exporting, and integrating UIs into your Flipper Zero projects using Rust. -## Major Note - -The current website is going to be reworked to be fitting more the adjoined [Rust Crate]()! - ## Features - **Intuitive UI Builder**: Design your UI with an easy-to-use interface. diff --git a/bun.lockb b/bun.lockb index 5c9b3d6fb5a97c41c0e0451b903a0cf4c810226e..51d5bf40023186af38c2c7d362d26c20397286e4 100755 GIT binary patch delta 34619 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%0D7el9mz|qd}n{I90By9 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

<=EzMy}~wzOO|>)gwWyR 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 J;P9g({{Tu)@X`PP literal 123191 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ξYGQKNy54Z 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 diff --git a/components.json b/components.json new file mode 100644 index 0000000..e6f140c --- /dev/null +++ b/components.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://shadcn-svelte.com/schema.json", + "style": "default", + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app.css", + "baseColor": "zinc" + }, + "aliases": { + "components": "$lib/components", + "utils": "$lib/utils" + }, + "typescript": true +} \ No newline at end of file diff --git a/package.json b/package.json index 3021291..ec9383a 100644 --- a/package.json +++ b/package.json @@ -1,43 +1,45 @@ { - "name": "flip-ui.github.io", - "version": "0.1.0", - "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 --check .", - "format": "prettier --write ." - }, - "devDependencies": { - "@skeletonlabs/skeleton": "2.6.1", - "@skeletonlabs/tw-plugin": "0.3.0", - "@sveltejs/adapter-auto": "^3.0.0", - "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0", - "@tailwindcss/forms": "0.5.7", - "@tailwindcss/typography": "0.5.10", - "@types/node": "20.10.6", - "autoprefixer": "10.4.16", - "postcss": "8.4.32", - "prettier": "^3.1.1", - "prettier-plugin-svelte": "^3.1.2", - "svelte": "^4.2.7", - "svelte-check": "^3.6.0", - "tailwindcss": "3.4.0", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "vite": "^5.0.3", - "vite-plugin-tailwind-purgecss": "0.2.0" - }, - "type": "module", - "dependencies": { - "@floating-ui/dom": "1.5.3", - "@fortawesome/fontawesome-free": "^6.5.1", - "@sveltejs/adapter-static": "^3.0.1", - "highlight.js": "^11.9.0", - "svelte-grid-extended": "^1.1.4" - } + "name": "flip-ui-chad", + "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 --check .", + "format": "prettier --write ." + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^3.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "prettier": "^3.1.1", + "prettier-plugin-svelte": "^3.1.2", + "svelte": "^4.2.7", + "svelte-check": "^3.6.0", + "tslib": "^2.4.1", + "typescript": "^5.0.0", + "vite": "^5.0.3", + "tailwindcss": "^3.4.1", + "postcss": "^8.4.33", + "autoprefixer": "^10.4.16", + "@tailwindcss/typography": "^0.5.10", + "prettier-plugin-tailwindcss": "^0.5.1" + }, + "type": "module", + "dependencies": { + "@sveltejs/adapter-static": "^3.0.1", + "@types/prismjs": "^1.26.4", + "bits-ui": "^0.21.7", + "clsx": "^2.1.1", + "install": "^0.13.0", + "lucide-svelte": "^0.378.0", + "mode-watcher": "^0.3.0", + "prismjs": "^1.29.0", + "svelte-legos": "^0.2.2", + "tailwind-merge": "^2.3.0", + "tailwind-variants": "^0.2.1" + } } diff --git a/postcss.config.cjs b/postcss.config.cjs deleted file mode 100644 index 054c147..0000000 --- a/postcss.config.cjs +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {} - } -}; diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..5c45a3f --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +}; \ No newline at end of file diff --git a/src/app.d.ts b/src/app.d.ts index 8f4d638..743f07b 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,9 +1,13 @@ // See https://kit.svelte.dev/docs/types#app // for information about these interfaces -// and what to do when importing types -declare namespace App { - // interface Locals {} - // interface PageData {} - // interface Error {} - // interface Platform {} +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } } + +export {}; diff --git a/src/app.html b/src/app.html index 6c70f72..77a5ff5 100644 --- a/src/app.html +++ b/src/app.html @@ -1,12 +1,12 @@ - + - + %sveltekit.head% - -

+ +
%sveltekit.body%
diff --git a/src/app.pcss b/src/app.pcss new file mode 100644 index 0000000..65a2e4b --- /dev/null +++ b/src/app.pcss @@ -0,0 +1,110 @@ +@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 72.2% 50.6%; + --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 { + html, + body { + @apply h-full overflow-hidden; + } + html { + font-family: pixelify-sans; + } + * { + @apply border-border; + } + body { + @apply !overflow-y-scroll bg-gradient-conic from-amber-900 via-background to-green-950 text-foreground; + } + @font-face { + font-family: 'pixelify-sans'; + src: url('/PixelifySans.ttf') format('truetype'); + font-weight: normal; + font-style: normal; + } + .h1 { + @apply scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl; + } + .h2 { + @apply scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0; + } + .h3 { + @apply scroll-m-20 text-2xl font-semibold tracking-tight; + } + .p { + @apply leading-7 [&:not(:first-child)]:mt-6; + } + .blockquote { + @apply mt-6 border-l-2 pl-6 italic; + } + .code { + @apply relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold; + } +} + diff --git a/src/app.postcss b/src/app.postcss deleted file mode 100644 index 95c0334..0000000 --- a/src/app.postcss +++ /dev/null @@ -1,21 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; -@tailwind variants; - -html, -body { - @apply h-full overflow-hidden; -} - -:root [data-theme='vintage'] { - --theme-font-family-base: 'Custom', pixelify-sans; - --theme-font-family-heading: 'Custom', pixelify-sans; -} - -@font-face { - font-family: 'pixelify-sans'; - src: url('/PixelifySans.ttf') format('truetype'); - font-weight: normal; - font-style: normal; -} diff --git a/src/lib/components/ui/avatar/avatar-fallback.svelte b/src/lib/components/ui/avatar/avatar-fallback.svelte new file mode 100644 index 0000000..865fc40 --- /dev/null +++ b/src/lib/components/ui/avatar/avatar-fallback.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/src/lib/components/ui/avatar/avatar-image.svelte b/src/lib/components/ui/avatar/avatar-image.svelte new file mode 100644 index 0000000..6558dc4 --- /dev/null +++ b/src/lib/components/ui/avatar/avatar-image.svelte @@ -0,0 +1,18 @@ + + + diff --git a/src/lib/components/ui/avatar/avatar.svelte b/src/lib/components/ui/avatar/avatar.svelte new file mode 100644 index 0000000..845d5a8 --- /dev/null +++ b/src/lib/components/ui/avatar/avatar.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/src/lib/components/ui/avatar/index.ts b/src/lib/components/ui/avatar/index.ts new file mode 100644 index 0000000..d06457b --- /dev/null +++ b/src/lib/components/ui/avatar/index.ts @@ -0,0 +1,13 @@ +import Root from "./avatar.svelte"; +import Image from "./avatar-image.svelte"; +import Fallback from "./avatar-fallback.svelte"; + +export { + Root, + Image, + Fallback, + // + Root as Avatar, + Image as AvatarImage, + Fallback as AvatarFallback, +}; diff --git a/src/lib/components/ui/button/button.svelte b/src/lib/components/ui/button/button.svelte new file mode 100644 index 0000000..86827f3 --- /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..a927293 --- /dev/null +++ b/src/lib/components/ui/button/index.ts @@ -0,0 +1,49 @@ +import { type VariantProps, tv } from "tailwind-variants"; +import type { Button as ButtonPrimitive } from "bits-ui"; +import Root from "./button.svelte"; + +const buttonVariants = tv({ + base: "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium 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..cbca3c5 --- /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..a94b527 --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte @@ -0,0 +1,27 @@ + + + + + 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..9a05d4b --- /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..43f1527 --- /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..79a48ee --- /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..e14d078 --- /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..d8c7378 --- /dev/null +++ b/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte @@ -0,0 +1,13 @@ + + + + + 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..ff20507 --- /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..9ba3916 --- /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..c1749e9 --- /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/components/ui/tooltip/index.ts b/src/lib/components/ui/tooltip/index.ts new file mode 100644 index 0000000..7d0444d --- /dev/null +++ b/src/lib/components/ui/tooltip/index.ts @@ -0,0 +1,15 @@ +import { Tooltip as TooltipPrimitive } from "bits-ui"; +import Content from "./tooltip-content.svelte"; + +const Root = TooltipPrimitive.Root; +const Trigger = TooltipPrimitive.Trigger; + +export { + Root, + Trigger, + Content, + // + Root as Tooltip, + Content as TooltipContent, + Trigger as TooltipTrigger, +}; diff --git a/src/lib/components/ui/tooltip/tooltip-content.svelte b/src/lib/components/ui/tooltip/tooltip-content.svelte new file mode 100644 index 0000000..3c00a4e --- /dev/null +++ b/src/lib/components/ui/tooltip/tooltip-content.svelte @@ -0,0 +1,28 @@ + + + + + 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/stores.ts b/src/lib/stores.ts deleted file mode 100644 index 6979d66..0000000 --- a/src/lib/stores.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { GridController } from 'svelte-grid-extended'; -import { writable } from 'svelte/store'; -import type { Views } from './types'; -import { localStorageStore } from '@skeletonlabs/skeleton'; - -export let gridController = writable(); -export let views = localStorageStore('views', { pages: [], current: 0 }); diff --git a/src/lib/types.ts b/src/lib/types.ts deleted file mode 100644 index 21ead61..0000000 --- a/src/lib/types.ts +++ /dev/null @@ -1,75 +0,0 @@ -export type Option = T | null; - -export enum GuiType { - Header = 0, - BodyText, - Buttons, - Alert -} - -export enum Align { - Left = 0, - Right, - Top, - Bottom, - Center -} - -export function alignToString(align: Align | string): string { - switch (align) { - case Align.Left: - return 'Left'; - case Align.Right: - return 'Right'; - case Align.Top: - return 'Top'; - case Align.Bottom: - return 'Bottom'; - case Align.Center: - return 'Center'; - default: - throw new Error('Invalid Align value'); - } -} - -export type Event = - | { - View: number; - } - | { - Function: string; - }; - -export interface Views { - pages: Page[]; - current: number; -} - -export interface Page { - id: string; - page: View[]; -} - -export interface View { - id: string; - name: string; - type: GuiType; - moveable: boolean; - x: number; - y: number; - w: number; - h: number; - data: Data; -} - -export interface Data { - text_value: Option; - horizontal: Option; - vertical: Option; - actions: Option[]>; -} - -export interface Action { - text_value: String; - event: Event; -} diff --git a/src/lib/utils.ts b/src/lib/utils.ts index afc2ea1..8871245 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,57 +1,62 @@ -import type { View } from './types'; +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; +import { cubicOut } from "svelte/easing"; +import type { TransitionConfig } from "svelte/transition"; -export function keys(obj: T) { - return Object.keys(obj) as Array; +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); } -export function areArraysEqual(arr1: any[], arr2: any[]): boolean { - if (arr1.length !== arr2.length) { - return false; - } - - for (let i = 0; i < arr1.length; i++) { - if (!areObjectsEqual(arr1[i], arr2[i])) { - return false; - } - } - - return true; -} - -export function areObjectsEqual(obj1: any, obj2: any): boolean { - if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || obj1 === null || obj2 === null) { - return obj1 === obj2; - } - - const keys1 = Object.keys(obj1); - const keys2 = Object.keys(obj2); - - if (keys1.length !== keys2.length) { - return false; - } - - for (const key of keys1) { - if (!areObjectsEqual(obj1[key], obj2[key])) { - return false; - } - } - - return true; -} - -export function isItemColliding(item: View, otherItem: View) { - return ( - item.id !== otherItem.id && - item.x <= otherItem.x + otherItem.w - 1 && - item.y <= otherItem.y + otherItem.h - 1 && - item.x + item.w - 1 >= otherItem.x && - item.y + item.h - 1 >= otherItem.y - ); -} - -export function areItemsColliding(item: View, items: View[]) { - for (const item2 of items) { - if (isItemColliding(item, item2)) return true; - } - return false; -} +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 index 8825e9d..d275267 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,109 +1,58 @@ - - - - {#if $drawerStore.id === 'doc-sidenav'} -
- {:else} - -
-
-

Invalid $drawerStore.id provided.

+ + +
+
+ - {/if} - - - - - - - - - - {#if $page.url.pathname == '/builder'} - - {/if} -

flip

-
- - Home - Builder - - - -
-
+
+
- - {#if $page.url.pathname == '/builder'} -