page FinalCTAcomponent { seo { title = "FinalCTA component" description = "Reusable final c t a component." } view {
W WRNexusJS
actions component

FinalCTA

Reusable final c t a component.

@wrnexus/ui 0.2.796 props1 slots0 events

Usage

Components are auto-discovered. Use the component directly in any .wrn view:

<FinalCTA
  label="Action"
  href="href"
  type="button"
  variant="primary"
  disabled="false"
/>

Legacy mount name: data-component="FinalCTA".

Props and attributes

PropTypeRequirementDefault
labelstringOptional"Action"
hrefstringOptional""
typestringOptional"button"
variantstringOptional"primary"
disabledbooleanOptionalfalse
classstringOptional""

Slots

  • default

Events

This component does not declare a custom event.

Source contract

Installed source: components/FinalCTA.wrn

component FinalCTA {
  props {
    label = "Get started"
    href = ""
    type = "button"
    variant = "primary"
    disabled = false
    class = ""
  }

  view {
        <span class="contents {class}">
      {#if href}
      {#if variant === "primary"}
      <a
        href="{href}"
        class="group inline-flex min-h-11 items-center justify-center gap-2 rounded-xl bg-[var(--wire-color-primary,#059669)] px-5 py-2.5 text-sm font-semibold text-[var(--wire-color-primary-contrast,#ffffff)] no-underline transition duration-200 hover:bg-[var(--wire-color-primary-hover,#047857)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--wire-color-primary,#059669)] focus-visible:ring-offset-2"
        aria-disabled="{disabled}"
      >
        <span>{label}</span>
        <span
          class="transition-transform duration-200 group-hover:translate-x-0.5"
          aria-hidden="true"
        >
          →
        </span>
        <slot />
        </a>
      {:else}
      <a
        href="{href}"
        class="group inline-flex min-h-11 items-center justify-center gap-2 rounded-xl border border-[var(--wire-color-border,#e2e8f0)] bg-[var(--wire-color-surface,#ffffff)] px-5 py-2.5 text-sm font-semibold text-[var(--wire-color-text,#0f172a)] no-underline transition duration-200 hover:border-[var(--wire-color-primary,#059669)] hover:text-[var(--wire-color-primary,#059669)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--wire-color-primary,#059669)] focus-visible:ring-offset-2"
        aria-disabled="{disabled}"
      >
        <span>{label}</span>
        <span
          class="transition-transform duration-200 group-hover:translate-x-0.5"
          aria-hidden="true"
        >
          →
        </span>
        <slot />
        </a>
      {/if}
      {:else}
      {#if variant === "primary"}
      <button
        type="{type}"
        disabled="{disabled}"
        class="group inline-flex min-h-11 items-center justify-center gap-2 rounded-xl bg-[var(--wire-color-primary,#059669)] px-5 py-2.5 text-sm font-semibold text-[var(--wire-color-primary-contrast,#ffffff)] transition duration-200 hover:bg-[var(--wire-color-primary-hover,#047857)] disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--wire-color-primary,#059669)] focus-visible:ring-offset-2"
      >
        <span>{label}</span>
        <slot />
        </button>
      {:else}
      <button
        type="{type}"
        disabled="{disabled}"
        class="group inline-flex min-h-11 items-center justify-center gap-2 rounded-xl border border-[var(--wire-color-border,#e2e8f0)] bg-[var(--wire-color-surface,#ffffff)] px-5 py-2.5 text-sm font-semibold text-[var(--wire-color-text,#0f172a)] transition duration-200 hover:border-[var(--wire-color-primary,#059669)] hover:text-[var(--wire-color-primary,#059669)] disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--wire-color-primary,#059669)] focus-visible:ring-offset-2"
      >
        <span>{label}</span>
        <slot />
        </button>
      {/if}
      {/if}
    </span>
    }
}
} }