): string {
+ return JSON.stringify(key, Object.keys(key).sort())
+}
+
+interface Constructor {
+ __isFragment?: never
+ __isTeleport?: never
+ __isSuspense?: never
+ new (...args: any[]): {
+ $props: P
+ }
+}
+
+export function componentToString
(config: ChartConfig, component: Constructor
, props?: P) {
+ if (!isClient)
+ return
+
+ // This function will be called once during mount lifecycle
+ const id = useId()
+
+ // https://unovis.dev/docs/auxiliary/Crosshair#component-props
+ return (_data: any, x: number | Date) => {
+ const data = "data" in _data ? _data.data : _data
+ const serializedKey = `${id}-${serializeKey(data)}`
+ const cachedContent = cache.get(serializedKey)
+ if (cachedContent)
+ return cachedContent
+
+ const vnode = h(component, { ...props, payload: data, config, x })
+ const div = document.createElement("div")
+ render(vnode, div)
+ cache.set(serializedKey, div.innerHTML)
+ return div.innerHTML
+ }
+}
diff --git a/frontend/app/web-gold/src/components/ui/combobox/Combobox.vue b/frontend/app/web-gold/src/components/ui/combobox/Combobox.vue
new file mode 100644
index 0000000000..0e6907c438
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/Combobox.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxAnchor.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxAnchor.vue
new file mode 100644
index 0000000000..5b9041d420
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxAnchor.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxEmpty.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxEmpty.vue
new file mode 100644
index 0000000000..20beb63bf4
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxEmpty.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxGroup.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxGroup.vue
new file mode 100644
index 0000000000..0dc9fc5b25
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxGroup.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+ {{ heading }}
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxInput.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxInput.vue
new file mode 100644
index 0000000000..9c783246d1
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxInput.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxItem.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxItem.vue
new file mode 100644
index 0000000000..cccf98ca60
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxItem.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxItemIndicator.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxItemIndicator.vue
new file mode 100644
index 0000000000..2e1b07cac9
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxItemIndicator.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxList.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxList.vue
new file mode 100644
index 0000000000..64c9a845ba
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxList.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxSeparator.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxSeparator.vue
new file mode 100644
index 0000000000..05d648b460
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxSeparator.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxTrigger.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxTrigger.vue
new file mode 100644
index 0000000000..28b099aa25
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxTrigger.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/ComboboxViewport.vue b/frontend/app/web-gold/src/components/ui/combobox/ComboboxViewport.vue
new file mode 100644
index 0000000000..684085cc58
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/ComboboxViewport.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/combobox/index.ts b/frontend/app/web-gold/src/components/ui/combobox/index.ts
new file mode 100644
index 0000000000..7c7bfc7852
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/combobox/index.ts
@@ -0,0 +1,12 @@
+export { default as Combobox } from "./Combobox.vue"
+export { default as ComboboxAnchor } from "./ComboboxAnchor.vue"
+export { default as ComboboxEmpty } from "./ComboboxEmpty.vue"
+export { default as ComboboxGroup } from "./ComboboxGroup.vue"
+export { default as ComboboxInput } from "./ComboboxInput.vue"
+export { default as ComboboxItem } from "./ComboboxItem.vue"
+export { default as ComboboxItemIndicator } from "./ComboboxItemIndicator.vue"
+export { default as ComboboxList } from "./ComboboxList.vue"
+export { default as ComboboxSeparator } from "./ComboboxSeparator.vue"
+export { default as ComboboxViewport } from "./ComboboxViewport.vue"
+
+export { ComboboxCancel, ComboboxTrigger } from "reka-ui"
diff --git a/frontend/app/web-gold/src/components/ui/command/Command.vue b/frontend/app/web-gold/src/components/ui/command/Command.vue
new file mode 100644
index 0000000000..dcdf9d6031
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/Command.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/command/CommandDialog.vue b/frontend/app/web-gold/src/components/ui/command/CommandDialog.vue
new file mode 100644
index 0000000000..a48f018b8f
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/CommandDialog.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ {{ title }}
+ {{ description }}
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/command/CommandEmpty.vue b/frontend/app/web-gold/src/components/ui/command/CommandEmpty.vue
new file mode 100644
index 0000000000..489c4064de
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/CommandEmpty.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/command/CommandGroup.vue b/frontend/app/web-gold/src/components/ui/command/CommandGroup.vue
new file mode 100644
index 0000000000..a5dd55e345
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/CommandGroup.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+ {{ heading }}
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/command/CommandInput.vue b/frontend/app/web-gold/src/components/ui/command/CommandInput.vue
new file mode 100644
index 0000000000..653141e4d2
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/CommandInput.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/command/CommandItem.vue b/frontend/app/web-gold/src/components/ui/command/CommandItem.vue
new file mode 100644
index 0000000000..2ae4827d12
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/CommandItem.vue
@@ -0,0 +1,76 @@
+
+
+
+ {
+ filterState.search = ''
+ }"
+ >
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/command/CommandList.vue b/frontend/app/web-gold/src/components/ui/command/CommandList.vue
new file mode 100644
index 0000000000..928d2f0f7b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/CommandList.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/command/CommandSeparator.vue b/frontend/app/web-gold/src/components/ui/command/CommandSeparator.vue
new file mode 100644
index 0000000000..6def19ecef
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/CommandSeparator.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/command/CommandShortcut.vue b/frontend/app/web-gold/src/components/ui/command/CommandShortcut.vue
new file mode 100644
index 0000000000..e1d0e07afd
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/CommandShortcut.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/command/index.ts b/frontend/app/web-gold/src/components/ui/command/index.ts
new file mode 100644
index 0000000000..af18933b6b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/command/index.ts
@@ -0,0 +1,25 @@
+import type { Ref } from "vue"
+import { createContext } from "reka-ui"
+
+export { default as Command } from "./Command.vue"
+export { default as CommandDialog } from "./CommandDialog.vue"
+export { default as CommandEmpty } from "./CommandEmpty.vue"
+export { default as CommandGroup } from "./CommandGroup.vue"
+export { default as CommandInput } from "./CommandInput.vue"
+export { default as CommandItem } from "./CommandItem.vue"
+export { default as CommandList } from "./CommandList.vue"
+export { default as CommandSeparator } from "./CommandSeparator.vue"
+export { default as CommandShortcut } from "./CommandShortcut.vue"
+
+export const [useCommand, provideCommandContext] = createContext<{
+ allItems: Ref>
+ allGroups: Ref>>
+ filterState: {
+ search: string
+ filtered: { count: number, items: Map, groups: Set }
+ }
+}>("Command")
+
+export const [useCommandGroup, provideCommandGroupContext] = createContext<{
+ id?: string
+}>("CommandGroup")
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenu.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenu.vue
new file mode 100644
index 0000000000..b4c6c09345
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenu.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuCheckboxItem.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuCheckboxItem.vue
new file mode 100644
index 0000000000..ba62d4314c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuCheckboxItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuContent.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuContent.vue
new file mode 100644
index 0000000000..2fbc5568ce
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuContent.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuGroup.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuGroup.vue
new file mode 100644
index 0000000000..9af9b2665c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuGroup.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuItem.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuItem.vue
new file mode 100644
index 0000000000..b6a4c48e54
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuItem.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuLabel.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuLabel.vue
new file mode 100644
index 0000000000..80d051957a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuLabel.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuPortal.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuPortal.vue
new file mode 100644
index 0000000000..c50a2b3306
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuPortal.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioGroup.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioGroup.vue
new file mode 100644
index 0000000000..25372ed829
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioGroup.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioItem.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioItem.vue
new file mode 100644
index 0000000000..181acaa876
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuRadioItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSeparator.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSeparator.vue
new file mode 100644
index 0000000000..d7f0c60f04
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSeparator.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuShortcut.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuShortcut.vue
new file mode 100644
index 0000000000..2631d68261
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuShortcut.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSub.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSub.vue
new file mode 100644
index 0000000000..aeb1835ccc
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSub.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubContent.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubContent.vue
new file mode 100644
index 0000000000..c4fcafdad2
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubContent.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubTrigger.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubTrigger.vue
new file mode 100644
index 0000000000..12d2210e9c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuSubTrigger.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuTrigger.vue b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuTrigger.vue
new file mode 100644
index 0000000000..70a8143ff9
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/ContextMenuTrigger.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/context-menu/index.ts b/frontend/app/web-gold/src/components/ui/context-menu/index.ts
new file mode 100644
index 0000000000..5919fd37d5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/context-menu/index.ts
@@ -0,0 +1,14 @@
+export { default as ContextMenu } from "./ContextMenu.vue"
+export { default as ContextMenuCheckboxItem } from "./ContextMenuCheckboxItem.vue"
+export { default as ContextMenuContent } from "./ContextMenuContent.vue"
+export { default as ContextMenuGroup } from "./ContextMenuGroup.vue"
+export { default as ContextMenuItem } from "./ContextMenuItem.vue"
+export { default as ContextMenuLabel } from "./ContextMenuLabel.vue"
+export { default as ContextMenuRadioGroup } from "./ContextMenuRadioGroup.vue"
+export { default as ContextMenuRadioItem } from "./ContextMenuRadioItem.vue"
+export { default as ContextMenuSeparator } from "./ContextMenuSeparator.vue"
+export { default as ContextMenuShortcut } from "./ContextMenuShortcut.vue"
+export { default as ContextMenuSub } from "./ContextMenuSub.vue"
+export { default as ContextMenuSubContent } from "./ContextMenuSubContent.vue"
+export { default as ContextMenuSubTrigger } from "./ContextMenuSubTrigger.vue"
+export { default as ContextMenuTrigger } from "./ContextMenuTrigger.vue"
diff --git a/frontend/app/web-gold/src/components/ui/dialog/Dialog.vue b/frontend/app/web-gold/src/components/ui/dialog/Dialog.vue
new file mode 100644
index 0000000000..ade5260377
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/Dialog.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogClose.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogClose.vue
new file mode 100644
index 0000000000..c5fae043f7
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/DialogClose.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogContent.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogContent.vue
new file mode 100644
index 0000000000..7f86b47787
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/DialogContent.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+ Close
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogDescription.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogDescription.vue
new file mode 100644
index 0000000000..f52e6555e9
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/DialogDescription.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogFooter.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogFooter.vue
new file mode 100644
index 0000000000..0a936e6166
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/DialogFooter.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogHeader.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogHeader.vue
new file mode 100644
index 0000000000..bfc3c646e6
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/DialogHeader.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogOverlay.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogOverlay.vue
new file mode 100644
index 0000000000..77900772a0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/DialogOverlay.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogScrollContent.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogScrollContent.vue
new file mode 100644
index 0000000000..f2475dbaed
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/DialogScrollContent.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+ {
+ const originalEvent = event.detail.originalEvent;
+ const target = originalEvent.target as HTMLElement;
+ if (originalEvent.offsetX > target.clientWidth || originalEvent.offsetY > target.clientHeight) {
+ event.preventDefault();
+ }
+ }"
+ >
+
+
+
+
+ Close
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogTitle.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogTitle.vue
new file mode 100644
index 0000000000..860f01a486
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/DialogTitle.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/DialogTrigger.vue b/frontend/app/web-gold/src/components/ui/dialog/DialogTrigger.vue
new file mode 100644
index 0000000000..49667e997b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/DialogTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dialog/index.ts b/frontend/app/web-gold/src/components/ui/dialog/index.ts
new file mode 100644
index 0000000000..6768b090cc
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dialog/index.ts
@@ -0,0 +1,10 @@
+export { default as Dialog } from "./Dialog.vue"
+export { default as DialogClose } from "./DialogClose.vue"
+export { default as DialogContent } from "./DialogContent.vue"
+export { default as DialogDescription } from "./DialogDescription.vue"
+export { default as DialogFooter } from "./DialogFooter.vue"
+export { default as DialogHeader } from "./DialogHeader.vue"
+export { default as DialogOverlay } from "./DialogOverlay.vue"
+export { default as DialogScrollContent } from "./DialogScrollContent.vue"
+export { default as DialogTitle } from "./DialogTitle.vue"
+export { default as DialogTrigger } from "./DialogTrigger.vue"
diff --git a/frontend/app/web-gold/src/components/ui/drawer/Drawer.vue b/frontend/app/web-gold/src/components/ui/drawer/Drawer.vue
new file mode 100644
index 0000000000..5428e35c16
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/Drawer.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerClose.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerClose.vue
new file mode 100644
index 0000000000..eecc11b7f0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerClose.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerContent.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerContent.vue
new file mode 100644
index 0000000000..5994c854cd
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerContent.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerDescription.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerDescription.vue
new file mode 100644
index 0000000000..77e69ba351
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerDescription.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerFooter.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerFooter.vue
new file mode 100644
index 0000000000..34c2e1217e
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerFooter.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerHeader.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerHeader.vue
new file mode 100644
index 0000000000..f68aeb059e
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerHeader.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerOverlay.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerOverlay.vue
new file mode 100644
index 0000000000..e7e4a05ab7
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerOverlay.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerTitle.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerTitle.vue
new file mode 100644
index 0000000000..328fb0d21d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerTitle.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/drawer/DrawerTrigger.vue b/frontend/app/web-gold/src/components/ui/drawer/DrawerTrigger.vue
new file mode 100644
index 0000000000..04b5bf13b5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/DrawerTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/drawer/index.ts b/frontend/app/web-gold/src/components/ui/drawer/index.ts
new file mode 100644
index 0000000000..0d07820d6f
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/drawer/index.ts
@@ -0,0 +1,9 @@
+export { default as Drawer } from "./Drawer.vue"
+export { default as DrawerClose } from "./DrawerClose.vue"
+export { default as DrawerContent } from "./DrawerContent.vue"
+export { default as DrawerDescription } from "./DrawerDescription.vue"
+export { default as DrawerFooter } from "./DrawerFooter.vue"
+export { default as DrawerHeader } from "./DrawerHeader.vue"
+export { default as DrawerOverlay } from "./DrawerOverlay.vue"
+export { default as DrawerTitle } from "./DrawerTitle.vue"
+export { default as DrawerTrigger } from "./DrawerTrigger.vue"
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenu.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenu.vue
new file mode 100644
index 0000000000..e1c9ee3043
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenu.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue
new file mode 100644
index 0000000000..1253078dcc
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuContent.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuContent.vue
new file mode 100644
index 0000000000..7c43014137
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuContent.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuGroup.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuGroup.vue
new file mode 100644
index 0000000000..da634ec099
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuGroup.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuItem.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuItem.vue
new file mode 100644
index 0000000000..f56cae3e73
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuItem.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuLabel.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuLabel.vue
new file mode 100644
index 0000000000..8bca83c434
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuLabel.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
new file mode 100644
index 0000000000..fe82cadd73
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue
new file mode 100644
index 0000000000..e03c40c5a8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue
new file mode 100644
index 0000000000..1b936c392d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue
new file mode 100644
index 0000000000..60be75cc9d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSub.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSub.vue
new file mode 100644
index 0000000000..7472e77f53
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSub.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue
new file mode 100644
index 0000000000..d7c6b087df
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue
new file mode 100644
index 0000000000..0906491160
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue
new file mode 100644
index 0000000000..75cd7472ce
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/dropdown-menu/index.ts b/frontend/app/web-gold/src/components/ui/dropdown-menu/index.ts
new file mode 100644
index 0000000000..955fe3aa08
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/dropdown-menu/index.ts
@@ -0,0 +1,16 @@
+export { default as DropdownMenu } from "./DropdownMenu.vue"
+
+export { default as DropdownMenuCheckboxItem } from "./DropdownMenuCheckboxItem.vue"
+export { default as DropdownMenuContent } from "./DropdownMenuContent.vue"
+export { default as DropdownMenuGroup } from "./DropdownMenuGroup.vue"
+export { default as DropdownMenuItem } from "./DropdownMenuItem.vue"
+export { default as DropdownMenuLabel } from "./DropdownMenuLabel.vue"
+export { default as DropdownMenuRadioGroup } from "./DropdownMenuRadioGroup.vue"
+export { default as DropdownMenuRadioItem } from "./DropdownMenuRadioItem.vue"
+export { default as DropdownMenuSeparator } from "./DropdownMenuSeparator.vue"
+export { default as DropdownMenuShortcut } from "./DropdownMenuShortcut.vue"
+export { default as DropdownMenuSub } from "./DropdownMenuSub.vue"
+export { default as DropdownMenuSubContent } from "./DropdownMenuSubContent.vue"
+export { default as DropdownMenuSubTrigger } from "./DropdownMenuSubTrigger.vue"
+export { default as DropdownMenuTrigger } from "./DropdownMenuTrigger.vue"
+export { DropdownMenuPortal } from "reka-ui"
diff --git a/frontend/app/web-gold/src/components/ui/empty/Empty.vue b/frontend/app/web-gold/src/components/ui/empty/Empty.vue
new file mode 100644
index 0000000000..2637b3c7bf
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/empty/Empty.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyContent.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyContent.vue
new file mode 100644
index 0000000000..d19ee0003a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/empty/EmptyContent.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyDescription.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyDescription.vue
new file mode 100644
index 0000000000..e4ed5fb712
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/empty/EmptyDescription.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyHeader.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyHeader.vue
new file mode 100644
index 0000000000..ac21d8c892
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/empty/EmptyHeader.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyMedia.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyMedia.vue
new file mode 100644
index 0000000000..c68397c0c7
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/empty/EmptyMedia.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/empty/EmptyTitle.vue b/frontend/app/web-gold/src/components/ui/empty/EmptyTitle.vue
new file mode 100644
index 0000000000..90c950d29f
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/empty/EmptyTitle.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/empty/index.ts b/frontend/app/web-gold/src/components/ui/empty/index.ts
new file mode 100644
index 0000000000..ce0c489f23
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/empty/index.ts
@@ -0,0 +1,26 @@
+import type { VariantProps } from "class-variance-authority"
+import { cva } from "class-variance-authority"
+
+export { default as Empty } from "./Empty.vue"
+export { default as EmptyContent } from "./EmptyContent.vue"
+export { default as EmptyDescription } from "./EmptyDescription.vue"
+export { default as EmptyHeader } from "./EmptyHeader.vue"
+export { default as EmptyMedia } from "./EmptyMedia.vue"
+export { default as EmptyTitle } from "./EmptyTitle.vue"
+
+export const emptyMediaVariants = cva(
+ "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
+ {
+ variants: {
+ variant: {
+ default: "bg-transparent",
+ icon: "bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ },
+)
+
+export type EmptyMediaVariants = VariantProps
diff --git a/frontend/app/web-gold/src/components/ui/field/Field.vue b/frontend/app/web-gold/src/components/ui/field/Field.vue
new file mode 100644
index 0000000000..5519d3705b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/Field.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/FieldContent.vue b/frontend/app/web-gold/src/components/ui/field/FieldContent.vue
new file mode 100644
index 0000000000..d9a23fd751
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/FieldContent.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/FieldDescription.vue b/frontend/app/web-gold/src/components/ui/field/FieldDescription.vue
new file mode 100644
index 0000000000..7240a837d6
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/FieldDescription.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/FieldError.vue b/frontend/app/web-gold/src/components/ui/field/FieldError.vue
new file mode 100644
index 0000000000..8a0a63f027
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/FieldError.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+ {{ content }}
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/FieldGroup.vue b/frontend/app/web-gold/src/components/ui/field/FieldGroup.vue
new file mode 100644
index 0000000000..834d8ced79
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/FieldGroup.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/FieldLabel.vue b/frontend/app/web-gold/src/components/ui/field/FieldLabel.vue
new file mode 100644
index 0000000000..e2692ecd4c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/FieldLabel.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/FieldLegend.vue b/frontend/app/web-gold/src/components/ui/field/FieldLegend.vue
new file mode 100644
index 0000000000..c620fed431
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/FieldLegend.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/FieldSeparator.vue b/frontend/app/web-gold/src/components/ui/field/FieldSeparator.vue
new file mode 100644
index 0000000000..5bca4d50f7
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/FieldSeparator.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/FieldSet.vue b/frontend/app/web-gold/src/components/ui/field/FieldSet.vue
new file mode 100644
index 0000000000..7be4dc9e77
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/FieldSet.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/FieldTitle.vue b/frontend/app/web-gold/src/components/ui/field/FieldTitle.vue
new file mode 100644
index 0000000000..f564b8b8a0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/FieldTitle.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/field/index.ts b/frontend/app/web-gold/src/components/ui/field/index.ts
new file mode 100644
index 0000000000..162ba14de2
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/field/index.ts
@@ -0,0 +1,39 @@
+import type { VariantProps } from "class-variance-authority"
+import { cva } from "class-variance-authority"
+
+export const fieldVariants = cva(
+ "group/field flex w-full gap-3 data-[invalid=true]:text-destructive",
+ {
+ variants: {
+ orientation: {
+ vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
+ horizontal: [
+ "flex-row items-center",
+ "[&>[data-slot=field-label]]:flex-auto",
+ "has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
+ ],
+ responsive: [
+ "flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto",
+ "@md/field-group:[&>[data-slot=field-label]]:flex-auto",
+ "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
+ ],
+ },
+ },
+ defaultVariants: {
+ orientation: "vertical",
+ },
+ },
+)
+
+export type FieldVariants = VariantProps
+
+export { default as Field } from "./Field.vue"
+export { default as FieldContent } from "./FieldContent.vue"
+export { default as FieldDescription } from "./FieldDescription.vue"
+export { default as FieldError } from "./FieldError.vue"
+export { default as FieldGroup } from "./FieldGroup.vue"
+export { default as FieldLabel } from "./FieldLabel.vue"
+export { default as FieldLegend } from "./FieldLegend.vue"
+export { default as FieldSeparator } from "./FieldSeparator.vue"
+export { default as FieldSet } from "./FieldSet.vue"
+export { default as FieldTitle } from "./FieldTitle.vue"
diff --git a/frontend/app/web-gold/src/components/ui/form/FormControl.vue b/frontend/app/web-gold/src/components/ui/form/FormControl.vue
new file mode 100644
index 0000000000..b1bc4bfadb
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/form/FormControl.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/form/FormDescription.vue b/frontend/app/web-gold/src/components/ui/form/FormDescription.vue
new file mode 100644
index 0000000000..2d3a903dc4
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/form/FormDescription.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/form/FormItem.vue b/frontend/app/web-gold/src/components/ui/form/FormItem.vue
new file mode 100644
index 0000000000..40cb994da8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/form/FormItem.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/form/FormLabel.vue b/frontend/app/web-gold/src/components/ui/form/FormLabel.vue
new file mode 100644
index 0000000000..d5475f7d4d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/form/FormLabel.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/form/FormMessage.vue b/frontend/app/web-gold/src/components/ui/form/FormMessage.vue
new file mode 100644
index 0000000000..c80c482d7d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/form/FormMessage.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/form/index.ts b/frontend/app/web-gold/src/components/ui/form/index.ts
new file mode 100644
index 0000000000..1eb05f11a3
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/form/index.ts
@@ -0,0 +1,7 @@
+export { default as FormControl } from "./FormControl.vue"
+export { default as FormDescription } from "./FormDescription.vue"
+export { default as FormItem } from "./FormItem.vue"
+export { default as FormLabel } from "./FormLabel.vue"
+export { default as FormMessage } from "./FormMessage.vue"
+export { FORM_ITEM_INJECTION_KEY } from "./injectionKeys"
+export { Form, Field as FormField, FieldArray as FormFieldArray } from "vee-validate"
diff --git a/frontend/app/web-gold/src/components/ui/form/injectionKeys.ts b/frontend/app/web-gold/src/components/ui/form/injectionKeys.ts
new file mode 100644
index 0000000000..42542a96f7
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/form/injectionKeys.ts
@@ -0,0 +1,4 @@
+import type { InjectionKey } from "vue"
+
+export const FORM_ITEM_INJECTION_KEY
+ = Symbol() as InjectionKey
diff --git a/frontend/app/web-gold/src/components/ui/form/useFormField.ts b/frontend/app/web-gold/src/components/ui/form/useFormField.ts
new file mode 100644
index 0000000000..62d86c268f
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/form/useFormField.ts
@@ -0,0 +1,30 @@
+import { FieldContextKey } from "vee-validate"
+import { computed, inject } from "vue"
+import { FORM_ITEM_INJECTION_KEY } from "./injectionKeys"
+
+export function useFormField() {
+ const fieldContext = inject(FieldContextKey)
+ const fieldItemContext = inject(FORM_ITEM_INJECTION_KEY)
+
+ if (!fieldContext)
+ throw new Error("useFormField should be used within ")
+
+ const { name, errorMessage: error, meta } = fieldContext
+ const id = fieldItemContext
+
+ const fieldState = {
+ valid: computed(() => meta.valid),
+ isDirty: computed(() => meta.dirty),
+ isTouched: computed(() => meta.touched),
+ error,
+ }
+
+ return {
+ id,
+ name,
+ formItemId: `${id}-form-item`,
+ formDescriptionId: `${id}-form-item-description`,
+ formMessageId: `${id}-form-item-message`,
+ ...fieldState,
+ }
+}
diff --git a/frontend/app/web-gold/src/components/ui/hover-card/HoverCard.vue b/frontend/app/web-gold/src/components/ui/hover-card/HoverCard.vue
new file mode 100644
index 0000000000..07d11e6058
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/hover-card/HoverCard.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/hover-card/HoverCardContent.vue b/frontend/app/web-gold/src/components/ui/hover-card/HoverCardContent.vue
new file mode 100644
index 0000000000..2a3c55336d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/hover-card/HoverCardContent.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/hover-card/HoverCardTrigger.vue b/frontend/app/web-gold/src/components/ui/hover-card/HoverCardTrigger.vue
new file mode 100644
index 0000000000..0a0900192f
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/hover-card/HoverCardTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/hover-card/index.ts b/frontend/app/web-gold/src/components/ui/hover-card/index.ts
new file mode 100644
index 0000000000..49b2930d28
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/hover-card/index.ts
@@ -0,0 +1,3 @@
+export { default as HoverCard } from "./HoverCard.vue"
+export { default as HoverCardContent } from "./HoverCardContent.vue"
+export { default as HoverCardTrigger } from "./HoverCardTrigger.vue"
diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroup.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroup.vue
new file mode 100644
index 0000000000..d32d69d4a7
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroup.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupAddon.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupAddon.vue
new file mode 100644
index 0000000000..709f482a35
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupAddon.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupButton.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupButton.vue
new file mode 100644
index 0000000000..26dcdb8d12
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupButton.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupInput.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupInput.vue
new file mode 100644
index 0000000000..5fcff43bb5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupInput.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupText.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupText.vue
new file mode 100644
index 0000000000..e317337966
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupText.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-group/InputGroupTextarea.vue b/frontend/app/web-gold/src/components/ui/input-group/InputGroupTextarea.vue
new file mode 100644
index 0000000000..596beba1c5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-group/InputGroupTextarea.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-group/index.ts b/frontend/app/web-gold/src/components/ui/input-group/index.ts
new file mode 100644
index 0000000000..e70a2adf34
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-group/index.ts
@@ -0,0 +1,51 @@
+import type { VariantProps } from "class-variance-authority"
+import { cva } from "class-variance-authority"
+
+export { default as InputGroup } from "./InputGroup.vue"
+export { default as InputGroupAddon } from "./InputGroupAddon.vue"
+export { default as InputGroupButton } from "./InputGroupButton.vue"
+export { default as InputGroupInput } from "./InputGroupInput.vue"
+export { default as InputGroupText } from "./InputGroupText.vue"
+export { default as InputGroupTextarea } from "./InputGroupTextarea.vue"
+
+export const inputGroupAddonVariants = cva(
+ "text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50",
+ {
+ variants: {
+ align: {
+ "inline-start":
+ "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
+ "inline-end":
+ "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
+ "block-start":
+ "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5",
+ "block-end":
+ "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5",
+ },
+ },
+ defaultVariants: {
+ align: "inline-start",
+ },
+ },
+)
+
+export type InputGroupVariants = VariantProps
+
+export const inputGroupButtonVariants = cva(
+ "text-sm shadow-none flex gap-2 items-center",
+ {
+ variants: {
+ size: {
+ "xs": "h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2",
+ "sm": "h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5",
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0",
+ },
+ },
+ defaultVariants: {
+ size: "xs",
+ },
+ },
+)
+
+export type InputGroupButtonVariants = VariantProps
diff --git a/frontend/app/web-gold/src/components/ui/input-otp/InputOTP.vue b/frontend/app/web-gold/src/components/ui/input-otp/InputOTP.vue
new file mode 100644
index 0000000000..f34b73481d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-otp/InputOTP.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-otp/InputOTPGroup.vue b/frontend/app/web-gold/src/components/ui/input-otp/InputOTPGroup.vue
new file mode 100644
index 0000000000..1dea2abab4
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-otp/InputOTPGroup.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-otp/InputOTPSeparator.vue b/frontend/app/web-gold/src/components/ui/input-otp/InputOTPSeparator.vue
new file mode 100644
index 0000000000..7675e2558e
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-otp/InputOTPSeparator.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-otp/InputOTPSlot.vue b/frontend/app/web-gold/src/components/ui/input-otp/InputOTPSlot.vue
new file mode 100644
index 0000000000..a165799679
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-otp/InputOTPSlot.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input-otp/index.ts b/frontend/app/web-gold/src/components/ui/input-otp/index.ts
new file mode 100644
index 0000000000..d97448a569
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input-otp/index.ts
@@ -0,0 +1,4 @@
+export { default as InputOTP } from "./InputOTP.vue"
+export { default as InputOTPGroup } from "./InputOTPGroup.vue"
+export { default as InputOTPSeparator } from "./InputOTPSeparator.vue"
+export { default as InputOTPSlot } from "./InputOTPSlot.vue"
diff --git a/frontend/app/web-gold/src/components/ui/input/Input.vue b/frontend/app/web-gold/src/components/ui/input/Input.vue
new file mode 100644
index 0000000000..e5135c1436
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input/Input.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/input/index.ts b/frontend/app/web-gold/src/components/ui/input/index.ts
new file mode 100644
index 0000000000..9976b86f52
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/input/index.ts
@@ -0,0 +1 @@
+export { default as Input } from "./Input.vue"
diff --git a/frontend/app/web-gold/src/components/ui/item/Item.vue b/frontend/app/web-gold/src/components/ui/item/Item.vue
new file mode 100644
index 0000000000..0cec259d50
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/Item.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/ItemActions.vue b/frontend/app/web-gold/src/components/ui/item/ItemActions.vue
new file mode 100644
index 0000000000..b525712933
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/ItemActions.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/ItemContent.vue b/frontend/app/web-gold/src/components/ui/item/ItemContent.vue
new file mode 100644
index 0000000000..212d64f835
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/ItemContent.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/ItemDescription.vue b/frontend/app/web-gold/src/components/ui/item/ItemDescription.vue
new file mode 100644
index 0000000000..278e6b84d5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/ItemDescription.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/ItemFooter.vue b/frontend/app/web-gold/src/components/ui/item/ItemFooter.vue
new file mode 100644
index 0000000000..fd57ccf9c6
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/ItemFooter.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/ItemGroup.vue b/frontend/app/web-gold/src/components/ui/item/ItemGroup.vue
new file mode 100644
index 0000000000..121a0c27b8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/ItemGroup.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/ItemHeader.vue b/frontend/app/web-gold/src/components/ui/item/ItemHeader.vue
new file mode 100644
index 0000000000..c9fb17acf5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/ItemHeader.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/ItemMedia.vue b/frontend/app/web-gold/src/components/ui/item/ItemMedia.vue
new file mode 100644
index 0000000000..db229f31e4
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/ItemMedia.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/ItemSeparator.vue b/frontend/app/web-gold/src/components/ui/item/ItemSeparator.vue
new file mode 100644
index 0000000000..949b5a036b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/ItemSeparator.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/ItemTitle.vue b/frontend/app/web-gold/src/components/ui/item/ItemTitle.vue
new file mode 100644
index 0000000000..81c0827cd4
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/ItemTitle.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/item/index.ts b/frontend/app/web-gold/src/components/ui/item/index.ts
new file mode 100644
index 0000000000..948421d808
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/item/index.ts
@@ -0,0 +1,54 @@
+import type { VariantProps } from "class-variance-authority"
+import { cva } from "class-variance-authority"
+
+export { default as Item } from "./Item.vue"
+export { default as ItemActions } from "./ItemActions.vue"
+export { default as ItemContent } from "./ItemContent.vue"
+export { default as ItemDescription } from "./ItemDescription.vue"
+export { default as ItemFooter } from "./ItemFooter.vue"
+export { default as ItemGroup } from "./ItemGroup.vue"
+export { default as ItemHeader } from "./ItemHeader.vue"
+export { default as ItemMedia } from "./ItemMedia.vue"
+export { default as ItemSeparator } from "./ItemSeparator.vue"
+export { default as ItemTitle } from "./ItemTitle.vue"
+
+export const itemVariants = cva(
+ "group/item flex items-center border border-transparent text-sm rounded-md transition-colors [a]:hover:bg-accent/50 [a]:transition-colors duration-100 flex-wrap outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
+ {
+ variants: {
+ variant: {
+ default: "bg-transparent",
+ outline: "border-border",
+ muted: "bg-muted/50",
+ },
+ size: {
+ default: "p-4 gap-4 ",
+ sm: "py-3 px-4 gap-2.5",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ },
+)
+
+export const itemMediaVariants = cva(
+ "flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none group-has-[[data-slot=item-description]]/item:translate-y-0.5",
+ {
+ variants: {
+ variant: {
+ default: "bg-transparent",
+ icon: "size-8 border rounded-sm bg-muted [&_svg:not([class*='size-'])]:size-4",
+ image:
+ "size-10 rounded-sm overflow-hidden [&_img]:size-full [&_img]:object-cover",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ },
+)
+
+export type ItemVariants = VariantProps
+export type ItemMediaVariants = VariantProps
diff --git a/frontend/app/web-gold/src/components/ui/kbd/Kbd.vue b/frontend/app/web-gold/src/components/ui/kbd/Kbd.vue
new file mode 100644
index 0000000000..e71b49492b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/kbd/Kbd.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/kbd/KbdGroup.vue b/frontend/app/web-gold/src/components/ui/kbd/KbdGroup.vue
new file mode 100644
index 0000000000..e0cd862247
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/kbd/KbdGroup.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/kbd/index.ts b/frontend/app/web-gold/src/components/ui/kbd/index.ts
new file mode 100644
index 0000000000..b613b0cc9c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/kbd/index.ts
@@ -0,0 +1,2 @@
+export { default as Kbd } from "./Kbd.vue"
+export { default as KbdGroup } from "./KbdGroup.vue"
diff --git a/frontend/app/web-gold/src/components/ui/label/Label.vue b/frontend/app/web-gold/src/components/ui/label/Label.vue
new file mode 100644
index 0000000000..ee63970244
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/label/Label.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/label/index.ts b/frontend/app/web-gold/src/components/ui/label/index.ts
new file mode 100644
index 0000000000..036e35c34d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/label/index.ts
@@ -0,0 +1 @@
+export { default as Label } from "./Label.vue"
diff --git a/frontend/app/web-gold/src/components/ui/menubar/Menubar.vue b/frontend/app/web-gold/src/components/ui/menubar/Menubar.vue
new file mode 100644
index 0000000000..fb2032ac10
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/Menubar.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarCheckboxItem.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarCheckboxItem.vue
new file mode 100644
index 0000000000..b2caa909b0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarCheckboxItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarContent.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarContent.vue
new file mode 100644
index 0000000000..fa116be553
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarContent.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarGroup.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarGroup.vue
new file mode 100644
index 0000000000..928e5032c1
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarGroup.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarItem.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarItem.vue
new file mode 100644
index 0000000000..2f73805afa
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarItem.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarLabel.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarLabel.vue
new file mode 100644
index 0000000000..2d28e3b5d4
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarLabel.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarMenu.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarMenu.vue
new file mode 100644
index 0000000000..8a6c27ed48
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarMenu.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarRadioGroup.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarRadioGroup.vue
new file mode 100644
index 0000000000..9fc3a0f1fb
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarRadioGroup.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarRadioItem.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarRadioItem.vue
new file mode 100644
index 0000000000..c2543cb083
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarRadioItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarSeparator.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarSeparator.vue
new file mode 100644
index 0000000000..f65b42394c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarSeparator.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarShortcut.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarShortcut.vue
new file mode 100644
index 0000000000..ec8dc917a1
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarShortcut.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarSub.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarSub.vue
new file mode 100644
index 0000000000..c99cf4200a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarSub.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarSubContent.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarSubContent.vue
new file mode 100644
index 0000000000..f4831d3625
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarSubContent.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarSubTrigger.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarSubTrigger.vue
new file mode 100644
index 0000000000..1d87b140ae
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarSubTrigger.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/MenubarTrigger.vue b/frontend/app/web-gold/src/components/ui/menubar/MenubarTrigger.vue
new file mode 100644
index 0000000000..47fbaad2b0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/MenubarTrigger.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/menubar/index.ts b/frontend/app/web-gold/src/components/ui/menubar/index.ts
new file mode 100644
index 0000000000..bebbb780ce
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/menubar/index.ts
@@ -0,0 +1,15 @@
+export { default as Menubar } from "./Menubar.vue"
+export { default as MenubarCheckboxItem } from "./MenubarCheckboxItem.vue"
+export { default as MenubarContent } from "./MenubarContent.vue"
+export { default as MenubarGroup } from "./MenubarGroup.vue"
+export { default as MenubarItem } from "./MenubarItem.vue"
+export { default as MenubarLabel } from "./MenubarLabel.vue"
+export { default as MenubarMenu } from "./MenubarMenu.vue"
+export { default as MenubarRadioGroup } from "./MenubarRadioGroup.vue"
+export { default as MenubarRadioItem } from "./MenubarRadioItem.vue"
+export { default as MenubarSeparator } from "./MenubarSeparator.vue"
+export { default as MenubarShortcut } from "./MenubarShortcut.vue"
+export { default as MenubarSub } from "./MenubarSub.vue"
+export { default as MenubarSubContent } from "./MenubarSubContent.vue"
+export { default as MenubarSubTrigger } from "./MenubarSubTrigger.vue"
+export { default as MenubarTrigger } from "./MenubarTrigger.vue"
diff --git a/frontend/app/web-gold/src/components/ui/native-select/NativeSelect.vue b/frontend/app/web-gold/src/components/ui/native-select/NativeSelect.vue
new file mode 100644
index 0000000000..31716767a3
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/native-select/NativeSelect.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/native-select/NativeSelectOptGroup.vue b/frontend/app/web-gold/src/components/ui/native-select/NativeSelectOptGroup.vue
new file mode 100644
index 0000000000..169558cb80
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/native-select/NativeSelectOptGroup.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/native-select/NativeSelectOption.vue b/frontend/app/web-gold/src/components/ui/native-select/NativeSelectOption.vue
new file mode 100644
index 0000000000..2f678fb610
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/native-select/NativeSelectOption.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/native-select/index.ts b/frontend/app/web-gold/src/components/ui/native-select/index.ts
new file mode 100644
index 0000000000..04e92c7ee2
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/native-select/index.ts
@@ -0,0 +1,3 @@
+export { default as NativeSelect } from "./NativeSelect.vue"
+export { default as NativeSelectOptGroup } from "./NativeSelectOptGroup.vue"
+export { default as NativeSelectOption } from "./NativeSelectOption.vue"
diff --git a/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenu.vue b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenu.vue
new file mode 100644
index 0000000000..6042a77d43
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenu.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuContent.vue b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuContent.vue
new file mode 100644
index 0000000000..395dc2dfa2
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuContent.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuIndicator.vue b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuIndicator.vue
new file mode 100644
index 0000000000..2558371abe
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuIndicator.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuItem.vue b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuItem.vue
new file mode 100644
index 0000000000..1a8595b8db
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuItem.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuLink.vue b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuLink.vue
new file mode 100644
index 0000000000..6620c05372
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuLink.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuList.vue b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuList.vue
new file mode 100644
index 0000000000..a702d7063c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuList.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuTrigger.vue b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuTrigger.vue
new file mode 100644
index 0000000000..3969701009
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuTrigger.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuViewport.vue b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuViewport.vue
new file mode 100644
index 0000000000..74edf86764
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/navigation-menu/NavigationMenuViewport.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/navigation-menu/index.ts b/frontend/app/web-gold/src/components/ui/navigation-menu/index.ts
new file mode 100644
index 0000000000..90055919d5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/navigation-menu/index.ts
@@ -0,0 +1,14 @@
+import { cva } from "class-variance-authority"
+
+export { default as NavigationMenu } from "./NavigationMenu.vue"
+export { default as NavigationMenuContent } from "./NavigationMenuContent.vue"
+export { default as NavigationMenuIndicator } from "./NavigationMenuIndicator.vue"
+export { default as NavigationMenuItem } from "./NavigationMenuItem.vue"
+export { default as NavigationMenuLink } from "./NavigationMenuLink.vue"
+export { default as NavigationMenuList } from "./NavigationMenuList.vue"
+export { default as NavigationMenuTrigger } from "./NavigationMenuTrigger.vue"
+export { default as NavigationMenuViewport } from "./NavigationMenuViewport.vue"
+
+export const navigationMenuTriggerStyle = cva(
+ "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1",
+)
diff --git a/frontend/app/web-gold/src/components/ui/number-field/NumberField.vue b/frontend/app/web-gold/src/components/ui/number-field/NumberField.vue
new file mode 100644
index 0000000000..e9f2f220d5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/number-field/NumberField.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/number-field/NumberFieldContent.vue b/frontend/app/web-gold/src/components/ui/number-field/NumberFieldContent.vue
new file mode 100644
index 0000000000..2a2be5898c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/number-field/NumberFieldContent.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/number-field/NumberFieldDecrement.vue b/frontend/app/web-gold/src/components/ui/number-field/NumberFieldDecrement.vue
new file mode 100644
index 0000000000..69b49c4870
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/number-field/NumberFieldDecrement.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/number-field/NumberFieldIncrement.vue b/frontend/app/web-gold/src/components/ui/number-field/NumberFieldIncrement.vue
new file mode 100644
index 0000000000..b755a4f1c2
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/number-field/NumberFieldIncrement.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/number-field/NumberFieldInput.vue b/frontend/app/web-gold/src/components/ui/number-field/NumberFieldInput.vue
new file mode 100644
index 0000000000..ea571b1f35
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/number-field/NumberFieldInput.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/number-field/index.ts b/frontend/app/web-gold/src/components/ui/number-field/index.ts
new file mode 100644
index 0000000000..97d0eecb27
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/number-field/index.ts
@@ -0,0 +1,5 @@
+export { default as NumberField } from "./NumberField.vue"
+export { default as NumberFieldContent } from "./NumberFieldContent.vue"
+export { default as NumberFieldDecrement } from "./NumberFieldDecrement.vue"
+export { default as NumberFieldIncrement } from "./NumberFieldIncrement.vue"
+export { default as NumberFieldInput } from "./NumberFieldInput.vue"
diff --git a/frontend/app/web-gold/src/components/ui/pagination/Pagination.vue b/frontend/app/web-gold/src/components/ui/pagination/Pagination.vue
new file mode 100644
index 0000000000..d410b24288
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pagination/Pagination.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pagination/PaginationContent.vue b/frontend/app/web-gold/src/components/ui/pagination/PaginationContent.vue
new file mode 100644
index 0000000000..5150b4969a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pagination/PaginationContent.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pagination/PaginationEllipsis.vue b/frontend/app/web-gold/src/components/ui/pagination/PaginationEllipsis.vue
new file mode 100644
index 0000000000..cc9e002edb
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pagination/PaginationEllipsis.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ More pages
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pagination/PaginationFirst.vue b/frontend/app/web-gold/src/components/ui/pagination/PaginationFirst.vue
new file mode 100644
index 0000000000..e37e706cf9
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pagination/PaginationFirst.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+ First
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pagination/PaginationItem.vue b/frontend/app/web-gold/src/components/ui/pagination/PaginationItem.vue
new file mode 100644
index 0000000000..1b52e4f774
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pagination/PaginationItem.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pagination/PaginationLast.vue b/frontend/app/web-gold/src/components/ui/pagination/PaginationLast.vue
new file mode 100644
index 0000000000..c371d66e1b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pagination/PaginationLast.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Last
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pagination/PaginationNext.vue b/frontend/app/web-gold/src/components/ui/pagination/PaginationNext.vue
new file mode 100644
index 0000000000..ede69213ba
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pagination/PaginationNext.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Next
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pagination/PaginationPrevious.vue b/frontend/app/web-gold/src/components/ui/pagination/PaginationPrevious.vue
new file mode 100644
index 0000000000..ed91eae7c8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pagination/PaginationPrevious.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+ Previous
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pagination/index.ts b/frontend/app/web-gold/src/components/ui/pagination/index.ts
new file mode 100644
index 0000000000..51ae7fdd05
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pagination/index.ts
@@ -0,0 +1,8 @@
+export { default as Pagination } from "./Pagination.vue"
+export { default as PaginationContent } from "./PaginationContent.vue"
+export { default as PaginationEllipsis } from "./PaginationEllipsis.vue"
+export { default as PaginationFirst } from "./PaginationFirst.vue"
+export { default as PaginationItem } from "./PaginationItem.vue"
+export { default as PaginationLast } from "./PaginationLast.vue"
+export { default as PaginationNext } from "./PaginationNext.vue"
+export { default as PaginationPrevious } from "./PaginationPrevious.vue"
diff --git a/frontend/app/web-gold/src/components/ui/pin-input/PinInput.vue b/frontend/app/web-gold/src/components/ui/pin-input/PinInput.vue
new file mode 100644
index 0000000000..af25ab16d0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pin-input/PinInput.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pin-input/PinInputGroup.vue b/frontend/app/web-gold/src/components/ui/pin-input/PinInputGroup.vue
new file mode 100644
index 0000000000..f5aff443be
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pin-input/PinInputGroup.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pin-input/PinInputSeparator.vue b/frontend/app/web-gold/src/components/ui/pin-input/PinInputSeparator.vue
new file mode 100644
index 0000000000..1d46418f5d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pin-input/PinInputSeparator.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pin-input/PinInputSlot.vue b/frontend/app/web-gold/src/components/ui/pin-input/PinInputSlot.vue
new file mode 100644
index 0000000000..c9a3c954e1
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pin-input/PinInputSlot.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/pin-input/index.ts b/frontend/app/web-gold/src/components/ui/pin-input/index.ts
new file mode 100644
index 0000000000..74faa6c9d7
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/pin-input/index.ts
@@ -0,0 +1,4 @@
+export { default as PinInput } from "./PinInput.vue"
+export { default as PinInputGroup } from "./PinInputGroup.vue"
+export { default as PinInputSeparator } from "./PinInputSeparator.vue"
+export { default as PinInputSlot } from "./PinInputSlot.vue"
diff --git a/frontend/app/web-gold/src/components/ui/popover/Popover.vue b/frontend/app/web-gold/src/components/ui/popover/Popover.vue
new file mode 100644
index 0000000000..4efdb98a0e
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/popover/Popover.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/popover/PopoverAnchor.vue b/frontend/app/web-gold/src/components/ui/popover/PopoverAnchor.vue
new file mode 100644
index 0000000000..49e01dbc56
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/popover/PopoverAnchor.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/popover/PopoverContent.vue b/frontend/app/web-gold/src/components/ui/popover/PopoverContent.vue
new file mode 100644
index 0000000000..cf1e55c501
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/popover/PopoverContent.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/popover/PopoverTrigger.vue b/frontend/app/web-gold/src/components/ui/popover/PopoverTrigger.vue
new file mode 100644
index 0000000000..fd3b4974da
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/popover/PopoverTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/popover/index.ts b/frontend/app/web-gold/src/components/ui/popover/index.ts
new file mode 100644
index 0000000000..66edf89f6b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/popover/index.ts
@@ -0,0 +1,4 @@
+export { default as Popover } from "./Popover.vue"
+export { default as PopoverAnchor } from "./PopoverAnchor.vue"
+export { default as PopoverContent } from "./PopoverContent.vue"
+export { default as PopoverTrigger } from "./PopoverTrigger.vue"
diff --git a/frontend/app/web-gold/src/components/ui/progress/Progress.vue b/frontend/app/web-gold/src/components/ui/progress/Progress.vue
new file mode 100644
index 0000000000..5532af7a80
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/progress/Progress.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/progress/index.ts b/frontend/app/web-gold/src/components/ui/progress/index.ts
new file mode 100644
index 0000000000..8598b9697c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/progress/index.ts
@@ -0,0 +1 @@
+export { default as Progress } from "./Progress.vue"
diff --git a/frontend/app/web-gold/src/components/ui/radio-group/RadioGroup.vue b/frontend/app/web-gold/src/components/ui/radio-group/RadioGroup.vue
new file mode 100644
index 0000000000..54045c4213
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/radio-group/RadioGroup.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/radio-group/RadioGroupItem.vue b/frontend/app/web-gold/src/components/ui/radio-group/RadioGroupItem.vue
new file mode 100644
index 0000000000..2488c9dd89
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/radio-group/RadioGroupItem.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/radio-group/index.ts b/frontend/app/web-gold/src/components/ui/radio-group/index.ts
new file mode 100644
index 0000000000..7cb0e3b10b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/radio-group/index.ts
@@ -0,0 +1,2 @@
+export { default as RadioGroup } from "./RadioGroup.vue"
+export { default as RadioGroupItem } from "./RadioGroupItem.vue"
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendar.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendar.vue
new file mode 100644
index 0000000000..178af4afd5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendar.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ day }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarCell.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarCell.vue
new file mode 100644
index 0000000000..b459679d9a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarCell.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarCellTrigger.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarCellTrigger.vue
new file mode 100644
index 0000000000..b3e90d76d9
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarCellTrigger.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGrid.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGrid.vue
new file mode 100644
index 0000000000..f541c92340
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGrid.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGridBody.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGridBody.vue
new file mode 100644
index 0000000000..015f7afe01
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGridBody.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGridHead.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGridHead.vue
new file mode 100644
index 0000000000..cad9834969
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGridHead.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGridRow.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGridRow.vue
new file mode 100644
index 0000000000..1f03afdef2
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarGridRow.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarHeadCell.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarHeadCell.vue
new file mode 100644
index 0000000000..a83e412c5c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarHeadCell.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarHeader.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarHeader.vue
new file mode 100644
index 0000000000..aac33fec89
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarHeader.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarHeading.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarHeading.vue
new file mode 100644
index 0000000000..eeadd66d9e
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarHeading.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+ {{ headingValue }}
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarNextButton.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarNextButton.vue
new file mode 100644
index 0000000000..6aae93f56f
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarNextButton.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarPrevButton.vue b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarPrevButton.vue
new file mode 100644
index 0000000000..047d3e46cc
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/RangeCalendarPrevButton.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/range-calendar/index.ts b/frontend/app/web-gold/src/components/ui/range-calendar/index.ts
new file mode 100644
index 0000000000..34d53610b8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/range-calendar/index.ts
@@ -0,0 +1,12 @@
+export { default as RangeCalendar } from "./RangeCalendar.vue"
+export { default as RangeCalendarCell } from "./RangeCalendarCell.vue"
+export { default as RangeCalendarCellTrigger } from "./RangeCalendarCellTrigger.vue"
+export { default as RangeCalendarGrid } from "./RangeCalendarGrid.vue"
+export { default as RangeCalendarGridBody } from "./RangeCalendarGridBody.vue"
+export { default as RangeCalendarGridHead } from "./RangeCalendarGridHead.vue"
+export { default as RangeCalendarGridRow } from "./RangeCalendarGridRow.vue"
+export { default as RangeCalendarHeadCell } from "./RangeCalendarHeadCell.vue"
+export { default as RangeCalendarHeader } from "./RangeCalendarHeader.vue"
+export { default as RangeCalendarHeading } from "./RangeCalendarHeading.vue"
+export { default as RangeCalendarNextButton } from "./RangeCalendarNextButton.vue"
+export { default as RangeCalendarPrevButton } from "./RangeCalendarPrevButton.vue"
diff --git a/frontend/app/web-gold/src/components/ui/resizable/ResizableHandle.vue b/frontend/app/web-gold/src/components/ui/resizable/ResizableHandle.vue
new file mode 100644
index 0000000000..6848165ecb
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/resizable/ResizableHandle.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/resizable/ResizablePanel.vue b/frontend/app/web-gold/src/components/ui/resizable/ResizablePanel.vue
new file mode 100644
index 0000000000..e52e1ecb07
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/resizable/ResizablePanel.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/resizable/ResizablePanelGroup.vue b/frontend/app/web-gold/src/components/ui/resizable/ResizablePanelGroup.vue
new file mode 100644
index 0000000000..dd55b50c77
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/resizable/ResizablePanelGroup.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/resizable/index.ts b/frontend/app/web-gold/src/components/ui/resizable/index.ts
new file mode 100644
index 0000000000..89e5d7706a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/resizable/index.ts
@@ -0,0 +1,3 @@
+export { default as ResizableHandle } from "./ResizableHandle.vue"
+export { default as ResizablePanel } from "./ResizablePanel.vue"
+export { default as ResizablePanelGroup } from "./ResizablePanelGroup.vue"
diff --git a/frontend/app/web-gold/src/components/ui/scroll-area/ScrollArea.vue b/frontend/app/web-gold/src/components/ui/scroll-area/ScrollArea.vue
new file mode 100644
index 0000000000..6112caad37
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/scroll-area/ScrollArea.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/scroll-area/ScrollBar.vue b/frontend/app/web-gold/src/components/ui/scroll-area/ScrollBar.vue
new file mode 100644
index 0000000000..a0b6f9b7b9
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/scroll-area/ScrollBar.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/scroll-area/index.ts b/frontend/app/web-gold/src/components/ui/scroll-area/index.ts
new file mode 100644
index 0000000000..c416759cbb
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/scroll-area/index.ts
@@ -0,0 +1,2 @@
+export { default as ScrollArea } from "./ScrollArea.vue"
+export { default as ScrollBar } from "./ScrollBar.vue"
diff --git a/frontend/app/web-gold/src/components/ui/select/Select.vue b/frontend/app/web-gold/src/components/ui/select/Select.vue
new file mode 100644
index 0000000000..c94bbe888d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/Select.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectContent.vue b/frontend/app/web-gold/src/components/ui/select/SelectContent.vue
new file mode 100644
index 0000000000..adf04ec81f
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectContent.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectGroup.vue b/frontend/app/web-gold/src/components/ui/select/SelectGroup.vue
new file mode 100644
index 0000000000..e981c6c504
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectGroup.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectItem.vue b/frontend/app/web-gold/src/components/ui/select/SelectItem.vue
new file mode 100644
index 0000000000..937176457c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectItem.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectItemText.vue b/frontend/app/web-gold/src/components/ui/select/SelectItemText.vue
new file mode 100644
index 0000000000..b6700b17b5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectItemText.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectLabel.vue b/frontend/app/web-gold/src/components/ui/select/SelectLabel.vue
new file mode 100644
index 0000000000..5b6650cb03
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectLabel.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectScrollDownButton.vue b/frontend/app/web-gold/src/components/ui/select/SelectScrollDownButton.vue
new file mode 100644
index 0000000000..7dc7670b32
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectScrollDownButton.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectScrollUpButton.vue b/frontend/app/web-gold/src/components/ui/select/SelectScrollUpButton.vue
new file mode 100644
index 0000000000..07fe87eab2
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectScrollUpButton.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectSeparator.vue b/frontend/app/web-gold/src/components/ui/select/SelectSeparator.vue
new file mode 100644
index 0000000000..4b5c88577a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectSeparator.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectTrigger.vue b/frontend/app/web-gold/src/components/ui/select/SelectTrigger.vue
new file mode 100644
index 0000000000..667908b6d8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectTrigger.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/SelectValue.vue b/frontend/app/web-gold/src/components/ui/select/SelectValue.vue
new file mode 100644
index 0000000000..d5ce58b558
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/SelectValue.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/select/index.ts b/frontend/app/web-gold/src/components/ui/select/index.ts
new file mode 100644
index 0000000000..96eae60cfe
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/select/index.ts
@@ -0,0 +1,11 @@
+export { default as Select } from "./Select.vue"
+export { default as SelectContent } from "./SelectContent.vue"
+export { default as SelectGroup } from "./SelectGroup.vue"
+export { default as SelectItem } from "./SelectItem.vue"
+export { default as SelectItemText } from "./SelectItemText.vue"
+export { default as SelectLabel } from "./SelectLabel.vue"
+export { default as SelectScrollDownButton } from "./SelectScrollDownButton.vue"
+export { default as SelectScrollUpButton } from "./SelectScrollUpButton.vue"
+export { default as SelectSeparator } from "./SelectSeparator.vue"
+export { default as SelectTrigger } from "./SelectTrigger.vue"
+export { default as SelectValue } from "./SelectValue.vue"
diff --git a/frontend/app/web-gold/src/components/ui/separator/Separator.vue b/frontend/app/web-gold/src/components/ui/separator/Separator.vue
new file mode 100644
index 0000000000..78d60eca12
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/separator/Separator.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/separator/index.ts b/frontend/app/web-gold/src/components/ui/separator/index.ts
new file mode 100644
index 0000000000..4407287303
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/separator/index.ts
@@ -0,0 +1 @@
+export { default as Separator } from "./Separator.vue"
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/Sidebar.vue b/frontend/app/web-gold/src/components/ui/sidebar/Sidebar.vue
new file mode 100644
index 0000000000..9035cd4e87
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/Sidebar.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarContent.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarContent.vue
new file mode 100644
index 0000000000..bb6d9f1dd5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarContent.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarFooter.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarFooter.vue
new file mode 100644
index 0000000000..20dd72f47b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarFooter.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroup.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroup.vue
new file mode 100644
index 0000000000..fbb4887399
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroup.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroupAction.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroupAction.vue
new file mode 100644
index 0000000000..f5fa5eb0c8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroupAction.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroupContent.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroupContent.vue
new file mode 100644
index 0000000000..06e1a92fea
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroupContent.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroupLabel.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroupLabel.vue
new file mode 100644
index 0000000000..f5da1300da
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarGroupLabel.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarHeader.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarHeader.vue
new file mode 100644
index 0000000000..79cf883320
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarHeader.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarInput.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarInput.vue
new file mode 100644
index 0000000000..537296fa78
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarInput.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarInset.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarInset.vue
new file mode 100644
index 0000000000..f46b43a87f
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarInset.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenu.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenu.vue
new file mode 100644
index 0000000000..e1dd39ebc4
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenu.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuAction.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuAction.vue
new file mode 100644
index 0000000000..bdffdb7d82
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuAction.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuBadge.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuBadge.vue
new file mode 100644
index 0000000000..432161842f
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuBadge.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuButton.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuButton.vue
new file mode 100644
index 0000000000..6dc7f8f5c1
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuButton.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ tooltip }}
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuButtonChild.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuButtonChild.vue
new file mode 100644
index 0000000000..4b4ca3ba48
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuButtonChild.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuItem.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuItem.vue
new file mode 100644
index 0000000000..e2fda5b4db
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuItem.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSkeleton.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSkeleton.vue
new file mode 100644
index 0000000000..bd4563efa4
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSkeleton.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSub.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSub.vue
new file mode 100644
index 0000000000..81c2dab9b0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSub.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSubButton.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSubButton.vue
new file mode 100644
index 0000000000..457cfb634d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSubButton.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSubItem.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSubItem.vue
new file mode 100644
index 0000000000..d4374f65d0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarMenuSubItem.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarProvider.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarProvider.vue
new file mode 100644
index 0000000000..04ed975f96
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarProvider.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarRail.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarRail.vue
new file mode 100644
index 0000000000..1045a55ce0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarRail.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarSeparator.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarSeparator.vue
new file mode 100644
index 0000000000..c0f9ab16e7
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarSeparator.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/SidebarTrigger.vue b/frontend/app/web-gold/src/components/ui/sidebar/SidebarTrigger.vue
new file mode 100644
index 0000000000..c135ce6c0d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/SidebarTrigger.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+ Toggle Sidebar
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/index.ts b/frontend/app/web-gold/src/components/ui/sidebar/index.ts
new file mode 100644
index 0000000000..ef718a9ce1
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/index.ts
@@ -0,0 +1,60 @@
+import type { VariantProps } from "class-variance-authority"
+import type { HTMLAttributes } from "vue"
+import { cva } from "class-variance-authority"
+
+export interface SidebarProps {
+ side?: "left" | "right"
+ variant?: "sidebar" | "floating" | "inset"
+ collapsible?: "offcanvas" | "icon" | "none"
+ class?: HTMLAttributes["class"]
+}
+
+export { default as Sidebar } from "./Sidebar.vue"
+export { default as SidebarContent } from "./SidebarContent.vue"
+export { default as SidebarFooter } from "./SidebarFooter.vue"
+export { default as SidebarGroup } from "./SidebarGroup.vue"
+export { default as SidebarGroupAction } from "./SidebarGroupAction.vue"
+export { default as SidebarGroupContent } from "./SidebarGroupContent.vue"
+export { default as SidebarGroupLabel } from "./SidebarGroupLabel.vue"
+export { default as SidebarHeader } from "./SidebarHeader.vue"
+export { default as SidebarInput } from "./SidebarInput.vue"
+export { default as SidebarInset } from "./SidebarInset.vue"
+export { default as SidebarMenu } from "./SidebarMenu.vue"
+export { default as SidebarMenuAction } from "./SidebarMenuAction.vue"
+export { default as SidebarMenuBadge } from "./SidebarMenuBadge.vue"
+export { default as SidebarMenuButton } from "./SidebarMenuButton.vue"
+export { default as SidebarMenuItem } from "./SidebarMenuItem.vue"
+export { default as SidebarMenuSkeleton } from "./SidebarMenuSkeleton.vue"
+export { default as SidebarMenuSub } from "./SidebarMenuSub.vue"
+export { default as SidebarMenuSubButton } from "./SidebarMenuSubButton.vue"
+export { default as SidebarMenuSubItem } from "./SidebarMenuSubItem.vue"
+export { default as SidebarProvider } from "./SidebarProvider.vue"
+export { default as SidebarRail } from "./SidebarRail.vue"
+export { default as SidebarSeparator } from "./SidebarSeparator.vue"
+export { default as SidebarTrigger } from "./SidebarTrigger.vue"
+
+export { useSidebar } from "./utils"
+
+export const sidebarMenuButtonVariants = cva(
+ "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
+ {
+ variants: {
+ variant: {
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
+ outline:
+ "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]",
+ },
+ size: {
+ default: "h-8 text-sm",
+ sm: "h-7 text-xs",
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ },
+)
+
+export type SidebarMenuButtonVariants = VariantProps
diff --git a/frontend/app/web-gold/src/components/ui/sidebar/utils.ts b/frontend/app/web-gold/src/components/ui/sidebar/utils.ts
new file mode 100644
index 0000000000..6e57eeb9b0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sidebar/utils.ts
@@ -0,0 +1,19 @@
+import type { ComputedRef, Ref } from "vue"
+import { createContext } from "reka-ui"
+
+export const SIDEBAR_COOKIE_NAME = "sidebar_state"
+export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
+export const SIDEBAR_WIDTH = "16rem"
+export const SIDEBAR_WIDTH_MOBILE = "18rem"
+export const SIDEBAR_WIDTH_ICON = "3rem"
+export const SIDEBAR_KEYBOARD_SHORTCUT = "b"
+
+export const [useSidebar, provideSidebarContext] = createContext<{
+ state: ComputedRef<"expanded" | "collapsed">
+ open: Ref
+ setOpen: (value: boolean) => void
+ isMobile: Ref
+ openMobile: Ref
+ setOpenMobile: (value: boolean) => void
+ toggleSidebar: () => void
+}>("Sidebar")
diff --git a/frontend/app/web-gold/src/components/ui/skeleton/Skeleton.vue b/frontend/app/web-gold/src/components/ui/skeleton/Skeleton.vue
new file mode 100644
index 0000000000..0dadcef9a2
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/skeleton/Skeleton.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/skeleton/index.ts b/frontend/app/web-gold/src/components/ui/skeleton/index.ts
new file mode 100644
index 0000000000..e5ce72c352
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/skeleton/index.ts
@@ -0,0 +1 @@
+export { default as Skeleton } from "./Skeleton.vue"
diff --git a/frontend/app/web-gold/src/components/ui/slider/Slider.vue b/frontend/app/web-gold/src/components/ui/slider/Slider.vue
new file mode 100644
index 0000000000..bae7b72008
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/slider/Slider.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/slider/index.ts b/frontend/app/web-gold/src/components/ui/slider/index.ts
new file mode 100644
index 0000000000..f7a7b09659
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/slider/index.ts
@@ -0,0 +1 @@
+export { default as Slider } from "./Slider.vue"
diff --git a/frontend/app/web-gold/src/components/ui/sonner/Sonner.vue b/frontend/app/web-gold/src/components/ui/sonner/Sonner.vue
new file mode 100644
index 0000000000..6830896bb5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sonner/Sonner.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/sonner/index.ts b/frontend/app/web-gold/src/components/ui/sonner/index.ts
new file mode 100644
index 0000000000..6673112ed5
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/sonner/index.ts
@@ -0,0 +1 @@
+export { default as Toaster } from "./Sonner.vue"
diff --git a/frontend/app/web-gold/src/components/ui/spinner/Spinner.vue b/frontend/app/web-gold/src/components/ui/spinner/Spinner.vue
new file mode 100644
index 0000000000..57cd1a968e
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/spinner/Spinner.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/spinner/index.ts b/frontend/app/web-gold/src/components/ui/spinner/index.ts
new file mode 100644
index 0000000000..aa63007547
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/spinner/index.ts
@@ -0,0 +1 @@
+export { default as Spinner } from "./Spinner.vue"
diff --git a/frontend/app/web-gold/src/components/ui/stepper/Stepper.vue b/frontend/app/web-gold/src/components/ui/stepper/Stepper.vue
new file mode 100644
index 0000000000..91a7ce6312
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/stepper/Stepper.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/stepper/StepperDescription.vue b/frontend/app/web-gold/src/components/ui/stepper/StepperDescription.vue
new file mode 100644
index 0000000000..49ce3abc58
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/stepper/StepperDescription.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/stepper/StepperIndicator.vue b/frontend/app/web-gold/src/components/ui/stepper/StepperIndicator.vue
new file mode 100644
index 0000000000..cb96e75e3a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/stepper/StepperIndicator.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/stepper/StepperItem.vue b/frontend/app/web-gold/src/components/ui/stepper/StepperItem.vue
new file mode 100644
index 0000000000..fda449bbcd
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/stepper/StepperItem.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/stepper/StepperSeparator.vue b/frontend/app/web-gold/src/components/ui/stepper/StepperSeparator.vue
new file mode 100644
index 0000000000..33b5a735e0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/stepper/StepperSeparator.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/stepper/StepperTitle.vue b/frontend/app/web-gold/src/components/ui/stepper/StepperTitle.vue
new file mode 100644
index 0000000000..9004182969
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/stepper/StepperTitle.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/stepper/StepperTrigger.vue b/frontend/app/web-gold/src/components/ui/stepper/StepperTrigger.vue
new file mode 100644
index 0000000000..0cbb5399fa
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/stepper/StepperTrigger.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/stepper/index.ts b/frontend/app/web-gold/src/components/ui/stepper/index.ts
new file mode 100644
index 0000000000..a755492666
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/stepper/index.ts
@@ -0,0 +1,7 @@
+export { default as Stepper } from "./Stepper.vue"
+export { default as StepperDescription } from "./StepperDescription.vue"
+export { default as StepperIndicator } from "./StepperIndicator.vue"
+export { default as StepperItem } from "./StepperItem.vue"
+export { default as StepperSeparator } from "./StepperSeparator.vue"
+export { default as StepperTitle } from "./StepperTitle.vue"
+export { default as StepperTrigger } from "./StepperTrigger.vue"
diff --git a/frontend/app/web-gold/src/components/ui/switch/Switch.vue b/frontend/app/web-gold/src/components/ui/switch/Switch.vue
new file mode 100644
index 0000000000..2e725edb55
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/switch/Switch.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/switch/index.ts b/frontend/app/web-gold/src/components/ui/switch/index.ts
new file mode 100644
index 0000000000..cc081f3f15
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/switch/index.ts
@@ -0,0 +1 @@
+export { default as Switch } from "./Switch.vue"
diff --git a/frontend/app/web-gold/src/components/ui/table/Table.vue b/frontend/app/web-gold/src/components/ui/table/Table.vue
new file mode 100644
index 0000000000..0d0cd9b4f0
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/Table.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/table/TableBody.vue b/frontend/app/web-gold/src/components/ui/table/TableBody.vue
new file mode 100644
index 0000000000..d14a2d3232
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/TableBody.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/table/TableCaption.vue b/frontend/app/web-gold/src/components/ui/table/TableCaption.vue
new file mode 100644
index 0000000000..3630084506
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/TableCaption.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/table/TableCell.vue b/frontend/app/web-gold/src/components/ui/table/TableCell.vue
new file mode 100644
index 0000000000..d6e9ed24cf
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/TableCell.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/table/TableEmpty.vue b/frontend/app/web-gold/src/components/ui/table/TableEmpty.vue
new file mode 100644
index 0000000000..95193286d8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/TableEmpty.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/table/TableFooter.vue b/frontend/app/web-gold/src/components/ui/table/TableFooter.vue
new file mode 100644
index 0000000000..29e0ce9a38
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/TableFooter.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/table/TableHead.vue b/frontend/app/web-gold/src/components/ui/table/TableHead.vue
new file mode 100644
index 0000000000..f83efe569e
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/TableHead.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/table/TableHeader.vue b/frontend/app/web-gold/src/components/ui/table/TableHeader.vue
new file mode 100644
index 0000000000..b4ab5cfb3a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/TableHeader.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/table/TableRow.vue b/frontend/app/web-gold/src/components/ui/table/TableRow.vue
new file mode 100644
index 0000000000..8f1d172f7d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/TableRow.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/table/index.ts b/frontend/app/web-gold/src/components/ui/table/index.ts
new file mode 100644
index 0000000000..3be308b55d
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/index.ts
@@ -0,0 +1,9 @@
+export { default as Table } from "./Table.vue"
+export { default as TableBody } from "./TableBody.vue"
+export { default as TableCaption } from "./TableCaption.vue"
+export { default as TableCell } from "./TableCell.vue"
+export { default as TableEmpty } from "./TableEmpty.vue"
+export { default as TableFooter } from "./TableFooter.vue"
+export { default as TableHead } from "./TableHead.vue"
+export { default as TableHeader } from "./TableHeader.vue"
+export { default as TableRow } from "./TableRow.vue"
diff --git a/frontend/app/web-gold/src/components/ui/table/utils.ts b/frontend/app/web-gold/src/components/ui/table/utils.ts
new file mode 100644
index 0000000000..3d4fd12fa8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/table/utils.ts
@@ -0,0 +1,10 @@
+import type { Updater } from "@tanstack/vue-table"
+
+import type { Ref } from "vue"
+import { isFunction } from "@tanstack/vue-table"
+
+export function valueUpdater(updaterOrValue: Updater, ref: Ref) {
+ ref.value = isFunction(updaterOrValue)
+ ? updaterOrValue(ref.value)
+ : updaterOrValue
+}
diff --git a/frontend/app/web-gold/src/components/ui/tabs/Tabs.vue b/frontend/app/web-gold/src/components/ui/tabs/Tabs.vue
new file mode 100644
index 0000000000..d260a15c90
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tabs/Tabs.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tabs/TabsContent.vue b/frontend/app/web-gold/src/components/ui/tabs/TabsContent.vue
new file mode 100644
index 0000000000..3186ee8896
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tabs/TabsContent.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tabs/TabsList.vue b/frontend/app/web-gold/src/components/ui/tabs/TabsList.vue
new file mode 100644
index 0000000000..a64a2dad39
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tabs/TabsList.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tabs/TabsTrigger.vue b/frontend/app/web-gold/src/components/ui/tabs/TabsTrigger.vue
new file mode 100644
index 0000000000..45e424f755
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tabs/TabsTrigger.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tabs/index.ts b/frontend/app/web-gold/src/components/ui/tabs/index.ts
new file mode 100644
index 0000000000..7f99b7f23b
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tabs/index.ts
@@ -0,0 +1,4 @@
+export { default as Tabs } from "./Tabs.vue"
+export { default as TabsContent } from "./TabsContent.vue"
+export { default as TabsList } from "./TabsList.vue"
+export { default as TabsTrigger } from "./TabsTrigger.vue"
diff --git a/frontend/app/web-gold/src/components/ui/tags-input/TagsInput.vue b/frontend/app/web-gold/src/components/ui/tags-input/TagsInput.vue
new file mode 100644
index 0000000000..325110e993
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tags-input/TagsInput.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tags-input/TagsInputInput.vue b/frontend/app/web-gold/src/components/ui/tags-input/TagsInputInput.vue
new file mode 100644
index 0000000000..dbdcbeb3fb
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tags-input/TagsInputInput.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tags-input/TagsInputItem.vue b/frontend/app/web-gold/src/components/ui/tags-input/TagsInputItem.vue
new file mode 100644
index 0000000000..30aa907b87
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tags-input/TagsInputItem.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tags-input/TagsInputItemDelete.vue b/frontend/app/web-gold/src/components/ui/tags-input/TagsInputItemDelete.vue
new file mode 100644
index 0000000000..9ec0acb862
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tags-input/TagsInputItemDelete.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tags-input/TagsInputItemText.vue b/frontend/app/web-gold/src/components/ui/tags-input/TagsInputItemText.vue
new file mode 100644
index 0000000000..2566165015
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tags-input/TagsInputItemText.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tags-input/index.ts b/frontend/app/web-gold/src/components/ui/tags-input/index.ts
new file mode 100644
index 0000000000..8736692d5c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tags-input/index.ts
@@ -0,0 +1,5 @@
+export { default as TagsInput } from "./TagsInput.vue"
+export { default as TagsInputInput } from "./TagsInputInput.vue"
+export { default as TagsInputItem } from "./TagsInputItem.vue"
+export { default as TagsInputItemDelete } from "./TagsInputItemDelete.vue"
+export { default as TagsInputItemText } from "./TagsInputItemText.vue"
diff --git a/frontend/app/web-gold/src/components/ui/textarea/Textarea.vue b/frontend/app/web-gold/src/components/ui/textarea/Textarea.vue
new file mode 100644
index 0000000000..790f10c573
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/textarea/Textarea.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/textarea/index.ts b/frontend/app/web-gold/src/components/ui/textarea/index.ts
new file mode 100644
index 0000000000..8ce91e9c3e
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/textarea/index.ts
@@ -0,0 +1 @@
+export { default as Textarea } from "./Textarea.vue"
diff --git a/frontend/app/web-gold/src/components/ui/toggle-group/ToggleGroup.vue b/frontend/app/web-gold/src/components/ui/toggle-group/ToggleGroup.vue
new file mode 100644
index 0000000000..a445ceb734
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/toggle-group/ToggleGroup.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/toggle-group/ToggleGroupItem.vue b/frontend/app/web-gold/src/components/ui/toggle-group/ToggleGroupItem.vue
new file mode 100644
index 0000000000..55f1082ad4
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/toggle-group/ToggleGroupItem.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/toggle-group/index.ts b/frontend/app/web-gold/src/components/ui/toggle-group/index.ts
new file mode 100644
index 0000000000..c6ce2fc976
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/toggle-group/index.ts
@@ -0,0 +1,2 @@
+export { default as ToggleGroup } from "./ToggleGroup.vue"
+export { default as ToggleGroupItem } from "./ToggleGroupItem.vue"
diff --git a/frontend/app/web-gold/src/components/ui/toggle/Toggle.vue b/frontend/app/web-gold/src/components/ui/toggle/Toggle.vue
new file mode 100644
index 0000000000..aea8e17d9a
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/toggle/Toggle.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/toggle/index.ts b/frontend/app/web-gold/src/components/ui/toggle/index.ts
new file mode 100644
index 0000000000..d873390e7c
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/toggle/index.ts
@@ -0,0 +1,28 @@
+import type { VariantProps } from "class-variance-authority"
+import { cva } from "class-variance-authority"
+
+export { default as Toggle } from "./Toggle.vue"
+
+export const toggleVariants = cva(
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",
+ {
+ variants: {
+ variant: {
+ default: "bg-transparent",
+ outline:
+ "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground",
+ },
+ size: {
+ default: "h-9 px-2 min-w-9",
+ sm: "h-8 px-1.5 min-w-8",
+ lg: "h-10 px-2.5 min-w-10",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ },
+)
+
+export type ToggleVariants = VariantProps
diff --git a/frontend/app/web-gold/src/components/ui/tooltip/Tooltip.vue b/frontend/app/web-gold/src/components/ui/tooltip/Tooltip.vue
new file mode 100644
index 0000000000..2a393d6dae
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tooltip/Tooltip.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tooltip/TooltipContent.vue b/frontend/app/web-gold/src/components/ui/tooltip/TooltipContent.vue
new file mode 100644
index 0000000000..c5d2df9cf8
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tooltip/TooltipContent.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tooltip/TooltipProvider.vue b/frontend/app/web-gold/src/components/ui/tooltip/TooltipProvider.vue
new file mode 100644
index 0000000000..395927d525
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tooltip/TooltipProvider.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tooltip/TooltipTrigger.vue b/frontend/app/web-gold/src/components/ui/tooltip/TooltipTrigger.vue
new file mode 100644
index 0000000000..3332950e95
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tooltip/TooltipTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/frontend/app/web-gold/src/components/ui/tooltip/index.ts b/frontend/app/web-gold/src/components/ui/tooltip/index.ts
new file mode 100644
index 0000000000..8f8d514d9e
--- /dev/null
+++ b/frontend/app/web-gold/src/components/ui/tooltip/index.ts
@@ -0,0 +1,4 @@
+export { default as Tooltip } from "./Tooltip.vue"
+export { default as TooltipContent } from "./TooltipContent.vue"
+export { default as TooltipProvider } from "./TooltipProvider.vue"
+export { default as TooltipTrigger } from "./TooltipTrigger.vue"