UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

237 lines (236 loc) 7.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.correctInternalHeadingLevel = void 0; exports.debugCounter = debugCounter; exports.globalSyncCounter = exports.globalResetNextTime = exports.globalNextLevel = exports.globalHeadingCounter = exports.getHeadingSize = exports.getHeadingElement = void 0; exports.resetAllLevels = resetAllLevels; exports.resetLevels = resetLevels; exports.setNextLevel = setNextLevel; exports.teardownHeadings = teardownHeadings; exports.windupHeadings = windupHeadings; var _push = _interopRequireDefault(require("core-js-pure/stable/instance/push.js")); var _componentHelper = require("../../shared/component-helper.js"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const globalSyncCounter = exports.globalSyncCounter = { current: null }; const globalHeadingCounter = exports.globalHeadingCounter = { current: null }; const refs = { current: null }; const correctInternalHeadingLevel = ({ counter, level, ref = null, reset = null, inherit = null, increase = false, decrease = false, source = null, bypassChecks = false, isRerender = false, debug = null }) => { if (ref && refs.current) { const foundRef = refs.current.find(cur => cur.ref === ref); if (foundRef) { return foundRef.counter; } } if (bypassChecks) { counter.enableBypassChecks(); } const hasCounterWasCorrectedToLevel2 = () => { var _globalSyncCounter$cu, _globalHeadingCounter; return (globalSyncCounter === null || globalSyncCounter === void 0 || (_globalSyncCounter$cu = globalSyncCounter.current) === null || _globalSyncCounter$cu === void 0 ? void 0 : _globalSyncCounter$cu.level) === 1 && (globalHeadingCounter === null || globalHeadingCounter === void 0 || (_globalHeadingCounter = globalHeadingCounter.current) === null || _globalHeadingCounter === void 0 ? void 0 : _globalHeadingCounter.hasCorrection()) && (counter === null || counter === void 0 ? void 0 : counter.getLevel()) === 2; }; const update = level => { var _globalHeadingCounter2; if (!isRerender) { counter.makeMeReady({ level }); } if (inherit) { if (globalSyncCounter.current) { counter.entry = globalSyncCounter.current.contextCounter.entry; counter.level = globalSyncCounter.current.level; } else { report(debug, source, 'Heading got inherit, but there was noting to inherit.'); } } if (level >= 1) { counter.setLevel(level); } else if (decrease) { counter.decrement(); } else if (increase && !hasCounterWasCorrectedToLevel2()) { counter.increment(); } if (counter.level > 0 && !((_globalHeadingCounter2 = globalHeadingCounter.current) !== null && _globalHeadingCounter2 !== void 0 && _globalHeadingCounter2.hasEntryLevel())) { var _globalHeadingCounter3; (_globalHeadingCounter3 = globalHeadingCounter.current) === null || _globalHeadingCounter3 === void 0 || _globalHeadingCounter3.setEntryLevel(); } }; let skipUpdateFromProp = false; const canBeManipulatedNextTime = overwriteContext => { return counter.contextCounter.isGlobal || counter.contextCounter.entry === 1 || overwriteContext; }; if (globalResetNextTime.current) { const { level: resetLevel, overwriteContext } = globalResetNextTime.current; globalResetNextTime.current = null; if (canBeManipulatedNextTime(overwriteContext) || counter.lastResetLevel === resetLevel) { counter.makeMeReady(); counter.reset(resetLevel); skipUpdateFromProp = true; } } else if (globalNextLevel.current) { const { level: nextLevel, overwriteContext } = globalNextLevel.current; globalNextLevel.current = null; if (canBeManipulatedNextTime(overwriteContext)) { counter.enableBypassChecks(); update(nextLevel); counter.disableBypassChecks(); skipUpdateFromProp = true; } } if (!skipUpdateFromProp) { if (reset === true || parseFloat(String(reset)) > -1) { counter.reset(reset); } else { update(level); } } const hasReport = counter.useLastReport(); if (hasReport) { report(debug, source, ...hasReport); } if (bypassChecks) { counter.disableBypassChecks(); } if (ref) { var _context; refs.current = refs.current || []; (0, _push.default)(_context = refs.current).call(_context, { ref, counter }); } return counter; }; exports.correctInternalHeadingLevel = correctInternalHeadingLevel; function report(debug, source, ...reports) { if (source) { const props = source.props || {}; const identifiers = [props.id, props['class'], props.className].filter(Boolean); (0, _push.default)(reports).call(reports, '\nNB: This warning was triggered by:', identifiers.length > 0 ? identifiers.join(', ') : '', (0, _componentHelper.convertJsxToString)(source)); } if (typeof debug === 'function') { debug(...reports); } else { (0, _componentHelper.warn)(...reports); } } function resetAllLevels() { countHeadings = 0; resetLevels(1, { overwriteContext: false }); teardownHeadings(); } const globalResetNextTime = exports.globalResetNextTime = { current: null }; function resetLevels(level, { overwriteContext = false } = {}) { globalResetNextTime.current = { level, overwriteContext }; } const globalNextLevel = exports.globalNextLevel = { current: null }; function setNextLevel(level, { overwriteContext = false } = {}) { globalNextLevel.current = { level, overwriteContext }; } let countHeadings = 0; function windupHeadings() { countHeadings++; globalSyncCounter.current = null; } function teardownHeadings() { countHeadings--; if (countHeadings === 0) { globalHeadingCounter.current = null; globalSyncCounter.current = null; globalResetNextTime.current = null; globalNextLevel.current = null; } } function debugCounter(counter) { return JSON.stringify({ group: counter.group || counter.contextCounter.group, level: counter.level, entry: counter.entry, contextLevel: counter.contextCounter.level, contextLEntry: counter.contextCounter.entry }, null, 2); } const getHeadingSize = theme => { switch (theme) { case 'sbanken': return { 1: 'xx-large', 2: 'x-large', 3: 'large', 4: 'medium', 5: 'basis', 6: 'small' }; case 'ui': default: return { 1: 'xx-large', 2: 'large', 3: 'medium', 4: 'basis', 5: 'small', 6: 'x-small' }; } }; exports.getHeadingSize = getHeadingSize; const getHeadingElement = level => { switch (level) { case 1: return 'h1'; case 2: return 'h2'; case 3: return 'h3'; case 4: return 'h4'; case 5: return 'h5'; case 6: return 'h6'; } }; exports.getHeadingElement = getHeadingElement; //# sourceMappingURL=HeadingHelpers.js.map