import { h } from '@stencil/core'; import { CalloutAsideType, HeadingLevel, HeadingLevelOptions, HeadingContentType, HighlightColours, HighlightColourOptions, } from './callout-aside.interface'; export const isValidHighlightColour = (colour: HighlightColourOptions): colour is HighlightColourOptions => HighlightColours.includes(colour); export const isValidHeadingLevel = (level: HeadingLevelOptions): level is HeadingLevelOptions => HeadingLevel.includes(level); const generateClasses = (type: CalloutAsideType, highlightColor?: HighlightColourOptions) => { const componentType = type === 'callout' ? `ontario-callout` : `ontario-aside`; const borderColor = `ontario-border-highlight--${highlightColor}`; return highlightColor ? `${componentType} ${borderColor}` : `${componentType}`; }; const generateHeading = ( type: CalloutAsideType, headingType: HeadingLevelOptions | undefined, headingContentType: HeadingContentType, headingContent: string, ) => { const headingContentIsHTML = headingContentType === 'html'; switch (headingType) { case 'h2': return headingContentIsHTML ? (

) : (

{headingContent}

); case 'h3': return headingContentIsHTML ? (

) : (

{headingContent}

); case 'h4': return headingContentIsHTML ? (

) : (

{headingContent}

); case 'h5': return headingContentIsHTML ? (
) : (
{headingContent}
); case 'h6': return headingContentIsHTML ? (
) : (
{headingContent}
); default: return headingContentIsHTML ? (

) : (

{headingContent}

); } }; export const generateCalloutAside = ( type: CalloutAsideType, headingContentType: HeadingContentType, headingType?: HeadingLevelOptions, headingContent?: string, content?: string | HTMLElement, highlightColour?: HighlightColourOptions, ) => { const contentIsString = typeof content === 'string'; return type === 'callout' ? (
{headingContent ? generateHeading(type, headingType, headingContentType, headingContent) : ''} {contentIsString ?

{content}

: }
) : ( ); };