@connectorvol/tree 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/(classes)/chessTree.svelte.d.ts +2 -0
- package/dist/(classes)/chessTree.svelte.js +7 -1
- package/dist/(components)/Move.svelte +346 -310
- package/dist/(components)/MoveWithIcon.svelte +59 -48
- package/dist/(components)/NagBadges.svelte +30 -30
- package/dist/(components)/TreeViewer.svelte +877 -842
- package/dist/(components)/TreeViewerPanelManager.svelte +99 -98
- package/dist/components/ui/checkbox/checkbox.svelte +39 -0
- package/dist/components/ui/checkbox/checkbox.svelte.d.ts +4 -0
- package/dist/components/ui/checkbox/index.d.ts +2 -0
- package/dist/components/ui/checkbox/index.js +4 -0
- package/dist/components/ui/popover/index.d.ts +9 -0
- package/dist/components/ui/popover/index.js +11 -0
- package/dist/components/ui/popover/popover-close.svelte +7 -0
- package/dist/components/ui/popover/popover-close.svelte.d.ts +4 -0
- package/dist/components/ui/popover/popover-content.svelte +31 -0
- package/dist/components/ui/popover/popover-content.svelte.d.ts +10 -0
- package/dist/components/ui/popover/popover-description.svelte +20 -0
- package/dist/components/ui/popover/popover-description.svelte.d.ts +5 -0
- package/dist/components/ui/popover/popover-header.svelte +20 -0
- package/dist/components/ui/popover/popover-header.svelte.d.ts +5 -0
- package/dist/components/ui/popover/popover-portal.svelte +7 -0
- package/dist/components/ui/popover/popover-portal.svelte.d.ts +3 -0
- package/dist/components/ui/popover/popover-title.svelte +20 -0
- package/dist/components/ui/popover/popover-title.svelte.d.ts +5 -0
- package/dist/components/ui/popover/popover-trigger.svelte +17 -0
- package/dist/components/ui/popover/popover-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/popover/popover.svelte +7 -0
- package/dist/components/ui/popover/popover.svelte.d.ts +3 -0
- package/dist/components/ui/toggle/index.d.ts +3 -0
- package/dist/components/ui/toggle/index.js +5 -0
- package/dist/components/ui/toggle/toggle.svelte +51 -0
- package/dist/components/ui/toggle/toggle.svelte.d.ts +43 -0
- package/package.json +11 -9
|
@@ -1,48 +1,59 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
{#if parsedMove.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { PieceSet } from "@connectorvol/shared";
|
|
3
|
+
import type { ParsedSanMove } from "../(utils)/parseSanMove.js";
|
|
4
|
+
|
|
5
|
+
import { PieceType } from "@connectorvol/shared";
|
|
6
|
+
|
|
7
|
+
import { parseSanMove } from "../(utils)/parseSanMove.js";
|
|
8
|
+
import PieceIcon from "./PieceIcon.svelte";
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
/** SAN нотация хода */
|
|
12
|
+
san: string;
|
|
13
|
+
/** Номер полухода */
|
|
14
|
+
ply: number;
|
|
15
|
+
/** Размер иконки в пикселях */
|
|
16
|
+
iconSize?: number;
|
|
17
|
+
/** Набор фигур*/
|
|
18
|
+
pieceSet?: PieceSet;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const { san, ply, iconSize = 16, pieceSet }: Props = $props();
|
|
22
|
+
|
|
23
|
+
const sanParseCache = new Map<string, ParsedSanMove>();
|
|
24
|
+
|
|
25
|
+
function getParsedSanMove(san: string, ply: number): ParsedSanMove {
|
|
26
|
+
const key = `${san}|${ply}`;
|
|
27
|
+
const cached = sanParseCache.get(key);
|
|
28
|
+
if (cached) return cached;
|
|
29
|
+
const parsed = parseSanMove(san, ply);
|
|
30
|
+
sanParseCache.set(key, parsed);
|
|
31
|
+
return parsed;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const parsedMove: ParsedSanMove = $derived(getParsedSanMove(san, ply));
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<span class="inline-flex items-baseline">
|
|
38
|
+
{#if parsedMove.isCastling || parsedMove.pieceType === PieceType.PAWN}
|
|
39
|
+
<!-- Для рокировки показываем только текст -->
|
|
40
|
+
<span>{san}</span>
|
|
41
|
+
{:else}
|
|
42
|
+
<!-- Для фигур показываем иконку + взятие + координаты -->
|
|
43
|
+
<PieceIcon
|
|
44
|
+
pieceType={parsedMove.pieceType}
|
|
45
|
+
color={parsedMove.color}
|
|
46
|
+
size={iconSize}
|
|
47
|
+
{pieceSet}
|
|
48
|
+
/>
|
|
49
|
+
{#if parsedMove.isCapture}
|
|
50
|
+
<span>x</span>
|
|
51
|
+
{/if}
|
|
52
|
+
<span>{parsedMove.destination}</span>
|
|
53
|
+
{#if parsedMove.isCheck}
|
|
54
|
+
<span>+</span>
|
|
55
|
+
{:else if parsedMove.isCheckmate}
|
|
56
|
+
<span>#</span>
|
|
57
|
+
{/if}
|
|
58
|
+
{/if}
|
|
59
|
+
</span>
|
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { nagBadgeBackground, transformNag } from "@connectorvol/shared";
|
|
3
|
+
import { cn } from "../utils.js";
|
|
4
|
+
import { nagDescription } from "../(models)/nagCatalog.js";
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
type TNagBadgesProps = {
|
|
7
|
+
/** Возвращает список NAG для отображения. */
|
|
8
|
+
nags: number[] | undefined;
|
|
9
|
+
/** Возвращает дополнительные классы корневого контейнера. */
|
|
10
|
+
class?: string;
|
|
11
|
+
};
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
const { nags, class: className = "" }: TNagBadgesProps = $props();
|
|
14
14
|
</script>
|
|
15
15
|
|
|
16
16
|
{#if nags?.length}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
17
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
18
|
+
<span
|
|
19
|
+
data-nag-badges
|
|
20
|
+
class={cn(
|
|
21
|
+
"ml-0.5 inline-flex max-w-full flex-nowrap items-center gap-0.5 align-middle whitespace-nowrap overflow-hidden",
|
|
22
|
+
className,
|
|
23
|
+
)}
|
|
24
|
+
oncontextmenu={(e) => e.preventDefault()}
|
|
25
|
+
>
|
|
26
|
+
{#each nags ?? [] as nag (nag)}
|
|
27
|
+
{@const label = transformNag(nag)}
|
|
28
|
+
{#if label}
|
|
29
|
+
<span
|
|
30
|
+
class="inline-flex h-[1.125rem] w-[1.125rem] shrink-0 cursor-help items-center justify-center rounded-full border border-white/25 text-center font-serif text-[0.625rem] font-semibold leading-none text-white shadow-[0_1px_2px_rgba(0,0,0,0.25)]"
|
|
31
|
+
style:background={nagBadgeBackground(nag)}
|
|
32
|
+
title={nagDescription(nag)}>{label}</span
|
|
33
|
+
>
|
|
34
|
+
{/if}
|
|
35
|
+
{/each}
|
|
36
|
+
</span>
|
|
37
37
|
{/if}
|