UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

379 lines 13.3 kB
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import "core-js/modules/es.string.replace.js"; import "core-js/modules/esnext.string.match-all.js"; import "core-js/modules/web.dom-collections.iterator.js"; import React from 'react'; import keycode from './keycode'; import whatInput from 'what-input'; import { warn } from './helpers'; import { getPreviousSibling } from './helpers/getPreviousSibling'; import { init } from './Eufemia'; import { defineNavigator } from './legacy/component-helper-legacy'; export * from './legacy/component-helper-legacy'; export { InteractionInvalidation } from './helpers/InteractionInvalidation'; export { extendPropsWithContext, extendPropsWithContextInClassComponent } from './helpers/extendPropsWithContext'; export { assignPropsWithContext } from './helpers/assignPropsWithContext'; export { filterProps } from './helpers/filterProps'; export { keycode, getPreviousSibling, warn }; init(); whatInput.specificKeys([9]); defineNavigator(); export const validateDOMAttributes = (props, params) => { if (props && props.attributes) { let attr = props.attributes; if (attr) { if (attr[0] === '{') { attr = JSON.parse(attr); } if (attr && typeof attr === 'object') { Object.entries(attr).forEach(_ref => { let [key, value] = _ref; Object.assign(params, { [key]: value }); }); } delete params.attributes; } } if (params.disabled === null || params.disabled === 'false') { delete params.disabled; } if (typeof params.space !== 'undefined') { delete params.space; } if (typeof params.top !== 'undefined') { delete params.top; } if (typeof params.right !== 'undefined') { delete params.right; } if (typeof params.bottom !== 'undefined') { delete params.bottom; } if (typeof params.left !== 'undefined') { delete params.left; } if (typeof params.no_collapse !== 'undefined') { delete params.no_collapse; } if (typeof params.innerSpace !== 'undefined') { delete params.innerSpace; } else if (params.disabled === 'true') { params.disabled = true; } if (params.disabled === true) { params['aria-disabled'] = true; } if (props && props.tabindex) { let tabIndex = props.tabindex; if (tabIndex === 'off') { tabIndex = '-1'; } params['tabIndex'] = tabIndex; } if (params && typeof params === 'object') { for (const i in params) { if (typeof params[i] === 'function' && !/(^[a-z]{1,}[A-Z]{1})/.test(i)) { delete params[i]; } else if (params[i] === null || /[^a-z-]/i.test(i)) { delete params[i]; } } } return params; }; export const extendGracefully = function () { let first = {}; for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) { objects[_key] = arguments[_key]; } const keepRef = objects[0]; if (keepRef === true || keepRef === false) { objects.shift(); if (keepRef) { first = objects.shift(); } } return objects.reduce((acc1, object) => { if (object) { acc1 = Object.assign(acc1, Object.entries(object).reduce((acc2, _ref2) => { let [key, value] = _ref2; if (value !== null) { if (typeof value === 'object') { value = extendGracefully(acc1[key] || {}, value); if (Object.keys(value).length > 0) { acc2[key] = value; } } else { acc2[key] = value; } } return acc2; }, {})); } return acc1; }, first); }; export function isObject(item) { return item && typeof item === 'object' && !Array.isArray(item); } export function extendDeep() { let target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; for (var _len2 = arguments.length, sources = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { sources[_key2 - 1] = arguments[_key2]; } for (const source of sources) { if (isObject(source)) { for (const key in source) { if (key === '__proto__' || key === 'constructor') continue; if (!Object.prototype.hasOwnProperty.call(source, key)) continue; if (!isObject(target)) continue; if (isObject(source[key])) { if (!isObject(target[key])) { target[key] = {}; } extendDeep(target[key], source[key]); } else { target[key] = source[key]; } } } } return target; } export const isTrue = value => { if (value !== null && typeof value !== 'undefined' && (String(value) === 'true' || String(value) === '1')) { return true; } return false; }; export const dispatchCustomElementEvent = function (src, eventName) { let eventObjectOrig = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; let ret = undefined; const eventObject = _objectSpread(_objectSpread({}, eventObjectOrig && eventObjectOrig.event || {}), eventObjectOrig); if (eventObject && eventObject.attributes && eventObject.event) { const currentTarget = eventObject.event.currentTarget; if (currentTarget) { try { const dataset = _objectSpread({}, currentTarget.dataset || {}); const attributes = _objectSpread({}, eventObject.attributes); for (const i in attributes) { if (/^data-/.test(i)) { dataset[String(i).replace(/^data-/, '')] = attributes[i]; } } for (const i in dataset) { if (eventObject.event.currentTarget.dataset) { eventObject.event.currentTarget.dataset[i] = dataset[i]; } if (eventObject.event.target && eventObject.event.target.dataset) { eventObject.event.target.dataset[i] = dataset[i]; } } } catch (e) { warn('Error on handling dataset:', e); } } } const props = src && src.props || src; if (eventName.includes('_')) { if (typeof props[eventName] === 'function') { const r = props[eventName].apply(src, [eventObject]); if (typeof r !== 'undefined') { ret = r; } } eventName = toCamelCase(eventName); if (typeof props[eventName] === 'function') { const r = props[eventName].apply(src, [eventObject]); if (typeof r !== 'undefined') { ret = r; } } } else { if (typeof props[eventName] === 'function') { const r = props[eventName].apply(src, [eventObject]); if (typeof r !== 'undefined') { ret = r; } } eventName = toSnakeCase(eventName); if (typeof props[eventName] === 'function') { const r = props[eventName].apply(src, [eventObject]); if (typeof r !== 'undefined') { ret = r; } } } return ret; }; export const toCamelCase = s => s.split(/_/g).reduce((acc, cur, i) => acc + (i === 0 ? cur : cur.replace(/(\w)(\w*)/g, (g0, g1, g2) => g1.toUpperCase() + g2.toLowerCase())), ''); export const toPascalCase = s => s.split(/_/g).reduce((acc, cur) => acc + cur.replace(/(\w)(\w*)/g, (g0, g1, g2) => g1.toUpperCase() + g2.toLowerCase()), ''); export const toSnakeCase = str => str.replace(/\B[A-Z]/g, letter => `_${letter}`).toLowerCase(); export const toKebabCase = str => str.replace(/\B[A-Z]/g, letter => `-${letter}`).toLowerCase(); export function toCapitalized(str) { return typeof str === 'string' ? str.toLowerCase().split('').map((char, index, arr) => index === 0 || arr[index - 1] === ' ' || arr[index - 1] === '-' ? char.toUpperCase() : char).join('') : str; } export const makeUniqueId = function () { let prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'id-'; let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8; return prefix + String(Math.random().toString(36).substr(2, length) + idIncrement++).slice(-length); }; let idIncrement = 0; export const slugify = s => String(s).toLowerCase().replace(/[^\w\s-]/g, '').replace(/[\s_-]+/g, '-').replace(/^-+|-+$/g, ''); export const matchAll = (string, regex) => { if (typeof string.matchAll === 'function') { return Array.from(string.matchAll(regex)); } const matches = []; let match; while (match = regex.exec(string)) { matches.push(match); } return matches; }; export const isChildOfElement = function (element, target) { let callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; try { const contains = element => { if (callback) { const res = callback(element); if (res) { return element; } } return element && element === target; }; if (contains(element)) { return element; } while ((element = element && element.parentElement) && !contains(element)); } catch (e) {} return element; }; export const roundToNearest = (num, target) => { const diff = num % target; return diff > target / 2 ? num - diff + target : num - diff; }; export const getClosestScrollViewElement = currentElement => { return getPreviousSibling('.dnb-scroll-view', currentElement); }; export function convertJsxToString(elements) { let separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; let transformWord = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; if (!Array.isArray(elements)) { elements = [elements]; } const process = word => { if (React.isValidElement(word)) { if (transformWord) { word = transformWord(word); } if (Array.isArray(word.props.children)) { word = word.props.children.reduce((acc, word) => { if (typeof word !== 'string') { word = process(word); } if (typeof word === 'string') { acc = (acc + (separator || '') + word).trim(); } return acc; }, ''); } else if (word.props.children) { word = word.props.children; if (typeof word !== 'string') { word = process(word); } if (typeof word === 'string') { word = word.trim(); } else { return undefined; } } else { return undefined; } } return word; }; return Array.from(elements).map(word => process(word)).filter(Boolean).join(separator).trim(); } export function convertStatusToStateOnly(status, state) { return status ? state : null; } export function getStatusState(status) { return status && status !== 'error' && status !== 'warn' && status !== 'info'; } export function combineLabelledBy() { for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { params[_key3] = arguments[_key3]; } return combineAriaBy('aria-labelledby', params); } export function combineDescribedBy() { for (var _len4 = arguments.length, params = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { params[_key4] = arguments[_key4]; } return combineAriaBy('aria-describedby', params); } export function combineDetails() { for (var _len5 = arguments.length, params = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { params[_key5] = arguments[_key5]; } return combineAriaBy('aria-details', params); } function combineAriaBy(type, params) { params = params.map(cur => { if (Array.isArray(cur)) { return cur.join(' '); } if (cur && params.includes(cur[type])) { return null; } if (cur && typeof cur[type] !== 'undefined') { cur = cur[type]; } if (typeof cur !== 'string') { cur = null; } return cur; }); params = params.filter(Boolean).join(' '); if (params === '') { params = undefined; } return params; } export function findElementInChildren(children, find) { if (!Array.isArray(children)) { children = [children]; } let result = null; children.some(cur => { if (cur && cur.props && cur.props.children) { const res = findElementInChildren(cur.props.children, find); if (res) { return result = res; } } if (React.isValidElement(cur) && find(cur)) { return result = cur; } return null; }); return result; } export function escapeRegexChars(str) { return str.replace(/[-[\]{}()*+?.,\\^$|#]/g, '\\$&'); } export function removeUndefinedProps(object) { Object.keys(object || {}).forEach(key => { if (object[key] === undefined) { delete object[key]; } }); return object; } //# sourceMappingURL=component-helper.js.map