Spaces:
Running
Running
| --- | |
| interface Props { | |
| title?: string; | |
| emoji?: string; | |
| class?: string; | |
| variant?: 'neutral' | 'info' | 'success' | 'danger'; | |
| } | |
| const { title, emoji, class: className, variant = 'neutral', ...props } = Astro.props as Props; | |
| const wrapperClass = ["note", `note--${variant}`, className].filter(Boolean).join(" "); | |
| const hasHeader = (emoji && String(emoji).length > 0) || (title && String(title).length > 0); | |
| --- | |
| <div class={wrapperClass} {...props}> | |
| {hasHeader && <div class="note__header"> | |
| {emoji && <span class="note__emoji">{emoji}</span>} | |
| {title && <span class="note__title">{title}</span>} | |
| </div>} | |
| <div class="note__content"> | |
| <slot /> | |
| </div> | |
| </div> | |
| <style> | |
| .note { background: var(--surface-bg); border-left: 2px solid var(--border-color); border-radius: 4px; padding: 10px 14px; margin: 12px 0; } | |
| .note__header { display: flex; align-items: center; gap: 6px; font-weight: 600; color: var(--text-color); margin-bottom: 6px; } | |
| .note__emoji { font-size: 24px; line-height: 1; } | |
| .note__title { font-size: 13px; letter-spacing: .2px; } | |
| .note__content { color: var(--text-color); font-size: 0.95rem; } | |
| /* Ensure the very last slotted element has no bottom margin */ | |
| .note .note__content > :global(*:last-child) { margin-bottom: 0 ; } | |
| /* Variants */ | |
| .note.note--neutral { border-left-color: var(--border-color); background: var(--surface-bg); } | |
| .note.note--info { border-left-color: #f39c12; background: color-mix(in oklab, #f39c12 10%, var(--surface-bg)); } | |
| .note.note--success { border-left-color: #2ecc71; background: color-mix(in oklab, #2ecc71 8%, var(--surface-bg)); } | |
| .note.note--danger { border-left-color: #e74c3c; background: color-mix(in oklab, #e74c3c 8%, var(--surface-bg)); } | |
| </style> | |