From 118c58885938cc46839c81f003b11db53bb421c4 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Wed, 24 Jun 2026 15:29:52 +0300 Subject: [PATCH] feat(Board): add constant-size FocalFrame --- src/features/CompareBoard/index.ts | 1 + src/features/CompareBoard/model/index.ts | 5 +- .../ui/FocalFrame/FocalFrame.stories.svelte | 26 +++++++ .../Board/ui/FocalFrame/FocalFrame.svelte | 74 +++++++++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/widgets/Board/ui/FocalFrame/FocalFrame.stories.svelte create mode 100644 src/widgets/Board/ui/FocalFrame/FocalFrame.svelte diff --git a/src/features/CompareBoard/index.ts b/src/features/CompareBoard/index.ts index 7109a36..0477963 100644 --- a/src/features/CompareBoard/index.ts +++ b/src/features/CompareBoard/index.ts @@ -2,6 +2,7 @@ export { fitColumns } from './lib'; export { __resetBoard, type BoardStore, + FRAME_ROLE_GAP, getBoard, MAX_COLUMNS, type RoleTypography, diff --git a/src/features/CompareBoard/model/index.ts b/src/features/CompareBoard/model/index.ts index 770145f..ac29d08 100644 --- a/src/features/CompareBoard/model/index.ts +++ b/src/features/CompareBoard/model/index.ts @@ -1,4 +1,7 @@ -export { MAX_COLUMNS } from './const/const'; +export { + FRAME_ROLE_GAP, + MAX_COLUMNS, +} from './const/const'; export { __resetBoard, type BoardStore, diff --git a/src/widgets/Board/ui/FocalFrame/FocalFrame.stories.svelte b/src/widgets/Board/ui/FocalFrame/FocalFrame.stories.svelte new file mode 100644 index 0000000..679fa1d --- /dev/null +++ b/src/widgets/Board/ui/FocalFrame/FocalFrame.stories.svelte @@ -0,0 +1,26 @@ + + + + {#snippet template()} +
+ +
+ {/snippet} +
diff --git a/src/widgets/Board/ui/FocalFrame/FocalFrame.svelte b/src/widgets/Board/ui/FocalFrame/FocalFrame.svelte new file mode 100644 index 0000000..0e40bc6 --- /dev/null +++ b/src/widgets/Board/ui/FocalFrame/FocalFrame.svelte @@ -0,0 +1,74 @@ + + + +
0 ? `${reservedHeight}px` : undefined} + bind:clientWidth={frameWidth} +> + {#if focal} + {@render roleBlock('header', fonts.header)} + {@render roleBlock('body', fonts.body)} + {/if} +
+ +{#snippet roleBlock(role: Role, font: UnifiedFont | undefined)} + {@const typo = board.typo[role]} + {#if font} + + board.setSpecimen(role, text)} + /> + + {:else} + + board.setSpecimen(role, text)} + /> + {/if} +{/snippet}