From 7ed1ab5632888a5962a19ae5e193b1b0b15657fe Mon Sep 17 00:00:00 2001 From: Stan Runge Date: Wed, 22 Jan 2025 02:48:28 +0100 Subject: [PATCH] style: convert add topic into shadcn combobox --- packages/web/bun.lockb | Bin 188689 -> 194925 bytes packages/web/package.json | 4 + .../lib/components/ui/button/button.svelte | 25 ++++++ .../web/src/lib/components/ui/button/index.ts | 49 ++++++++++ .../ui/command/command-dialog.svelte | 23 +++++ .../ui/command/command-empty.svelte | 12 +++ .../ui/command/command-group.svelte | 18 ++++ .../ui/command/command-input.svelte | 23 +++++ .../components/ui/command/command-item.svelte | 24 +++++ .../components/ui/command/command-list.svelte | 15 ++++ .../ui/command/command-separator.svelte | 10 +++ .../ui/command/command-shortcut.svelte | 16 ++++ .../lib/components/ui/command/command.svelte | 22 +++++ .../src/lib/components/ui/command/index.ts | 37 ++++++++ .../ui/dialog/dialog-content.svelte | 36 ++++++++ .../ui/dialog/dialog-description.svelte | 16 ++++ .../components/ui/dialog/dialog-footer.svelte | 16 ++++ .../components/ui/dialog/dialog-header.svelte | 13 +++ .../ui/dialog/dialog-overlay.svelte | 21 +++++ .../components/ui/dialog/dialog-portal.svelte | 8 ++ .../components/ui/dialog/dialog-title.svelte | 16 ++++ .../web/src/lib/components/ui/dialog/index.ts | 37 ++++++++ .../src/lib/components/ui/popover/index.ts | 17 ++++ .../ui/popover/popover-content.svelte | 22 +++++ packages/web/src/routes/+layout.svelte | 2 + packages/web/src/routes/+page.svelte | 10 ++- .../web/src/routes/progress/[id]/+page.svelte | 85 +++++++++++------- 27 files changed, 543 insertions(+), 34 deletions(-) create mode 100644 packages/web/src/lib/components/ui/button/button.svelte create mode 100644 packages/web/src/lib/components/ui/button/index.ts create mode 100644 packages/web/src/lib/components/ui/command/command-dialog.svelte create mode 100644 packages/web/src/lib/components/ui/command/command-empty.svelte create mode 100644 packages/web/src/lib/components/ui/command/command-group.svelte create mode 100644 packages/web/src/lib/components/ui/command/command-input.svelte create mode 100644 packages/web/src/lib/components/ui/command/command-item.svelte create mode 100644 packages/web/src/lib/components/ui/command/command-list.svelte create mode 100644 packages/web/src/lib/components/ui/command/command-separator.svelte create mode 100644 packages/web/src/lib/components/ui/command/command-shortcut.svelte create mode 100644 packages/web/src/lib/components/ui/command/command.svelte create mode 100644 packages/web/src/lib/components/ui/command/index.ts create mode 100644 packages/web/src/lib/components/ui/dialog/dialog-content.svelte create mode 100644 packages/web/src/lib/components/ui/dialog/dialog-description.svelte create mode 100644 packages/web/src/lib/components/ui/dialog/dialog-footer.svelte create mode 100644 packages/web/src/lib/components/ui/dialog/dialog-header.svelte create mode 100644 packages/web/src/lib/components/ui/dialog/dialog-overlay.svelte create mode 100644 packages/web/src/lib/components/ui/dialog/dialog-portal.svelte create mode 100644 packages/web/src/lib/components/ui/dialog/dialog-title.svelte create mode 100644 packages/web/src/lib/components/ui/dialog/index.ts create mode 100644 packages/web/src/lib/components/ui/popover/index.ts create mode 100644 packages/web/src/lib/components/ui/popover/popover-content.svelte diff --git a/packages/web/bun.lockb b/packages/web/bun.lockb index 49fff1ecd229292f349e7f37e76f1bcdac4d3949..099b78506dc2ed5b320533edf71005f6866cdfe9 100755 GIT binary patch delta 38635 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 delta 34787 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 IEy<|=KiYJfNB{r; diff --git a/packages/web/package.json b/packages/web/package.json index 689b9e6..8936f8c 100755 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -25,12 +25,15 @@ "@types/eslint": "9.6.1", "@types/pg": "^8.11.10", "autoprefixer": "^10.4.20", + "bits-ui": "^0.22.0", "clsx": "^2.1.1", + "cmdk-sv": "^0.0.18", "drizzle-kit": "^0.30.1", "eslint": "9.17.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-svelte": "^2.46.1", "globals": "15.14.0", + "lucide-svelte": "^0.473.0", "postcss": "^8.4.49", "prettier": "3.4.2", "prettier-plugin-svelte": "3.3.2", @@ -48,6 +51,7 @@ "dependencies": { "@sveltejs/adapter-node": "^5.2.11", "drizzle-orm": "^0.38.3", + "mode-watcher": "^0.5.0", "postgres": "^3.4.5" } } diff --git a/packages/web/src/lib/components/ui/button/button.svelte b/packages/web/src/lib/components/ui/button/button.svelte new file mode 100644 index 0000000..86827f3 --- /dev/null +++ b/packages/web/src/lib/components/ui/button/button.svelte @@ -0,0 +1,25 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/button/index.ts b/packages/web/src/lib/components/ui/button/index.ts new file mode 100644 index 0000000..af1e188 --- /dev/null +++ b/packages/web/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: "ring-offset-background focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 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-input bg-background hover:bg-accent hover:text-accent-foreground border", + 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/packages/web/src/lib/components/ui/command/command-dialog.svelte b/packages/web/src/lib/components/ui/command/command-dialog.svelte new file mode 100644 index 0000000..68398a8 --- /dev/null +++ b/packages/web/src/lib/components/ui/command/command-dialog.svelte @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/packages/web/src/lib/components/ui/command/command-empty.svelte b/packages/web/src/lib/components/ui/command/command-empty.svelte new file mode 100644 index 0000000..3a0819d --- /dev/null +++ b/packages/web/src/lib/components/ui/command/command-empty.svelte @@ -0,0 +1,12 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/command/command-group.svelte b/packages/web/src/lib/components/ui/command/command-group.svelte new file mode 100644 index 0000000..22f49a4 --- /dev/null +++ b/packages/web/src/lib/components/ui/command/command-group.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/command/command-input.svelte b/packages/web/src/lib/components/ui/command/command-input.svelte new file mode 100644 index 0000000..3c50f23 --- /dev/null +++ b/packages/web/src/lib/components/ui/command/command-input.svelte @@ -0,0 +1,23 @@ + + +

diff --git a/packages/web/src/lib/components/ui/command/command-item.svelte b/packages/web/src/lib/components/ui/command/command-item.svelte new file mode 100644 index 0000000..a75acc8 --- /dev/null +++ b/packages/web/src/lib/components/ui/command/command-item.svelte @@ -0,0 +1,24 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/command/command-list.svelte b/packages/web/src/lib/components/ui/command/command-list.svelte new file mode 100644 index 0000000..8ceda03 --- /dev/null +++ b/packages/web/src/lib/components/ui/command/command-list.svelte @@ -0,0 +1,15 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/command/command-separator.svelte b/packages/web/src/lib/components/ui/command/command-separator.svelte new file mode 100644 index 0000000..71688b8 --- /dev/null +++ b/packages/web/src/lib/components/ui/command/command-separator.svelte @@ -0,0 +1,10 @@ + + + diff --git a/packages/web/src/lib/components/ui/command/command-shortcut.svelte b/packages/web/src/lib/components/ui/command/command-shortcut.svelte new file mode 100644 index 0000000..c89bd61 --- /dev/null +++ b/packages/web/src/lib/components/ui/command/command-shortcut.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/command/command.svelte b/packages/web/src/lib/components/ui/command/command.svelte new file mode 100644 index 0000000..3889696 --- /dev/null +++ b/packages/web/src/lib/components/ui/command/command.svelte @@ -0,0 +1,22 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/command/index.ts b/packages/web/src/lib/components/ui/command/index.ts new file mode 100644 index 0000000..d8a2e7c --- /dev/null +++ b/packages/web/src/lib/components/ui/command/index.ts @@ -0,0 +1,37 @@ +import { Command as CommandPrimitive } from "cmdk-sv"; + +import Root from "./command.svelte"; +import Dialog from "./command-dialog.svelte"; +import Empty from "./command-empty.svelte"; +import Group from "./command-group.svelte"; +import Item from "./command-item.svelte"; +import Input from "./command-input.svelte"; +import List from "./command-list.svelte"; +import Separator from "./command-separator.svelte"; +import Shortcut from "./command-shortcut.svelte"; + +const Loading = CommandPrimitive.Loading; + +export { + Root, + Dialog, + Empty, + Group, + Item, + Input, + List, + Separator, + Shortcut, + Loading, + // + Root as Command, + Dialog as CommandDialog, + Empty as CommandEmpty, + Group as CommandGroup, + Item as CommandItem, + Input as CommandInput, + List as CommandList, + Separator as CommandSeparator, + Shortcut as CommandShortcut, + Loading as CommandLoading, +}; diff --git a/packages/web/src/lib/components/ui/dialog/dialog-content.svelte b/packages/web/src/lib/components/ui/dialog/dialog-content.svelte new file mode 100644 index 0000000..a06ccb2 --- /dev/null +++ b/packages/web/src/lib/components/ui/dialog/dialog-content.svelte @@ -0,0 +1,36 @@ + + + + + + + + + Close + + + diff --git a/packages/web/src/lib/components/ui/dialog/dialog-description.svelte b/packages/web/src/lib/components/ui/dialog/dialog-description.svelte new file mode 100644 index 0000000..8bc70cc --- /dev/null +++ b/packages/web/src/lib/components/ui/dialog/dialog-description.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/dialog/dialog-footer.svelte b/packages/web/src/lib/components/ui/dialog/dialog-footer.svelte new file mode 100644 index 0000000..a235d1f --- /dev/null +++ b/packages/web/src/lib/components/ui/dialog/dialog-footer.svelte @@ -0,0 +1,16 @@ + + +
+ +
diff --git a/packages/web/src/lib/components/ui/dialog/dialog-header.svelte b/packages/web/src/lib/components/ui/dialog/dialog-header.svelte new file mode 100644 index 0000000..6b4448c --- /dev/null +++ b/packages/web/src/lib/components/ui/dialog/dialog-header.svelte @@ -0,0 +1,13 @@ + + +
+ +
diff --git a/packages/web/src/lib/components/ui/dialog/dialog-overlay.svelte b/packages/web/src/lib/components/ui/dialog/dialog-overlay.svelte new file mode 100644 index 0000000..1d376e4 --- /dev/null +++ b/packages/web/src/lib/components/ui/dialog/dialog-overlay.svelte @@ -0,0 +1,21 @@ + + + diff --git a/packages/web/src/lib/components/ui/dialog/dialog-portal.svelte b/packages/web/src/lib/components/ui/dialog/dialog-portal.svelte new file mode 100644 index 0000000..eb5d0a5 --- /dev/null +++ b/packages/web/src/lib/components/ui/dialog/dialog-portal.svelte @@ -0,0 +1,8 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/dialog/dialog-title.svelte b/packages/web/src/lib/components/ui/dialog/dialog-title.svelte new file mode 100644 index 0000000..06574f3 --- /dev/null +++ b/packages/web/src/lib/components/ui/dialog/dialog-title.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/packages/web/src/lib/components/ui/dialog/index.ts b/packages/web/src/lib/components/ui/dialog/index.ts new file mode 100644 index 0000000..b17ba5e --- /dev/null +++ b/packages/web/src/lib/components/ui/dialog/index.ts @@ -0,0 +1,37 @@ +import { Dialog as DialogPrimitive } from "bits-ui"; + +import Title from "./dialog-title.svelte"; +import Portal from "./dialog-portal.svelte"; +import Footer from "./dialog-footer.svelte"; +import Header from "./dialog-header.svelte"; +import Overlay from "./dialog-overlay.svelte"; +import Content from "./dialog-content.svelte"; +import Description from "./dialog-description.svelte"; + +const Root = DialogPrimitive.Root; +const Trigger = DialogPrimitive.Trigger; +const Close = DialogPrimitive.Close; + +export { + Root, + Title, + Portal, + Footer, + Header, + Trigger, + Overlay, + Content, + Description, + Close, + // + Root as Dialog, + Title as DialogTitle, + Portal as DialogPortal, + Footer as DialogFooter, + Header as DialogHeader, + Trigger as DialogTrigger, + Overlay as DialogOverlay, + Content as DialogContent, + Description as DialogDescription, + Close as DialogClose, +}; diff --git a/packages/web/src/lib/components/ui/popover/index.ts b/packages/web/src/lib/components/ui/popover/index.ts new file mode 100644 index 0000000..63aecf9 --- /dev/null +++ b/packages/web/src/lib/components/ui/popover/index.ts @@ -0,0 +1,17 @@ +import { Popover as PopoverPrimitive } from "bits-ui"; +import Content from "./popover-content.svelte"; +const Root = PopoverPrimitive.Root; +const Trigger = PopoverPrimitive.Trigger; +const Close = PopoverPrimitive.Close; + +export { + Root, + Content, + Trigger, + Close, + // + Root as Popover, + Content as PopoverContent, + Trigger as PopoverTrigger, + Close as PopoverClose, +}; diff --git a/packages/web/src/lib/components/ui/popover/popover-content.svelte b/packages/web/src/lib/components/ui/popover/popover-content.svelte new file mode 100644 index 0000000..1d86206 --- /dev/null +++ b/packages/web/src/lib/components/ui/popover/popover-content.svelte @@ -0,0 +1,22 @@ + + + + + diff --git a/packages/web/src/routes/+layout.svelte b/packages/web/src/routes/+layout.svelte index f4ee004..18ccc64 100755 --- a/packages/web/src/routes/+layout.svelte +++ b/packages/web/src/routes/+layout.svelte @@ -1,5 +1,6 @@

{data.task?.name}

-

topics ({data.task?.tasksToTopics.length})

-
- - {#if addTopicsDropdownShown} -
- - -
- {/if} -
+

Topics ({data.task?.tasksToTopics.length})

+ + + + + + + + + + No topic found. + + {#each data.topics as topic} + { + value = topic.id.toString(); + closeAndFocusTrigger(); + }} + > + + {topic.name} + + {/each} + + + + +