neumorphic-peripheral
Version:
A lightweight, framework-agnostic JavaScript/TypeScript library for beautiful neumorphic styling
110 lines (109 loc) • 3.44 kB
JavaScript
;
// Add these functions to your existing src/utils/index.ts file
Object.defineProperty(exports, "__esModule", { value: true });
exports.isElement = isElement;
exports.addClassName = addClassName;
exports.createElement = createElement;
exports.getSizeValue = getSizeValue;
exports.getElementValue = getElementValue;
exports.setElementValue = setElementValue;
exports.applyNeumorphicStyles = applyNeumorphicStyles;
exports.createTransition = createTransition;
exports.findParentWithClass = findParentWithClass;
exports.insertAfter = insertAfter;
exports.sanitizeClassName = sanitizeClassName;
exports.mergeDeep = mergeDeep;
function isElement(element) {
return element instanceof HTMLElement;
}
function addClassName(element, className) {
element.classList.add(`np-${className}`);
}
function createElement(tagName, attributes = {}) {
const element = document.createElement(tagName);
Object.entries(attributes).forEach(([key, value]) => {
if (key === 'class') {
element.className = value;
}
else {
element.setAttribute(key, value);
}
});
return element;
}
function getSizeValue(size, property) {
const sizeMap = {
sm: {
padding: '8px 12px',
fontSize: '14px',
height: '32px',
borderRadius: '8px'
},
md: {
padding: '12px 16px',
fontSize: '16px',
height: '40px',
borderRadius: '12px'
},
lg: {
padding: '16px 24px',
fontSize: '18px',
height: '48px',
borderRadius: '16px'
}
};
return sizeMap[size]?.[property] || sizeMap.md[property];
}
function getElementValue(element) {
if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {
return element.value;
}
return '';
}
function setElementValue(element, value) {
if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {
element.value = value;
}
}
function applyNeumorphicStyles(element, styles, theme) {
Object.entries(styles).forEach(([property, value]) => {
element.style.setProperty(property, value);
});
}
// Animation utilities
function createTransition(duration = '0.3s', easing = 'cubic-bezier(0.25, 0.46, 0.45, 0.94)', properties = ['all']) {
return properties.map(prop => `${prop} ${duration} ${easing}`).join(', ');
}
// DOM utilities
function findParentWithClass(element, className) {
let parent = element.parentElement;
while (parent) {
if (parent.classList.contains(className)) {
return parent;
}
parent = parent.parentElement;
}
return null;
}
function insertAfter(newElement, referenceElement) {
const parent = referenceElement.parentNode;
if (parent) {
parent.insertBefore(newElement, referenceElement.nextSibling);
}
}
// Validation utilities
function sanitizeClassName(className) {
return className.replace(/[^a-zA-Z0-9-_]/g, '');
}
function mergeDeep(target, source) {
const result = { ...target };
for (const key in source) {
if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
result[key] = mergeDeep(result[key] || {}, source[key]);
}
else {
result[key] = source[key];
}
}
return result;
}