UnreviewedOptional Unreviewedhref?: stringURL to link to. A definite string renders <a role="button">; omit it
(or pass undefined) to render <a-button>, so href={maybeUrl}
degrades to a plain button when the URL is absent.
Optional Unreviewedtarget?: stringAnchor target.
Optional Unreviewedrel?: stringAnchor rel.
Optional Unrevieweddownload?: string | booleanAnchor download attribute. Empty string / true triggers a download with the resource's default name; a string overrides the filename.
Optional Unreviewedping?: stringSpace-separated URLs the browser pings on navigation.
Optionaltype?: neverOptionalform?: neverOptionalhref?: neverOptionaltarget?: neverOptionalrel?: neverOptionaldownload?: neverOptionalping?: neverOptional Unreviewedtype?: "button" | "submit" | "reset"Form submission type.
Optional Unreviewedform?: stringForm id when the button isn't a descendant of its form.
Submit axis — anchors (href) don't carry form-submission props; buttons don't carry anchor props. (Copy is no longer a Button concern —
ButtonCopycomposes a<a-copy>child; seecopy-props.ts.)hrefis optional, so you can pass a conditional URL:href={maybeUrl}(string | undefined) type-checks, and a falsy href degrades to a plain button — a definite string renders<a role="button">, an absent /undefinedhref renders<a-button>, mirroring thehref != nullruntime check. Keeping it required forced a two-render (href ? … : …) or a conditional spread, and made TypeScript blame the wrong prop: withhref: string | undefinedmatching neither branch, the intersection fell through toPriorityModeand reported a spurious "priorityis missing". The anchor props (href/target/rel/download/ping) still can't combine with the button props (type/form).