
Hyva Ui Component
- 791 installs
- 78 repo stars
- Updated July 31, 2026
- hyva-themes/hyva-ai-tools
hyva-ui-component is a Hyvä Magento 2 agent skill that lists, installs, and copies non-CMS Hyva UI template components into a child theme for developers customizing ecommerce storefront chrome.
About
hyva-ui-component is a hyva-themes/hyva-ai-tools skill that applies template-based non-CMS Hyva UI components to a Hyvä Magento 2 theme. It lists available components such as headers, footers, galleries, menus, and minicarts with variants, displays component README instructions, and copies files from {hyva_ui_path}/components/ into app/design/frontend/{Vendor}/{Theme}/. The skill requires companion skills hyva-exec-shell-cmd, hyva-theme-list, hyva-child-theme, and hyva-compile-tailwind-css. Developers reach for hyva-ui-component when extending a Hyvä child theme with prebuilt UI blocks instead of authoring layouts from scratch. Tailwind CSS compilation integrates through the required hyva-compile-tailwind-css dependency.
- Lists all available non-CMS Hyva UI components and their variants from the official catalog
- Displays the official component README with exact installation instructions
- Copies component files from vendor/hyva-themes/hyva-ui/components/ into the active theme directory
- Requires hyva-exec-shell-cmd, hyva-theme-list, hyva-child-theme, and hyva-compile-tailwind-css
- Automatically refreshes the component catalog after new Hyva UI installation
Hyva Ui Component by the numbers
- 791 all-time installs (skills.sh)
- +29 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #443 of 2,245 Frontend Development skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/hyva-themes/hyva-ai-tools --skill hyva-ui-componentAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 791 |
|---|---|
| repo stars | ★ 78 |
| Last updated | July 31, 2026 |
| Repository | hyva-themes/hyva-ai-tools ↗ |
How do you add Hyva UI components to Magento?
Quickly add, install, or customize non-CMS Hyva UI components such as headers, footers, galleries, menus, or minicarts into their Hyvä Magento 2 theme.
Who is it for?
Magento 2 developers on Hyvä child themes who need to add or customize non-CMS UI blocks like headers, footers, menus, or minicarts.
Skip if: Non-Magento storefronts, CMS page builder blocks, or shops not using Hyvä theme and its companion hyva-ai-tools skills.
When should I use this skill?
A developer asks to add, install, or apply a Hyva UI component such as header, footer, gallery, menu, or minicart to a Hyvä theme.
What you get
Installed Hyva UI component files in the Magento 2 child theme directory with README-guided variants and compiled Tailwind CSS.
- installed theme component files
- selected component variant applied
Files
Hyva UI Component
Applies Hyva UI template-based (non-CMS) components to a Hyvä theme by copying files from {hyva_ui_path}/components/ to app/design/frontend/{Vendor}/{Theme}/.
Path variable: {hyva_ui_path} = vendor/hyva-themes/hyva-ui (default) or user-provided custom path.
Command execution: For any commands that need to run inside the development environment (e.g., bin/magento commands), use the hyva-exec-shell-cmd skill to detect the environment and determine the appropriate command wrapper.
Step 0: Verify Hyva UI Installation
ls vendor/hyva-themes/hyva-ui/components/ 2>/dev/nullIf NOT found, offer options: (A) User provides custom extraction path, (B) composer require --dev hyva-themes/hyva-ui, (C) Download from https://hyva.io/my-account/my-downloads/
After install, refresh catalog: <skill_path>/scripts/refresh_catalog.sh {hyva_ui_path} <skill_path>/references/components.md
Where <skill_path> is the directory containing this SKILL.md file.
Step 1: Identify Theme Path
Use the hyva-theme-list skill to find existing Hyvä themes. Filter the results to only include themes in app/design/frontend/ (exclude vendor themes).
Prompt the user to select:
- Existing Hyvä themes: List themes returned by the script as options (e.g.,
Example/winterWonderTheme) - Create new theme: Always include an option to create a new child theme
If user selects "Create new theme": 1. Use the hyva-child-theme skill to create the new theme first 2. Continue with the newly created theme path after the skill completes
If user selects an existing theme: Continue with the selected theme path: app/design/frontend/{Vendor}/{Theme}
Step 2: List or Select Component
If no component specified or user asks to list components, show only the "Non-CMS Components (Template-Based)" section from references/components.md.
Do NOT list or mention:
- CMS components (accordion, card, categories, error-page, generic-content, order-confirmation, shortcuts, testimonial, usp, product-data/C-highlights)
- Plugins (alpine-collapse, splidejs, sticky-header, tailwind-v3-design-tokens, tailwind-v4)
These are internal dependencies or require the CMS Tailwind JIT compiler and are not applicable for direct installation via this skill.
Step 3: Show Variants
Variants: A=Basic, B=Enhanced, C=Advanced, D=Specialized. List with: ls {hyva_ui_path}/components/{component}/
Step 4: Read Component README
Always read {hyva_ui_path}/components/{component}/{variant}/README.md before copying. Present to user: dependencies, configuration options, special requirements.
Step 5: Copy Component Files
Before copying, check which destination files already exist to track created vs updated:
# List source files
find {hyva_ui_path}/components/{component}/{variant}/src -type f
# For each source file, check if destination exists
# e.g., for src/Magento_Catalog/templates/product/view/gallery.phtml
# check: {theme_path}/Magento_Catalog/templates/product/view/gallery.phtmlTrack each file as either:
- created: Destination file did not exist before copy
- updated: Destination file already existed (will be overwritten)
Then copy:
cp -r {hyva_ui_path}/components/{component}/{variant}/src/* {theme_path}/The src/ directory contains Magento module folders (Magento_Theme/, Magento_Catalog/, etc.) that map directly to theme structure. For existing layout XML files, merge content rather than overwriting.
Step 5.5: Add XML Configuration Options
Check if README contains XML configuration (look for <var name=", etc/view.xml).
If found: 1. Extract the first XML block containing <var name= elements with default values 2. Identify the module attribute (e.g., module="Magento_Catalog") 3. Add to {theme_path}/etc/view.xml:
- If file doesn't exist: Create with full
<view>structure - If
<vars module="...">exists: Add<var>elements inside it - If section missing: Add new
<vars module="...">before</view>
4. Notify: "Added configuration options to {theme_path}/etc/view.xml with default values."
Preserve existing view.xml content and keep XML comments from README.
Step 6: Handle Dependencies
Check README for dependencies and install them automatically (do not ask the user to select plugins):
- Plugin dependencies: Copy required files from
{hyva_ui_path}/plugins/{plugin}/src/(e.g., splidejs for gallery/D-splide) - Component dependencies: Apply dependent components first
- External packages: e.g.,
composer require hyva-themes/magento2-hyva-payment-icons
Step 7: Ask to recompile styles
- Rebuild Tailwind: Always ask: "Do you need to recompile Tailwind CSS styles?" Never automatically build — an external tool may already be handling this. If the user wants to compile, use the
hyva-compile-tailwind-cssskill with the target theme.
Step 8: Output Summary
After applying all changes, output a summary of modifications:
8.1: List Modified Files
Display all files that were created or modified during this component installation. Use the tracking from Step 5 to label each file correctly:
- (created): File did not exist before and was newly created
- (updated): File already existed and was overwritten
Modified files:
- {theme_path}/Magento_Catalog/templates/product/view/gallery.phtml (updated)
- {theme_path}/Magento_Theme/templates/html/header.phtml (created)
- {theme_path}/etc/view.xml (updated)8.2: XML Configuration Table
If XML configuration was added to {theme_path}/etc/view.xml, parse the XML block from the README and display a table of options:
# Extract the XML config block from README and parse it
php <skill_path>/scripts/parse_readme_xml.php --format=table < xml_block.txtThe table shows each option with columns:
- Option: The full option path without a common prefix (e.g.,
magnifier.enable) - Value: The default value configured
- Description: Explanatory text from the XML comment
Example output (common prefix like gallery. is automatically stripped):
Option | Value | Description
---------------------+------------+---------------------------------------------------
nav | thumbs | Gallery navigation style (false/thumbs/counter)
magnifier.enable | false | Turn on/off magnifier (true/false)For markdown output (e.g., when creating documentation), use --format=md.
Step 9: Final steps
1. Review copied templates for store-specific customization
Quick Reference
{hyva_ui_path}/components/{component}/{variant}/
├── README.md # Instructions
├── media/ # Preview images
└── src/ # Files to copy to themeSee references/components.md for the full component catalog (only show non-CMS section to users).
<!-- Copyright © Hyvä Themes https://hyva.io. All rights reserved. Licensed under OSL 3.0 -->
Hyva UI Components Catalog
This catalog is auto-generated by scanning the installed vendor/hyva-themes/hyva-ui package. To refresh after updating hyva-ui, run: scripts/refresh_catalog.sh
Non-CMS Components (Template-Based)
These components require copying template files to the theme directory.
ajax-atc
- A-simple: Streamline your shopping experience with our Ajax Add To Cart UI Component.
banner
- A-default: The Banner component provides a simple and effective way to display prominent messages to your users.
- B-split: The Banner component provides a simple and effective way to display prominent messages to your users.
- C-text: The Banner component provides a simple and effective way to display prominent messages to your users.
breadcrumbs
- A-simple: Transform the Hyvä Breadcrumbs into something new with this UI Component, that adds a new look and feel.
buttons
- A-basic: This component replaces the standard button styles with a new look and feel.
category-filter
- A-standard: This component replaces the Category Layered Navigation (filter) and Swatches for a more stylized version, including a Price Slider without the need for an extension.
- B-elasticsuite: This component replaces the Hyvä Smile Elasticsuite Layered Navigation (filter) for a more stylized version.
cookie-notice
- A-full-width: Transform the Hyvä Cookie Notice into something new with this UI Component, that adds a new look and feel.
- B-overlay: Transform the Hyvä Cookie Notice into something new with this UI Component, that adds a new look and feel.
- C-simple-elegant: Transform the Hyvä Cookie Notice into something new with this UI Component, that adds a new look and feel.
footer
- A-clean: Transform the Hyvä Footer into something new with this UI Component, that adds a new look and feel.
- B-4-column-newsletter: Transform the Hyvä Footer into something new with this UI Component, that adds a new look and feel.
- C-mega: Transform the Hyvä Footer into something new with this UI Component, that adds a new look and feel.
gallery
- A-basic: Transform the Hyvä Product Gallery into something new with this UI Component,
- B-fancy: Transform the Hyvä Product Gallery into something new with this UI Component,
- C-grid: Transform the Hyvä Product Gallery into something new with this UI Component,
- D-splide: Transform the Hyvä Product Gallery into something new with this UI Component,
header
- A-clean: Transform the Hyvä Header into something new with this UI Component, that adds a new look and feel.
- B-compact: Transform the Hyvä Header into something new with this UI Component, that adds a new look and feel.
- C-stacked: Transform the Hyvä Header into something new with this UI Component, that adds a new look and feel.
loaders
- A-spinner: Transform the Hyvä loader into something new with this UI Component, that adds a new look and feel.
- B-ping: Transform the Hyvä loader into something new with this UI Component, that adds a new look and feel.
- C-dancers: Transform the Hyvä loader into something new with this UI Component, that adds a new look and feel.
menu
- A-simple-static-links: This UI component renders menu links using a static array.
- B-4-column-megamenu: The Desktop Mega Menu B allows you to create a menu layout with top-level dropdown menus, multi-level column menus, and static content block integration.
- C-vertical-dropdown-4-column: The Desktop Mega Menu C allows you to create a menu layout with top-level dropdown menus, multi-level drilldown menus, and static content block integration.
- D-shop-drowdown: This is a desktop Mega Menu with a Shop Menu Button and multi layered drilldown menu's inside a menu panel.
menu-mobile
- A-scroll: This UI component provides a reimagined implementation of the Hyvä Mobile Menu,
- B-tabs: This component reimagines the Hyvä Mobile Menu with a visual style inspired by the traditional Magento 2 Luma Menu Tabs.
minicart
- A-classic: Transform the Hyvä Mini Cart into something new with this UI Component, that adds a new look and feel and offers qty styles for changing the qty directly from the minicart.
- B-popover: Transform the Hyvä Mini Cart into something new with this UI Component, that adds a new look and feel and offers qty styles for changing the qty directly from the minicart.
modal
- A-simple: This UI Component provides practical examples of implementing modals in Hyvä themes,
notification
- A-simple: Transform the Hyvä Message into something new with this UI Component, that adds a new look and feel.
- B-full-width: Transform the Hyvä Message into something new with this UI Component, that adds a new look and feel.
pagination
- A-clean: Transform the Hyvä Pagination into something new with this UI Component, that adds a new look and feel.
popup
- A-newsletter-image: This example uses a newsletter template file, added in the footer by xml, to render a popup with the subscription form.
- B-newsletter-title: This example uses a newsletter template file, added in the footer by xml, to render a popup with the subscription form.
product-card
- A-card-with-swatches: Transform the Hyvä product list items into something new with this UI Component, that adds a new look and feel.
product-data
- A-specs: Transform the Hyvä product section specs into something new with this UI Component, that adds a new look and feel.
- B-accorditabs: Transform the Hyvä product section into something new with this UI Component, that adds a new look and feel.
product-reviews
- A-basic: Transform the Hyvä Reviews into something new with this UI Component, that adds a new look and feel.
- B-minimal: Transform the Hyvä Reviews into something new with this UI Component, that adds a new look and feel.
scroll-to-top
- A-simple: The Scroll To Top offers a user-friendly solution for navigating to the top of your web page.
- B-action: The Scroll To Top offers a user-friendly solution for navigating to the top of your web page.
search-form
- A-header: This component replaces the standard search form in Hyvä Header and it's UI versions with a new look and feel.
slider
- A-basic: Our implementation of a classic Carousel Slider, powered by our new Snap Slider for a super light CSS powered CSS slider.
- B-marquee: Add a new Hyvä element into your theme to show your brands on your pages.
- C-product: Our implementation of a Product Slider, powered by our new Snap Slider for a super light CSS powered CSS slider.
sticky-atc
- A-simple: Streamline your shopping experience with a user-friendly sticky Add To Cart component.
swatches
- A-swatches-rounded: This component replaces the standard product option swatches in Layered Navigation, Product Listings and Product Detail Page with a new look and feel.
---
CMS Components (Excluded from this skill)
These components have cms-content.phtml and are designed to be pasted into Magento CMS. They require the Hyvä CMS Tailwind JIT module and are NOT handled by this skill.
accordion
- A-basic: Build accessible accordions using HTML and Tailwind CSS. This solution utilizes native browser support in modern browsers and falls back to a standard collapse in older browsers.
card
- A-default: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
- B-media: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
categories
- A-grid-images: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
- B-grid-patterns: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
error-page
- A-simple: Enhance your 404 pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
- B-split: Enhance your 404 pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
generic-content
- A-text: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
- B-visual: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
order-confirmation
- A-clear: Enhance your Hyvä Order Success Page with a new UI Component.
product-data
- C-highlights: Enhance your Product pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
shortcuts
- A-simple: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
testimonial
- A-simple: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
- B-card: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
usp
- A-icons: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
- B-cards: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
- C-compact: Enhance your pages with our UI component, designed to simplify the creation of stunning and responsive layouts.
---
Plugins
Utility plugins that provide additional functionality for certain components.
alpine-collapse
Port of the AlpineJS Plugin Collapse, please refer to the [AlpineJS Collapse] docs for more information.
splidejs
Build your Sliders powered by SplideJS.
sticky-header
Enhance your Hyvä storefront with a sticky header that remains fixed at the top of the page, even when scrolling.
tailwind-v3-design-tokens
This plugin demonstrates how to integrate Design Tokens into a Hyvä theme.
tailwind-v4
⚠️ Experimental: This plugin provides an experimental option for using Tailwind CSS v4 with Hyvä.
---
_Generated on: 2026-01-08 20:24:03_ _Hyva UI path:
#!/usr/bin/env php
<?php
/**
* Parse XML configuration block from a Hyva UI component README.
* Extracts <var> elements with their values and inline comments.
*
* Usage: php parse_readme_xml.php [--format=table|md|json]
* Reads XML from stdin
*
* Example:
* cat readme_xml_block.xml | php parse_readme_xml.php
* php parse_readme_xml.php --format=md < readme_xml_block.xml
*/
$format = 'table';
// Parse arguments
for ($i = 1; $i < $argc; $i++) {
if (strpos($argv[$i], '--format=') === 0) {
$format = substr($argv[$i], 9);
}
}
// Read XML from stdin
$xmlContent = file_get_contents('php://stdin');
if (empty(trim($xmlContent))) {
fwrite(STDERR, "Error: No XML content provided on stdin\n");
exit(1);
}
/**
* Parse var elements line by line, tracking nesting via a path stack.
* This approach preserves inline comment associations.
*
* @param string $xmlContent Raw XML content
* @return array Array of options with name, value, comment
*/
function parseVarBlock(string $xmlContent): array
{
$options = [];
$pathStack = [];
// Split into lines for easier processing
$lines = explode("\n", $xmlContent);
foreach ($lines as $line) {
// Match opening <var name="..."> that starts a nested block (no closing tag on same line)
if (preg_match('/<var\s+name="([^"]+)"[^>]*>\s*$/', $line, $match)) {
// This is a container var - push to stack
$pathStack[] = $match[1];
continue;
}
// Match closing </var> alone on a line (ends a nested block)
if (preg_match('/^\s*<\/var>/', $line) && !preg_match('/<var\s+name=/', $line)) {
// Pop from stack
array_pop($pathStack);
continue;
}
// Match complete <var name="...">value</var> with optional trailing comment
if (preg_match('/<var\s+name="([^"]+)"[^>]*>([^<]*)<\/var>\s*(?:<!--\s*(.*?)\s*-->)?/', $line, $match)) {
$name = $match[1];
$value = trim($match[2]);
$comment = isset($match[3]) ? trim($match[3]) : '';
// Build full path
$fullPath = $pathStack;
$fullPath[] = $name;
$fullName = implode('.', $fullPath);
$options[] = [
'name' => $fullName,
'value' => $value,
'comment' => $comment,
];
}
}
return $options;
}
/**
* Format the parsed data as a text table.
*/
function formatAsTable(array $options): string
{
if (empty($options)) {
return "No configuration options found.\n";
}
// Calculate column widths
$nameWidth = max(array_map(fn($o) => strlen($o['name']), $options));
$nameWidth = max($nameWidth, 6);
$valueWidth = max(array_map(fn($o) => strlen($o['value']), $options));
$valueWidth = max($valueWidth, 5);
$valueWidth = min($valueWidth, 15);
$output = "";
// Header
$output .= sprintf(
"%-{$nameWidth}s | %-{$valueWidth}s | %s\n",
"Option",
"Value",
"Description"
);
$output .= str_repeat("-", $nameWidth) . "-+-"
. str_repeat("-", $valueWidth) . "-+-"
. str_repeat("-", 50) . "\n";
// Rows
foreach ($options as $option) {
$value = strlen($option['value']) > $valueWidth
? substr($option['value'], 0, $valueWidth - 3) . '...'
: $option['value'];
$output .= sprintf(
"%-{$nameWidth}s | %-{$valueWidth}s | %s\n",
$option['name'],
$value,
$option['comment']
);
}
return $output;
}
/**
* Format the parsed data as a Markdown table.
*/
function formatAsMarkdown(array $options): string
{
if (empty($options)) {
return "No configuration options found.\n";
}
$output = "| Option | Value | Description |\n";
$output .= "|--------|-------|-------------|\n";
foreach ($options as $option) {
$value = str_replace('|', '\\|', $option['value']);
$comment = str_replace('|', '\\|', $option['comment']);
$output .= sprintf(
"| `%s` | `%s` | %s |\n",
$option['name'],
$value,
$comment
);
}
return $output;
}
/**
* Strip common prefix from all option names if they all share one.
*/
function stripCommonPrefix(array $options): array
{
if (count($options) < 2) {
return $options;
}
// Get all names
$names = array_column($options, 'name');
// Find the common prefix by checking the first segment
$firstParts = array_map(fn($n) => explode('.', $n)[0], $names);
$commonPrefix = $firstParts[0];
// Check if all names start with the same first segment
foreach ($firstParts as $part) {
if ($part !== $commonPrefix) {
return $options; // No common prefix
}
}
// Strip the common prefix from all names
$prefixLen = strlen($commonPrefix) + 1; // +1 for the dot
foreach ($options as &$option) {
if (strlen($option['name']) > $prefixLen) {
$option['name'] = substr($option['name'], $prefixLen);
}
}
return $options;
}
// Parse and output
$parsed = parseVarBlock($xmlContent);
$parsed = stripCommonPrefix($parsed);
switch ($format) {
case 'json':
echo json_encode($parsed, JSON_PRETTY_PRINT) . "\n";
break;
case 'md':
case 'markdown':
echo formatAsMarkdown($parsed);
break;
case 'table':
default:
echo formatAsTable($parsed);
break;
}#!/bin/bash
#
# Refresh the Hyva UI component catalog by scanning the installed hyva-ui package
#
# Usage: refresh_catalog.sh [hyva_ui_path] [output_file]
# hyva_ui_path: Path to hyva-ui directory (default: vendor/hyva-themes/hyva-ui)
# output_file: Output markdown file (default: prints to stdout)
#
# Example:
# ./refresh_catalog.sh
# ./refresh_catalog.sh vendor/hyva-themes/hyva-ui components.md
#
HYVA_UI_PATH="${1:-vendor/hyva-themes/hyva-ui}"
OUTPUT_FILE="$2"
if [ ! -d "$HYVA_UI_PATH/components" ]; then
echo "Error: Hyva UI components directory not found at $HYVA_UI_PATH/components" >&2
exit 1
fi
# Function to check if a component variant is CMS-based
is_cms_component() {
local variant_path="$1"
[ -f "$variant_path/src/cms-content.phtml" ]
}
# Function to extract first paragraph from README as description
get_description() {
local readme="$1"
if [ -f "$readme" ]; then
# Get first non-badge, non-header paragraph
sed -n '/^[^#\[!\[]/{p;q;}' "$readme" | head -1
fi
}
# Generate the catalog
generate_catalog() {
cat << 'HEADER'
# Hyva UI Components Catalog
This catalog is auto-generated by scanning the installed `vendor/hyva-themes/hyva-ui` package.
To refresh after updating hyva-ui, run: `scripts/refresh_catalog.sh`
HEADER
echo "## Non-CMS Components (Template-Based)"
echo ""
echo "These components require copying template files to the theme directory."
echo ""
local non_cms_components=""
local cms_components=""
# Scan all component directories
for component_dir in "$HYVA_UI_PATH/components"/*; do
[ -d "$component_dir" ] || continue
local component_name=$(basename "$component_dir")
local has_non_cms=false
local has_cms=false
local variants=""
local cms_variants=""
# Scan variants
for variant_dir in "$component_dir"/*; do
[ -d "$variant_dir" ] || continue
local variant_name=$(basename "$variant_dir")
# Skip non-variant directories
[ -d "$variant_dir/src" ] || continue
local desc=$(get_description "$variant_dir/README.md")
if is_cms_component "$variant_dir"; then
has_cms=true
cms_variants="$cms_variants\n- **$variant_name**: $desc"
else
has_non_cms=true
variants="$variants\n- **$variant_name**: $desc"
fi
done
# Add to appropriate section
if [ "$has_non_cms" = true ]; then
non_cms_components="$non_cms_components
### $component_name
$(echo -e "$variants")
"
fi
if [ "$has_cms" = true ]; then
cms_components="$cms_components
### $component_name
$(echo -e "$cms_variants")
"
fi
done
echo "$non_cms_components"
echo ""
echo "---"
echo ""
echo "## CMS Components (Excluded from this skill)"
echo ""
echo "These components have \`cms-content.phtml\` and are designed to be pasted into Magento CMS."
echo "They require the Hyvä CMS Tailwind JIT module and are NOT handled by this skill."
echo ""
echo "$cms_components"
echo ""
echo "---"
echo ""
echo "## Plugins"
echo ""
echo "Utility plugins that provide additional functionality for certain components."
echo ""
for plugin_dir in "$HYVA_UI_PATH/plugins"/*; do
[ -d "$plugin_dir" ] || continue
local plugin_name=$(basename "$plugin_dir")
local desc=$(get_description "$plugin_dir/README.md")
echo "### $plugin_name"
echo "$desc"
echo ""
done
echo "---"
echo ""
echo "_Generated on: $(date '+%Y-%m-%d %H:%M:%S')_"
echo "_Hyva UI path: $HYVA_UI_PATH_"
}
# Output to file or stdout
if [ -n "$OUTPUT_FILE" ]; then
generate_catalog > "$OUTPUT_FILE"
echo "Catalog written to: $OUTPUT_FILE"
else
generate_catalog
fi
Related skills
FAQ
Where does hyva-ui-component copy files?
hyva-ui-component copies component files from {hyva_ui_path}/components/ into the Magento theme path app/design/frontend/{Vendor}/{Theme}/ for non-CMS Hyva UI blocks.
Which skills does hyva-ui-component require?
hyva-ui-component requires hyva-exec-shell-cmd, hyva-theme-list, hyva-child-theme, and hyva-compile-tailwind-css companion skills to list themes, run shell commands, and compile Tailwind CSS.