UNPKG

@ui5/webcomponents-react

Version:

React Wrapper for UI5 Web Components and additional components

58 lines 2.62 kB
import { getCustomElementsScopingSuffix, getEffectiveScopingSuffixForTag, getScopedVarName } from '@ui5/webcomponents-base/dist/CustomElementsScope.js'; import { Children, cloneElement, Fragment } from 'react'; export function flattenFragments(children, depth = 1) { const flatChildren = []; const removeFragments = (element, level = 0, key = []) => { if (!element) { return; } if (Array.isArray(element)) { Children.toArray(element).forEach((child, index) => { removeFragments(child, level + 1, [...key, index]); }); return; } if (element.type === Fragment && level <= depth) { Children.toArray(element.props?.children).forEach((item, index) => { removeFragments(item, level + 1, [...key, index]); }); } else if (typeof element === 'string' || typeof element === 'number') { flatChildren.push(element); } else { flatChildren.push( /*#__PURE__*/cloneElement(element, { key: key.join('.') })); } }; removeFragments(children); return flatChildren; } export const capitalizeFirstLetter = s => s.charAt(0).toUpperCase() + s.slice(1); export const lowercaseFirstLetter = s => s.charAt(0).toLowerCase() + s.slice(1); export const camelToKebabCase = s => s.replace(/([A-Z])/g, (a, b) => `-${b.toLowerCase()}`); export const kebabToCamelCase = str => str.replace(/([-_]\w)/g, g => g[1].toUpperCase()); export function getUi5TagWithSuffix(baseTagName) { const tagNameSuffix = getEffectiveScopingSuffixForTag(baseTagName); return tagNameSuffix ? `${baseTagName}-${tagNameSuffix}` : baseTagName; } export const isSSR = () => typeof window === 'undefined'; export function trimAndRemoveSpaces(value) { return value.trim().replace(/\s\s+/g, ' '); } export const cssVarVersionInfoPrefix = getScopedVarName('--_ui5_').replace('--_ui5_', ''); export function getTagNameWithoutScopingSuffix(tagName) { const tagNameSuffix = getCustomElementsScopingSuffix(); return tagNameSuffix ? tagName.replace(`-${tagNameSuffix.toUpperCase()}`, '') : tagName; } const SEMVER_REGEX = /^(?<major>0|[1-9]\d*)\.(?<minor>0|[1-9]\d*)\.(?<patch>0|[1-9]\d*)(?:-(?<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; export function parseSemVer(version) { const parsed = SEMVER_REGEX.exec(version).groups; return { version, major: parseInt(parsed.major), minor: parseInt(parsed.minor), patch: parseInt(parsed.patch), prerelease: parsed.prerelease, buildMetadata: parsed.buildmetadata }; }