/** @type {string[]} */ export const CALLOUT_BACKGROUND_OPTIONS = ['gray', 'blue', 'green', 'yellow', 'red', 'purple', 'pink'] /** @type {string[]} */ export const CALLOUT_EMOJI_OPTIONS = ['πŸ’‘', '⚠️', '❗', 'βœ…', 'πŸ“Œ', 'πŸ”₯', 'πŸ’¬'] /** * μ½œμ•„μ›ƒ μ„ μ–ΈλΆ€ μ˜΅μ…˜μ„ νŒŒμ‹±ν•œλ‹€. * @param {string} line - μ½œμ•„μ›ƒ μ„ μ–Έ 라인 * @returns {{ calloutEmojiEnabled: boolean, calloutEmoji: string, calloutBackground: string }} */ export const parseCalloutOptions = (line) => { const options = { calloutEmojiEnabled: true, calloutEmoji: 'πŸ’‘', calloutBackground: 'blue' } const tokens = String(line ?? '').trim().split(/\s+/).slice(1) tokens.forEach((token) => { const [rawKey, ...rawValueParts] = token.split('=') if (!rawKey || !rawValueParts.length) { return } const key = rawKey.toLowerCase() const value = rawValueParts.join('=').trim() if (key === 'emoji') { if (!value || value === 'none') { options.calloutEmojiEnabled = false options.calloutEmoji = 'πŸ’‘' } else { options.calloutEmojiEnabled = true options.calloutEmoji = value } return } if (key === 'bg' && CALLOUT_BACKGROUND_OPTIONS.includes(value)) { options.calloutBackground = value } }) return options } /** * μ½œμ•„μ›ƒ μ„ μ–Έ 쀄을 λ§Œλ“ λ‹€. * @param {{ calloutEmojiEnabled?: boolean, calloutEmoji?: string, calloutBackground?: string }} options - μ˜΅μ…˜ * @returns {string} μ„ μ–Έ 쀄 */ export const buildCalloutOpenerLine = (options = {}) => { const emojiEnabled = options.calloutEmojiEnabled !== false const emoji = emojiEnabled ? (options.calloutEmoji || 'πŸ’‘') : 'none' const background = CALLOUT_BACKGROUND_OPTIONS.includes(options.calloutBackground) ? options.calloutBackground : 'blue' return `:::callout emoji=${emoji} bg=${background}` }