From 141d900594ae8dad3b09f00e2da3eef824ae3ca7 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Mon, 30 Mar 2026 23:27:59 +0700 Subject: [PATCH] Update package dependencies and refactor state management in Svelte components - Added `mode-watcher` and `svelte-sonner` as dependencies to enhance application functionality. - Refactored state management in various Svelte components to use `$app/state` instead of `$app/stores`, improving consistency across the application. - Updated UI components to utilize new features from the added dependencies, enhancing user experience and responsiveness. - Improved loading states and error handling in data-fetching components, ensuring better feedback during asynchronous operations. --- web/package-lock.json | 99 ++++++++++++ web/package.json | 2 + web/src/lib/components/app-sidebar.svelte | 4 +- .../components/fleet/data-query-state.svelte | 68 +++++++++ .../fleet/fleet-live-stale-badge.svelte | 38 +++++ .../fleet/fleet-refresh-input.svelte | 27 ++++ .../alert-dialog/alert-dialog-action.svelte | 27 ++++ .../alert-dialog/alert-dialog-cancel.svelte | 27 ++++ .../alert-dialog/alert-dialog-content.svelte | 32 ++++ .../alert-dialog-description.svelte | 17 +++ .../alert-dialog/alert-dialog-footer.svelte | 23 +++ .../alert-dialog/alert-dialog-header.svelte | 20 +++ .../ui/alert-dialog/alert-dialog-media.svelte | 20 +++ .../alert-dialog/alert-dialog-overlay.svelte | 17 +++ .../alert-dialog/alert-dialog-portal.svelte | 7 + .../ui/alert-dialog/alert-dialog-title.svelte | 17 +++ .../alert-dialog/alert-dialog-trigger.svelte | 7 + .../ui/alert-dialog/alert-dialog.svelte | 7 + .../lib/components/ui/alert-dialog/index.ts | 40 +++++ .../ui/command/command-dialog.svelte | 42 ++++++ .../ui/command/command-empty.svelte | 17 +++ .../ui/command/command-group.svelte | 32 ++++ .../ui/command/command-input.svelte | 31 ++++ .../components/ui/command/command-item.svelte | 25 +++ .../ui/command/command-link-item.svelte | 20 +++ .../components/ui/command/command-list.svelte | 17 +++ .../ui/command/command-loading.svelte | 7 + .../ui/command/command-separator.svelte | 17 +++ .../ui/command/command-shortcut.svelte | 20 +++ .../lib/components/ui/command/command.svelte | 25 +++ web/src/lib/components/ui/command/index.ts | 37 +++++ .../lib/components/ui/input-group/index.ts | 22 +++ .../ui/input-group/input-group-addon.svelte | 52 +++++++ .../ui/input-group/input-group-button.svelte | 49 ++++++ .../ui/input-group/input-group-input.svelte | 20 +++ .../ui/input-group/input-group-text.svelte | 19 +++ .../input-group/input-group-textarea.svelte | 20 +++ .../ui/input-group/input-group.svelte | 24 +++ web/src/lib/components/ui/pagination/index.ts | 31 ++++ .../ui/pagination/pagination-content.svelte | 20 +++ .../ui/pagination/pagination-ellipsis.svelte | 22 +++ .../ui/pagination/pagination-item.svelte | 14 ++ .../ui/pagination/pagination-link.svelte | 42 ++++++ .../pagination/pagination-next-button.svelte | 31 ++++ .../ui/pagination/pagination-next.svelte | 20 +++ .../pagination/pagination-prev-button.svelte | 31 ++++ .../ui/pagination/pagination-previous.svelte | 20 +++ .../ui/pagination/pagination.svelte | 28 ++++ web/src/lib/components/ui/popover/index.ts | 28 ++++ .../ui/popover/popover-close.svelte | 7 + .../ui/popover/popover-content.svelte | 31 ++++ .../ui/popover/popover-description.svelte | 20 +++ .../ui/popover/popover-header.svelte | 20 +++ .../ui/popover/popover-portal.svelte | 7 + .../ui/popover/popover-title.svelte | 20 +++ .../ui/popover/popover-trigger.svelte | 17 +++ .../lib/components/ui/popover/popover.svelte | 7 + web/src/lib/components/ui/sonner/index.ts | 1 + .../lib/components/ui/sonner/sonner.svelte | 34 +++++ web/src/lib/components/ui/switch/index.ts | 7 + .../lib/components/ui/switch/switch.svelte | 31 ++++ web/src/routes/+layout.svelte | 11 +- web/src/routes/+page.svelte | 76 ++++++---- web/src/routes/incidents/+page.svelte | 76 ++++++---- web/src/routes/ips/+page.svelte | 106 ++++++++----- web/src/routes/layout.css | 24 +++ web/src/routes/live/+page.svelte | 12 +- web/src/routes/servers/[alias]/+page.svelte | 41 +++-- .../servers/[alias]/config/+page.svelte | 4 +- .../servers/[alias]/runtime/+page.svelte | 4 +- .../servers/[alias]/security/+page.svelte | 4 +- .../servers/[alias]/update/+page.svelte | 4 +- .../servers/[alias]/upstreams/+page.svelte | 4 +- .../routes/servers/[alias]/users/+page.svelte | 12 +- web/src/routes/users/+page.svelte | 142 +++++++++++++----- web/src/routes/users/[username]/+page.svelte | 12 +- 76 files changed, 1837 insertions(+), 179 deletions(-) create mode 100644 web/src/lib/components/fleet/data-query-state.svelte create mode 100644 web/src/lib/components/fleet/fleet-live-stale-badge.svelte create mode 100644 web/src/lib/components/fleet/fleet-refresh-input.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/alert-dialog.svelte create mode 100644 web/src/lib/components/ui/alert-dialog/index.ts create mode 100644 web/src/lib/components/ui/command/command-dialog.svelte create mode 100644 web/src/lib/components/ui/command/command-empty.svelte create mode 100644 web/src/lib/components/ui/command/command-group.svelte create mode 100644 web/src/lib/components/ui/command/command-input.svelte create mode 100644 web/src/lib/components/ui/command/command-item.svelte create mode 100644 web/src/lib/components/ui/command/command-link-item.svelte create mode 100644 web/src/lib/components/ui/command/command-list.svelte create mode 100644 web/src/lib/components/ui/command/command-loading.svelte create mode 100644 web/src/lib/components/ui/command/command-separator.svelte create mode 100644 web/src/lib/components/ui/command/command-shortcut.svelte create mode 100644 web/src/lib/components/ui/command/command.svelte create mode 100644 web/src/lib/components/ui/command/index.ts create mode 100644 web/src/lib/components/ui/input-group/index.ts create mode 100644 web/src/lib/components/ui/input-group/input-group-addon.svelte create mode 100644 web/src/lib/components/ui/input-group/input-group-button.svelte create mode 100644 web/src/lib/components/ui/input-group/input-group-input.svelte create mode 100644 web/src/lib/components/ui/input-group/input-group-text.svelte create mode 100644 web/src/lib/components/ui/input-group/input-group-textarea.svelte create mode 100644 web/src/lib/components/ui/input-group/input-group.svelte create mode 100644 web/src/lib/components/ui/pagination/index.ts create mode 100644 web/src/lib/components/ui/pagination/pagination-content.svelte create mode 100644 web/src/lib/components/ui/pagination/pagination-ellipsis.svelte create mode 100644 web/src/lib/components/ui/pagination/pagination-item.svelte create mode 100644 web/src/lib/components/ui/pagination/pagination-link.svelte create mode 100644 web/src/lib/components/ui/pagination/pagination-next-button.svelte create mode 100644 web/src/lib/components/ui/pagination/pagination-next.svelte create mode 100644 web/src/lib/components/ui/pagination/pagination-prev-button.svelte create mode 100644 web/src/lib/components/ui/pagination/pagination-previous.svelte create mode 100644 web/src/lib/components/ui/pagination/pagination.svelte create mode 100644 web/src/lib/components/ui/popover/index.ts create mode 100644 web/src/lib/components/ui/popover/popover-close.svelte create mode 100644 web/src/lib/components/ui/popover/popover-content.svelte create mode 100644 web/src/lib/components/ui/popover/popover-description.svelte create mode 100644 web/src/lib/components/ui/popover/popover-header.svelte create mode 100644 web/src/lib/components/ui/popover/popover-portal.svelte create mode 100644 web/src/lib/components/ui/popover/popover-title.svelte create mode 100644 web/src/lib/components/ui/popover/popover-trigger.svelte create mode 100644 web/src/lib/components/ui/popover/popover.svelte create mode 100644 web/src/lib/components/ui/sonner/index.ts create mode 100644 web/src/lib/components/ui/sonner/sonner.svelte create mode 100644 web/src/lib/components/ui/switch/index.ts create mode 100644 web/src/lib/components/ui/switch/switch.svelte diff --git a/web/package-lock.json b/web/package-lock.json index 7c3cf71..c13022c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -22,9 +22,11 @@ "@sveltejs/kit": "^2.50.2", "@sveltejs/vite-plugin-svelte": "^6.2.4", "@tailwindcss/vite": "^4.1.18", + "mode-watcher": "^1.1.0", "openapi-typescript": "^7.13.0", "svelte": "^5.54.0", "svelte-check": "^4.4.2", + "svelte-sonner": "^1.1.0", "tailwindcss": "^4.1.18", "tw-animate-css": "^1.4.0", "typescript": "^5.9.3", @@ -2084,6 +2086,73 @@ "node": ">=10" } }, + "node_modules/mode-watcher": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mode-watcher/-/mode-watcher-1.1.0.tgz", + "integrity": "sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "runed": "^0.25.0", + "svelte-toolbelt": "^0.7.1" + }, + "peerDependencies": { + "svelte": "^5.27.0" + } + }, + "node_modules/mode-watcher/node_modules/runed": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/runed/-/runed-0.25.0.tgz", + "integrity": "sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte", + "https://github.com/sponsors/tglide" + ], + "dependencies": { + "esm-env": "^1.0.0" + }, + "peerDependencies": { + "svelte": "^5.7.0" + } + }, + "node_modules/mode-watcher/node_modules/svelte-toolbelt": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.7.1.tgz", + "integrity": "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte" + ], + "dependencies": { + "clsx": "^2.1.1", + "runed": "^0.23.2", + "style-to-object": "^1.0.8" + }, + "engines": { + "node": ">=18", + "pnpm": ">=8.7.0" + }, + "peerDependencies": { + "svelte": "^5.0.0" + } + }, + "node_modules/mode-watcher/node_modules/svelte-toolbelt/node_modules/runed": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/runed/-/runed-0.23.4.tgz", + "integrity": "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte", + "https://github.com/sponsors/tglide" + ], + "dependencies": { + "esm-env": "^1.0.0" + }, + "peerDependencies": { + "svelte": "^5.7.0" + } + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -2450,6 +2519,36 @@ "typescript": ">=5.0.0" } }, + "node_modules/svelte-sonner": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-1.1.0.tgz", + "integrity": "sha512-3lYM6ZIqWe+p9vwwWHGWP/ZdvHiUtzURsud2quIxivrX4rvpXh6i+geBGn0m3JS6KwW6W8VgbOl3xQMcDuh6gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "runed": "^0.28.0" + }, + "peerDependencies": { + "svelte": "^5.0.0" + } + }, + "node_modules/svelte-sonner/node_modules/runed": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/runed/-/runed-0.28.0.tgz", + "integrity": "sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte", + "https://github.com/sponsors/tglide" + ], + "license": "MIT", + "dependencies": { + "esm-env": "^1.0.0" + }, + "peerDependencies": { + "svelte": "^5.7.0" + } + }, "node_modules/svelte-toolbelt": { "version": "0.10.6", "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.10.6.tgz", diff --git a/web/package.json b/web/package.json index 2276bda..bfb51a9 100644 --- a/web/package.json +++ b/web/package.json @@ -19,9 +19,11 @@ "@sveltejs/kit": "^2.50.2", "@sveltejs/vite-plugin-svelte": "^6.2.4", "@tailwindcss/vite": "^4.1.18", + "mode-watcher": "^1.1.0", "openapi-typescript": "^7.13.0", "svelte": "^5.54.0", "svelte-check": "^4.4.2", + "svelte-sonner": "^1.1.0", "tailwindcss": "^4.1.18", "tw-animate-css": "^1.4.0", "typescript": "^5.9.3", diff --git a/web/src/lib/components/app-sidebar.svelte b/web/src/lib/components/app-sidebar.svelte index 6dd63aa..822a04f 100644 --- a/web/src/lib/components/app-sidebar.svelte +++ b/web/src/lib/components/app-sidebar.svelte @@ -1,5 +1,5 @@ + +{#if partial} + {#if partialSnippet} + {@render partialSnippet()} + {:else} + + {partialTitle} + {partialDescription} + + {/if} +{/if} + +{#if err} + + {hasStaleData ? 'Ошибка обновления' : 'Ошибка'} + {err} + {#if hasStaleData} +

Показаны последние успешные данные.

+ {/if} +
+{/if} + +{#if showSkeleton} + {@render skeleton?.()} +{:else if err && !hasStaleData} + +{:else if isEmpty} + {@render empty?.()} +{:else} +
+ {@render children?.()} +
+{/if} diff --git a/web/src/lib/components/fleet/fleet-live-stale-badge.svelte b/web/src/lib/components/fleet/fleet-live-stale-badge.svelte new file mode 100644 index 0000000..ab7a88b --- /dev/null +++ b/web/src/lib/components/fleet/fleet-live-stale-badge.svelte @@ -0,0 +1,38 @@ + + + + + + {isStale ? 'stale' : 'live'}{#if staleSeconds != null} · {staleSeconds}s{/if} + + + +

{tip}

+
+
diff --git a/web/src/lib/components/fleet/fleet-refresh-input.svelte b/web/src/lib/components/fleet/fleet-refresh-input.svelte new file mode 100644 index 0000000..0c1cd9c --- /dev/null +++ b/web/src/lib/components/fleet/fleet-refresh-input.svelte @@ -0,0 +1,27 @@ + + +
+ + +
diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte new file mode 100644 index 0000000..7e63004 --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte @@ -0,0 +1,27 @@ + + + diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte new file mode 100644 index 0000000..a4ce03c --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte @@ -0,0 +1,27 @@ + + + diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte new file mode 100644 index 0000000..251e852 --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte @@ -0,0 +1,32 @@ + + + + + + diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte new file mode 100644 index 0000000..5024f3f --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte @@ -0,0 +1,17 @@ + + + diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte new file mode 100644 index 0000000..f4214db --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte @@ -0,0 +1,23 @@ + + +
+ {@render children?.()} +
diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte new file mode 100644 index 0000000..d6df4d3 --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte new file mode 100644 index 0000000..3f634f3 --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte new file mode 100644 index 0000000..9ffcc85 --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte @@ -0,0 +1,17 @@ + + + diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte new file mode 100644 index 0000000..f0a19a8 --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte @@ -0,0 +1,7 @@ + + + diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte new file mode 100644 index 0000000..652da33 --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte @@ -0,0 +1,17 @@ + + + diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte new file mode 100644 index 0000000..b22d1d5 --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte @@ -0,0 +1,7 @@ + + + diff --git a/web/src/lib/components/ui/alert-dialog/alert-dialog.svelte b/web/src/lib/components/ui/alert-dialog/alert-dialog.svelte new file mode 100644 index 0000000..7ea78bb --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/alert-dialog.svelte @@ -0,0 +1,7 @@ + + + diff --git a/web/src/lib/components/ui/alert-dialog/index.ts b/web/src/lib/components/ui/alert-dialog/index.ts new file mode 100644 index 0000000..ca81c2a --- /dev/null +++ b/web/src/lib/components/ui/alert-dialog/index.ts @@ -0,0 +1,40 @@ +import Root from "./alert-dialog.svelte"; +import Portal from "./alert-dialog-portal.svelte"; +import Trigger from "./alert-dialog-trigger.svelte"; +import Title from "./alert-dialog-title.svelte"; +import Action from "./alert-dialog-action.svelte"; +import Cancel from "./alert-dialog-cancel.svelte"; +import Footer from "./alert-dialog-footer.svelte"; +import Header from "./alert-dialog-header.svelte"; +import Overlay from "./alert-dialog-overlay.svelte"; +import Content from "./alert-dialog-content.svelte"; +import Description from "./alert-dialog-description.svelte"; +import Media from "./alert-dialog-media.svelte"; + +export { + Root, + Title, + Action, + Cancel, + Portal, + Footer, + Header, + Trigger, + Overlay, + Content, + Description, + Media, + // + Root as AlertDialog, + Title as AlertDialogTitle, + Action as AlertDialogAction, + Cancel as AlertDialogCancel, + Portal as AlertDialogPortal, + Footer as AlertDialogFooter, + Header as AlertDialogHeader, + Trigger as AlertDialogTrigger, + Overlay as AlertDialogOverlay, + Content as AlertDialogContent, + Description as AlertDialogDescription, + Media as AlertDialogMedia, +}; diff --git a/web/src/lib/components/ui/command/command-dialog.svelte b/web/src/lib/components/ui/command/command-dialog.svelte new file mode 100644 index 0000000..63b445c --- /dev/null +++ b/web/src/lib/components/ui/command/command-dialog.svelte @@ -0,0 +1,42 @@ + + + + + {title} + {description} + + + + + diff --git a/web/src/lib/components/ui/command/command-empty.svelte b/web/src/lib/components/ui/command/command-empty.svelte new file mode 100644 index 0000000..6726cd8 --- /dev/null +++ b/web/src/lib/components/ui/command/command-empty.svelte @@ -0,0 +1,17 @@ + + + diff --git a/web/src/lib/components/ui/command/command-group.svelte b/web/src/lib/components/ui/command/command-group.svelte new file mode 100644 index 0000000..f5da0df --- /dev/null +++ b/web/src/lib/components/ui/command/command-group.svelte @@ -0,0 +1,32 @@ + + + + {#if heading} + + {heading} + + {/if} + + diff --git a/web/src/lib/components/ui/command/command-input.svelte b/web/src/lib/components/ui/command/command-input.svelte new file mode 100644 index 0000000..039425f --- /dev/null +++ b/web/src/lib/components/ui/command/command-input.svelte @@ -0,0 +1,31 @@ + + +
+ + + + + + +
diff --git a/web/src/lib/components/ui/command/command-item.svelte b/web/src/lib/components/ui/command/command-item.svelte new file mode 100644 index 0000000..4246840 --- /dev/null +++ b/web/src/lib/components/ui/command/command-item.svelte @@ -0,0 +1,25 @@ + + + + {@render children?.()} + + diff --git a/web/src/lib/components/ui/command/command-link-item.svelte b/web/src/lib/components/ui/command/command-link-item.svelte new file mode 100644 index 0000000..ada6d2c --- /dev/null +++ b/web/src/lib/components/ui/command/command-link-item.svelte @@ -0,0 +1,20 @@ + + + diff --git a/web/src/lib/components/ui/command/command-list.svelte b/web/src/lib/components/ui/command/command-list.svelte new file mode 100644 index 0000000..f663bd3 --- /dev/null +++ b/web/src/lib/components/ui/command/command-list.svelte @@ -0,0 +1,17 @@ + + + diff --git a/web/src/lib/components/ui/command/command-loading.svelte b/web/src/lib/components/ui/command/command-loading.svelte new file mode 100644 index 0000000..19dd298 --- /dev/null +++ b/web/src/lib/components/ui/command/command-loading.svelte @@ -0,0 +1,7 @@ + + + diff --git a/web/src/lib/components/ui/command/command-separator.svelte b/web/src/lib/components/ui/command/command-separator.svelte new file mode 100644 index 0000000..35c4c95 --- /dev/null +++ b/web/src/lib/components/ui/command/command-separator.svelte @@ -0,0 +1,17 @@ + + + diff --git a/web/src/lib/components/ui/command/command-shortcut.svelte b/web/src/lib/components/ui/command/command-shortcut.svelte new file mode 100644 index 0000000..5322e6a --- /dev/null +++ b/web/src/lib/components/ui/command/command-shortcut.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/web/src/lib/components/ui/command/command.svelte b/web/src/lib/components/ui/command/command.svelte new file mode 100644 index 0000000..c814599 --- /dev/null +++ b/web/src/lib/components/ui/command/command.svelte @@ -0,0 +1,25 @@ + + + diff --git a/web/src/lib/components/ui/command/index.ts b/web/src/lib/components/ui/command/index.ts new file mode 100644 index 0000000..5435fbe --- /dev/null +++ b/web/src/lib/components/ui/command/index.ts @@ -0,0 +1,37 @@ +import Root from "./command.svelte"; +import Loading from "./command-loading.svelte"; +import Dialog from "./command-dialog.svelte"; +import Empty from "./command-empty.svelte"; +import Group from "./command-group.svelte"; +import Item from "./command-item.svelte"; +import Input from "./command-input.svelte"; +import List from "./command-list.svelte"; +import Separator from "./command-separator.svelte"; +import Shortcut from "./command-shortcut.svelte"; +import LinkItem from "./command-link-item.svelte"; + +export { + Root, + Dialog, + Empty, + Group, + Item, + LinkItem, + Input, + List, + Separator, + Shortcut, + Loading, + // + Root as Command, + Dialog as CommandDialog, + Empty as CommandEmpty, + Group as CommandGroup, + Item as CommandItem, + LinkItem as CommandLinkItem, + Input as CommandInput, + List as CommandList, + Separator as CommandSeparator, + Shortcut as CommandShortcut, + Loading as CommandLoading, +}; diff --git a/web/src/lib/components/ui/input-group/index.ts b/web/src/lib/components/ui/input-group/index.ts new file mode 100644 index 0000000..fe1f55d --- /dev/null +++ b/web/src/lib/components/ui/input-group/index.ts @@ -0,0 +1,22 @@ +import Root from "./input-group.svelte"; +import Addon from "./input-group-addon.svelte"; +import Button from "./input-group-button.svelte"; +import Input from "./input-group-input.svelte"; +import Text from "./input-group-text.svelte"; +import Textarea from "./input-group-textarea.svelte"; + +export { + Root, + Addon, + Button, + Input, + Text, + Textarea, + // + Root as InputGroup, + Addon as InputGroupAddon, + Button as InputGroupButton, + Input as InputGroupInput, + Text as InputGroupText, + Textarea as InputGroupTextarea, +}; diff --git a/web/src/lib/components/ui/input-group/input-group-addon.svelte b/web/src/lib/components/ui/input-group/input-group-addon.svelte new file mode 100644 index 0000000..ea075ea --- /dev/null +++ b/web/src/lib/components/ui/input-group/input-group-addon.svelte @@ -0,0 +1,52 @@ + + + + +
{ + if ((e.target as HTMLElement).closest("button")) { + return; + } + e.currentTarget.parentElement?.querySelector("input")?.focus(); + }} + {...restProps} +> + {@render children?.()} +
diff --git a/web/src/lib/components/ui/input-group/input-group-button.svelte b/web/src/lib/components/ui/input-group/input-group-button.svelte new file mode 100644 index 0000000..adb05b9 --- /dev/null +++ b/web/src/lib/components/ui/input-group/input-group-button.svelte @@ -0,0 +1,49 @@ + + + + + diff --git a/web/src/lib/components/ui/input-group/input-group-input.svelte b/web/src/lib/components/ui/input-group/input-group-input.svelte new file mode 100644 index 0000000..316c0cb --- /dev/null +++ b/web/src/lib/components/ui/input-group/input-group-input.svelte @@ -0,0 +1,20 @@ + + + diff --git a/web/src/lib/components/ui/input-group/input-group-text.svelte b/web/src/lib/components/ui/input-group/input-group-text.svelte new file mode 100644 index 0000000..77907c6 --- /dev/null +++ b/web/src/lib/components/ui/input-group/input-group-text.svelte @@ -0,0 +1,19 @@ + + + + {@render children?.()} + diff --git a/web/src/lib/components/ui/input-group/input-group-textarea.svelte b/web/src/lib/components/ui/input-group/input-group-textarea.svelte new file mode 100644 index 0000000..9fbabe6 --- /dev/null +++ b/web/src/lib/components/ui/input-group/input-group-textarea.svelte @@ -0,0 +1,20 @@ + + +