Skip to main content
Glama
deleonio
by deleonio
Collapsible.tsx2.46 kB
import type { FunctionalComponent as FC } from '@stencil/core'; import { h } from '@stencil/core'; import type { JSXBase } from '@stencil/core/internal'; import clsx from 'clsx'; import { KolButtonWcTag } from '../../core/component-names'; import type { EventValueOrEventCallback, HeadingLevel, IconsPropType, StencilUnknown } from '../../schema'; import KolHeadingFc from '../Heading'; type ClassType = | string | { [className: string]: boolean; }; export type CollapsibleProps = Omit<JSXBase.HTMLAttributes<HTMLElement>, 'id' | 'onClick'> & { id: string; open?: boolean; disabled?: boolean; level?: HeadingLevel; label: string; onClick?: EventValueOrEventCallback<MouseEvent, StencilUnknown>; HeadingProps?: { ref?: ((elm?: HTMLElement | undefined) => void) | undefined; class?: ClassType; }; HeadingButtonProps?: { ref?: ((elm?: HTMLKolButtonWcElement | undefined) => void) | undefined; class?: ClassType; _icons?: IconsPropType; }; ContentProps?: { class?: ClassType; animationClass?: ClassType; wrapperClass?: ClassType; }; }; const KolCollapsibleFc: FC<CollapsibleProps> = (props, children) => { const { id, class: classNames, label, level = 1, disabled, open, onClick, HeadingProps = {}, HeadingButtonProps = {}, ContentProps = {}, ...other } = props; const icon = open ? 'remove' : 'add'; return ( <div id={id} class={clsx( 'collapsible', { 'collapsible--disabled': disabled === true, 'collapsible--open': open === true, }, classNames, )} {...other} > <KolHeadingFc ref={HeadingProps?.ref} level={level} class={clsx('collapsible__heading', HeadingProps?.class)}> <KolButtonWcTag class={clsx('collapsible__heading-button', HeadingButtonProps?.class)} ref={HeadingButtonProps?.ref} slot="expert" _ariaControls={`${id}-control`} _ariaExpanded={open} _disabled={disabled} _icons={HeadingButtonProps?._icons || `codicon codicon-${icon}`} _label={label} _on={{ onClick }} ></KolButtonWcTag> </KolHeadingFc> <div class={clsx('collapsible__wrapper', ContentProps?.wrapperClass)}> <div class={clsx('collapsible__wrapper-animation', ContentProps?.animationClass)}> <div aria-hidden={open === false ? 'true' : undefined} class={clsx('collapsible__content', ContentProps?.class)} id={`${id}-control`}> {children} </div> </div> </div> </div> ); }; export default KolCollapsibleFc;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/deleonio/public-ui-kolibri'

If you have feedback or need assistance with the MCP directory API, please join our Discord server