npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@deneb-ui/ui

v2.0.94

Published

Visual-first React component library for editable commerce storefronts. Built for Next.js and Fivora.

Readme


Getting Started

Installation

npm install @deneb-ui/ui
# or
pnpm add @deneb-ui/ui
# or
yarn add @deneb-ui/ui

Quick Start Example

import { 
  SiteDataProvider, 
  Navbar, 
  Hero, 
  GoogleFeedback, 
  TestimonialSection, 
  Map, 
  Footer 
} from "@deneb-ui/ui";
import siteData from "@/data/site-data.json";

export default function Page() {
  return (
    <SiteDataProvider initialSiteData={siteData}>
      <Navbar />
      <Hero />
      <GoogleFeedback basePath="feedback" />
      <TestimonialSection basePath="testimonials" />
      <div className="w-full h-96 rounded-2xl overflow-hidden shadow-lg">
        <Map mapUrl={siteData.content.contact?.mapUrl} />
      </div>
      <Footer />
    </SiteDataProvider>
  );
}

SiteDataProvider automatically injects ResponsiveBaseStyles — every component adapts seamlessly across phone, tablet, and desktop without extra configuration.


Canonical Component Catalog & Aliases

@deneb-ui/ui provides both canonical shorthand aliases (shadcn / HeroUI style) and full Editable* identifiers across all commerce categories:

1. Foundational & Layout Primitives

| Canonical Alias | Full Component Identifier | Visual Editing Support | Description | | :--- | :--- | :--- | :--- | | Button | EditableButton | data-preview-field-path, style-target | Visual action button with ripple feedback & glow variants | | Card | EditableCard | data-preview-item-path, style-target | Obsidian glass container with luminous border hover effects | | Badge | EditableBadge | data-preview-field-path | Status tags, indicator pills, and glowing metadata markers | | Heading | EditableHeading | data-preview-field-path, style-target | Semantic typography heading with instant DOM sync | | Paragraph | EditableParagraph | data-preview-field-path, style-target | Body text copy linked to Fivora theme tokens | | Text | EditableText | data-preview-field-path, style-target | Inline editable text primitive with live typing sync | | Quote | EditableQuote | data-preview-field-path | Editorial quotation block with left accent line | | Dialog | EditableDialog | data-preview-static | Accessible modal dialog with backdrop blur & ESC dismiss | | Grid | EditableGrid | data-preview-list-path, style-target | Auto-fit responsive grid with minCardWidth support | | Box | EditableBox | data-preview-field-path, data-preview-item-path | Flexible layout container with style token bindings | | Section | EditableSection | data-preview-style-target | Full-width page section wrapper with spacing presets | | List | EditableList | data-preview-list-path, data-preview-item-path | Dynamic collection container with list item paths | | Image | EditableImage | data-preview-field-path | Responsive image with aspect ratio preservation & zoom |

2. Commerce & Storefront Components

| Canonical Alias | Full Component Identifier | Visual Editing Support | Description | | :--- | :--- | :--- | :--- | | ProductCard | EditableProductCard | data-preview-field-path, data-preview-item-path | Product card with LKR/currency formatting, badge, & WhatsApp CTA | | ProductGrid | EditableProductGrid | data-preview-list-path, data-preview-item-path | Catalog grid with quick-view modal hook & filter integration | | ProductShowcase | EditableProductShowcase | data-preview-field-path, data-preview-list-path, color swatch | Flagship product showcase with color swatches, filter tabs, quick-view & WhatsApp order | | ProductDetail | EditableProductDetail | data-preview-page-key, data-preview-field-path | Full single-product view with gallery, specs, & inquiry actions | | PlatformProductDetail | PlatformProductDetail | useProducts, live catalog API | Stable static-export product page with URL lookup, retries, and fallback states | | ProductQuickView | ProductQuickView | data-preview-field-path | Instant lightbox modal product inspection with quantity counter | | CartDrawer | EditableCartDrawer | data-preview-list-path, data-preview-item-path | Slide-over cart drawer with 1-click unified WhatsApp order compilation | | FilterSidebar | EditableFilterSidebar | data-preview-field-path, useSiteData | Faceted catalog filter sidebar (categories, price range, sizes) | | CategoryPills | EditableCategoryPills | data-preview-field-path, useSiteData | Scrollable horizontal filter pills for instant catalog filtering |

3. Hero & Marketing Sections

| Canonical Alias | Full Component Identifier | Visual Editing Support | Description | | :--- | :--- | :--- | :--- | | Hero | EditableHeroCentered | data-preview-field-path, useSiteData | High-converting centered storefront hero banner with dual CTAs | | HeroSplit | EditableHeroSplit | data-preview-field-path, useSiteData | Split-layout storefront hero banner with featured image | | AnnouncementBar | EditableAnnouncementBar | data-preview-field-path, data-preview-static | Top promo strip for flash sales, coupons, & free shipping | | StickyMobileBar | StickyMobileBar | data-preview-field-path, useSiteData | Sticky bottom navigation bar for high-converting mobile commerce | | TrustBadges | TrustBadges | data-preview-field-path | Security and conversion guarantee strip (SSL, delivery, returns) | | CookieConsentBanner | CookieConsentBanner | data-preview-field-path | Regulatory cookie consent banner with live policy link |

4. Social Proof & Customer Reviews

| Canonical Alias | Full Component Identifier | Visual Editing Support | Description | | :--- | :--- | :--- | :--- | | GoogleFeedback | EditableGoogleFeedback | data-preview-field-path, data-preview-list-path, Dual-Layer Star Repaint | Official Google review badge, aggregate rating, & review cards | | TestimonialSection | EditableTestimonialSection | data-preview-field-path, data-preview-list-path, Star Sync | Editorial critic testimonials with typography & star ratings | | Testimonials | EditableTestimonialSection | data-preview-field-path, data-preview-list-path | Alias for EditableTestimonialSection | | TestimonialCard | EditableTestimonialCard | data-preview-item-path, data-preview-static | Single customer testimonial card with avatar & 5-star rating | | CustomerReviews | EditableCustomerReviews | data-preview-page-key, data-preview-field-path | Customer review summary & rating breakdown |

5. Services, Pricing & Navigation

| Canonical Alias | Full Component Identifier | Visual Editing Support | Description | | :--- | :--- | :--- | :--- | | ServiceCard | EditableServiceCard | data-preview-field-path, data-preview-item-path | Storefront service card with icon, price tag, & action button | | PricingCard | EditablePricingCard | data-preview-field-path, data-preview-item-path | Tiered pricing card with feature list & popular tier highlight | | Accordion / FAQ | EditableFAQAccordion | data-preview-item-path, data-preview-list-path | Collapsible FAQ accordion with Fivora list markers | | ContactForm | EditableContactForm | data-preview-field-path, useSiteData | Lead generation & inquiry form with custom endpoint support | | Navbar / Header | EditableNavbar | data-preview-field-path, data-preview-static | Storefront navigation header with mobile drawer & cart badge | | Footer | EditableFooter | data-preview-field-path, data-preview-static | Multi-column storefront footer with social & policy links |

6. Smart Actions, Location & Business

| Component | Module Path | Visual Editing Support | Description | | :--- | :--- | :--- | :--- | | Map | EditableMap | data-preview-field-path | Universal Google Maps embed with automatic URL/coordinate parsing | | MapEmbed | location/MapEmbed | data-preview-field-path | Responsive Google Maps iframe embed with fallback placeholder | | MapLink | location/MapLink | data-preview-field-path | Direct link to Google Maps directions | | LocationCard | location/LocationCard | data-preview-static | Storefront location card with map directions button | | LocationLink | location/LocationLink | data-preview-field-path | Interactive map address trigger with directions | | Address | location/Address | data-preview-field-path | Structured semantic address component | | ContactActions | contact/ContactActions | data-preview-field-path | Multi-channel contact bar (Phone, WhatsApp, Email) | | ContactButton | contact/ContactButton | data-preview-field-path | Configurable contact button with phone/email/WhatsApp presets | | WhatsAppButton | contact/WhatsAppButton | data-preview-field-path | One-click WhatsApp chat launcher with dynamic link resolution | | PhoneButton | contact/PhoneButton | data-preview-field-path | Direct call action with tel: protocol and visual editing bindings | | EmailButton | contact/EmailButton | data-preview-field-path | Pre-formatted mailto action with subject line support | | FloatingContactWidget| contact/FloatingContactWidget | data-preview-field-path | Sticky bottom-corner conversion widget | | BusinessHours | business/BusinessHours | data-preview-field-path | Weekly schedule renderer with dynamic live Open/Closed badge | | HeritageCollage | business/HeritageCollage | data-preview-field-path, data-preview-item-path | Visual brand story collage with historical milestone cards | | SocialLinks | social/SocialLinks | data-preview-field-path | Filtered social channel container with brand icons | | SocialButton | social/SocialButton | data-preview-field-path | Individual branded social media button |

7. Runtime State & Theming Primitives

| Component / Hook | Module Path | Purpose | | :--- | :--- | :--- | | SiteDataProvider / DenebDataProvider | SiteDataProvider | Real-time backend catalog fetcher & postMessage preview state synchronizer | | useProducts | SiteDataProvider | React hook to access live synchronized products list (content.products) | | usePlatformProductDetail | PlatformProductDetail | Resolves ?id= against live data and the catalog API for a custom detail design | | useServices | SiteDataProvider | React hook to access live synchronized services list (content.services) | | useSiteCatalog | SiteDataProvider | Returns { products, services, project, siteInstance, api } in one call | | useSiteApi | SiteDataProvider | Returns official Fivora backend endpoints (catalogUrl, contactUrl, analyticsUrl) | | useSiteData / useDenebData | SiteDataProvider | React hook to access full live synchronized siteData | | ThemeStyles | ThemeStyles | Dynamic CSS variable injector for colors, fonts, and radii | | ResponsiveBaseStyles| ResponsiveBaseStyles | Universal fluid typography & responsive baseline styles | | DenebComponentStyles| DenebComponentStyles | Scoped component style definitions | | FontLoader | fonts/FontLoader | Google Fonts pre-fetch & dynamic injection engine | | useDenebFonts | fonts/useDenebFonts | Hook for checking active font definitions | | CartProvider / useCart| cart/useCart | Global cart state management with persistent storage |

Safe product detail routes for static exports

Never link live products to /products/${product.id}. A product created after the template build has no matching static directory, so that URL can return a 404. Export one stable page and pass the product ID in the query string.

// src/app/products/detail/page.tsx
import { PlatformProductDetail } from '@deneb-ui/ui';

export default function ProductDetailPage() {
  return <PlatformProductDetail />;
}

Build product links with the matching helper:

import { platformProductDetailHref } from '@deneb-ui/ui';

<a href={platformProductDetailHref(product.id)}>View product</a>

For a template-specific design, keep the platform data behavior and replace only the renderer:

import { PlatformProductDetail } from '@deneb-ui/ui';

export default function ProductDetailPage() {
  return (
    <PlatformProductDetail
      renderProduct={(product, { productIndex }) => (
        <MyProductDetail product={product} index={productIndex} />
      )}
    />
  );
}

PlatformProductDetail reads /products/detail/?id=PRODUCT_ID, checks the reactive SiteDataProvider catalog, retries api.catalogUrl, and renders safe loading, network-error, and not-found states. usePlatformProductDetail() is also exported for developers who need complete control of the page markup.

If the template already has a native /products/[id] design, the stable page must reuse that renderer through renderProduct (or render the same component from usePlatformProductDetail). The validator rejects a generic stable page next to a different native detail layout because newly-created products would otherwise look different from products present at build time.


Data Fetching & Backend Integration Hooks

1. useProducts(fallback?: ProductItem[])

Retrieves the live products list from the site data. Automatically resolves top-level content.products, nested content.home.products, and live backend rehydration updates from api.catalogUrl.

import { useProducts, ProductGrid } from '@deneb-ui/ui';

export default function CatalogSection() {
  const products = useProducts();

  return (
    <ProductGrid
      title="Featured Collection"
      subtitle="Handpicked Styles"
      products={products}
      categories={['All', 'Accessories', 'Apparel']}
      cardVariant="modern-glass" // 'modern-glass' | 'classic' | 'minimal' | 'horizontal'
      columns={{ mobile: 1, tablet: 2, desktop: 3 }}
    />
  );
}

2. useSiteApi()

Returns the official backend API configuration object (SiteDataApiConfig) defined in site-data.json. Use this hook whenever you need to connect custom forms or direct API calls to the backend:

import { useSiteApi } from '@deneb-ui/ui';

export default function ApiDemo() {
  const api = useSiteApi();

  // api?.baseUrl      -> "https://api.fivora.site"
  // api?.catalogUrl   -> "https://api.fivora.site/site-catalog/:slug/live-data"
  // api?.contactUrl   -> "https://api.fivora.site/site-contact"
  // api?.analyticsUrl -> "https://api.fivora.site/site-analytics/page-view"
  
  return null;
}

3. useSiteCatalog()

Convenience hook that bundles catalog metadata and live status together:

import { useSiteCatalog } from '@deneb-ui/ui';

export default function CatalogOverview() {
  const { products, services, project, siteInstance, api } = useSiteCatalog();

  return (
    <div>
      <h3>{project?.title}</h3>
      <p>Active live products: {products.length}</p>
      <p>Active live services: {services.length}</p>
    </div>
  );
}

4. useServices(fallback?: ServiceItem[])

Retrieves the live services list from content.services or content.home.services:

import { useServices, ServiceCard } from '@deneb-ui/ui';

export default function ServicesList() {
  const services = useServices();

  return (
    <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
      {services.map((service, index) => (
        <ServiceCard
          key={service.id || index}
          itemPath={`services[${index}]`}
          service={service}
        />
      ))}
    </div>
  );
}

Component Guides & API Reference

1. GoogleFeedback (EditableGoogleFeedback)

The GoogleFeedback component renders an authentic Google Reviews card experience. It features the official Google multi-colored badge, aggregate rating pill, verified buyer checks, and a responsive grid of customer reviews.

Key Capabilities

  • Google Design Fidelity: Uses Google Material star vectors with authentic warm gold (#fa7014) and neutral grey (#dadce0).
  • Live 1–5 Star DOM Sync: Typing numbers 1 through 5 into the Fivora live inspector immediately recalculates and repaints the star fills in real time via an internal MutationObserver.
  • Zero-Latency Visual Editing: Built-in data-preview-field-path and data-preview-list-path attributes compliant with the Fivora Strict Visual Editing Contract.
  • Auto-Fallbacks: Provides elegant fallback review data if no feedbacks array is passed.

Props Reference

| Prop | Type | Default | Description | | :--- | :--- | :--- | :--- | | basePath | string | 'feedback' | Root key in site-data.json (content[basePath]) | | badgeIcon | string | Google G SVG | URL or SVG data URI for the review platform badge | | badgeTitle | string | 'Google' | Review platform label displayed next to badge icon | | badgeRating | string \| number | '4.9' | Aggregate rating number shown in the top header | | badgeReviewsCount | string \| number | '128 reviews' | Total review count label (e.g., '128 reviews') | | heading | string | 'Loved by Coffee Lovers...' | Section main heading | | subheading | string | 'Real stories and reviews...' | Section introductory paragraph | | feedbacks | FeedbackItem[] | DEFAULT_FEEDBACKS | Array of customer review items | | maxStars | number | 5 | Maximum number of rating stars to render per card | | className | string | '' | Custom CSS / Tailwind classes for section wrapper | | cardClassName | string | '' | Custom CSS / Tailwind classes for review cards |

FeedbackItem Schema

export interface FeedbackItem {
  id?: string | number;
  name?: string;              // Reviewer full name
  avatar?: string;            // Avatar image URL
  rating?: number | string;   // Star rating value (1 to 5)
  date?: string;              // Relative date (e.g. "2 days ago")
  comment?: string;           // Review body text
  verified?: boolean;         // Verified customer badge
}

Fivora Data Contract (site-data.json)

{
  "content": {
    "feedback": {
      "badgeIcon": "https://upload.wikimedia.org/wikipedia/commons/c/c1/Google_%22G%22_logo.svg",
      "badgeTitle": "Google",
      "badgeRating": "4.9",
      "badgeReviewsCount": "128 reviews",
      "heading": "Loved by Coffee Lovers Across the World",
      "subheading": "Real stories and reviews from our community of coffee purists and daily ritualists.",
      "feedbacks": [
        {
          "id": "1",
          "name": "Elena Vance",
          "avatar": "https://images.unsplash.com/photo-1534528741775-53994a69daeb",
          "rating": 5,
          "date": "3 days ago",
          "comment": "The Yirgacheffe pour-over is unmatched. Clean notes of jasmine and bergamot.",
          "verified": true
        }
      ]
    }
  }
}

Fivora editorSchema Section

{
  "id": "feedback",
  "path": "feedback",
  "type": "object",
  "label": "Google Customer Feedback",
  "pageKey": "home",
  "fields": [
    { "key": "badgeIcon", "type": "image", "label": "Badge Icon URL" },
    { "key": "badgeTitle", "type": "text", "label": "Badge Title" },
    { "key": "badgeRating", "type": "text", "label": "Aggregate Rating" },
    { "key": "badgeReviewsCount", "type": "text", "label": "Reviews Count" },
    { "key": "heading", "type": "text", "label": "Section Heading" },
    { "key": "subheading", "type": "textarea", "label": "Section Subheading" },
    {
      "key": "feedbacks",
      "type": "list",
      "label": "Customer Reviews",
      "itemLabel": "Review",
      "minItems": 1,
      "maxItems": 12,
      "fields": [
        { "key": "name", "type": "text", "label": "Reviewer Name", "required": true },
        { "key": "avatar", "type": "image", "label": "Profile Picture" },
        { "key": "rating", "type": "number", "label": "Star Rating (1-5)" },
        { "key": "date", "type": "text", "label": "Review Date" },
        { "key": "comment", "type": "textarea", "label": "Review Comment", "required": true }
      ]
    }
  ]
}

Usage Example

import { GoogleFeedback, useSiteData } from "@deneb-ui/ui";

export function FeedbackSection() {
  const { siteData } = useSiteData();
  const feedbackData = siteData?.content?.feedback || {};

  return (
    <section className="py-20 bg-amber-50/40">
      <GoogleFeedback
        basePath="feedback"
        badgeIcon={feedbackData.badgeIcon}
        badgeTitle={feedbackData.badgeTitle}
        badgeRating={feedbackData.badgeRating}
        badgeReviewsCount={feedbackData.badgeReviewsCount}
        heading={feedbackData.heading}
        subheading={feedbackData.subheading}
        feedbacks={feedbackData.feedbacks}
      />
    </section>
  );
}

2. TestimonialSection (EditableTestimonialSection)

The TestimonialSection component provides an editorial, magazine-grade layout for connoisseur quotes, culinary critics, and press reviews.

Key Capabilities

  • Editorial Typography: Large quotation marks, serif italic styling, and prominent author metadata.
  • Accreditation Tags: Includes specialty tags (e.g. "Michelin Guide", "World Barista Judge").
  • Synchronized Star Ratings: Dynamic star rating with live inspector sync.
  • Clean Layout: Fluid responsive grid adapting from 1 column on mobile to 3 columns on desktop.

Props Reference

| Prop | Type | Default | Description | | :--- | :--- | :--- | :--- | | basePath | string | 'testimonials' | Root key in site-data.json (content[basePath]) | | badge | string | 'Critic Acclaim' | Small uppercase pill badge text | | heading | string | 'What Connoisseurs Say' | Main section title | | subheading | string | 'Unfiltered impressions...' | Subtitle description text | | testimonials | TestimonialSectionItem[] | DEFAULT_TESTIMONIALS | Array of testimonial items | | maxStars | number | 5 | Maximum number of stars per card | | className | string | '' | Section container CSS classes | | cardClassName | string | '' | Individual testimonial card CSS classes |

TestimonialSectionItem Schema

export interface TestimonialSectionItem {
  id?: string | number;
  quote?: string;             // Testimonial quote text
  author?: string;            // Author full name
  role?: string;              // Profession, publication, or title
  avatar?: string;            // Author portrait URL
  tag?: string;               // Category or accreditation badge
  rating?: number | string;   // Star rating (1 to 5)
}

Usage Example

import { TestimonialSection, useSiteData } from "@deneb-ui/ui";

export function EditorialReviews() {
  const { siteData } = useSiteData();
  const data = siteData?.content?.testimonials || {};

  return (
    <TestimonialSection
      basePath="testimonials"
      badge={data.badge}
      heading={data.heading}
      subheading={data.subheading}
      testimonials={data.testimonials}
    />
  );
}

3. Map (EditableMap)

The Map component is an intelligent universal Google Maps embedder. It converts any format of Google Maps URL or search query into a high-performance, responsive iframe embed.

Universal Link Parser Features

The underlying parseGoogleMapsEmbedUrl engine seamlessly processes:

  1. Full <iframe> Snippets: Extracts the src attribute automatically when developers or merchants paste standard Google Maps embed HTML.
  2. Standard Embed URLs: Passes through existing google.com/maps/embed?... URLs directly.
  3. Coordinate URLs: Parses @lat,lng patterns (e.g. google.com/maps/@6.9271,79.8612,15z).
  4. Place URLs: Extracts place names from /maps/place/Name paths.
  5. Search Query URLs: Parses ?q=... parameters.
  6. Short Links: Handles maps.app.goo.gl links with automatic fallback to merchant address.
  7. Raw Search Strings: Directly wraps street addresses or city names into valid Google Maps embed queries.

Props Reference

| Prop | Type | Default | Description | | :--- | :--- | :--- | :--- | | mapUrl | string | undefined | Google Maps URL, share link, coordinate link, or embed code | | address | string | 'Sri Lanka' | Fallback physical address when mapUrl is empty or unresolved | | defaultLocation | string | undefined | Additional location fallback | | data-preview-field-path | string | undefined | Fivora visual editing binding path | | className | string | 'w-full h-full border-0' | CSS classes for the iframe element | | title | string | 'Google Map Location' | Accessibility title for the iframe |

Usage Example

import { Map } from "@deneb-ui/ui";

export function ContactMapSection({ mapUrl, address }: { mapUrl?: string; address?: string }) {
  return (
    <div className="w-full h-96 sm:h-[480px] rounded-3xl overflow-hidden shadow-2xl border border-stone-200">
      <Map
        data-preview-field-path="contact.mapUrl"
        mapUrl={mapUrl}
        address={address}
        className="w-full h-full border-0"
      />
    </div>
  );
}

ARC Engine & Fivora Platform Architecture

@deneb-ui/ui is built from the ground up for the ARC Engine (@deneb-ui/cli) and the Fivora Visual Commerce Platform.

┌─────────────────────────────────────────────────────────────┐
│                    Fivora Admin Portal                      │
│                  (Inspector / Live Studio)                  │
└──────────────────────────────┬──────────────────────────────┘
                               │ Live PostMessage Protocol
                               ▼
┌─────────────────────────────────────────────────────────────┐
│                  Fivora Preview Focus Bridge                │
│    - Focus Target Identification (data-preview-field-path)  │
│    - Fast DOM Mutation & Star Fill Repainting               │
└──────────────────────────────┬──────────────────────────────┘
                               │ Instant DOM / Observer Sync
                               ▼
┌─────────────────────────────────────────────────────────────┐
│                       DENEB UI                              │
│    - GoogleFeedback (MutationObserver Dual-Layer Rating)    │
│    - TestimonialSection (Editorial Critic Cards)            │
│    - EditableMap (Universal URL Parsing Engine)             │
└─────────────────────────────────────────────────────────────┘

Dual-Layer Live Rating Architecture

When editing ratings in visual site builders, updating an element's text content usually destroys child SVG icons. DENEB UI solves this through a dual-layer architecture:

  1. Inspector Target: A dedicated <span data-preview-field-path="..."> renders the numeric string (e.g. "5").
  2. Visual Star Array: A sibling <div data-fivora-stars-row="true"> contains the 5 vector SVG stars with fill colors #fa7014 (gold) and #dadce0 (grey).
  3. MutationObserver: An internal observer listens for inspector text mutations on the numeric span and immediately updates the SVG star fills without remounting or re-rendering errors.
  4. Focus Bridge Support: The CLI preview bridge recognizes star rating containers and synchronizes fills directly during live keystrokes.

ARC Engine Automated Scaffolding

When running the ARC Engine:

npx @deneb-ui/cli arc init

The engine automatically:

  • Identifies GoogleFeedback, TestimonialSection, and Map components.
  • Creates semantic field paths (feedback.feedbacks, testimonials.testimonials, contact.mapUrl).
  • Generates typed editorSchema sections with proper numeric, image, and textarea descriptors.
  • Adds non-editable internal IDs to visualEditing.controlOnlyPaths to guarantee 100% contract compliance with Fivora platform ingestion.

Related Packages

| Package | Purpose | | :--- | :--- | | @deneb-ui/ui | Visual-First React component framework | | @deneb-ui/cli | ARC Engine compiler, AST transformer & template lab | | @deneb-ui/core | Shared design tokens, typography registry & contracts | | @deneb-ui/create-template | Instant storefront generator |


Authors

Created and maintained by Chamika Gayashan and Induranga Kawishwara.

Part of the DENEB UI ecosystem · In collaboration with Fivora.