--- // TODO: spinner param (needs Spinner.astro). // TODO: provider param (unused in markup). // TODO: color=false special case — pass no color prop instead. import Icon from './Icon.astro' /** core/scss/ui/_buttons.scss `.btn-{size}` modifier classes — 'md' is the default (no class emitted) */ type ButtonSize = 'sm' | 'md' | 'lg' | 'xl' interface Props { text?: string href?: string /** raw href + target="_blank" rel="noreferrer" */ external?: boolean element?: 'a' | 'button' type?: 'button' | 'reset' | 'submit' id?: string color?: string | undefined outline?: boolean ghost?: boolean size?: ButtonSize | undefined block?: boolean disabled?: boolean class?: string icon?: string iconColor?: string iconEnd?: string iconOnly?: boolean /** data-bs-toggle="modal" data-bs-target="#modal-{modalId}" (modal-id param) */ modalId?: string /** data-bs-toggle="toast" data-bs-target="#toast-{toastId}" (toast-id param) */ toastId?: string /** data-bs-dismiss="modal" */ dismiss?: boolean /** data-bs-toggle="dropdown" */ dropdown?: boolean } const { text = 'Button', href, external, element, type, id, color, outline, ghost, size, block, disabled, class: className, icon, iconColor, iconEnd, iconOnly, modalId, toastId, dismiss, dropdown } = Astro.props // Actions (dropdown/modal/toast/dismiss) and bare buttons use