mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 18:41:08 +02:00
feat(todo): refactor inline title editing + kanban subtask DnD
- TaskItem: switch title editing to <input>-based pattern (isEditingTitle state, single-click to start, blur/Enter saves, Escape cancels) - KanbanTaskCard: contenteditable span for title editing (blur-to-save), add ArrowsOutSimple detail button (hover-only), inline subtask DnD with shadow placeholder handling and dropInProgress guard - SubtaskList: fix DnD reactivity loop — use $state instead of $derived for items, add SHADOW_PLACEHOLDER_ITEM_ID filter, dropInProgress flag fix(guides): remove non-existent allAppsHref prop from PillNavigation fix(memoro): extend Memory interface with memo_id, timestamps, nullable types Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
16057964a6
commit
3f0811043e
6 changed files with 522 additions and 612 deletions
|
|
@ -158,7 +158,6 @@
|
|||
showAppSwitcher={true}
|
||||
{appItems}
|
||||
{userEmail}
|
||||
allAppsHref="/apps"
|
||||
/>
|
||||
|
||||
<main class="relative z-0 pb-24" style="padding-top: 0">
|
||||
|
|
|
|||
|
|
@ -19,9 +19,12 @@ export interface QuestionResult {
|
|||
|
||||
export interface Memory {
|
||||
id: string;
|
||||
memo_id: string;
|
||||
title: string;
|
||||
content: string;
|
||||
metadata?: Record<string, unknown>;
|
||||
content: string | null;
|
||||
metadata?: Record<string, unknown> | null;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
}
|
||||
|
||||
class QuestionService {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
<script lang="ts">
|
||||
import type { Subtask } from '@todo/shared';
|
||||
import { dndzone } from 'svelte-dnd-action';
|
||||
import { dndzone, SHADOW_PLACEHOLDER_ITEM_ID } from 'svelte-dnd-action';
|
||||
import { flip } from 'svelte/animate';
|
||||
import { untrack } from 'svelte';
|
||||
import { Check, Plus, X, DotsSixVertical } from '@manacore/shared-icons';
|
||||
|
||||
interface Props {
|
||||
|
|
@ -12,24 +13,36 @@
|
|||
let { subtasks, onChange }: Props = $props();
|
||||
|
||||
let newSubtaskTitle = $state('');
|
||||
let editingId = $state<string | null>(null);
|
||||
let editingTitle = $state('');
|
||||
let items = $state<Subtask[]>([]);
|
||||
let dropInProgress = false;
|
||||
|
||||
// Convert subtasks to items with id for dnd
|
||||
let items = $derived(
|
||||
subtasks.map((s, index) => ({
|
||||
...s,
|
||||
id: s.id,
|
||||
order: index,
|
||||
}))
|
||||
);
|
||||
$effect(() => {
|
||||
const current = subtasks;
|
||||
untrack(() => {
|
||||
const currentIds = new Set(current.map((s) => s.id));
|
||||
const itemIds = new Set(items.filter((i) => i.id !== SHADOW_PLACEHOLDER_ITEM_ID).map((i) => i.id));
|
||||
const idsChanged =
|
||||
currentIds.size !== itemIds.size || current.some((s) => !itemIds.has(s.id));
|
||||
|
||||
if (idsChanged) {
|
||||
items = current.map((s, i) => ({ ...s, order: i }));
|
||||
dropInProgress = false;
|
||||
} else if (!dropInProgress) {
|
||||
const map = new Map(current.map((s) => [s.id, s]));
|
||||
items = items.map((item) => map.get(item.id) ?? item);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function handleDndConsider(e: CustomEvent<{ items: Subtask[] }>) {
|
||||
onChange(e.detail.items.map((item, index) => ({ ...item, order: index })));
|
||||
items = e.detail.items;
|
||||
}
|
||||
|
||||
function handleDndFinalize(e: CustomEvent<{ items: Subtask[] }>) {
|
||||
onChange(e.detail.items.map((item, index) => ({ ...item, order: index })));
|
||||
items = e.detail.items.filter((item) => item.id !== SHADOW_PLACEHOLDER_ITEM_ID);
|
||||
onChange(items.map((item, index) => ({ ...item, order: index })));
|
||||
dropInProgress = true;
|
||||
setTimeout(() => { dropInProgress = false; }, 500);
|
||||
}
|
||||
|
||||
function toggleComplete(id: string) {
|
||||
|
|
@ -49,34 +62,24 @@
|
|||
onChange(subtasks.filter((s) => s.id !== id));
|
||||
}
|
||||
|
||||
function startEditing(subtask: Subtask) {
|
||||
editingId = subtask.id;
|
||||
editingTitle = subtask.title;
|
||||
}
|
||||
|
||||
function saveEdit() {
|
||||
if (!editingId || !editingTitle.trim()) {
|
||||
cancelEdit();
|
||||
return;
|
||||
function handleTitleBlur(e: FocusEvent, subtask: Subtask) {
|
||||
const el = e.target as HTMLElement;
|
||||
const trimmed = (el.textContent || '').trim();
|
||||
if (trimmed && trimmed !== subtask.title) {
|
||||
onChange(subtasks.map((s) => (s.id === subtask.id ? { ...s, title: trimmed } : s)));
|
||||
} else {
|
||||
el.textContent = subtask.title;
|
||||
}
|
||||
const updated = subtasks.map((s) =>
|
||||
s.id === editingId ? { ...s, title: editingTitle.trim() } : s
|
||||
);
|
||||
onChange(updated);
|
||||
cancelEdit();
|
||||
}
|
||||
|
||||
function cancelEdit() {
|
||||
editingId = null;
|
||||
editingTitle = '';
|
||||
}
|
||||
|
||||
function handleEditKeydown(e: KeyboardEvent) {
|
||||
function handleTitleKeydown(e: KeyboardEvent, subtask: Subtask) {
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
saveEdit();
|
||||
(e.target as HTMLElement).blur();
|
||||
} else if (e.key === 'Escape') {
|
||||
cancelEdit();
|
||||
const el = e.target as HTMLElement;
|
||||
el.textContent = subtask.title;
|
||||
el.blur();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -111,7 +114,13 @@
|
|||
onfinalize={handleDndFinalize}
|
||||
>
|
||||
{#each items as subtask (subtask.id)}
|
||||
<div class="subtask-item" animate:flip={{ duration: 200 }}>
|
||||
<div
|
||||
class="subtask-item"
|
||||
animate:flip={{ duration: 200 }}
|
||||
onpointerdown={(e) => {
|
||||
if (!(e.target as HTMLElement).closest('.drag-handle')) e.stopPropagation();
|
||||
}}
|
||||
>
|
||||
<!-- Drag handle -->
|
||||
<div class="drag-handle" aria-label="Ziehen zum Sortieren">
|
||||
<DotsSixVertical size={16} />
|
||||
|
|
@ -129,25 +138,17 @@
|
|||
{/if}
|
||||
</button>
|
||||
|
||||
<!-- Title (editable) -->
|
||||
{#if editingId === subtask.id}
|
||||
<input
|
||||
type="text"
|
||||
class="subtask-edit-input"
|
||||
bind:value={editingTitle}
|
||||
onkeydown={handleEditKeydown}
|
||||
onblur={saveEdit}
|
||||
/>
|
||||
{:else}
|
||||
<button
|
||||
type="button"
|
||||
class="subtask-title"
|
||||
class:completed={subtask.isCompleted}
|
||||
ondblclick={() => startEditing(subtask)}
|
||||
>
|
||||
{subtask.title}
|
||||
</button>
|
||||
{/if}
|
||||
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
||||
<span
|
||||
class="subtask-title"
|
||||
class:completed={subtask.isCompleted}
|
||||
contenteditable="true"
|
||||
role="textbox"
|
||||
spellcheck="false"
|
||||
onclick={(e) => e.stopPropagation()}
|
||||
onkeydown={(e) => handleTitleKeydown(e, subtask)}
|
||||
onblur={(e) => handleTitleBlur(e, subtask)}
|
||||
>{subtask.title}</span>
|
||||
|
||||
<!-- Delete button -->
|
||||
<button
|
||||
|
|
@ -257,13 +258,12 @@
|
|||
|
||||
.subtask-title {
|
||||
flex: 1;
|
||||
text-align: left;
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
font-size: 0.875rem;
|
||||
color: var(--color-foreground);
|
||||
cursor: text;
|
||||
outline: none;
|
||||
word-break: break-word;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.subtask-title.completed {
|
||||
|
|
@ -271,17 +271,6 @@
|
|||
color: var(--color-muted-foreground);
|
||||
}
|
||||
|
||||
.subtask-edit-input {
|
||||
flex: 1;
|
||||
background: var(--color-surface-elevated-3);
|
||||
border: 1px solid var(--color-primary);
|
||||
border-radius: 0.375rem;
|
||||
padding: 0.25rem 0.5rem;
|
||||
font-size: 0.875rem;
|
||||
color: var(--color-foreground);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.subtask-delete {
|
||||
opacity: 0;
|
||||
padding: 0.25rem;
|
||||
|
|
|
|||
|
|
@ -153,43 +153,39 @@
|
|||
}
|
||||
|
||||
// Inline title editing
|
||||
let titleRef = $state<HTMLSpanElement | null>(null);
|
||||
let inlineTitleInputRef = $state<HTMLInputElement | null>(null);
|
||||
let isEditingTitle = $state(false);
|
||||
let editTitleValue = $state('');
|
||||
|
||||
function handleTitleKeydown(e: KeyboardEvent) {
|
||||
function startTitleEdit(e: MouseEvent) {
|
||||
e.stopPropagation();
|
||||
editTitleValue = task.title;
|
||||
isEditingTitle = true;
|
||||
}
|
||||
|
||||
$effect(() => {
|
||||
if (isEditingTitle && inlineTitleInputRef) {
|
||||
inlineTitleInputRef.focus();
|
||||
inlineTitleInputRef.select();
|
||||
}
|
||||
});
|
||||
|
||||
function handleInlineTitleKeydown(e: KeyboardEvent) {
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
titleRef?.blur();
|
||||
inlineTitleInputRef?.blur();
|
||||
} else if (e.key === 'Escape') {
|
||||
if (titleRef) titleRef.textContent = task.title;
|
||||
titleRef?.blur();
|
||||
} else if (e.key === 'Tab' || e.key === 'ArrowDown' || e.key === 'ArrowUp') {
|
||||
const direction = e.key === 'ArrowUp' || (e.key === 'Tab' && e.shiftKey) ? -1 : 1;
|
||||
e.preventDefault();
|
||||
const allTitles = Array.from(
|
||||
document.querySelectorAll<HTMLElement>('.task-title[contenteditable]')
|
||||
);
|
||||
const currentIndex = allTitles.indexOf(titleRef!);
|
||||
const nextTitle = allTitles[currentIndex + direction];
|
||||
titleRef?.blur();
|
||||
if (nextTitle) {
|
||||
nextTitle.focus();
|
||||
} else {
|
||||
// No next/prev todo — focus QuickInputBar
|
||||
const input = document.querySelector<HTMLInputElement>('.quick-input-bar input');
|
||||
input?.focus();
|
||||
}
|
||||
editTitleValue = task.title;
|
||||
isEditingTitle = false;
|
||||
}
|
||||
}
|
||||
|
||||
function handleTitleBlur() {
|
||||
if (!titleRef) return;
|
||||
const trimmed = (titleRef.textContent || '').trim();
|
||||
function handleInlineTitleBlur() {
|
||||
const trimmed = editTitleValue.trim();
|
||||
if (trimmed && trimmed !== task.title) {
|
||||
onSave?.({ title: trimmed });
|
||||
} else {
|
||||
// Revert if empty or unchanged
|
||||
titleRef.textContent = task.title;
|
||||
}
|
||||
isEditingTitle = false;
|
||||
}
|
||||
|
||||
function handleContentClick() {
|
||||
|
|
@ -336,20 +332,25 @@
|
|||
|
||||
<!-- Content -->
|
||||
<div class="task-content">
|
||||
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
||||
<span
|
||||
bind:this={titleRef}
|
||||
class="task-title"
|
||||
class:line-through={task.isCompleted}
|
||||
contenteditable="true"
|
||||
role="textbox"
|
||||
spellcheck="true"
|
||||
onkeydown={handleTitleKeydown}
|
||||
onblur={handleTitleBlur}
|
||||
onclick={(e) => e.stopPropagation()}
|
||||
>
|
||||
{task.title}
|
||||
</span>
|
||||
{#if isEditingTitle}
|
||||
<input
|
||||
bind:this={inlineTitleInputRef}
|
||||
class="task-title-edit"
|
||||
bind:value={editTitleValue}
|
||||
onclick={(e) => e.stopPropagation()}
|
||||
onkeydown={handleInlineTitleKeydown}
|
||||
onblur={handleInlineTitleBlur}
|
||||
/>
|
||||
{:else}
|
||||
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
||||
<span
|
||||
class="task-title"
|
||||
class:line-through={task.isCompleted}
|
||||
onclick={startTitleEdit}
|
||||
>
|
||||
{task.title}
|
||||
</span>
|
||||
{/if}
|
||||
|
||||
<!-- Labels below title -->
|
||||
{#if task.labels && task.labels.length > 0}
|
||||
|
|
@ -746,12 +747,14 @@
|
|||
cursor: pointer;
|
||||
border-radius: 0.375rem;
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
transition: all 0.15s;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.task-item:hover .detail-btn {
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.detail-btn:hover {
|
||||
|
|
@ -888,13 +891,11 @@
|
|||
border-radius: 0.25rem;
|
||||
padding: 0.125rem 0.25rem;
|
||||
margin: -0.125rem -0.25rem;
|
||||
outline: none;
|
||||
transition: background 0.1s;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.task-title:focus {
|
||||
background: color-mix(in srgb, var(--color-primary) 6%, transparent);
|
||||
outline: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);
|
||||
.task-title:hover {
|
||||
background: color-mix(in srgb, var(--color-primary) 5%, transparent);
|
||||
}
|
||||
|
||||
.task-title.line-through {
|
||||
|
|
@ -902,6 +903,20 @@
|
|||
color: var(--color-muted-foreground);
|
||||
}
|
||||
|
||||
.task-title-edit {
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
color: var(--color-foreground);
|
||||
background: color-mix(in srgb, var(--color-primary) 6%, transparent);
|
||||
border: 1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);
|
||||
border-radius: 0.25rem;
|
||||
padding: 0.125rem 0.25rem;
|
||||
margin: -0.125rem -0.25rem;
|
||||
outline: none;
|
||||
width: calc(100% + 0.5rem);
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
/* Meta info */
|
||||
.task-meta {
|
||||
display: flex;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<script lang="ts">
|
||||
import type { Task } from '@todo/shared';
|
||||
import type { Task, Subtask } from '@todo/shared';
|
||||
import { isToday, isPast } from 'date-fns';
|
||||
import { formatDueDate } from '$lib/utils/date-display';
|
||||
import { getSubtaskProgress } from '$lib/utils/task-helpers';
|
||||
|
|
@ -7,13 +7,18 @@
|
|||
import TaskEditModal from '../TaskEditModal.svelte';
|
||||
import {
|
||||
ArrowsClockwise,
|
||||
ArrowsOutSimple,
|
||||
CalendarBlank,
|
||||
Check,
|
||||
CheckSquare,
|
||||
DotsSixVertical,
|
||||
Note,
|
||||
Trash,
|
||||
} from '@manacore/shared-icons';
|
||||
import { PRIORITY_BG_CLASSES } from '$lib/constants/priority';
|
||||
import { dndzone, SHADOW_PLACEHOLDER_ITEM_ID } from 'svelte-dnd-action';
|
||||
import { flip } from 'svelte/animate';
|
||||
import { untrack } from 'svelte';
|
||||
|
||||
interface Props {
|
||||
task: Task;
|
||||
|
|
@ -31,10 +36,7 @@
|
|||
// Completion animation
|
||||
let isAnimatingComplete = $state(false);
|
||||
|
||||
// Inline edit state
|
||||
let isEditingTitle = $state(false);
|
||||
let editTitle = $state('');
|
||||
let titleInputRef = $state<HTMLInputElement | null>(null);
|
||||
let titleSpanRef = $state<HTMLElement | null>(null);
|
||||
|
||||
// Context menu state
|
||||
let showContextMenu = $state(false);
|
||||
|
|
@ -61,8 +63,7 @@
|
|||
|
||||
// Click to open modal
|
||||
function handleCardClick(e: MouseEvent) {
|
||||
// Don't open modal if clicking on checkbox or during inline edit or animation
|
||||
if (isEditingTitle || isAnimatingComplete) return;
|
||||
if (isAnimatingComplete) return;
|
||||
const target = e.target as HTMLElement;
|
||||
if (target.closest('.task-checkbox')) return;
|
||||
showModal = true;
|
||||
|
|
@ -82,40 +83,29 @@
|
|||
}, 500);
|
||||
}
|
||||
|
||||
// Double-click to edit title inline
|
||||
function handleTitleDoubleClick(e: MouseEvent) {
|
||||
function handleOpenModal(e: MouseEvent) {
|
||||
e.stopPropagation();
|
||||
editTitle = task.title;
|
||||
isEditingTitle = true;
|
||||
// Focus input after render
|
||||
setTimeout(() => {
|
||||
titleInputRef?.focus();
|
||||
titleInputRef?.select();
|
||||
}, 0);
|
||||
showModal = true;
|
||||
}
|
||||
|
||||
// Save inline title edit
|
||||
function saveInlineTitle() {
|
||||
if (editTitle.trim() && editTitle.trim() !== task.title) {
|
||||
onSave?.({ title: editTitle.trim() });
|
||||
function handleTitleBlur(e: FocusEvent) {
|
||||
const el = e.target as HTMLElement;
|
||||
const trimmed = (el.textContent || '').trim();
|
||||
if (trimmed && trimmed !== task.title) {
|
||||
onSave?.({ title: trimmed });
|
||||
} else {
|
||||
el.textContent = task.title;
|
||||
}
|
||||
isEditingTitle = false;
|
||||
}
|
||||
|
||||
// Cancel inline title edit
|
||||
function cancelInlineTitle() {
|
||||
isEditingTitle = false;
|
||||
editTitle = '';
|
||||
}
|
||||
|
||||
// Handle title input keydown
|
||||
function handleTitleKeydown(e: KeyboardEvent) {
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
saveInlineTitle();
|
||||
(e.target as HTMLElement).blur();
|
||||
} else if (e.key === 'Escape') {
|
||||
e.preventDefault();
|
||||
cancelInlineTitle();
|
||||
const el = e.target as HTMLElement;
|
||||
el.textContent = task.title;
|
||||
el.blur();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -168,6 +158,37 @@
|
|||
showModal = false;
|
||||
}
|
||||
|
||||
// Inline subtask DnD state
|
||||
let subtaskItems = $state<Subtask[]>([]);
|
||||
let subtaskDropInProgress = false;
|
||||
|
||||
$effect(() => {
|
||||
const current = task.subtasks ?? [];
|
||||
untrack(() => {
|
||||
const newIds = new Set(current.map((s) => s.id));
|
||||
const oldIds = new Set(subtaskItems.filter((s) => s.id !== SHADOW_PLACEHOLDER_ITEM_ID).map((s) => s.id));
|
||||
const idsChanged = newIds.size !== oldIds.size || current.some((s) => !oldIds.has(s.id));
|
||||
if (idsChanged) {
|
||||
subtaskItems = [...current];
|
||||
subtaskDropInProgress = false;
|
||||
} else if (!subtaskDropInProgress) {
|
||||
const map = new Map(current.map((s) => [s.id, s]));
|
||||
subtaskItems = subtaskItems.map((item) => map.get(item.id) ?? item);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function handleSubtaskConsider(e: CustomEvent<{ items: Subtask[] }>) {
|
||||
subtaskItems = e.detail.items;
|
||||
}
|
||||
|
||||
function handleSubtaskFinalize(e: CustomEvent<{ items: Subtask[] }>) {
|
||||
subtaskItems = e.detail.items.filter((s) => s.id !== SHADOW_PLACEHOLDER_ITEM_ID);
|
||||
onSave?.({ subtasks: subtaskItems });
|
||||
subtaskDropInProgress = true;
|
||||
setTimeout(() => { subtaskDropInProgress = false; }, 500);
|
||||
}
|
||||
|
||||
function toggleSubtask(subtaskId: string) {
|
||||
if (!onSave) return;
|
||||
const subtasks = $state.snapshot(task.subtasks) ?? [];
|
||||
|
|
@ -213,24 +234,18 @@
|
|||
|
||||
<!-- Content -->
|
||||
<div class="task-content">
|
||||
{#if isEditingTitle}
|
||||
<input
|
||||
bind:this={titleInputRef}
|
||||
type="text"
|
||||
class="title-input"
|
||||
bind:value={editTitle}
|
||||
onkeydown={handleTitleKeydown}
|
||||
onblur={saveInlineTitle}
|
||||
/>
|
||||
{:else}
|
||||
<span
|
||||
class="task-title"
|
||||
class:line-through={task.isCompleted || isAnimatingComplete}
|
||||
ondblclick={handleTitleDoubleClick}
|
||||
>
|
||||
{task.title}
|
||||
</span>
|
||||
{/if}
|
||||
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
||||
<span
|
||||
bind:this={titleSpanRef}
|
||||
class="task-title"
|
||||
class:line-through={task.isCompleted || isAnimatingComplete}
|
||||
contenteditable={!task.isCompleted && !isAnimatingComplete}
|
||||
role="textbox"
|
||||
spellcheck="false"
|
||||
onclick={(e) => e.stopPropagation()}
|
||||
onkeydown={handleTitleKeydown}
|
||||
onblur={handleTitleBlur}
|
||||
>{task.title}</span>
|
||||
|
||||
<!-- Meta info -->
|
||||
{#if dueDateText() || subtaskProgress() || (task.labels && task.labels.length > 0)}
|
||||
|
|
@ -263,6 +278,17 @@
|
|||
{/if}
|
||||
</div>
|
||||
|
||||
<!-- Detail modal button -->
|
||||
<button
|
||||
type="button"
|
||||
class="detail-btn"
|
||||
onclick={handleOpenModal}
|
||||
title="Details öffnen"
|
||||
tabindex="-1"
|
||||
>
|
||||
<ArrowsOutSimple size={14} />
|
||||
</button>
|
||||
|
||||
<!-- Contacts display -->
|
||||
{#if task.metadata?.assignee || (task.metadata?.involvedContacts && task.metadata.involvedContacts.length > 0)}
|
||||
<div class="contacts-display">
|
||||
|
|
@ -292,23 +318,38 @@
|
|||
</div>
|
||||
|
||||
<!-- Inline subtasks — shown while incomplete; during animation all appear as done -->
|
||||
{#if task.subtasks && task.subtasks.length > 0 && !task.isCompleted}
|
||||
{#if subtaskItems.length > 0 && !task.isCompleted}
|
||||
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
||||
<div class="subtasks-inline" onpointerdown={(e) => e.stopPropagation()}>
|
||||
{#each task.subtasks as subtask (subtask.id)}
|
||||
<button
|
||||
<div
|
||||
class="subtasks-inline"
|
||||
use:dndzone={{ items: subtaskItems, flipDurationMs: 150, dropTargetStyle: {}, type: 'subtask-inline' }}
|
||||
onconsider={handleSubtaskConsider}
|
||||
onfinalize={handleSubtaskFinalize}
|
||||
>
|
||||
{#each subtaskItems.filter((s) => s.id !== SHADOW_PLACEHOLDER_ITEM_ID) as subtask (subtask.id)}
|
||||
<div
|
||||
class="subtask-row"
|
||||
class:done={subtask.isCompleted || isAnimatingComplete}
|
||||
onclick={(e) => {
|
||||
e.stopPropagation();
|
||||
if (!isAnimatingComplete) toggleSubtask(subtask.id);
|
||||
animate:flip={{ duration: 150 }}
|
||||
onpointerdown={(e) => {
|
||||
if (!(e.target as HTMLElement).closest('.subtask-drag-handle')) e.stopPropagation();
|
||||
}}
|
||||
>
|
||||
<span class="subtask-check" class:checked={subtask.isCompleted || isAnimatingComplete}>
|
||||
{#if subtask.isCompleted || isAnimatingComplete}<Check size={10} />{/if}
|
||||
</span>
|
||||
<span class="subtask-drag-handle"><DotsSixVertical size={10} /></span>
|
||||
<button
|
||||
class="subtask-check-btn"
|
||||
class:checked={subtask.isCompleted || isAnimatingComplete}
|
||||
onclick={(e) => {
|
||||
e.stopPropagation();
|
||||
if (!isAnimatingComplete) toggleSubtask(subtask.id);
|
||||
}}
|
||||
>
|
||||
<span class="subtask-check" class:checked={subtask.isCompleted || isAnimatingComplete}>
|
||||
{#if subtask.isCompleted || isAnimatingComplete}<Check size={10} />{/if}
|
||||
</span>
|
||||
</button>
|
||||
<span class="subtask-title">{subtask.title}</span>
|
||||
</button>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
|
|
@ -455,6 +496,37 @@
|
|||
color: white;
|
||||
}
|
||||
|
||||
/* Detail modal button */
|
||||
.detail-btn {
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
border: none;
|
||||
background: transparent;
|
||||
color: var(--color-muted-foreground);
|
||||
cursor: pointer;
|
||||
border-radius: 0.375rem;
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
transition: opacity 0.15s;
|
||||
padding: 0;
|
||||
margin-top: 0.1rem;
|
||||
}
|
||||
|
||||
.kanban-card:hover .detail-btn {
|
||||
opacity: 0.6;
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.detail-btn:hover {
|
||||
opacity: 1 !important;
|
||||
color: var(--color-primary);
|
||||
background: color-mix(in srgb, var(--color-primary) 10%, transparent);
|
||||
}
|
||||
|
||||
/* Content */
|
||||
.task-content {
|
||||
flex: 1;
|
||||
|
|
@ -468,9 +540,22 @@
|
|||
font-size: 0.9375rem;
|
||||
font-weight: 400;
|
||||
color: hsl(var(--color-foreground));
|
||||
cursor: pointer;
|
||||
cursor: text;
|
||||
line-height: 1.4;
|
||||
word-break: break-word;
|
||||
border-radius: 0.25rem;
|
||||
padding: 0.125rem 0.25rem;
|
||||
margin: -0.125rem -0.25rem;
|
||||
transition: background 0.1s;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.task-title:hover {
|
||||
background: color-mix(in srgb, var(--color-primary) 5%, transparent);
|
||||
}
|
||||
|
||||
.task-title:focus {
|
||||
background: color-mix(in srgb, var(--color-primary) 5%, transparent);
|
||||
}
|
||||
|
||||
:global(.dark) .task-title {
|
||||
|
|
@ -482,24 +567,6 @@
|
|||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* Inline title input */
|
||||
.title-input {
|
||||
width: 100%;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
color: #374151;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
border: 1px solid #8b5cf6;
|
||||
border-radius: 0.5rem;
|
||||
padding: 0.25rem 0.5rem;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
:global(.dark) .title-input {
|
||||
background: rgba(30, 30, 30, 0.9);
|
||||
color: #f3f4f6;
|
||||
border-color: #8b5cf6;
|
||||
}
|
||||
|
||||
/* Meta info */
|
||||
.task-meta {
|
||||
|
|
@ -670,13 +737,36 @@
|
|||
.subtask-row {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 0.625rem;
|
||||
gap: 0.375rem;
|
||||
padding: 0.15rem 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.subtask-drag-handle {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: var(--color-muted-foreground);
|
||||
opacity: 0;
|
||||
cursor: grab;
|
||||
flex-shrink: 0;
|
||||
margin-top: 0.2rem;
|
||||
transition: opacity 0.15s;
|
||||
}
|
||||
|
||||
.subtask-row:hover .subtask-drag-handle {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.subtask-drag-handle:hover {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
.subtask-check-btn {
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.subtask-check {
|
||||
|
|
@ -688,7 +778,6 @@
|
|||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
transition: all 0.15s;
|
||||
color: white;
|
||||
margin-top: 0.2rem;
|
||||
|
|
@ -698,7 +787,7 @@
|
|||
border-color: rgba(255, 255, 255, 0.35);
|
||||
}
|
||||
|
||||
.subtask-check:hover {
|
||||
.subtask-check-btn:hover .subtask-check {
|
||||
border-color: #8b5cf6;
|
||||
}
|
||||
|
||||
|
|
@ -708,6 +797,7 @@
|
|||
}
|
||||
|
||||
.subtask-title {
|
||||
flex: 1;
|
||||
font-size: 0.9375rem;
|
||||
font-weight: 400;
|
||||
color: hsl(var(--color-foreground));
|
||||
|
|
@ -715,10 +805,6 @@
|
|||
word-break: break-word;
|
||||
}
|
||||
|
||||
:global(.dark) .subtask-title {
|
||||
color: hsl(var(--color-foreground));
|
||||
}
|
||||
|
||||
.subtask-row.done .subtask-title {
|
||||
text-decoration: line-through;
|
||||
opacity: 0.45;
|
||||
|
|
|
|||
628
pnpm-lock.yaml
generated
628
pnpm-lock.yaml
generated
|
|
@ -1546,6 +1546,146 @@ importers:
|
|||
specifier: ^3.4.17
|
||||
version: 3.4.18(tsx@4.21.0)(yaml@2.8.3)
|
||||
|
||||
apps/guides:
|
||||
devDependencies:
|
||||
typescript:
|
||||
specifier: ^5.9.3
|
||||
version: 5.9.3
|
||||
|
||||
apps/guides/apps/server:
|
||||
dependencies:
|
||||
'@manacore/shared-hono':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-hono
|
||||
hono:
|
||||
specifier: ^4.7.0
|
||||
version: 4.12.9
|
||||
devDependencies:
|
||||
'@types/bun':
|
||||
specifier: ^1.2.0
|
||||
version: 1.3.11
|
||||
typescript:
|
||||
specifier: ^5.9.3
|
||||
version: 5.9.3
|
||||
|
||||
apps/guides/apps/web:
|
||||
dependencies:
|
||||
'@manacore/feedback':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/feedback
|
||||
'@manacore/help':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/help
|
||||
'@manacore/local-store':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/local-store
|
||||
'@manacore/shared-api-client':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-api-client
|
||||
'@manacore/shared-app-onboarding':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-app-onboarding
|
||||
'@manacore/shared-auth':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-auth
|
||||
'@manacore/shared-auth-stores':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-auth-stores
|
||||
'@manacore/shared-auth-ui':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-auth-ui
|
||||
'@manacore/shared-branding':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-branding
|
||||
'@manacore/shared-error-tracking':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-error-tracking
|
||||
'@manacore/shared-i18n':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-i18n
|
||||
'@manacore/shared-icons':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-icons
|
||||
'@manacore/shared-profile-ui':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-profile-ui
|
||||
'@manacore/shared-stores':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-stores
|
||||
'@manacore/shared-tailwind':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-tailwind
|
||||
'@manacore/shared-theme':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-theme
|
||||
'@manacore/shared-theme-ui':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-theme-ui
|
||||
'@manacore/shared-types':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-types
|
||||
'@manacore/shared-ui':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-ui
|
||||
'@manacore/shared-utils':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-utils
|
||||
devDependencies:
|
||||
'@manacore/shared-pwa':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-pwa
|
||||
'@manacore/shared-vite-config':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-vite-config
|
||||
'@sveltejs/adapter-node':
|
||||
specifier: ^5.0.0
|
||||
version: 5.4.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))
|
||||
'@sveltejs/kit':
|
||||
specifier: ^2.47.1
|
||||
version: 2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
'@sveltejs/vite-plugin-svelte':
|
||||
specifier: ^5.0.0
|
||||
version: 5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
'@tailwindcss/vite':
|
||||
specifier: ^4.1.7
|
||||
version: 4.1.17(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
'@types/node':
|
||||
specifier: ^20.0.0
|
||||
version: 20.19.25
|
||||
'@vite-pwa/sveltekit':
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0)
|
||||
jsdom:
|
||||
specifier: ^25.0.1
|
||||
version: 25.0.1
|
||||
prettier:
|
||||
specifier: ^3.1.1
|
||||
version: 3.6.2
|
||||
prettier-plugin-svelte:
|
||||
specifier: ^3.1.2
|
||||
version: 3.4.0(prettier@3.6.2)(svelte@5.44.0)
|
||||
svelte:
|
||||
specifier: ^5.41.0
|
||||
version: 5.44.0
|
||||
svelte-check:
|
||||
specifier: ^4.3.3
|
||||
version: 4.3.4(picomatch@4.0.3)(svelte@5.44.0)(typescript@5.9.3)
|
||||
tailwindcss:
|
||||
specifier: ^4.1.7
|
||||
version: 4.1.17
|
||||
tslib:
|
||||
specifier: ^2.4.1
|
||||
version: 2.8.1
|
||||
typescript:
|
||||
specifier: ^5.9.3
|
||||
version: 5.9.3
|
||||
vite:
|
||||
specifier: ^6.0.0
|
||||
version: 6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||
vitest:
|
||||
specifier: ^4.1.0
|
||||
version: 4.1.1(@opentelemetry/api@1.9.0)(@types/node@20.19.25)(jsdom@25.0.1)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
|
||||
apps/inventar:
|
||||
devDependencies:
|
||||
typescript:
|
||||
|
|
@ -2745,6 +2885,31 @@ importers:
|
|||
specifier: ^5.1.3
|
||||
version: 5.9.3
|
||||
|
||||
apps/memoro/apps/audio-server:
|
||||
dependencies:
|
||||
'@azure/storage-blob':
|
||||
specifier: ^12.17.0
|
||||
version: 12.31.0
|
||||
'@supabase/supabase-js':
|
||||
specifier: ^2.49.5
|
||||
version: 2.84.0
|
||||
fluent-ffmpeg:
|
||||
specifier: ^2.1.2
|
||||
version: 2.1.3
|
||||
hono:
|
||||
specifier: ^4.7.0
|
||||
version: 4.12.9
|
||||
devDependencies:
|
||||
'@types/fluent-ffmpeg':
|
||||
specifier: ^2.1.21
|
||||
version: 2.1.28
|
||||
'@types/node':
|
||||
specifier: ^20.0.0
|
||||
version: 20.19.25
|
||||
typescript:
|
||||
specifier: ^5.5.0
|
||||
version: 5.9.3
|
||||
|
||||
apps/memoro/apps/backend:
|
||||
dependencies:
|
||||
'@nestjs/axios':
|
||||
|
|
@ -3129,6 +3294,31 @@ importers:
|
|||
specifier: ~5.9.2
|
||||
version: 5.9.3
|
||||
|
||||
apps/memoro/apps/server:
|
||||
dependencies:
|
||||
'@manacore/shared-hono':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-hono
|
||||
'@supabase/supabase-js':
|
||||
specifier: ^2.49.5
|
||||
version: 2.84.0
|
||||
hono:
|
||||
specifier: ^4.7.0
|
||||
version: 4.12.9
|
||||
uuid:
|
||||
specifier: ^11.0.0
|
||||
version: 11.1.0
|
||||
devDependencies:
|
||||
'@types/node':
|
||||
specifier: ^20.0.0
|
||||
version: 20.19.25
|
||||
'@types/uuid':
|
||||
specifier: ^10.0.0
|
||||
version: 10.0.0
|
||||
typescript:
|
||||
specifier: ^5.5.0
|
||||
version: 5.9.3
|
||||
|
||||
apps/memoro/apps/web:
|
||||
dependencies:
|
||||
'@manacore/feedback':
|
||||
|
|
@ -5374,122 +5564,6 @@ importers:
|
|||
specifier: ^5.7.3
|
||||
version: 5.9.3
|
||||
|
||||
apps/taktik:
|
||||
devDependencies:
|
||||
typescript:
|
||||
specifier: ^5.9.3
|
||||
version: 5.9.3
|
||||
|
||||
apps/taktik/apps/web:
|
||||
dependencies:
|
||||
'@manacore/local-store':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/local-store
|
||||
'@manacore/shared-auth':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-auth
|
||||
'@manacore/shared-auth-stores':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-auth-stores
|
||||
'@manacore/shared-auth-ui':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-auth-ui
|
||||
'@manacore/shared-branding':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-branding
|
||||
'@manacore/shared-error-tracking':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-error-tracking
|
||||
'@manacore/shared-icons':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-icons
|
||||
'@manacore/shared-landing-ui':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-landing-ui
|
||||
'@manacore/shared-profile-ui':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-profile-ui
|
||||
'@manacore/shared-stores':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-stores
|
||||
'@manacore/shared-theme':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-theme
|
||||
'@manacore/shared-types':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-types
|
||||
'@manacore/shared-ui':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-ui
|
||||
'@manacore/shared-utils':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-utils
|
||||
'@manacore/subscriptions':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/subscriptions
|
||||
'@taktik/shared':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/shared
|
||||
date-fns:
|
||||
specifier: ^4.1.0
|
||||
version: 4.1.0
|
||||
svelte-i18n:
|
||||
specifier: ^4.0.1
|
||||
version: 4.0.1(svelte@5.44.0)
|
||||
devDependencies:
|
||||
'@manacore/shared-tailwind':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-tailwind
|
||||
'@manacore/shared-vite-config':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-vite-config
|
||||
'@sveltejs/adapter-node':
|
||||
specifier: ^5.2.12
|
||||
version: 5.4.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))
|
||||
'@sveltejs/kit':
|
||||
specifier: ^2.21.0
|
||||
version: 2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
'@sveltejs/vite-plugin-svelte':
|
||||
specifier: ^5.1.0
|
||||
version: 5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
'@tailwindcss/vite':
|
||||
specifier: ^4.1.7
|
||||
version: 4.1.17(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
'@types/node':
|
||||
specifier: ^22.15.29
|
||||
version: 22.19.1
|
||||
'@vite-pwa/sveltekit':
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0)
|
||||
svelte:
|
||||
specifier: ^5.41.0
|
||||
version: 5.44.0
|
||||
svelte-check:
|
||||
specifier: ^4.2.1
|
||||
version: 4.3.4(picomatch@4.0.3)(svelte@5.44.0)(typescript@5.9.3)
|
||||
tailwindcss:
|
||||
specifier: ^4.1.7
|
||||
version: 4.1.17
|
||||
typescript:
|
||||
specifier: ^5.9.3
|
||||
version: 5.9.3
|
||||
vite:
|
||||
specifier: ^6.3.5
|
||||
version: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
vitest:
|
||||
specifier: ^3.2.1
|
||||
version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@29.0.1(@noble/hashes@2.0.1))(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
|
||||
apps/taktik/packages/shared:
|
||||
dependencies:
|
||||
'@manacore/shared-types':
|
||||
specifier: workspace:*
|
||||
version: link:../../../../packages/shared-types
|
||||
devDependencies:
|
||||
typescript:
|
||||
specifier: ^5.9.3
|
||||
version: 5.9.3
|
||||
|
||||
apps/times:
|
||||
devDependencies:
|
||||
typescript:
|
||||
|
|
@ -6089,6 +6163,9 @@ importers:
|
|||
'@tailwindcss/forms':
|
||||
specifier: ^0.5.10
|
||||
version: 0.5.10(tailwindcss@4.1.17)
|
||||
'@tailwindcss/typography':
|
||||
specifier: ^0.5.15
|
||||
version: 0.5.19(tailwindcss@4.1.17)
|
||||
'@tailwindcss/vite':
|
||||
specifier: ^4.1.11
|
||||
version: 4.1.17(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
|
|
@ -6395,64 +6472,6 @@ importers:
|
|||
|
||||
games/arcade: {}
|
||||
|
||||
games/arcade/apps/backend:
|
||||
dependencies:
|
||||
'@anthropic-ai/sdk':
|
||||
specifier: ^0.65.0
|
||||
version: 0.65.0(zod@3.25.76)
|
||||
'@google/genai':
|
||||
specifier: ^1.14.0
|
||||
version: 1.47.0
|
||||
'@nestjs/common':
|
||||
specifier: ^10.4.15
|
||||
version: 10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
|
||||
'@nestjs/config':
|
||||
specifier: ^3.3.0
|
||||
version: 3.3.0(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)
|
||||
'@nestjs/core':
|
||||
specifier: ^10.4.15
|
||||
version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
|
||||
'@nestjs/platform-express':
|
||||
specifier: ^10.4.15
|
||||
version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)
|
||||
class-transformer:
|
||||
specifier: ^0.5.1
|
||||
version: 0.5.1
|
||||
class-validator:
|
||||
specifier: ^0.14.1
|
||||
version: 0.14.3
|
||||
openai:
|
||||
specifier: ^4.76.0
|
||||
version: 4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.76)
|
||||
reflect-metadata:
|
||||
specifier: ^0.2.2
|
||||
version: 0.2.2
|
||||
rxjs:
|
||||
specifier: ^7.8.1
|
||||
version: 7.8.2
|
||||
devDependencies:
|
||||
'@nestjs/cli':
|
||||
specifier: ^10.4.9
|
||||
version: 10.4.9
|
||||
'@nestjs/schematics':
|
||||
specifier: ^10.2.3
|
||||
version: 10.2.3(chokidar@3.6.0)(typescript@5.9.3)
|
||||
'@types/express':
|
||||
specifier: ^5.0.0
|
||||
version: 5.0.6
|
||||
'@types/node':
|
||||
specifier: ^22.10.2
|
||||
version: 22.19.1
|
||||
ts-node:
|
||||
specifier: ^10.9.2
|
||||
version: 10.9.2(@types/node@22.19.1)(typescript@5.9.3)
|
||||
tsconfig-paths:
|
||||
specifier: ^4.2.0
|
||||
version: 4.2.0
|
||||
typescript:
|
||||
specifier: ^5.7.2
|
||||
version: 5.9.3
|
||||
|
||||
games/arcade/apps/server:
|
||||
dependencies:
|
||||
'@anthropic-ai/sdk':
|
||||
|
|
@ -13449,11 +13468,6 @@ packages:
|
|||
'@surma/rollup-plugin-off-main-thread@2.2.3':
|
||||
resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==}
|
||||
|
||||
'@sveltejs/acorn-typescript@1.0.7':
|
||||
resolution: {integrity: sha512-znp1A/Y1Jj4l/Zy7PX5DZKBE0ZNY+5QBngiE21NJkfSTyzzC5iKNWOtwFXKtIrn7MXEFBck4jD95iBNkGjK92Q==}
|
||||
peerDependencies:
|
||||
acorn: ^8.9.0
|
||||
|
||||
'@sveltejs/acorn-typescript@1.0.9':
|
||||
resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==}
|
||||
peerDependencies:
|
||||
|
|
@ -35666,10 +35680,6 @@ snapshots:
|
|||
magic-string: 0.25.9
|
||||
string.prototype.matchall: 4.0.12
|
||||
|
||||
'@sveltejs/acorn-typescript@1.0.7(acorn@8.15.0)':
|
||||
dependencies:
|
||||
acorn: 8.15.0
|
||||
|
||||
'@sveltejs/acorn-typescript@1.0.9(acorn@8.15.0)':
|
||||
dependencies:
|
||||
acorn: 8.15.0
|
||||
|
|
@ -35691,14 +35701,6 @@ snapshots:
|
|||
'@sveltejs/kit': 2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
rollup: 4.53.3
|
||||
|
||||
'@sveltejs/adapter-node@5.4.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))':
|
||||
dependencies:
|
||||
'@rollup/plugin-commonjs': 28.0.9(rollup@4.53.3)
|
||||
'@rollup/plugin-json': 6.1.0(rollup@4.53.3)
|
||||
'@rollup/plugin-node-resolve': 16.0.3(rollup@4.53.3)
|
||||
'@sveltejs/kit': 2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
rollup: 4.53.3
|
||||
|
||||
'@sveltejs/adapter-node@5.4.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))':
|
||||
dependencies:
|
||||
'@rollup/plugin-commonjs': 28.0.9(rollup@4.53.3)
|
||||
|
|
@ -35752,27 +35754,6 @@ snapshots:
|
|||
optionalDependencies:
|
||||
'@opentelemetry/api': 1.9.0
|
||||
|
||||
'@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@standard-schema/spec': 1.1.0
|
||||
'@sveltejs/acorn-typescript': 1.0.7(acorn@8.15.0)
|
||||
'@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
'@types/cookie': 0.6.0
|
||||
acorn: 8.15.0
|
||||
cookie: 0.6.0
|
||||
devalue: 5.6.4
|
||||
esm-env: 1.2.2
|
||||
kleur: 4.1.5
|
||||
magic-string: 0.30.21
|
||||
mrmime: 2.0.1
|
||||
sade: 1.8.1
|
||||
set-cookie-parser: 2.7.2
|
||||
sirv: 3.0.2
|
||||
svelte: 5.44.0
|
||||
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
optionalDependencies:
|
||||
'@opentelemetry/api': 1.9.0
|
||||
|
||||
'@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||
dependencies:
|
||||
'@standard-schema/spec': 1.1.0
|
||||
|
|
@ -35887,15 +35868,6 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
debug: 4.4.3
|
||||
svelte: 5.44.0
|
||||
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
|
|
@ -35954,19 +35926,6 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
debug: 4.4.3
|
||||
deepmerge: 4.3.1
|
||||
kleur: 4.1.5
|
||||
magic-string: 0.30.21
|
||||
svelte: 5.44.0
|
||||
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
vitefu: 1.1.1(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
|
|
@ -36195,13 +36154,6 @@ snapshots:
|
|||
tailwindcss: 4.1.17
|
||||
vite: 6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||
|
||||
'@tailwindcss/vite@4.1.17(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@tailwindcss/node': 4.1.17
|
||||
'@tailwindcss/oxide': 4.1.17
|
||||
tailwindcss: 4.1.17
|
||||
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
|
||||
'@tailwindcss/vite@4.1.17(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||
dependencies:
|
||||
'@tailwindcss/node': 4.1.17
|
||||
|
|
@ -37755,18 +37707,6 @@ snapshots:
|
|||
- workbox-build
|
||||
- workbox-window
|
||||
|
||||
'@vite-pwa/sveltekit@1.1.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0)':
|
||||
dependencies:
|
||||
'@sveltejs/kit': 2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
kolorist: 1.8.0
|
||||
tinyglobby: 0.2.15
|
||||
vite-plugin-pwa: 1.2.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- vite
|
||||
- workbox-build
|
||||
- workbox-window
|
||||
|
||||
'@vite-pwa/sveltekit@1.1.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0)':
|
||||
dependencies:
|
||||
'@sveltejs/kit': 2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
|
|
@ -37835,26 +37775,6 @@ snapshots:
|
|||
- vite
|
||||
optional: true
|
||||
|
||||
'@vitest/browser@3.2.4(playwright@1.57.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))(vitest@3.2.4)':
|
||||
dependencies:
|
||||
'@testing-library/dom': 10.4.1
|
||||
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
|
||||
'@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
'@vitest/utils': 3.2.4
|
||||
magic-string: 0.30.21
|
||||
sirv: 3.0.2
|
||||
tinyrainbow: 2.0.0
|
||||
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@29.0.1(@noble/hashes@2.0.1))(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
ws: 8.18.3
|
||||
optionalDependencies:
|
||||
playwright: 1.57.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- msw
|
||||
- utf-8-validate
|
||||
- vite
|
||||
optional: true
|
||||
|
||||
'@vitest/browser@3.2.4(playwright@1.57.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@3.2.4)':
|
||||
dependencies:
|
||||
'@testing-library/dom': 10.4.1
|
||||
|
|
@ -37993,15 +37913,6 @@ snapshots:
|
|||
optionalDependencies:
|
||||
vite: 6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||
|
||||
'@vitest/mocker@3.2.4(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@vitest/spy': 3.2.4
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.21
|
||||
optionalDependencies:
|
||||
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
optional: true
|
||||
|
||||
'@vitest/mocker@3.2.4(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||
dependencies:
|
||||
'@vitest/spy': 3.2.4
|
||||
|
|
@ -38018,14 +37929,6 @@ snapshots:
|
|||
optionalDependencies:
|
||||
vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||
|
||||
'@vitest/mocker@3.2.4(vite@7.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))':
|
||||
dependencies:
|
||||
'@vitest/spy': 3.2.4
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.21
|
||||
optionalDependencies:
|
||||
vite: 7.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
|
||||
'@vitest/mocker@4.0.14(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||
dependencies:
|
||||
'@vitest/spy': 4.0.14
|
||||
|
|
@ -53428,6 +53331,7 @@ snapshots:
|
|||
typescript: 5.9.3
|
||||
v8-compile-cache-lib: 3.0.1
|
||||
yn: 3.1.1
|
||||
optional: true
|
||||
|
||||
ts-node@10.9.2(@types/node@24.10.1)(typescript@5.3.3):
|
||||
dependencies:
|
||||
|
|
@ -54190,27 +54094,6 @@ snapshots:
|
|||
- tsx
|
||||
- yaml
|
||||
|
||||
vite-node@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.4.3
|
||||
es-module-lexer: 1.7.0
|
||||
pathe: 2.0.3
|
||||
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- jiti
|
||||
- less
|
||||
- lightningcss
|
||||
- sass
|
||||
- sass-embedded
|
||||
- stylus
|
||||
- sugarss
|
||||
- supports-color
|
||||
- terser
|
||||
- tsx
|
||||
- yaml
|
||||
|
||||
vite-node@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
|
|
@ -54264,17 +54147,6 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
vite-plugin-pwa@1.2.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0):
|
||||
dependencies:
|
||||
debug: 4.4.3
|
||||
pretty-bytes: 6.1.1
|
||||
tinyglobby: 0.2.15
|
||||
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
workbox-build: 7.4.0(@types/babel__core@7.20.5)
|
||||
workbox-window: 7.4.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
vite-plugin-pwa@1.2.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0):
|
||||
dependencies:
|
||||
debug: 4.4.3
|
||||
|
|
@ -54384,23 +54256,6 @@ snapshots:
|
|||
tsx: 4.21.0
|
||||
yaml: 2.8.3
|
||||
|
||||
vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1):
|
||||
dependencies:
|
||||
esbuild: 0.25.12
|
||||
fdir: 6.5.0(picomatch@4.0.3)
|
||||
picomatch: 4.0.3
|
||||
postcss: 8.5.6
|
||||
rollup: 4.53.3
|
||||
tinyglobby: 0.2.15
|
||||
optionalDependencies:
|
||||
'@types/node': 22.19.1
|
||||
fsevents: 2.3.3
|
||||
jiti: 2.6.1
|
||||
lightningcss: 1.30.2
|
||||
terser: 5.44.1
|
||||
tsx: 4.21.0
|
||||
yaml: 2.8.1
|
||||
|
||||
vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3):
|
||||
dependencies:
|
||||
esbuild: 0.25.12
|
||||
|
|
@ -54452,23 +54307,6 @@ snapshots:
|
|||
tsx: 4.21.0
|
||||
yaml: 2.8.3
|
||||
|
||||
vite@7.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1):
|
||||
dependencies:
|
||||
esbuild: 0.25.12
|
||||
fdir: 6.5.0(picomatch@4.0.3)
|
||||
picomatch: 4.0.3
|
||||
postcss: 8.5.6
|
||||
rollup: 4.53.3
|
||||
tinyglobby: 0.2.15
|
||||
optionalDependencies:
|
||||
'@types/node': 22.19.1
|
||||
fsevents: 2.3.3
|
||||
jiti: 2.6.1
|
||||
lightningcss: 1.30.2
|
||||
terser: 5.44.1
|
||||
tsx: 4.21.0
|
||||
yaml: 2.8.1
|
||||
|
||||
vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3):
|
||||
dependencies:
|
||||
esbuild: 0.25.12
|
||||
|
|
@ -54494,10 +54332,6 @@ snapshots:
|
|||
optionalDependencies:
|
||||
vite: 6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||
|
||||
vitefu@1.1.1(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)):
|
||||
optionalDependencies:
|
||||
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
|
||||
vitefu@1.1.1(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||
optionalDependencies:
|
||||
vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||
|
|
@ -54702,51 +54536,6 @@ snapshots:
|
|||
- tsx
|
||||
- yaml
|
||||
|
||||
vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@29.0.1(@noble/hashes@2.0.1))(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1):
|
||||
dependencies:
|
||||
'@types/chai': 5.2.3
|
||||
'@vitest/expect': 3.2.4
|
||||
'@vitest/mocker': 3.2.4(vite@7.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
|
||||
'@vitest/pretty-format': 3.2.4
|
||||
'@vitest/runner': 3.2.4
|
||||
'@vitest/snapshot': 3.2.4
|
||||
'@vitest/spy': 3.2.4
|
||||
'@vitest/utils': 3.2.4
|
||||
chai: 5.3.3
|
||||
debug: 4.4.3
|
||||
expect-type: 1.3.0
|
||||
magic-string: 0.30.21
|
||||
pathe: 2.0.3
|
||||
picomatch: 4.0.3
|
||||
std-env: 3.10.0
|
||||
tinybench: 2.9.0
|
||||
tinyexec: 0.3.2
|
||||
tinyglobby: 0.2.15
|
||||
tinypool: 1.1.1
|
||||
tinyrainbow: 2.0.0
|
||||
vite: 7.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
vite-node: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
|
||||
why-is-node-running: 2.3.0
|
||||
optionalDependencies:
|
||||
'@types/debug': 4.1.12
|
||||
'@types/node': 22.19.1
|
||||
'@vitest/browser': 3.2.4(playwright@1.57.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))(vitest@3.2.4)
|
||||
'@vitest/ui': 3.2.4(vitest@3.2.4)
|
||||
jsdom: 29.0.1(@noble/hashes@2.0.1)
|
||||
transitivePeerDependencies:
|
||||
- jiti
|
||||
- less
|
||||
- lightningcss
|
||||
- msw
|
||||
- sass
|
||||
- sass-embedded
|
||||
- stylus
|
||||
- sugarss
|
||||
- supports-color
|
||||
- terser
|
||||
- tsx
|
||||
- yaml
|
||||
|
||||
vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@29.0.1(@noble/hashes@2.0.1))(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3):
|
||||
dependencies:
|
||||
'@types/chai': 5.2.3
|
||||
|
|
@ -55032,6 +54821,35 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- msw
|
||||
|
||||
vitest@4.1.1(@opentelemetry/api@1.9.0)(@types/node@20.19.25)(jsdom@25.0.1)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||
dependencies:
|
||||
'@vitest/expect': 4.1.1
|
||||
'@vitest/mocker': 4.1.1(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||
'@vitest/pretty-format': 4.1.1
|
||||
'@vitest/runner': 4.1.1
|
||||
'@vitest/snapshot': 4.1.1
|
||||
'@vitest/spy': 4.1.1
|
||||
'@vitest/utils': 4.1.1
|
||||
es-module-lexer: 2.0.0
|
||||
expect-type: 1.3.0
|
||||
magic-string: 0.30.21
|
||||
obug: 2.1.1
|
||||
pathe: 2.0.3
|
||||
picomatch: 4.0.3
|
||||
std-env: 4.0.0
|
||||
tinybench: 2.9.0
|
||||
tinyexec: 1.0.2
|
||||
tinyglobby: 0.2.15
|
||||
tinyrainbow: 3.0.3
|
||||
vite: 6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||
why-is-node-running: 2.3.0
|
||||
optionalDependencies:
|
||||
'@opentelemetry/api': 1.9.0
|
||||
'@types/node': 20.19.25
|
||||
jsdom: 25.0.1
|
||||
transitivePeerDependencies:
|
||||
- msw
|
||||
|
||||
vitest@4.1.1(@opentelemetry/api@1.9.0)(@types/node@20.19.25)(jsdom@29.0.1(@noble/hashes@2.0.1))(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||
dependencies:
|
||||
'@vitest/expect': 4.1.1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue