|
@@ -18,9 +18,13 @@
|
|
|
import EllipsisHorizontal from '../icons/EllipsisHorizontal.svelte';
|
|
|
import ModelMenu from './Models/ModelMenu.svelte';
|
|
|
import ModelDeleteConfirmDialog from '../common/ConfirmDialog.svelte';
|
|
|
+ import Tooltip from '../common/Tooltip.svelte';
|
|
|
+ import GarbageBin from '../icons/GarbageBin.svelte';
|
|
|
|
|
|
const i18n = getContext('i18n');
|
|
|
|
|
|
+ let shiftKey = false;
|
|
|
+
|
|
|
let showModelDeleteConfirm = false;
|
|
|
|
|
|
let localModelfiles = [];
|
|
@@ -194,6 +198,32 @@
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ const onKeyDown = (event) => {
|
|
|
+ if (event.key === 'Shift') {
|
|
|
+ shiftKey = true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ const onKeyUp = (event) => {
|
|
|
+ if (event.key === 'Shift') {
|
|
|
+ shiftKey = false;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ const onBlur = () => {
|
|
|
+ shiftKey = false;
|
|
|
+ };
|
|
|
+
|
|
|
+ window.addEventListener('keydown', onKeyDown);
|
|
|
+ window.addEventListener('keyup', onKeyUp);
|
|
|
+ window.addEventListener('blur', onBlur);
|
|
|
+
|
|
|
+ return () => {
|
|
|
+ window.removeEventListener('keydown', onKeyDown);
|
|
|
+ window.removeEventListener('keyup', onKeyUp);
|
|
|
+ window.removeEventListener('blur', onBlur);
|
|
|
+ };
|
|
|
});
|
|
|
</script>
|
|
|
|
|
@@ -314,54 +344,119 @@
|
|
|
</div>
|
|
|
</a>
|
|
|
<div class="flex flex-row gap-0.5 self-center">
|
|
|
- <a
|
|
|
- class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
|
|
- type="button"
|
|
|
- href={`/workspace/models/edit?id=${encodeURIComponent(model.id)}`}
|
|
|
- >
|
|
|
- <svg
|
|
|
- xmlns="http://www.w3.org/2000/svg"
|
|
|
- fill="none"
|
|
|
- viewBox="0 0 24 24"
|
|
|
- stroke-width="1.5"
|
|
|
- stroke="currentColor"
|
|
|
- class="w-4 h-4"
|
|
|
+ {#if shiftKey}
|
|
|
+ <Tooltip
|
|
|
+ content={(model?.info?.meta?.hidden ?? false)
|
|
|
+ ? $i18n.t('Show Model')
|
|
|
+ : $i18n.t('Hide Model')}
|
|
|
>
|
|
|
- <path
|
|
|
- stroke-linecap="round"
|
|
|
- stroke-linejoin="round"
|
|
|
- d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125"
|
|
|
- />
|
|
|
- </svg>
|
|
|
- </a>
|
|
|
-
|
|
|
- <ModelMenu
|
|
|
- {model}
|
|
|
- shareHandler={() => {
|
|
|
- shareModelHandler(model);
|
|
|
- }}
|
|
|
- cloneHandler={() => {
|
|
|
- cloneModelHandler(model);
|
|
|
- }}
|
|
|
- exportHandler={() => {
|
|
|
- exportModelHandler(model);
|
|
|
- }}
|
|
|
- hideHandler={() => {
|
|
|
- hideModelHandler(model);
|
|
|
- }}
|
|
|
- deleteHandler={() => {
|
|
|
- selectedModel = model;
|
|
|
- showModelDeleteConfirm = true;
|
|
|
- }}
|
|
|
- onClose={() => {}}
|
|
|
- >
|
|
|
- <button
|
|
|
- class="self-center w-fit text-sm p-1.5 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
|
|
+ <button
|
|
|
+ class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
|
|
+ type="button"
|
|
|
+ on:click={() => {
|
|
|
+ hideModelHandler(model);
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {#if model?.info?.meta?.hidden ?? false}
|
|
|
+ <svg
|
|
|
+ xmlns="http://www.w3.org/2000/svg"
|
|
|
+ fill="none"
|
|
|
+ viewBox="0 0 24 24"
|
|
|
+ stroke-width="1.5"
|
|
|
+ stroke="currentColor"
|
|
|
+ class="size-4"
|
|
|
+ >
|
|
|
+ <path
|
|
|
+ stroke-linecap="round"
|
|
|
+ stroke-linejoin="round"
|
|
|
+ d="M3.98 8.223A10.477 10.477 0 0 0 1.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.451 10.451 0 0 1 12 4.5c4.756 0 8.773 3.162 10.065 7.498a10.522 10.522 0 0 1-4.293 5.774M6.228 6.228 3 3m3.228 3.228 3.65 3.65m7.894 7.894L21 21m-3.228-3.228-3.65-3.65m0 0a3 3 0 1 0-4.243-4.243m4.242 4.242L9.88 9.88"
|
|
|
+ />
|
|
|
+ </svg>
|
|
|
+ {:else}
|
|
|
+ <svg
|
|
|
+ xmlns="http://www.w3.org/2000/svg"
|
|
|
+ fill="none"
|
|
|
+ viewBox="0 0 24 24"
|
|
|
+ stroke-width="1.5"
|
|
|
+ stroke="currentColor"
|
|
|
+ class="size-4"
|
|
|
+ >
|
|
|
+ <path
|
|
|
+ stroke-linecap="round"
|
|
|
+ stroke-linejoin="round"
|
|
|
+ d="M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z"
|
|
|
+ />
|
|
|
+ <path
|
|
|
+ stroke-linecap="round"
|
|
|
+ stroke-linejoin="round"
|
|
|
+ d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
|
|
|
+ />
|
|
|
+ </svg>
|
|
|
+ {/if}
|
|
|
+ </button>
|
|
|
+ </Tooltip>
|
|
|
+
|
|
|
+ <Tooltip content={$i18n.t('Delete')}>
|
|
|
+ <button
|
|
|
+ class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
|
|
+ type="button"
|
|
|
+ on:click={() => {
|
|
|
+ deleteModelHandler(model);
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <GarbageBin />
|
|
|
+ </button>
|
|
|
+ </Tooltip>
|
|
|
+ {:else}
|
|
|
+ <a
|
|
|
+ class="self-center w-fit text-sm px-2 py-2 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
|
|
type="button"
|
|
|
+ href={`/workspace/models/edit?id=${encodeURIComponent(model.id)}`}
|
|
|
>
|
|
|
- <EllipsisHorizontal className="size-5" />
|
|
|
- </button>
|
|
|
- </ModelMenu>
|
|
|
+ <svg
|
|
|
+ xmlns="http://www.w3.org/2000/svg"
|
|
|
+ fill="none"
|
|
|
+ viewBox="0 0 24 24"
|
|
|
+ stroke-width="1.5"
|
|
|
+ stroke="currentColor"
|
|
|
+ class="w-4 h-4"
|
|
|
+ >
|
|
|
+ <path
|
|
|
+ stroke-linecap="round"
|
|
|
+ stroke-linejoin="round"
|
|
|
+ d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125"
|
|
|
+ />
|
|
|
+ </svg>
|
|
|
+ </a>
|
|
|
+
|
|
|
+ <ModelMenu
|
|
|
+ {model}
|
|
|
+ shareHandler={() => {
|
|
|
+ shareModelHandler(model);
|
|
|
+ }}
|
|
|
+ cloneHandler={() => {
|
|
|
+ cloneModelHandler(model);
|
|
|
+ }}
|
|
|
+ exportHandler={() => {
|
|
|
+ exportModelHandler(model);
|
|
|
+ }}
|
|
|
+ hideHandler={() => {
|
|
|
+ hideModelHandler(model);
|
|
|
+ }}
|
|
|
+ deleteHandler={() => {
|
|
|
+ selectedModel = model;
|
|
|
+ showModelDeleteConfirm = true;
|
|
|
+ }}
|
|
|
+ onClose={() => {}}
|
|
|
+ >
|
|
|
+ <button
|
|
|
+ class="self-center w-fit text-sm p-1.5 dark:text-gray-300 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
|
|
+ type="button"
|
|
|
+ >
|
|
|
+ <EllipsisHorizontal className="size-5" />
|
|
|
+ </button>
|
|
|
+ </ModelMenu>
|
|
|
+ {/if}
|
|
|
</div>
|
|
|
</div>
|
|
|
{/each}
|