diff --git a/frontend/src/routes/test_dev/ui_components/+page.svelte b/frontend/src/routes/test_dev/ui_components/+page.svelte new file mode 100644 index 0000000000000..b785ecee08d64 --- /dev/null +++ b/frontend/src/routes/test_dev/ui_components/+page.svelte @@ -0,0 +1,952 @@ + + +
+ +
+
+
+

Theme Selector

+ +
+ + {@render themeInfo()} +
+
+ + +
+
{@render formContent()}
+
+
+ +{#snippet themeInfo()} + {#if version == 'minimalistic'} +
+

Minimalistic

+
+
+ Colors: + Nord palette, subtle backgrounds +
+
+ Typography: + Clean, readable hierarchy +
+
+ Spacing: + Generous padding, breathing room +
+
+ Features: + Enhanced toggle, connect emphasis +
+
+
+ {:else if version == 'minimalistic_border'} +
+

Minimalistic Border

+
+
+ Approach: + Shapes are slightly rounded, Groups are formed by padding and background color, borders + can be added to mark contrast. Prefer thin borders to shadows. Text have 3 colors: + primary, secondary, tertiary. Primary is reserved for headers/labels. Buttons have 2 + main styles: border, no background for secondary action, full accent for primary action +
+
+ Colors: + Nord palette, subtle backgrounds, no shadows +
+
+ Typography: + Clean, readable hierarchy +
+
+ Spacing: + Generous padding, breathing room +
+
+ Shapes: + Slightly Rounded corners +
+
+
+ {:else if version == 'sharp_minimal'} +
+

Sharp Minimal

+
+
+ Design: + Crisp edges, high contrast +
+
+ Interaction: + Bold connect button, clear states +
+
+ Layout: + Tight spacing, maximum efficiency +
+
+
+ {:else if version == 'precision'} +
+

Precision

+
+
+ Approach: + Data-driven, exact alignment +
+
+ Visual: + Grid-based, mathematical spacing +
+
+ Interaction: + Precise controls, clear feedback +
+
+
+ {:else} +
+

{version.charAt(0).toUpperCase() + version.slice(1).replace('_', ' ')}

+

Legacy design variation

+
+ {/if} +{/snippet} + +{#snippet formContent()} + {#if version == 'minimalistic'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+ +
+
+ + +
{value.type}
+
+ + {@render actions?.()} +
+ + + +
{value.description}
+
+ {/snippet} + + {#snippet actions()} +
+ + {@render toggleButton?.()} +
+ {#snippet toggleButton()} +
+ + +
+ {/snippet} + {/snippet} + {:else if version == 'minimalistic_border'} + +
+
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+
+
toggle:{@render toggleButton?.(true)}
+
buttons light most of the buttons: + +
+
buttons full accent for the main call to action only: + +
+ +
+ rounded toggle: + +
+ + text primary : nord-0 for headers/labels + + text secondary : nord-300 for most of the text and input values + + + text tertiary : gray-400 for placeholders/descriptions + +
+ input with placeholder: + +
+
+
+ {#snippet input({ key, value })} +
+ +
+
+ + +
{value.type}
+
+ + {@render actions?.()} +
+ + + +
{value.description}
+
+ {/snippet} + + {#snippet actions()} +
+ + {@render toggleButton?.()} + +
+ {/snippet} + {#snippet toggleButton(forceVisible = false)} +
+ + +
+ {/snippet} + {:else if version == 'sharp_minimal'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+
+
+ + {#if schema.required.includes(key)} + REQ + {/if} + + {value.type} + +
+ {@render toggle()} +
+
+ +
+ {#if value.description} +
+

{value.description}

+
+ {/if} +
+ {/snippet} + + {#snippet toggle()} +
+ + + +
+ + +
+
+ {/snippet} + {:else if version == 'precision'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+ +
+ +
{value.type}
+
+ + +
+ + {#if value.description} +

{value.description}

+ {/if} +
+ + +
+ {@render toggle()} +
+
+ {/snippet} + + {#snippet toggle()} +
+ + + + +
+ + +
+
+ {/snippet} + {:else if version == 'minimal'} +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+ +
+ +
{value.type}
+
+ + +
+ {/snippet} + {:else if version == 'border'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+ +
+
+ + +
{value.type}
+
+ + {@render actions?.()} +
+ + + +
{value.description}
+
+ {/snippet} + + {#snippet actions()} +
+ + {@render toggleButton?.()} +
+ {#snippet toggleButton()} +
+ + +
+ {/snippet} + {/snippet} + {:else if version == 'border_nord'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+ +
+
+ + +
{value.type}
+
+ + {@render actions?.()} +
+ + + +
{value.description}
+
+ {/snippet} + + {#snippet actions()} +
+ + {@render toggleButton?.()} +
+ {#snippet toggleButton()} +
+ + +
+ {/snippet} + {/snippet} + {:else if version == 'minimalistic'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+ +
+
+ + +
{value.type}
+
+ + {@render actions?.()} +
+ + + +
{value.description}
+
+ {/snippet} + + {#snippet actions()} +
+ + {@render toggleButton?.()} +
+ {#snippet toggleButton()} +
+ + +
+ {/snippet} + {/snippet} + {:else if version == 'card_stack'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+ +
+
+ +
+ {value.type} +
+
+ + + + {#if value.description} +

{value.description}

+ {/if} +
+ {/snippet} + {:else if version == 'inline_compact'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+ +
+ +
{value.type}
+
+ +
+ + {#if value.description} +

{value.description}

+ {/if} +
+
+ {/snippet} + {:else if version == 'dev_minimal'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+
+ + {@render actions()} +
+ + {#if value.description} +

{value.description}

+ {/if} +
+ {/snippet} + + {#snippet actions()} +
+ + +
+ {/snippet} + {:else if version == 'dev_clean'} + +
+ {#each Object.entries(schema.properties) as [key, value]} + {@render input({ key, value })} + {/each} +
+ + {#snippet input({ key, value })} +
+
+
+ + {value.type} + {#if schema.required.includes(key)} + + {/if} +
+ {@render actions()} +
+ + {#if value.description} +

{value.description}

+ {/if} +
+ {/snippet} + + {#snippet actions()} +
+ + +
+ {/snippet} + {/if} +{/snippet}