UNPKG

lisn.js

Version:

Simply handle user gestures and actions. Includes widgets.

1 lines 16.6 kB
{"version":3,"file":"overlays.cjs","names":["MC","_interopRequireWildcard","require","MH","_cssAlter","_domAlter","_domEvents","_domOptimize","_text","_scroll","_xMap","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","getOverlay","userOptions","_overlays$get$get","_overlays$get","options","tryGetOverlayOptions","overlays","_parent","_overlayKey","exports","createOverlay","fetchOverlayOptions","canReuse","_id","_overlays$get2","existingOverlay","parentOf","waitForMutateTime","overlay","createOnlyOverlay","sGet","id","isPercentageHOffset","includes","_style","left","right","isPercentageVOffset","top","bottom","needsContentWrapping","parentEl","isScrollable","axis","tryWrapContent","_classNames","PREFIX_WRAPPER","PREFIX_WRAPPER_CONTENT","_required","_requiredBy","position","S_ABSOLUTE","addClasses","PREFIX_RELATIVE","moveElement","to","prefixName","newXWeakMap","newMap","_userOptions$data","_userOptions$id","style","getCssProperties","data","tryGetParent","parent","_data","getOverlayKey","_userOptions$data2","_userOptions$id2","fetchParent","objToStrKey","finalCssProperties","merge","S_FIXED","isEmpty","userSuppliedParent","getBody","tryGetMainContentElement","waitForElement","fetchMainContentElement","createElement","addClassesNow","attr","keysOf","setDataNow","camelToKebabCase","prop","setStylePropNow"],"sources":["../../../src/ts/utils/overlays.ts"],"sourcesContent":["/**\n * @module Utils\n */\n\nimport * as MC from \"@lisn/globals/minification-constants\";\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport {\n addClasses,\n addClassesNow,\n setDataNow,\n setStylePropNow,\n} from \"@lisn/utils/css-alter\";\nimport { moveElement, tryWrapContent } from \"@lisn/utils/dom-alter\";\nimport { waitForElement } from \"@lisn/utils/dom-events\";\nimport { waitForMutateTime } from \"@lisn/utils/dom-optimize\";\nimport { camelToKebabCase, objToStrKey } from \"@lisn/utils/text\";\nimport {\n isScrollable,\n tryGetMainContentElement,\n fetchMainContentElement,\n} from \"@lisn/utils/scroll\";\n\nimport { newXWeakMap } from \"@lisn/modules/x-map\";\n\n/**\n * @category Overlays\n * @interface\n */\nexport type OverlayOptions = {\n /**\n * The parent element to insert the overlay into.\n *\n * If not given, then:\n * - if the overlay is to have a `position: fixed`, then `document.body` is used\n * - otherwise,\n * {@link Settings.settings.mainScrollableElementSelector | the main scrolling element}\n * is used\n */\n parent?: HTMLElement;\n\n /**\n * If set, then it will be assigned as the DOM element ID for the new\n * overlay.\n *\n * Furthermore, the new overlay will be created and will not be saved for\n * future reuse.\n *\n * By default, if `id` is not given, the overlay will be saved, and if\n * {@link createOverlay} is called again with the same `style`, `data` and\n * parent, the previous overlay is returned.\n */\n id?: string;\n\n /**\n * Every entry in this object will be set on the `style` of the new overlay.\n *\n * **IMPORTANT:** By default overlays are positioned absolutely, so if you need\n * another positioning, override this here by setting a `position` key in\n * `style`. If position is either \"absolute\" (by default or explicitly set) or\n * \"fixed\", and none of `top` or `bottom` is given, `top: 0` is set; and\n * similarly, if none of `left` or `right` is given, `left: 0` is set.\n */\n style?: Record<string, string>;\n\n /**\n * Every entry in this object will be set as a data attribute on the new\n * overlay.\n *\n * Keys can be either kebab-case or camelCase (they will be converted if\n * needed). Do _not_ include the \"data-\" prefix which will be added\n * automatically. E.g. both \"foo-bar\" and \"fooBar\" will result in\n * \"data-foo-bar\" being set.\n */\n data?: Record<string, string>;\n};\n\n/**\n * Returns an existing overlay for this specification. If the overlay was just\n * created it may not yet be attached to the DOM.\n *\n * @category Overlays\n */\nexport const getOverlay = (userOptions?: OverlayOptions) => {\n const options = tryGetOverlayOptions(userOptions);\n if (!options) {\n return null;\n }\n\n return overlays.get(options._parent)?.get(options._overlayKey) ?? null;\n};\n\n/**\n * Creates a new overlay, and inserts it into the DOM as soon as\n * {@link waitForMutateTime} resolves, or returns an already existing matching\n * overlay.\n *\n * **Note** that if {@link OverlayOptions.id} is set, a new overlay will\n * _always_ be created.\n *\n * @category Overlays\n */\nexport const createOverlay = async (userOptions?: OverlayOptions) => {\n const options = await fetchOverlayOptions(userOptions);\n const canReuse = !options._id;\n\n if (canReuse) {\n const existingOverlay = overlays\n .get(options._parent)\n ?.get(options._overlayKey);\n\n if (existingOverlay) {\n if (!MH.parentOf(existingOverlay)) {\n // not yet inserted into the DOM, so wait until it is\n await waitForMutateTime();\n }\n return existingOverlay;\n }\n }\n\n // Create a new one\n const overlay = createOnlyOverlay(options);\n if (canReuse) {\n // Save it now before awating, so that concurrent requests to create the\n // same one use it\n overlays.sGet(options._parent).set(options._overlayKey, overlay);\n } else {\n overlay.id = options._id;\n }\n\n const isPercentageHOffset = MH.includes(\n (options._style.left || \"\") + (options._style.right || \"\"),\n \"%\",\n );\n\n const isPercentageVOffset = MH.includes(\n (options._style.top || \"\") + (options._style.bottom || \"\"),\n \"%\",\n );\n\n let needsContentWrapping = false;\n let parentEl = options._parent;\n if (isPercentageHOffset || isPercentageVOffset) {\n needsContentWrapping =\n (isPercentageHOffset && isScrollable(parentEl, { axis: \"x\" })) ||\n (isPercentageVOffset && isScrollable(parentEl, { axis: \"y\" }));\n }\n\n if (needsContentWrapping) {\n // TODO Is it possible to unwrap the children when no longer needing this\n // overlay? Probably not worth the effort. ViewWatcher doesn't remove old\n // olverlays anyway.\n parentEl = await tryWrapContent(parentEl, {\n _classNames: [\n MC.PREFIX_WRAPPER,\n MC.PREFIX_WRAPPER_CONTENT,\n PREFIX_WRAPPER,\n ],\n _required: true,\n _requiredBy: \"percentage offset view trigger with scrolling root\",\n });\n }\n\n if (options._style.position === MC.S_ABSOLUTE) {\n // Ensure parent has non-static positioning\n addClasses(parentEl, MC.PREFIX_RELATIVE);\n }\n\n await moveElement(overlay, { to: parentEl });\n\n return overlay;\n};\n\n// ----------------------------------------\n\ntype OverlayOptionsInternal = {\n _parent: HTMLElement;\n _id: string;\n _style: Record<string, string>;\n _data: Record<string, string>;\n _overlayKey: string;\n};\n\nconst PREFIX_WRAPPER = MH.prefixName(\"overlay-wrapper\");\n\nconst overlays = newXWeakMap<HTMLElement, Map<string, HTMLElement>>(() =>\n MH.newMap(),\n);\n\nconst tryGetOverlayOptions = (\n userOptions: OverlayOptions | undefined,\n): OverlayOptionsInternal | null => {\n const style = getCssProperties(userOptions?.style);\n const data = userOptions?.data ?? {};\n const parentEl = tryGetParent(userOptions?.parent, style.position);\n if (!parentEl) {\n return null;\n }\n\n return {\n _parent: parentEl,\n _id: userOptions?.id ?? \"\",\n _style: style,\n _data: data,\n _overlayKey: getOverlayKey(style, data),\n };\n};\n\nconst fetchOverlayOptions = async (\n userOptions: OverlayOptions | undefined,\n): Promise<OverlayOptionsInternal> => {\n const style = getCssProperties(userOptions?.style);\n const data = userOptions?.data ?? {};\n const parentEl = await fetchParent(userOptions?.parent, style.position);\n\n return {\n _parent: parentEl,\n _id: userOptions?.id ?? \"\",\n _style: style,\n _data: data,\n _overlayKey: getOverlayKey(style, data),\n };\n};\n\nconst getOverlayKey = (\n style: Record<string, string>,\n data: Record<string, string>,\n) => objToStrKey(style) + \"|\" + objToStrKey(data);\n\nconst getCssProperties = (style: Record<string, string> | undefined) => {\n const finalCssProperties: Record<string, string> = MH.merge(\n style,\n { position: style?.position || MC.S_ABSOLUTE }, // default\n );\n\n if (\n finalCssProperties.position === MC.S_ABSOLUTE ||\n finalCssProperties.position === MC.S_FIXED\n ) {\n if (\n MH.isEmpty(finalCssProperties.top) &&\n MH.isEmpty(finalCssProperties.bottom)\n ) {\n finalCssProperties.top = \"0px\";\n }\n\n if (\n MH.isEmpty(finalCssProperties.left) &&\n MH.isEmpty(finalCssProperties.right)\n ) {\n finalCssProperties.left = \"0px\";\n }\n }\n\n return finalCssProperties;\n};\n\nconst tryGetParent = (\n userSuppliedParent: HTMLElement | undefined | null,\n position: string,\n) =>\n userSuppliedParent ??\n (position === MC.S_FIXED ? MH.getBody() : tryGetMainContentElement());\n\nconst fetchParent = async (\n userSuppliedParent: HTMLElement | undefined | null,\n position: string,\n) =>\n userSuppliedParent ??\n (position === MC.S_FIXED\n ? await waitForElement(MH.getBody)\n : await fetchMainContentElement());\n\nconst createOnlyOverlay = (options: OverlayOptionsInternal) => {\n const overlay = MH.createElement(\"div\");\n\n addClassesNow(overlay, MH.prefixName(\"overlay\"));\n\n const data = options._data;\n for (const attr of MH.keysOf(data)) {\n setDataNow(overlay, camelToKebabCase(attr), data[attr]);\n }\n\n const style = options._style;\n for (const prop of MH.keysOf(style)) {\n setStylePropNow(overlay, prop, style[prop]);\n }\n\n return overlay;\n};\n"],"mappings":"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","ignoreList":[]}