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
JavaScript
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