UNPKG

astro-tips

Version:

🎨 Beautiful, customizable tip and notice blocks for Astro - 16 built-in styles with auto dark mode support and built-in compression

51 lines • 1.96 kB
import { TIP_VARIANTS } from "./config.js"; import { SHARED_STYLES } from "./styles.js"; export function isTipVariant(variant) { return TIP_VARIANTS.has(variant); } export function createTipNode(type, attrs = {}, children = []) { return { type: "element", tagName: type, properties: attrs, children, }; } export function isDirective(node) { return node.type === "containerDirective"; } export function generateCompleteStyle(style) { const lightBg = style.light?.background || "#fff"; const darkBg = style.dark?.background || "#333"; const borderColor = style.border || "#000"; return `--tips-light-bg:${lightBg};--tips-dark-bg:${darkBg};--tips-border:${borderColor};${SHARED_STYLES.base .replace(/\s+/g, " ") .trim()}` .replace(/\s+/g, " ") .trim(); } function extractTextContent(children) { let content = ""; for (const child of children) { if (child.type === "text") { content += child.value; } else if (child.type === "paragraph" && child.children) { content += "<p>"; content += extractTextContent(child.children); content += "</p>"; } else if (child.children) { content += extractTextContent(child.children); } } return content; } export function createTipBox(variant, config, children) { const completeStyle = generateCompleteStyle(config.style || {}); const iconStyle = SHARED_STYLES.icon.replace(/\s+/g, " ").trim(); const contentStyle = SHARED_STYLES.content.replace(/\s+/g, " ").trim(); const content = extractTextContent(children); return `<div data-type="${variant}" class="astro-tips-${variant}" style="${completeStyle}"><div class="astro-tips-icon" style="${iconStyle}">${config.icon}</div><div class="astro-tips-content" style="${contentStyle}">${content}</div></div>`; } //# sourceMappingURL=utils.js.map