Skip to content

Commit

Permalink
Re-add command component
Browse files Browse the repository at this point in the history
  • Loading branch information
OrigamingWasTaken committed Oct 31, 2024
1 parent 7405642 commit 74dd661
Show file tree
Hide file tree
Showing 10 changed files with 180 additions and 0 deletions.
23 changes: 23 additions & 0 deletions frontend/src/lib/components/ui/command/command-dialog.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<script lang="ts">
import * as Dialog from '$lib/components/ui/dialog/index.js';
import type { Dialog as DialogPrimitive } from 'bits-ui';
import type { Command as CommandPrimitive } from 'cmdk-sv';
import Command from './command.svelte';
type $$Props = DialogPrimitive.Props & CommandPrimitive.CommandProps;
export let open: $$Props['open'] = false;
export let value: $$Props['value'] = undefined;
</script>

<Dialog.Root bind:open {...$$restProps}>
<Dialog.Content class="overflow-hidden p-0 shadow-lg">
<Command
class="[&_[data-cmdk-group-heading]]:text-muted-foreground [&_[data-cmdk-group-heading]]:px-2 [&_[data-cmdk-group-heading]]:font-medium [&_[data-cmdk-group]:not([hidden])_~[data-cmdk-group]]:pt-0 [&_[data-cmdk-group]]:px-2 [&_[data-cmdk-input-wrapper]_svg]:h-5 [&_[data-cmdk-input-wrapper]_svg]:w-5 [&_[data-cmdk-input]]:h-12 [&_[data-cmdk-item]]:px-2 [&_[data-cmdk-item]]:py-3 [&_[data-cmdk-item]_svg]:h-5 [&_[data-cmdk-item]_svg]:w-5"
{...$$restProps}
bind:value
>
<slot />
</Command>
</Dialog.Content>
</Dialog.Root>
12 changes: 12 additions & 0 deletions frontend/src/lib/components/ui/command/command-empty.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import { Command as CommandPrimitive } from 'cmdk-sv';
type $$Props = CommandPrimitive.EmptyProps;
let className: string | undefined | null = undefined;
export { className as class };
</script>

<CommandPrimitive.Empty class={cn('py-6 text-center text-sm', className)} {...$$restProps}>
<slot />
</CommandPrimitive.Empty>
18 changes: 18 additions & 0 deletions frontend/src/lib/components/ui/command/command-group.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<script lang="ts">
import { Command as CommandPrimitive } from 'cmdk-sv';
import { cn } from '$lib/utils.js';
type $$Props = CommandPrimitive.GroupProps;
let className: string | undefined | null = undefined;
export { className as class };
</script>

<CommandPrimitive.Group
class={cn(
'text-foreground [&_[data-cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[data-cmdk-group-heading]]:px-2 [&_[data-cmdk-group-heading]]:py-1.5 [&_[data-cmdk-group-heading]]:text-xs [&_[data-cmdk-group-heading]]:font-medium',
className
)}
{...$$restProps}
>
<slot />
</CommandPrimitive.Group>
23 changes: 23 additions & 0 deletions frontend/src/lib/components/ui/command/command-input.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<script lang="ts">
import { Command as CommandPrimitive } from 'cmdk-sv';
import Search from 'lucide-svelte/icons/search';
import { cn } from '$lib/utils.js';
type $$Props = CommandPrimitive.InputProps;
let className: string | undefined | null = undefined;
export { className as class };
export let value: string = '';
</script>

<div class="flex items-center border-b px-2" data-cmdk-input-wrapper="">
<Search class="mr-2 h-4 w-4 shrink-0 opacity-50" />
<CommandPrimitive.Input
class={cn(
'placeholder:text-muted-foreground flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',
className
)}
{...$$restProps}
bind:value
/>
</div>
24 changes: 24 additions & 0 deletions frontend/src/lib/components/ui/command/command-item.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import { Command as CommandPrimitive } from 'cmdk-sv';
type $$Props = CommandPrimitive.ItemProps;
export let asChild = false;
let className: string | undefined | null = undefined;
export { className as class };
</script>

<CommandPrimitive.Item
{asChild}
class={cn(
'aria-selected:bg-accent aria-selected:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
className
)}
{...$$restProps}
let:action
let:attrs
>
<slot {action} {attrs} />
</CommandPrimitive.Item>
12 changes: 12 additions & 0 deletions frontend/src/lib/components/ui/command/command-list.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<script lang="ts">
import { Command as CommandPrimitive } from 'cmdk-sv';
import { cn } from '$lib/utils.js';
type $$Props = CommandPrimitive.ListProps;
let className: string | undefined | null = undefined;
export { className as class };
</script>

<CommandPrimitive.List class={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className)} {...$$restProps}>
<slot />
</CommandPrimitive.List>
10 changes: 10 additions & 0 deletions frontend/src/lib/components/ui/command/command-separator.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import { Command as CommandPrimitive } from 'cmdk-sv';
type $$Props = CommandPrimitive.SeparatorProps;
let className: string | undefined | null = undefined;
export { className as class };
</script>

<CommandPrimitive.Separator class={cn('bg-border -mx-1 h-px', className)} {...$$restProps} />
13 changes: 13 additions & 0 deletions frontend/src/lib/components/ui/command/command-shortcut.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import type { HTMLAttributes } from 'svelte/elements';
type $$Props = HTMLAttributes<HTMLSpanElement>;
let className: string | undefined | null = undefined;
export { className as class };
</script>

<span class={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)} {...$$restProps}>
<slot />
</span>
19 changes: 19 additions & 0 deletions frontend/src/lib/components/ui/command/command.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<script lang="ts">
import { cn } from '$lib/utils.js';
import { Command as CommandPrimitive } from 'cmdk-sv';
type $$Props = CommandPrimitive.CommandProps;
export let value: $$Props['value'] = undefined;
let className: string | undefined | null = undefined;
export { className as class };
</script>

<CommandPrimitive.Root
class={cn('bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md', className)}
bind:value
{...$$restProps}
>
<slot />
</CommandPrimitive.Root>
26 changes: 26 additions & 0 deletions frontend/src/lib/components/ui/command/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Command as CommandPrimitive } from 'cmdk-sv';

import Dialog from './command-dialog.svelte';
import Empty from './command-empty.svelte';
import Group from './command-group.svelte';
import Input from './command-input.svelte';
import Item from './command-item.svelte';
import List from './command-list.svelte';
import Separator from './command-separator.svelte';
import Shortcut from './command-shortcut.svelte';
import Root from './command.svelte';

const Loading = CommandPrimitive.Loading;

export {
//
Root as Command,
Dialog as CommandDialog,
Empty as CommandEmpty,
Group as CommandGroup, Input as CommandInput, Item as CommandItem, List as CommandList, Loading as CommandLoading, Separator as CommandSeparator,
Shortcut as CommandShortcut, Dialog,
Empty,
Group, Input, Item, List, Loading, Root, Separator,
Shortcut
};

0 comments on commit 74dd661

Please sign in to comment.