mirror of
https://github.com/tabler/tabler.git
synced 2026-08-08 04:12:26 +04:00
8962710163
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
57 lines
1.8 KiB
Plaintext
57 lines
1.8 KiB
Plaintext
---
|
|
import Icon from './Icon.astro'
|
|
import questions from '@data/questions.json'
|
|
|
|
interface Props {
|
|
count?: number
|
|
id?: string
|
|
/** toggle-icon — when set, the toggle gets accordion-button-toggle-plus */
|
|
toggleIcon?: string
|
|
/** each entry becomes accordion-{type} */
|
|
type?: string[]
|
|
/** show-icon — renders the accordion-button-icon (link icon) */
|
|
showIcon?: boolean
|
|
}
|
|
|
|
const { count = 4, id = 'default', toggleIcon, type = [], showIcon } = Astro.props
|
|
|
|
const resolvedToggleIcon = toggleIcon ?? 'chevron-down'
|
|
const hasToggleIcon = toggleIcon !== undefined
|
|
const types = type
|
|
|
|
const items = questions.slice(0, count)
|
|
|
|
const accordionClasses = ['accordion', ...types.map((t) => `accordion-${t}`)].join(' ')
|
|
---
|
|
|
|
<div class={accordionClasses} id={`accordion-${id}`}>
|
|
{
|
|
items.map((question, i) => {
|
|
const index = i + 1
|
|
const isFirst = index === 1
|
|
return (
|
|
<div class="accordion-item">
|
|
<div class="accordion-header">
|
|
<button class={`accordion-button${isFirst ? '' : ' collapsed'}`} type="button" data-bs-toggle="collapse" data-bs-target={`#collapse-${index}-${id}`} aria-expanded={isFirst ? 'true' : 'false'}>
|
|
{showIcon && (
|
|
<div class="accordion-button-icon">
|
|
<Icon name="link" />
|
|
</div>
|
|
)}
|
|
|
|
{question.question}
|
|
|
|
<div class={`accordion-button-toggle${hasToggleIcon ? ' accordion-button-toggle-plus' : ''}`}>
|
|
<Icon name={resolvedToggleIcon} />
|
|
</div>
|
|
</button>
|
|
</div>
|
|
<div id={`collapse-${index}-${id}`} class={`accordion-collapse collapse${isFirst ? ' show' : ''}`} data-bs-parent={`#accordion-${id}`}>
|
|
<div class="accordion-body">{question.answer}</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
})
|
|
}
|
|
</div>
|