<!-- Source: https://scoped.svelte.page/examples/non-class-value-class-prop -->

# Non-ClassValue Class Prop

> A boundary example where a component prop named class is data, not a CSS ClassValue.

**Source:** [https://scoped.svelte.page/examples/non-class-value-class-prop](https://scoped.svelte.page/examples/non-class-value-class-prop)

**Markdown mirror:** [https://scoped.svelte.page/examples/non-class-value-class-prop.md](https://scoped.svelte.page/examples/non-class-value-class-prop.md)

---

This mirror preserves the prose, implementation notes, and runnable Svelte source behind the live example page.

## FIG-001: non-ClassValue class prop.

The safety case: a prop named `class` can be business data. The package only treats explicit `scoped:*` attributes as scoped CSS intent.

**Metadata:** tag: `BOUNDARY` | syntax: `class` | value: `object data` | status: `preserved`

### Source

#### NonClassValueClassProp.svelte

Source file: [src/lib/examples/scoped-props/demos/NonClassValueClassProp.svelte](https://github.com/humanspeak/svelte-scoped-props/blob/main/docs/src/lib/examples/scoped-props/demos/NonClassValueClassProp.svelte)

```svelte
<script lang="ts">
    import NonClassValueClassCard from './components/NonClassValueClassCard.svelte'

    let metadata = {
        label: 'not css',
        priority: 2
    }
</script>

<article class="scoped-proof passed dk-demo-shell">
    <div class="render-grid">
        <div class="render-example">
            <span class="example-label">Native element</span>
            <div class="demo-card parent-owned">This scoped element creates the parent hash.</div>
        </div>
        <div class="render-example">
            <span class="example-label">Non-ClassValue prop</span>
            <NonClassValueClassCard class={metadata} />
        </div>
    </div>

    <div class="comparison-grid">
        <div class="comparison-head">
            <span class="example-label">Source</span>
            <span class="example-label">Current result</span>
        </div>

        <div class="comparison-row">
            <div class="comparison-cell comparison-source">
                <span>Native element</span>
                <code>&lt;div class="demo-card parent-owned"&gt;</code>
            </div>
            <div class="comparison-cell comparison-result">
                <span>Native element</span>
                <code>demo-card parent-owned svelte-parent</code>
                <strong>baseline</strong>
            </div>
        </div>

        <div class="comparison-row">
            <div class="comparison-cell comparison-source">
                <span>Non-ClassValue class prop</span>
                <code>type Props = &#123; class?: unknown &#125;</code>
                <code>let metadata = &#123; label: 'not css', priority: 2 &#125;</code>
                <code>&lt;NonClassValueClassCard class=&#123;metadata&#125; /&gt;</code>
            </div>
            <div class="comparison-cell comparison-result">
                <span>class prop</span>
                <code>&#123; label: 'not css', priority: 2 &#125;</code>
                <strong>preserved</strong>
            </div>
        </div>
    </div>
</article>

<style>
    .parent-owned {
        border-color: var(--proof-parent-border, purple);
        color: var(--proof-parent-ink, purple);
        background: var(--proof-parent-bg, pink);
    }
</style>
```

#### NonClassValueClassCard.svelte

Source file: [src/lib/examples/scoped-props/demos/components/NonClassValueClassCard.svelte](https://github.com/humanspeak/svelte-scoped-props/blob/main/docs/src/lib/examples/scoped-props/demos/components/NonClassValueClassCard.svelte)

```svelte
<script lang="ts">
    type Props = {
        class?: unknown
    }

    let { class: classPayload }: Props = $props()

    function describe(value: unknown): string {
        if (typeof value === 'string') return `"${value}"`

        try {
            return JSON.stringify(value) ?? String(value)
        } catch {
            return String(value)
        }
    }

    let payloadType = $derived(Array.isArray(classPayload) ? 'array' : typeof classPayload)
    let payloadText = $derived(describe(classPayload))
</script>

<div class="payload-card">
    Non-ClassValue prop receives
    <code>typeof class = {payloadType}</code>
    <code>{payloadText}</code>.
</div>

<style>
    .payload-card {
        min-height: 116px;
        display: grid;
        place-items: center;
        gap: 8px;
        padding: 18px;
        border: 2px dashed var(--proof-card-border, gray);
        border-radius: 6px;
        color: var(--proof-card-ink, black);
        text-align: center;
        background: var(--proof-card-bg, white);
    }

    code {
        padding: 2px 5px;
        border-radius: 4px;
        overflow-wrap: anywhere;
        background: var(--proof-code-bg, #eef2f7);
        color: var(--proof-code-ink, #111111);
        font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
        font-size: 0.95em;
    }
</style>
```
