feat(TechText): component for technical text

This commit is contained in:
Ilia Mashkov
2026-02-24 18:00:01 +03:00
parent 12d57c59c1
commit 83f2bdcdda
2 changed files with 136 additions and 0 deletions

View File

@@ -0,0 +1,97 @@
<script module>
import { defineMeta } from '@storybook/addon-svelte-csf';
import TechText from './TechText.svelte';
const { Story } = defineMeta({
title: 'Shared/TechText',
component: TechText,
tags: ['autodocs'],
parameters: {
docs: {
description: {
component: 'Monospace <code> element for technical values, measurements, identifiers.',
},
story: { inline: false },
},
layout: 'centered',
},
argTypes: {
variant: {
control: 'select',
options: ['default', 'accent', 'muted', 'success', 'warning', 'error'],
description: 'Text variant',
defaultValue: 'muted',
},
size: {
control: 'select',
options: ['xs', 'sm', 'md'],
description: 'Text size',
defaultValue: 'sm',
},
},
});
</script>
<Story
name="Default variant"
args={{ variant: 'default', size: 'sm' }}
>
{#snippet template()}
<TechText variant="default" size="sm">0x1F4A9</TechText>
{/snippet}
</Story>
<Story
name="Accent variant"
args={{ variant: 'accent', size: 'sm' }}
>
{#snippet template()}
<TechText variant="accent" size="sm">0x1F4A9</TechText>
{/snippet}
</Story>
<Story
name="Muted variant"
args={{ variant: 'muted', size: 'sm' }}
>
{#snippet template()}
<TechText variant="muted" size="sm">0x1F4A9</TechText>
{/snippet}
</Story>
<Story
name="Success variant"
args={{ variant: 'success', size: 'sm' }}
>
{#snippet template()}
<TechText variant="success" size="sm">0x1F4A9</TechText>
{/snippet}
</Story>
<Story
name="Warning variant"
args={{ variant: 'warning', size: 'sm' }}
>
{#snippet template()}
<TechText variant="warning" size="sm">0x1F4A9</TechText>
{/snippet}
</Story>
<Story
name="Error variant"
args={{ variant: 'error', size: 'sm' }}
>
{#snippet template()}
<TechText variant="error" size="sm">0x1F4A9</TechText>
{/snippet}
</Story>
<Story name="All sizes">
{#snippet template()}
<div class="flex flex-col gap-2">
<TechText variant="default" size="xs">XS: font-family-16px</TechText>
<TechText variant="default" size="sm">SM: font-family-16px</TechText>
<TechText variant="default" size="md">MD: font-family-16px</TechText>
</div>
{/snippet}
</Story>

View File

@@ -0,0 +1,39 @@
<!--
Component: TechnicalText
Monospace <code> element for technical values, measurements, identifiers.
-->
<script lang="ts">
import { cn } from '$shared/shadcn/utils/shadcn-utils';
import {
type LabelSize,
type LabelVariant,
labelSizeConfig,
labelVariantConfig,
} from '$shared/ui/Label/config';
import type { Snippet } from 'svelte';
interface Props {
variant?: LabelVariant;
size?: LabelSize;
children?: Snippet;
class?: string;
}
let {
variant = 'muted',
size = 'sm',
children,
class: className,
}: Props = $props();
</script>
<code
class={cn(
"font-['Space_Mono'] tracking-tight tabular-nums",
labelSizeConfig[size],
labelVariantConfig[variant],
className,
)}
>
{#if children}{@render children()}{/if}
</code>