Start typing to search components and docs…
select navigate ESC close

ProductEngine

Engine codes with detailed tooltips showing specifications like power, displacement, dates, and more.

⚡ Performance-optimized: Uses Tippy.js delegation pattern - one global script handles all tooltips efficiently.

🔍 SEO-friendly: Engine codes rendered as static HTML (no client-side hydration required).

Single Engine Code

Display a single engine code with tooltip showing detailed engine information.

Setup:

1. Import the component:

<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="js"><code><span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> { ProductEngine } </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'spoko-design-system'</span></span></code></pre>

2. Initialize tooltips (one-time setup):

Create a tooltip script in your project:

<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#6A737D">// src/scripts/tooltips.ts</span></span> <span class="line"><span style="color:#F97583">import</span><span style="color:#9ECBFF"> 'spoko-design-system/scripts/tooltips'</span><span style="color:#E1E4E8">;</span></span></code></pre>

Then import it in your layout’s <head>:

<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="astro"><code><span class="line"><span style="color:#6A737D">---</span></span> <span class="line"><span style="color:#6A737D">// In your layout file (e.g., HeadCommon.astro)</span></span> <span class="line"><span style="color:#6A737D">---</span></span> <span class="line"><span style="color:#E1E4E8">&#x3C;</span><span style="color:#85E89D">head</span><span style="color:#E1E4E8">></span></span> <span class="line"><span style="color:#E1E4E8"> &#x3C;</span><span style="color:#85E89D">script</span><span style="color:#B392F0"> src</span><span style="color:#E1E4E8">=</span><span style="color:#9ECBFF">"/src/scripts/tooltips.ts"</span><span style="color:#E1E4E8">>&#x3C;/</span><span style="color:#85E89D">script</span><span style="color:#E1E4E8">></span></span> <span class="line"><span style="color:#E1E4E8">&#x3C;/</span><span style="color:#85E89D">head</span><span style="color:#E1E4E8">></span></span></code></pre>

See Tooltips documentation for details.

Basic Usage (New API Structure):

CAYACAYB
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="astro"><code><span class="line"><span style="color:#6A737D">---</span></span> <span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> { ProductEngine } </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'spoko-design-system'</span><span style="color:#E1E4E8">;</span></span> <span class="line"><span style="color:#6A737D">---</span></span> <span class="line"></span> <span class="line"><span style="color:#6A737D">&#x3C;!-- New API structure (with built-in translations) --></span></span> <span class="line"><span style="color:#E1E4E8">&#x3C;</span><span style="color:#79B8FF">ProductEngine</span><span style="color:#B392F0"> engine</span><span style="color:#E1E4E8">={{</span></span> <span class="line"><span style="color:#E1E4E8"> code: </span><span style="color:#9ECBFF">'CAYA'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'1.6 TDI'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> serie: { value: </span><span style="color:#9ECBFF">'EA189'</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Seria silnika'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> power: { kw: </span><span style="color:#79B8FF">55</span><span style="color:#E1E4E8">, ps: </span><span style="color:#79B8FF">75</span><span style="color:#E1E4E8">, ps_label: </span><span style="color:#9ECBFF">'KM'</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Moc'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> displacement: { value: </span><span style="color:#79B8FF">1598</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Pojemność'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> euro: { value: </span><span style="color:#79B8FF">5</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Norma Euro'</span><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8">}} /></span></span> <span class="line"></span> <span class="line"><span style="color:#6A737D">&#x3C;!-- Old API structure (backward compatible) --></span></span> <span class="line"><span style="color:#E1E4E8">&#x3C;</span><span style="color:#79B8FF">ProductEngine</span></span> <span class="line"><span style="color:#B392F0"> engine</span><span style="color:#E1E4E8">={{ code: </span><span style="color:#9ECBFF">'CAYA'</span><span style="color:#E1E4E8">, name: </span><span style="color:#9ECBFF">'1.6 TDI'</span><span style="color:#E1E4E8">, kw: </span><span style="color:#79B8FF">55</span><span style="color:#E1E4E8">, ps: </span><span style="color:#79B8FF">75</span><span style="color:#E1E4E8">, cc: </span><span style="color:#79B8FF">1598</span><span style="color:#E1E4E8">, serie: </span><span style="color:#79B8FF">3</span><span style="color:#E1E4E8">, euro: </span><span style="color:#79B8FF">5</span><span style="color:#E1E4E8"> }}</span></span> <span class="line"><span style="color:#B392F0"> translations</span><span style="color:#E1E4E8">={{ power: </span><span style="color:#9ECBFF">'Moc'</span><span style="color:#E1E4E8">, cc: </span><span style="color:#9ECBFF">'Pojemność'</span><span style="color:#E1E4E8">, euro: </span><span style="color:#9ECBFF">'Euro'</span><span style="color:#E1E4E8">, horsepowerUnit: </span><span style="color:#9ECBFF">'KM'</span><span style="color:#E1E4E8"> }}</span></span> <span class="line"><span style="color:#E1E4E8">/></span></span></code></pre>

Special Engine Variants (Colored):

Engine codes for special editions are automatically color-coded:

GTI Engine (Red)CAVE
WRC Engine (Blue)CDLJ
Special BlueCPTA
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="astro"><code><span class="line"><span style="color:#6A737D">&#x3C;!-- GTI Engine - Red --></span></span> <span class="line"><span style="color:#E1E4E8">&#x3C;</span><span style="color:#79B8FF">ProductEngine</span><span style="color:#B392F0"> engine</span><span style="color:#E1E4E8">={{</span></span> <span class="line"><span style="color:#E1E4E8"> code: </span><span style="color:#9ECBFF">'CAVE'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'1.4 TSI'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> power: { kw: </span><span style="color:#79B8FF">132</span><span style="color:#E1E4E8">, ps: </span><span style="color:#79B8FF">180</span><span style="color:#E1E4E8">, ps_label: </span><span style="color:#9ECBFF">'KM'</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Moc'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> displacement: { value: </span><span style="color:#79B8FF">1390</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Pojemność'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> euro: { value: </span><span style="color:#79B8FF">5</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Norma '</span><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8">}} /></span></span> <span class="line"></span> <span class="line"><span style="color:#6A737D">&#x3C;!-- WRC Engine - Blue --></span></span> <span class="line"><span style="color:#E1E4E8">&#x3C;</span><span style="color:#79B8FF">ProductEngine</span><span style="color:#B392F0"> engine</span><span style="color:#E1E4E8">={{</span></span> <span class="line"><span style="color:#E1E4E8"> code: </span><span style="color:#9ECBFF">'CDLJ'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'1.6 TDI'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> power: { kw: </span><span style="color:#79B8FF">165</span><span style="color:#E1E4E8">, ps: </span><span style="color:#79B8FF">220</span><span style="color:#E1E4E8">, ps_label: </span><span style="color:#9ECBFF">'KM'</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Moc'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> displacement: { value: </span><span style="color:#79B8FF">1598</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Pojemność'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> euro: { value: </span><span style="color:#79B8FF">6</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Norma '</span><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8">}} /></span></span></code></pre>

Engine List

Display multiple engine codes from an array (from API response).

Import:

<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="js"><code><span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> { ProductEngines } </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'spoko-design-system'</span></span></code></pre>

Usage:

CAYA,CAYB,CAYC
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="astro"><code><span class="line"><span style="color:#6A737D">---</span></span> <span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> { ProductEngines } </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'spoko-design-system'</span><span style="color:#E1E4E8">;</span></span> <span class="line"><span style="color:#6A737D">---</span></span> <span class="line"></span> <span class="line"><span style="color:#E1E4E8">&#x3C;</span><span style="color:#79B8FF">ProductEngines</span><span style="color:#B392F0"> engines</span><span style="color:#E1E4E8">={[</span></span> <span class="line"><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#E1E4E8"> id: </span><span style="color:#79B8FF">13</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> code: </span><span style="color:#9ECBFF">'CAYA'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'1.6 TDI'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> serie: { value: </span><span style="color:#9ECBFF">'EA189'</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Seria silnika'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> power: { kw: </span><span style="color:#79B8FF">55</span><span style="color:#E1E4E8">, ps: </span><span style="color:#79B8FF">75</span><span style="color:#E1E4E8">, ps_label: </span><span style="color:#9ECBFF">'KM'</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Moc'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> displacement: { value: </span><span style="color:#79B8FF">1598</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Pojemność'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> euro: { value: </span><span style="color:#79B8FF">5</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Norma '</span><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#E1E4E8"> id: </span><span style="color:#79B8FF">14</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> code: </span><span style="color:#9ECBFF">'CAYB'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'1.6 TDI'</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#E1E4E8"> serie: { value: </span><span style="color:#9ECBFF">'EA189'</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Seria silnika'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> power: { kw: </span><span style="color:#79B8FF">66</span><span style="color:#E1E4E8">, ps: </span><span style="color:#79B8FF">90</span><span style="color:#E1E4E8">, ps_label: </span><span style="color:#9ECBFF">'KM'</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Moc'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> displacement: { value: </span><span style="color:#79B8FF">1598</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Pojemność'</span><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> euro: { value: </span><span style="color:#79B8FF">5</span><span style="color:#E1E4E8">, label: </span><span style="color:#9ECBFF">'Norma '</span><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8">]} /></span></span></code></pre>

With API Data:

When using data from the API, pass the part_engines array directly. The component automatically extracts translations from the nested structure:

<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="astro"><code><span class="line"><span style="color:#E1E4E8">&#x3C;</span><span style="color:#79B8FF">ProductEngines</span></span> <span class="line"><span style="color:#B392F0"> engines</span><span style="color:#E1E4E8">={product.part_engines}</span></span> <span class="line"><span style="color:#B392F0"> isPdp</span><span style="color:#E1E4E8">={</span><span style="color:#79B8FF">true</span><span style="color:#E1E4E8">}</span></span> <span class="line"><span style="color:#E1E4E8">/></span></span></code></pre>

Note: The new API structure includes labels and translations, so you no longer need to pass the translations prop. The component will use labels from the API (e.g., “Moc”, “Pojemność”, “KM”).

API Response Structure:

<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="json"><code><span class="line"><span style="color:#E1E4E8">{</span></span> <span class="line"><span style="color:#79B8FF"> "part_engines"</span><span style="color:#E1E4E8">: [</span></span> <span class="line"><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#79B8FF"> "id"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">13</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "code"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"CAYA"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "name"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"1.6 TDI"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "info"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">null</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "serie"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"EA189"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Seria silnika"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "type"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"diesel"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "translated"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Diesel"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Typ paliwa"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "power"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "kw"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">55</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "ps"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">75</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "ps_label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"KM"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Moc"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "date"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"03/2009–05/2010"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Data produkcji"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "displacement"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">1598</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Pojemność"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "compression_ratio"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"16,5:1"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Stopień sprężania"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "valves"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">16</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Zawory"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "euro"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">5</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "formatted"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Norma Euro 5"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Norma "</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#79B8FF"> "id"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">14</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "code"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"CAYB"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "name"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"1.6 TDI"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "info"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">null</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "serie"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"EA189"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Seria silnika"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "type"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"diesel"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "translated"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Diesel"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Typ paliwa"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "power"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "kw"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">66</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "ps"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">90</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "ps_label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"KM"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Moc"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "date"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"03/2009–03/2014"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Data produkcji"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "displacement"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">1598</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Pojemność"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "compression_ratio"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"16,5:1"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Stopień sprężania"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "valves"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">16</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Zawory"</span></span> <span class="line"><span style="color:#E1E4E8"> },</span></span> <span class="line"><span style="color:#79B8FF"> "euro"</span><span style="color:#E1E4E8">: {</span></span> <span class="line"><span style="color:#79B8FF"> "value"</span><span style="color:#E1E4E8">: </span><span style="color:#79B8FF">5</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "formatted"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Norma Euro 5"</span><span style="color:#E1E4E8">,</span></span> <span class="line"><span style="color:#79B8FF"> "label"</span><span style="color:#E1E4E8">: </span><span style="color:#9ECBFF">"Norma "</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8"> }</span></span> <span class="line"><span style="color:#E1E4E8"> ]</span></span> <span class="line"><span style="color:#E1E4E8">}</span></span></code></pre>

Props

ProductEngine

PropTypeDefaultDescription
engine*EngineObjectEngine object with nested API structure — see shape below.
showCommabooleanfalseShow comma after code (for inline lists).
translationsobjectFallback translations (used only with old flat API).

ProductEngines

PropTypeDefaultDescription
engines*EngineObject[][]Array of engine objects (auto-sorted by code).
isPdpbooleanfalseProduct detail page styling.
translationsobjectFallback translations (used only with old flat API).

EngineObject shape

<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#F97583">interface</span><span style="color:#B392F0"> EngineObject</span><span style="color:#E1E4E8"> {</span></span> <span class="line"><span style="color:#FFAB70"> code</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8">; </span><span style="color:#6A737D">// Engine code (e.g. "CAYA") — required</span></span> <span class="line"><span style="color:#FFAB70"> name</span><span style="color:#F97583">?:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8">; </span><span style="color:#6A737D">// Engine name (e.g. "1.6 TDI")</span></span> <span class="line"><span style="color:#FFAB70"> info</span><span style="color:#F97583">?:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8">; </span><span style="color:#6A737D">// Additional info shown in header</span></span> <span class="line"><span style="color:#FFAB70"> serie</span><span style="color:#F97583">?:</span><span style="color:#E1E4E8"> { </span><span style="color:#FFAB70">value</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8">; </span><span style="color:#FFAB70">label</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8"> }; </span><span style="color:#6A737D">// e.g. "EA189"</span></span> <span class="line"><span style="color:#FFAB70"> power</span><span style="color:#F97583">?:</span><span style="color:#E1E4E8"> { </span><span style="color:#FFAB70">kw</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> number</span><span style="color:#E1E4E8">; </span><span style="color:#FFAB70">ps</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> number</span><span style="color:#E1E4E8">; </span><span style="color:#FFAB70">ps_label</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8">; </span><span style="color:#FFAB70">label</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8"> };</span></span> <span class="line"><span style="color:#FFAB70"> displacement</span><span style="color:#F97583">?:</span><span style="color:#E1E4E8"> { </span><span style="color:#FFAB70">value</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> number</span><span style="color:#E1E4E8">; </span><span style="color:#FFAB70">label</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8"> }; </span><span style="color:#6A737D">// cm³</span></span> <span class="line"><span style="color:#FFAB70"> euro</span><span style="color:#F97583">?:</span><span style="color:#E1E4E8"> { </span><span style="color:#FFAB70">value</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> number</span><span style="color:#E1E4E8">; </span><span style="color:#FFAB70">label</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8">; </span><span style="color:#FFAB70">formatted</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8"> };</span></span> <span class="line"><span style="color:#FFAB70"> date</span><span style="color:#F97583">?:</span><span style="color:#E1E4E8"> { </span><span style="color:#FFAB70">value</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8">; </span><span style="color:#FFAB70">label</span><span style="color:#F97583">:</span><span style="color:#79B8FF"> string</span><span style="color:#E1E4E8"> };</span></span> <span class="line"><span style="color:#6A737D"> // ... other API-provided spec fields</span></span> <span class="line"><span style="color:#E1E4E8">}</span></span></code></pre>

Note: The component supports both the new nested API structure (with built-in labels) and the old flat structure for backward compatibility.

Features

  • Rich Tooltips: Shows detailed engine specifications on hover (Tippy.js delegation)
  • Performance Optimized: One global script handles all tooltips efficiently
  • SEO-Friendly: Engine codes rendered as static HTML (no hydration)
  • API-Driven Translations: Labels and units come directly from API
  • Multi-language: Supports Polish (KM), German (PS), English (HP)
  • Two-Tone Design: Dark blue header with light body for better hierarchy
  • Semantic Colors: Automatic color coding for special engines (GTI, WRC, etc.)
  • Clean Layout: Flexbox-based design with semantic CSS classes
  • Smart Data: Only shows relevant fields (power, displacement, euro)
  • Auto-sorting: Engines automatically sorted alphabetically by code
  • Backward Compatible: Works with both new and old API structures
  • Touch Friendly: Works on mobile devices

Engine Color Coding

Special engine codes are automatically color-coded:

Engine Codes Color Description
CAVE, CTHE, DAJA, DAYB Red GTI Performance engines
CDLJ Blue WRC/R Street engines
CPTA, CZEA Light Blue Special blue engines

Notes

  • Setup required: Import 'spoko-design-system/scripts/tooltips' once in your layout (see Tooltips docs)
  • Hover over any engine code to see full specifications in a detailed tooltip
  • Tooltips use Tippy.js delegation pattern (one global handler for all tooltips)
  • Performance: No client-side hydration needed - pure Astro components
  • New API structure: Labels come from API (e.g., “Moc”, “Pojemność”, “KM”)
  • No manual translations needed: The API provides all labels and units
  • The component automatically extracts series value from nested structure
  • Date field is not shown in tooltips (only power, displacement, and euro)
  • Missing data fields are gracefully hidden
  • Commas between engine codes are automatically handled in lists
  • Backward compatible: Still works with old flat API structure
  • Tooltip has dark blue header (#001e50) with light gray body (#f3f4f6)

Migration from Vue to Astro

If upgrading from the old Vue version:

  1. Remove client:load directive from all ProductEngine/ProductEngines usage
  2. Set up tooltips in your layout (see Tooltips documentation)
  3. Update imports to use Astro components (automatically handled by package exports)
  4. No other changes needed - props and API structure remain the same