@semcore/base-components 17.0.0-prerelease.30 → 17.0.0-prerelease.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/lib/cjs/components/ellipsis/Ellipsis.types.js.map +1 -1
- package/lib/cjs/components/ellipsis/EllipsisManager.js +16 -3
- package/lib/cjs/components/ellipsis/EllipsisManager.js.map +1 -1
- package/lib/cjs/components/hint/Hint.js +32 -26
- package/lib/cjs/components/hint/Hint.js.map +1 -1
- package/lib/cjs/components/hint/Middleware.js +4 -2
- package/lib/cjs/components/hint/Middleware.js.map +1 -1
- package/lib/cjs/components/hint/style/hint.shadow.css +3 -2
- package/lib/es6/components/ellipsis/Ellipsis.types.js.map +1 -1
- package/lib/es6/components/ellipsis/EllipsisManager.js +16 -3
- package/lib/es6/components/ellipsis/EllipsisManager.js.map +1 -1
- package/lib/es6/components/hint/Hint.js +32 -26
- package/lib/es6/components/hint/Hint.js.map +1 -1
- package/lib/es6/components/hint/Middleware.js +4 -2
- package/lib/es6/components/hint/Middleware.js.map +1 -1
- package/lib/es6/components/hint/style/hint.shadow.css +3 -2
- package/lib/esm/components/ellipsis/EllipsisManager.mjs +17 -4
- package/lib/esm/components/flex-box/invalid-state-box/InvalidStateBox.mjs +1 -2
- package/lib/esm/components/flex-box/screen-reader-only-box/ScreenReaderOnlyBox.mjs +1 -2
- package/lib/esm/components/hint/Hint.mjs +33 -28
- package/lib/esm/components/hint/Middleware.mjs +4 -2
- package/lib/esm/components/hint/style/hint.shadow.css +3 -2
- package/lib/esm/components/neighbor-location/NeighborLocation.mjs +1 -1
- package/lib/esm/index.mjs +24 -24
- package/lib/types/components/ellipsis/Ellipsis.types.d.ts +5 -5
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ellipsis.types.js","names":[],"sources":["../../../../src/components/ellipsis/Ellipsis.types.ts"],"sourcesContent":["type CommonEllipsisSettings = {\n /**\n * Common container element for few ellipsises for improve performance.\n */\n containerElement?: HTMLElement;\n\n /**\n * Function for crop or increase a container width. For example, for tables with accordion\n */\n recalculateContainerWidth?: (width: number) => number;\n\n /**\n * Flag to enable observing changes in cropped texts.\n * @default false\n */\n observeChildrenMutations?: boolean;\n};\n\
|
|
1
|
+
{"version":3,"file":"Ellipsis.types.js","names":[],"sources":["../../../../src/components/ellipsis/Ellipsis.types.ts"],"sourcesContent":["export type CommonEllipsisSettings = {\n /**\n * Common container element for few ellipsises for improve performance.\n */\n containerElement?: HTMLElement;\n\n /**\n * Function for crop or increase a container width. For example, for tables with accordion\n */\n recalculateContainerWidth?: (width: number) => number;\n\n /**\n * Flag to enable observing changes in cropped texts.\n * @default false\n */\n observeChildrenMutations?: boolean;\n};\n\nexport type MiddleCroppedEllipsisSettings = {\n /**\n * Crop position\n * @default end\n */\n cropPosition: 'middle';\n\n maxLine?: never;\n\n /**\n * Count of last symbols which shouldn't be cropped.\n */\n lastRequiredSymbols?: number;\n};\n\nexport type EndCroppedEllipsisSettings = {\n /**\n * Crop position\n * @default end\n */\n cropPosition?: 'end';\n /**\n * Lines count in multiline Ellipsis.\n * Applies only for `cropPosition = 'end'`\n * @default 1\n */\n maxLine?: number;\n\n lastRequiredSymbols?: never;\n};\n\nexport type EllipsisSettings = (EndCroppedEllipsisSettings | MiddleCroppedEllipsisSettings) & CommonEllipsisSettings;\n\nexport type Events = {\n isEllipsized: (isEllipsized: boolean) => void;\n};\n\nexport type TruncateOptions = {\n text?: string;\n containerWidth?: number;\n font?: string;\n direction?: 'start' | 'end';\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -173,14 +173,27 @@ class EllipsisManager {
|
|
|
173
173
|
handleCopy(event) {
|
|
174
174
|
if (event instanceof ClipboardEvent && event.target instanceof HTMLElement && event.target.parentElement instanceof HTMLElement) {
|
|
175
175
|
const selection = window.getSelection();
|
|
176
|
-
|
|
176
|
+
let ellipsis = this.ellipsisEntities.get(event.target);
|
|
177
|
+
if (event.target.getAttribute('aria-hidden') === 'true') {
|
|
178
|
+
ellipsis = this.ellipsisEntities.get(event.target.parentElement);
|
|
179
|
+
}
|
|
177
180
|
if (selection && ellipsis) {
|
|
178
181
|
const ellipsisSpans = ellipsis.element.childNodes;
|
|
179
182
|
const croppedSpan = ellipsisSpans[0];
|
|
183
|
+
const lastSpan = ellipsisSpans[ellipsisSpans.length - 2];
|
|
180
184
|
const fullSpan = ellipsisSpans[ellipsisSpans.length - 1];
|
|
181
|
-
const
|
|
182
|
-
const
|
|
185
|
+
const croppedLength = croppedSpan?.textContent?.length;
|
|
186
|
+
const lastLength = lastSpan?.textContent?.length;
|
|
187
|
+
const anchorInCropped = selection.anchorNode === croppedSpan?.childNodes[0];
|
|
188
|
+
const anchorInLast = selection.anchorNode === lastSpan?.childNodes[0];
|
|
189
|
+
const focusInCropped = selection.focusNode === croppedSpan?.childNodes[0];
|
|
190
|
+
const focusInLast = selection.focusNode === lastSpan?.childNodes[0];
|
|
191
|
+
const anchorOffset = selection.anchorOffset;
|
|
192
|
+
const focusOffset = selection.focusOffset;
|
|
193
|
+
const isCroppedSelected = anchorInCropped && focusOffset === croppedLength || anchorInLast && anchorOffset === lastLength && focusInCropped && focusOffset === 0 || focusInLast && focusOffset === lastLength;
|
|
194
|
+
const isFullSelected = selection.focusNode === fullSpan?.childNodes[0] && focusOffset === fullSpan?.textContent?.length;
|
|
183
195
|
if (fullSpan?.textContent && (!(selection.focusNode instanceof Text) || isCroppedSelected || isFullSelected)) {
|
|
196
|
+
event.preventDefault();
|
|
184
197
|
navigator.clipboard.writeText(fullSpan.textContent);
|
|
185
198
|
}
|
|
186
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EllipsisManager.js","names":["_canUseDOM","_interopRequireDefault","require","_Queue","isSafari","exports","canUseDOM","test","navigator","userAgent","EllipsisManager","constructor","_defineProperty2","default","WeakMap","WeakSet","queue","Queue","queueTimeout","undefined","handleResizeObserver","bind","handleMutationObserver","handleIntersectionObserver","handleCopy","ro","ResizeObserver","io","IntersectionObserver","root","scrollMargin","threshold","document","addEventListener","addEllipsis","ellipsis","element","ellipsisEntities","has","set","observe","observeChildrenMutations","mo","MutationObserver","characterData","subtree","characterDataOldValue","childList","ellipsisMutationObservers","containerElement","ellipsisSet","containersMap","get","Set","add","removeEllipsis","delete","handledElements","unobserve","disconnect","size","entries","forEach","entry","target","HTMLElement","firstEllipsis","values","next","value","containersApproximateSizeMap","getTruncateSize","el","cropPosition","setApproximateSize","handleChanges","mutations","length","type","text","Text","mutation","addedNodes","removedNodes","HTMLSpanElement","parent","parentElement","textContent","wholeText","scheduler","schedule","isIntersecting","container","approximateSize","slice","event","ClipboardEvent","selection","window","getSelection","ellipsisSpans","childNodes","croppedSpan","fullSpan","isCroppedSelected","anchorNode","focusOffset","focusNode","isFullSelected","clipboard","writeText","ellipsisManager"],"sources":["../../../../src/components/ellipsis/EllipsisManager.ts"],"sourcesContent":["import canUseDOM from '@semcore/core/lib/utils/canUseDOM';\n\nimport type { Ellipsis } from './Ellipsis';\nimport { Queue } from './Queue';\n\nexport const isSafari = canUseDOM() ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;\n\nclass EllipsisManager {\n private readonly queue: Queue;\n\n private ro: ResizeObserver | undefined;\n private io: IntersectionObserver | undefined;\n\n private readonly containersMap = new WeakMap<HTMLElement, Set<Ellipsis>>();\n private readonly containersApproximateSizeMap = new WeakMap<HTMLElement, [number, number]>();\n\n private handledElements = new WeakSet<HTMLElement>();\n private ellipsisEntities = new WeakMap<HTMLElement, Ellipsis>();\n private ellipsisMutationObservers = new WeakMap<HTMLElement, MutationObserver>();\n\n constructor() {\n this.queue = new Queue(isSafari ? { queueTimeout: 16 } : undefined);\n\n this.handleResizeObserver = this.handleResizeObserver.bind(this);\n this.handleMutationObserver = this.handleMutationObserver.bind(this);\n this.handleIntersectionObserver = this.handleIntersectionObserver.bind(this);\n\n this.handleCopy = this.handleCopy.bind(this);\n\n if (canUseDOM()) {\n this.ro = new ResizeObserver(this.handleResizeObserver);\n this.io = new IntersectionObserver(this.handleIntersectionObserver, {\n root: null,\n // @ts-ignore\n scrollMargin: '500px 500px 500px 500px',\n threshold: 0.1,\n });\n document.addEventListener('copy', this.handleCopy);\n }\n }\n\n public addEllipsis(ellipsis: Ellipsis) {\n const element = ellipsis.element;\n\n if (!this.ellipsisEntities.has(element)) {\n this.ellipsisEntities.set(element, ellipsis);\n\n this.io?.observe(element);\n\n if (ellipsis.observeChildrenMutations && canUseDOM()) {\n const mo = new MutationObserver(this.handleMutationObserver);\n mo.observe(element, {\n characterData: true,\n subtree: true,\n characterDataOldValue: true,\n childList: true,\n });\n\n this.ellipsisMutationObservers.set(element, mo);\n }\n }\n\n if (ellipsis.containerElement !== undefined) {\n const ellipsisSet = this.containersMap.get(ellipsis.containerElement) ?? new Set();\n\n ellipsisSet.add(ellipsis);\n\n this.containersMap.set(ellipsis.containerElement, ellipsisSet);\n }\n }\n\n public removeEllipsis(ellipsis: Ellipsis) {\n const element = ellipsis.element;\n\n if (this.ellipsisEntities.has(element)) {\n this.ellipsisEntities.delete(element);\n this.handledElements.delete(element);\n\n this.io?.unobserve(element);\n this.ro?.unobserve(element);\n this.ellipsisMutationObservers.get(element)?.disconnect();\n this.ellipsisMutationObservers.delete(element);\n }\n\n if (ellipsis.containerElement) {\n const ellipsisSet = this.containersMap.get(ellipsis.containerElement);\n if (ellipsisSet) {\n ellipsisSet.delete(ellipsis);\n\n if (ellipsisSet.size === 0) {\n this.containersMap.delete(ellipsis.containerElement);\n } else {\n this.containersMap.set(ellipsis.containerElement, ellipsisSet);\n }\n }\n }\n }\n\n private handleResizeObserver(entries: ResizeObserverEntry[]) {\n entries.forEach((entry) => {\n const target = entry.target;\n\n if (target instanceof HTMLElement) {\n const ellipsisSet = this.containersMap.get(target);\n if (ellipsisSet !== undefined) {\n const firstEllipsis = ellipsisSet.values().next().value;\n if (firstEllipsis) {\n this.containersApproximateSizeMap.set(target, firstEllipsis.getTruncateSize());\n }\n\n for (const el of ellipsisSet.values()) {\n const ellipsis = this.ellipsisEntities.get(el.element);\n\n if (ellipsis) {\n if (ellipsis.cropPosition === 'middle') {\n this.setApproximateSize(target, ellipsis);\n }\n\n this.queue.add(ellipsis.handleChanges);\n }\n }\n } else {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis) {\n this.queue.add(ellipsis.handleChanges);\n }\n }\n }\n });\n }\n\n private handleMutationObserver(mutations: MutationRecord[]) {\n if (mutations.length === 1) {\n const { type, target } = mutations[0];\n\n let text: Text | undefined;\n\n if (type === 'characterData' && target instanceof Text) {\n text = target;\n } else if (type === 'childList') {\n const mutation = mutations[0];\n const addedNodes = mutation.addedNodes;\n const removedNodes = mutation.removedNodes;\n if (addedNodes.length === 1 && addedNodes[0] instanceof Text && removedNodes.length === 2 && removedNodes[0] instanceof HTMLSpanElement && removedNodes[1] instanceof HTMLSpanElement) {\n text = addedNodes[0];\n }\n }\n\n const parent = text?.parentElement;\n if (text && parent instanceof HTMLElement) {\n const ellipsis = this.ellipsisEntities.get(parent);\n\n if (ellipsis) {\n ellipsis.textContent = text.wholeText;\n ellipsis?.scheduler.schedule(ellipsis?.handleChanges);\n }\n }\n }\n }\n\n private handleIntersectionObserver(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const target = entry.target;\n\n if (target instanceof HTMLElement) {\n if (entry.isIntersecting === true && !this.handledElements.has(target)) {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis?.containerElement !== undefined) {\n this.ro?.observe(ellipsis?.containerElement);\n\n if (ellipsis.cropPosition === 'middle') {\n this.setApproximateSize(target, ellipsis);\n }\n\n this.queue.add(ellipsis.handleChanges);\n } else {\n this.ro?.observe(target);\n }\n\n this.handledElements.add(target);\n } else if (entry.isIntersecting === false && this.handledElements.has(target)) {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis) {\n this.queue.delete(ellipsis.handleChanges);\n }\n\n this.handledElements.delete(target);\n\n this.ro?.unobserve(target);\n this.ellipsisMutationObservers.get(target)?.disconnect();\n }\n }\n });\n }\n\n private setApproximateSize(container: HTMLElement, ellipsis: Ellipsis) {\n const approximateSize = this.containersApproximateSizeMap.get(container);\n\n if (approximateSize && ellipsis.textContent.length > approximateSize[0] + approximateSize[1]) {\n ellipsis.element.textContent = ellipsis?.textContent.slice(0, approximateSize[0]) + '...' + ellipsis?.textContent.slice(-1 * approximateSize[1]);\n }\n }\n\n private handleCopy(event: ClipboardEvent) {\n if (event instanceof ClipboardEvent && event.target instanceof HTMLElement && event.target.parentElement instanceof HTMLElement) {\n const selection = window.getSelection();\n const ellipsis = this.ellipsisEntities.get(event.target.parentElement);\n\n if (selection && ellipsis) {\n const ellipsisSpans = ellipsis.element.childNodes;\n const croppedSpan = ellipsisSpans[0];\n const fullSpan = ellipsisSpans[ellipsisSpans.length - 1];\n\n const isCroppedSelected = (selection.anchorNode === croppedSpan?.childNodes[0] && selection.focusOffset === croppedSpan?.textContent?.length) || (selection.focusNode === croppedSpan?.childNodes[0] && selection.focusOffset === 0);\n const isFullSelected = selection.focusNode === fullSpan?.childNodes[0] && selection.focusOffset === fullSpan?.textContent?.length;\n\n if (fullSpan?.textContent && (!(selection.focusNode instanceof Text) || isCroppedSelected || isFullSelected)) {\n navigator.clipboard.writeText(fullSpan.textContent);\n }\n }\n }\n }\n}\n\nexport const ellipsisManager = new EllipsisManager();\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"EllipsisManager.js","names":["_canUseDOM","_interopRequireDefault","require","_Queue","isSafari","exports","canUseDOM","test","navigator","userAgent","EllipsisManager","constructor","_defineProperty2","default","WeakMap","WeakSet","queue","Queue","queueTimeout","undefined","handleResizeObserver","bind","handleMutationObserver","handleIntersectionObserver","handleCopy","ro","ResizeObserver","io","IntersectionObserver","root","scrollMargin","threshold","document","addEventListener","addEllipsis","ellipsis","element","ellipsisEntities","has","set","observe","observeChildrenMutations","mo","MutationObserver","characterData","subtree","characterDataOldValue","childList","ellipsisMutationObservers","containerElement","ellipsisSet","containersMap","get","Set","add","removeEllipsis","delete","handledElements","unobserve","disconnect","size","entries","forEach","entry","target","HTMLElement","firstEllipsis","values","next","value","containersApproximateSizeMap","getTruncateSize","el","cropPosition","setApproximateSize","handleChanges","mutations","length","type","text","Text","mutation","addedNodes","removedNodes","HTMLSpanElement","parent","parentElement","textContent","wholeText","scheduler","schedule","isIntersecting","container","approximateSize","slice","event","ClipboardEvent","selection","window","getSelection","getAttribute","ellipsisSpans","childNodes","croppedSpan","lastSpan","fullSpan","croppedLength","lastLength","anchorInCropped","anchorNode","anchorInLast","focusInCropped","focusNode","focusInLast","anchorOffset","focusOffset","isCroppedSelected","isFullSelected","preventDefault","clipboard","writeText","ellipsisManager"],"sources":["../../../../src/components/ellipsis/EllipsisManager.ts"],"sourcesContent":["import canUseDOM from '@semcore/core/lib/utils/canUseDOM';\n\nimport type { Ellipsis } from './Ellipsis';\nimport { Queue } from './Queue';\n\nexport const isSafari = canUseDOM() ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;\n\nclass EllipsisManager {\n private readonly queue: Queue;\n\n private ro: ResizeObserver | undefined;\n private io: IntersectionObserver | undefined;\n\n private readonly containersMap = new WeakMap<HTMLElement, Set<Ellipsis>>();\n private readonly containersApproximateSizeMap = new WeakMap<HTMLElement, [number, number]>();\n\n private handledElements = new WeakSet<HTMLElement>();\n private ellipsisEntities = new WeakMap<HTMLElement, Ellipsis>();\n private ellipsisMutationObservers = new WeakMap<HTMLElement, MutationObserver>();\n\n constructor() {\n this.queue = new Queue(isSafari ? { queueTimeout: 16 } : undefined);\n\n this.handleResizeObserver = this.handleResizeObserver.bind(this);\n this.handleMutationObserver = this.handleMutationObserver.bind(this);\n this.handleIntersectionObserver = this.handleIntersectionObserver.bind(this);\n\n this.handleCopy = this.handleCopy.bind(this);\n\n if (canUseDOM()) {\n this.ro = new ResizeObserver(this.handleResizeObserver);\n this.io = new IntersectionObserver(this.handleIntersectionObserver, {\n root: null,\n // @ts-ignore\n scrollMargin: '500px 500px 500px 500px',\n threshold: 0.1,\n });\n document.addEventListener('copy', this.handleCopy);\n }\n }\n\n public addEllipsis(ellipsis: Ellipsis) {\n const element = ellipsis.element;\n\n if (!this.ellipsisEntities.has(element)) {\n this.ellipsisEntities.set(element, ellipsis);\n\n this.io?.observe(element);\n\n if (ellipsis.observeChildrenMutations && canUseDOM()) {\n const mo = new MutationObserver(this.handleMutationObserver);\n mo.observe(element, {\n characterData: true,\n subtree: true,\n characterDataOldValue: true,\n childList: true,\n });\n\n this.ellipsisMutationObservers.set(element, mo);\n }\n }\n\n if (ellipsis.containerElement !== undefined) {\n const ellipsisSet = this.containersMap.get(ellipsis.containerElement) ?? new Set();\n\n ellipsisSet.add(ellipsis);\n\n this.containersMap.set(ellipsis.containerElement, ellipsisSet);\n }\n }\n\n public removeEllipsis(ellipsis: Ellipsis) {\n const element = ellipsis.element;\n\n if (this.ellipsisEntities.has(element)) {\n this.ellipsisEntities.delete(element);\n this.handledElements.delete(element);\n\n this.io?.unobserve(element);\n this.ro?.unobserve(element);\n this.ellipsisMutationObservers.get(element)?.disconnect();\n this.ellipsisMutationObservers.delete(element);\n }\n\n if (ellipsis.containerElement) {\n const ellipsisSet = this.containersMap.get(ellipsis.containerElement);\n if (ellipsisSet) {\n ellipsisSet.delete(ellipsis);\n\n if (ellipsisSet.size === 0) {\n this.containersMap.delete(ellipsis.containerElement);\n } else {\n this.containersMap.set(ellipsis.containerElement, ellipsisSet);\n }\n }\n }\n }\n\n private handleResizeObserver(entries: ResizeObserverEntry[]) {\n entries.forEach((entry) => {\n const target = entry.target;\n\n if (target instanceof HTMLElement) {\n const ellipsisSet = this.containersMap.get(target);\n if (ellipsisSet !== undefined) {\n const firstEllipsis = ellipsisSet.values().next().value;\n if (firstEllipsis) {\n this.containersApproximateSizeMap.set(target, firstEllipsis.getTruncateSize());\n }\n\n for (const el of ellipsisSet.values()) {\n const ellipsis = this.ellipsisEntities.get(el.element);\n\n if (ellipsis) {\n if (ellipsis.cropPosition === 'middle') {\n this.setApproximateSize(target, ellipsis);\n }\n\n this.queue.add(ellipsis.handleChanges);\n }\n }\n } else {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis) {\n this.queue.add(ellipsis.handleChanges);\n }\n }\n }\n });\n }\n\n private handleMutationObserver(mutations: MutationRecord[]) {\n if (mutations.length === 1) {\n const { type, target } = mutations[0];\n\n let text: Text | undefined;\n\n if (type === 'characterData' && target instanceof Text) {\n text = target;\n } else if (type === 'childList') {\n const mutation = mutations[0];\n const addedNodes = mutation.addedNodes;\n const removedNodes = mutation.removedNodes;\n if (addedNodes.length === 1 && addedNodes[0] instanceof Text && removedNodes.length === 2 && removedNodes[0] instanceof HTMLSpanElement && removedNodes[1] instanceof HTMLSpanElement) {\n text = addedNodes[0];\n }\n }\n\n const parent = text?.parentElement;\n if (text && parent instanceof HTMLElement) {\n const ellipsis = this.ellipsisEntities.get(parent);\n\n if (ellipsis) {\n ellipsis.textContent = text.wholeText;\n ellipsis?.scheduler.schedule(ellipsis?.handleChanges);\n }\n }\n }\n }\n\n private handleIntersectionObserver(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const target = entry.target;\n\n if (target instanceof HTMLElement) {\n if (entry.isIntersecting === true && !this.handledElements.has(target)) {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis?.containerElement !== undefined) {\n this.ro?.observe(ellipsis?.containerElement);\n\n if (ellipsis.cropPosition === 'middle') {\n this.setApproximateSize(target, ellipsis);\n }\n\n this.queue.add(ellipsis.handleChanges);\n } else {\n this.ro?.observe(target);\n }\n\n this.handledElements.add(target);\n } else if (entry.isIntersecting === false && this.handledElements.has(target)) {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis) {\n this.queue.delete(ellipsis.handleChanges);\n }\n\n this.handledElements.delete(target);\n\n this.ro?.unobserve(target);\n this.ellipsisMutationObservers.get(target)?.disconnect();\n }\n }\n });\n }\n\n private setApproximateSize(container: HTMLElement, ellipsis: Ellipsis) {\n const approximateSize = this.containersApproximateSizeMap.get(container);\n\n if (approximateSize && ellipsis.textContent.length > approximateSize[0] + approximateSize[1]) {\n ellipsis.element.textContent = ellipsis?.textContent.slice(0, approximateSize[0]) + '...' + ellipsis?.textContent.slice(-1 * approximateSize[1]);\n }\n }\n\n private handleCopy(event: ClipboardEvent) {\n if (event instanceof ClipboardEvent && event.target instanceof HTMLElement && event.target.parentElement instanceof HTMLElement) {\n const selection = window.getSelection();\n let ellipsis = this.ellipsisEntities.get(event.target);\n\n if (event.target.getAttribute('aria-hidden') === 'true') {\n ellipsis = this.ellipsisEntities.get(event.target.parentElement);\n }\n\n if (selection && ellipsis) {\n const ellipsisSpans = ellipsis.element.childNodes;\n const croppedSpan = ellipsisSpans[0];\n const lastSpan = ellipsisSpans[ellipsisSpans.length - 2];\n const fullSpan = ellipsisSpans[ellipsisSpans.length - 1];\n\n const croppedLength = croppedSpan?.textContent?.length;\n const lastLength = lastSpan?.textContent?.length;\n\n const anchorInCropped = selection.anchorNode === croppedSpan?.childNodes[0];\n const anchorInLast = selection.anchorNode === lastSpan?.childNodes[0];\n const focusInCropped = selection.focusNode === croppedSpan?.childNodes[0];\n const focusInLast = selection.focusNode === lastSpan?.childNodes[0];\n\n const anchorOffset = selection.anchorOffset;\n const focusOffset = selection.focusOffset;\n\n const isCroppedSelected =\n (anchorInCropped && focusOffset === croppedLength) ||\n (anchorInLast && anchorOffset === lastLength && focusInCropped && focusOffset === 0) ||\n (focusInLast && focusOffset === lastLength);\n\n const isFullSelected = selection.focusNode === fullSpan?.childNodes[0] && focusOffset === fullSpan?.textContent?.length;\n\n if (fullSpan?.textContent && (!(selection.focusNode instanceof Text) || isCroppedSelected || isFullSelected)) {\n event.preventDefault();\n navigator.clipboard.writeText(fullSpan.textContent);\n }\n }\n }\n }\n}\n\nexport const ellipsisManager = new EllipsisManager();\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -49,16 +49,16 @@ const keyframes = (/*__reshadow_css_start__*/_core.sstyled.insert(/*__inner_css_
|
|
|
49
49
|
"@transform-exit": "transform-exit_1ns4f"
|
|
50
50
|
});
|
|
51
51
|
/*!__reshadow-styles__:"./style/hint.shadow.css"*/
|
|
52
|
-
const styles = (/*__reshadow_css_start__*/_core.sstyled.insert(/*__inner_css_start__*/".
|
|
52
|
+
const styles = (/*__reshadow_css_start__*/_core.sstyled.insert(/*__inner_css_start__*/".___SHintPopper_19wzn_gg_{width:-moz-max-content;width:max-content;position:absolute;top:0;left:0;max-width:250px;word-wrap:break-word;opacity:0;pointer-events:none;background:var(--intergalactic-tooltip-invert, #191b23);border:1px solid var(--intergalactic-border-tooltip-invert, #6c6e79);color:var(--intergalactic-text-primary-invert, #ffffff);padding:var(--intergalactic-spacing-1x, 4px) var(--intergalactic-spacing-2x, 8px);border-radius:var(--intergalactic-rounded-small, 4px);font-size:var(--intergalactic-fs-100, 12px);line-height:var(--intergalactic-lh-100, 133%);box-shadow:var(--intergalactic-box-shadow-popper, 0px 1px 12px 0px rgba(25, 27, 35, 0.15));animation-fill-mode:both;animation-timing-function:var(--timingFunction_19wzn);animation-duration:var(--durationFinalize_19wzn);animation-name:var(--keyframesFinalize_19wzn)}.___SHintPopper_19wzn_gg_.__visible_19wzn_gg_{animation-duration:var(--durationInitialize_19wzn);animation-name:var(--keyframesInitialize_19wzn)}@media (prefers-reduced-motion){.___SHintPopper_19wzn_gg_,.___SHintPopper_19wzn_gg_.__visible_19wzn_gg_{animation-timing-function:step-end;animation-iteration-count:1}}", /*__inner_css_end__*/"19wzn_gg_"),
|
|
53
53
|
/*__reshadow_css_end__*/
|
|
54
54
|
{
|
|
55
|
-
"__SHintPopper": "
|
|
56
|
-
"_visible": "
|
|
57
|
-
"--timingFunction": "--
|
|
58
|
-
"--durationFinalize": "--
|
|
59
|
-
"--keyframesFinalize": "--
|
|
60
|
-
"--durationInitialize": "--
|
|
61
|
-
"--keyframesInitialize": "--
|
|
55
|
+
"__SHintPopper": "___SHintPopper_19wzn_gg_",
|
|
56
|
+
"_visible": "__visible_19wzn_gg_",
|
|
57
|
+
"--timingFunction": "--timingFunction_19wzn",
|
|
58
|
+
"--durationFinalize": "--durationFinalize_19wzn",
|
|
59
|
+
"--keyframesFinalize": "--keyframesFinalize_19wzn",
|
|
60
|
+
"--durationInitialize": "--durationInitialize_19wzn",
|
|
61
|
+
"--keyframesInitialize": "--keyframesInitialize_19wzn"
|
|
62
62
|
});
|
|
63
63
|
const enhances = [(0, _zIndexStacking.zIndexStackingEnhance)('z-index-tooltip'), (0, _useCssVariable.cssVariableEnhance)({
|
|
64
64
|
variable: '--intergalactic-duration-popper',
|
|
@@ -92,7 +92,7 @@ class HintPopperRoot extends _core.Component {
|
|
|
92
92
|
this.handleMouseLeave = this.handleMouseLeave.bind(this);
|
|
93
93
|
this.handleKeyDown = this.handleKeyDown.bind(this);
|
|
94
94
|
this.state = {
|
|
95
|
-
innerVisible:
|
|
95
|
+
innerVisible: null,
|
|
96
96
|
calculatedPlacement: props.placement
|
|
97
97
|
};
|
|
98
98
|
}
|
|
@@ -184,7 +184,6 @@ class HintPopperRoot extends _core.Component {
|
|
|
184
184
|
left: `${x}px`,
|
|
185
185
|
top: `${y}px`
|
|
186
186
|
});
|
|
187
|
-
popperElement.style.visibility = 'visible';
|
|
188
187
|
this.setState({
|
|
189
188
|
innerVisible: true,
|
|
190
189
|
calculatedPlacement: placement
|
|
@@ -202,43 +201,50 @@ class HintPopperRoot extends _core.Component {
|
|
|
202
201
|
if (this.showTimer) {
|
|
203
202
|
clearTimeout(this.showTimer);
|
|
204
203
|
}
|
|
205
|
-
this.
|
|
206
|
-
innerVisible: false
|
|
207
|
-
});
|
|
208
|
-
this.hideTimer = window.setTimeout(() => {
|
|
209
|
-
this.hintRef.current?.style.setProperty('visibility', 'hidden');
|
|
210
|
-
this.handlers.visible(false);
|
|
204
|
+
if (this.state.innerVisible) {
|
|
211
205
|
this.setState({
|
|
212
|
-
innerVisible:
|
|
206
|
+
innerVisible: false
|
|
213
207
|
});
|
|
214
|
-
|
|
208
|
+
this.hideTimer = window.setTimeout(() => {
|
|
209
|
+
this.handlers.visible(false);
|
|
210
|
+
this.setState({
|
|
211
|
+
innerVisible: null
|
|
212
|
+
});
|
|
213
|
+
}, hideTimeout);
|
|
214
|
+
}
|
|
215
215
|
}
|
|
216
216
|
handleFocus(e) {
|
|
217
|
-
if (e.target
|
|
217
|
+
if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e) && _core.lastInteraction.isKeyboard()) {
|
|
218
218
|
this.showHint(e.target);
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
handleBlur(e) {
|
|
222
|
-
if (e.target
|
|
222
|
+
if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e)) {
|
|
223
223
|
this.hideHint();
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
handleKeyDown(e) {
|
|
227
|
-
if (e.key === 'Escape' && e.target
|
|
227
|
+
if (e.key === 'Escape' && this.isCompatibleElement(e.target) && this.sameAsTrigger(e) && this.state.innerVisible) {
|
|
228
228
|
e.stopPropagation();
|
|
229
229
|
this.hideHint();
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
232
|
handleMouseEnter(e) {
|
|
233
|
-
if (e.target
|
|
233
|
+
if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e)) {
|
|
234
234
|
this.showHint(e.target, e);
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
handleMouseLeave(e) {
|
|
238
|
-
if (e.target
|
|
238
|
+
if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e)) {
|
|
239
239
|
this.hideHint();
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
|
+
isCompatibleElement(target) {
|
|
243
|
+
return target instanceof HTMLElement || target instanceof SVGElement;
|
|
244
|
+
}
|
|
245
|
+
sameAsTrigger(e) {
|
|
246
|
+
return this.asProps.triggerRef.current === e.target;
|
|
247
|
+
}
|
|
242
248
|
keyframesKey(placement) {
|
|
243
249
|
if (!placement) {
|
|
244
250
|
return 'opacity';
|
|
@@ -289,7 +295,7 @@ class HintPopperRoot extends _core.Component {
|
|
|
289
295
|
if ((0, _canUseDOM.default)()) {
|
|
290
296
|
this.setTriggerAriaLabel();
|
|
291
297
|
}
|
|
292
|
-
if (!visible) {
|
|
298
|
+
if (!visible && innerVisible === null) {
|
|
293
299
|
return null;
|
|
294
300
|
}
|
|
295
301
|
const duration = propToArray(Number(this.asProps.duration));
|
|
@@ -306,8 +312,8 @@ class HintPopperRoot extends _core.Component {
|
|
|
306
312
|
"durationInitialize": `${duration[0]}ms`,
|
|
307
313
|
"durationFinalize": `${duration[1]}ms`,
|
|
308
314
|
"timingFunction": timingFunction,
|
|
309
|
-
"keyframesInitialize": keyframes[`@${this.keyframesKey(calculatedPlacement)}-in`],
|
|
310
|
-
"keyframesFinalize": keyframes[`@${this.keyframesKey(calculatedPlacement)}-out`],
|
|
315
|
+
"keyframesInitialize": innerVisible === true ? keyframes[`@${this.keyframesKey(calculatedPlacement)}-in`] : undefined,
|
|
316
|
+
"keyframesFinalize": innerVisible === false ? keyframes[`@${this.keyframesKey(calculatedPlacement)}-out`] : undefined,
|
|
311
317
|
"use:data-ui-name": 'Hint'
|
|
312
318
|
}, _ref)
|
|
313
319
|
}), /*#__PURE__*/_react.default.createElement(Children, _ref2.cn("Children", {}))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hint.js","names":["_core","require","_dom","_canUseDOM","_interopRequireDefault","_getAccessibleName","_useCssVariable","_zIndexStacking","_react","_Middleware","_flexBox","_portal","keyframes","sstyled","insert","styles","enhances","zIndexStackingEnhance","cssVariableEnhance","variable","fallback","map","v","Number","parseInt","toString","prop","propToArray","Array","isArray","keyframesMap","Map","HintPopperRoot","Component","constructor","props","_defineProperty2","default","React","createRef","handleFocus","bind","handleBlur","handleMouseEnter","handleMouseLeave","handleKeyDown","state","innerVisible","visible","calculatedPlacement","placement","uncontrolledProps","componentDidMount","triggerRef","children","asProps","trigger","current","subscribe","componentWillUnmount","unsubscribe","componentDidUpdate","prevProps","requestAnimationFrame","showHint","hideHint","addEventListener","removeEventListener","node","mouseEvent","timeout","showTimeout","hideTimer","clearTimeout","showTimer","window","setTimeout","handlers","popperElement","hintRef","middleware","offset","flip","shift","padding","verticalPlacement","startsWith","undefined","push","Middleware","verticalCursorAnchoring","x","clientX","computePosition","then","y","Object","assign","style","left","top","visibility","setState","hideTimeout","setProperty","e","target","HTMLElement","lastInteraction","isKeyboard","key","stopPropagation","keyframesKey","has","get","keyframe","set","setTriggerAriaLabel","textContent","ariaLabel","getAccessibleName","label","setAttribute","render","_ref","_ref2","SHintPopper","Box","Children","parentZIndexStacking","timingFunction","canUseDOM","duration","createElement","Portal","cn","assignProps","defaultVisible","Hint","exports","createComponent"],"sources":["../../../../src/components/hint/Hint.tsx"],"sourcesContent":["import { computePosition, flip, offset, shift, type Placement } from '@floating-ui/dom';\nimport { createComponent, Root, sstyled, Component, lastInteraction } from '@semcore/core';\nimport canUseDOM from '@semcore/core/lib/utils/canUseDOM';\nimport { getAccessibleName } from '@semcore/core/lib/utils/getAccessibleName';\nimport { cssVariableEnhance } from '@semcore/core/lib/utils/useCssVariable';\nimport { zIndexStackingEnhance } from '@semcore/core/lib/utils/zIndexStacking';\nimport type { DataType } from 'csstype';\nimport React from 'react';\n\nimport { Middleware } from './Middleware';\nimport keyframes from '../animation/style/keyframes.shadow.css';\nimport { Box } from '../flex-box';\nimport { Portal } from '../portal';\nimport styles from './style/hint.shadow.css';\n\ntype Handlers = {\n visible: null;\n};\n\nexport type SimpleHintPopperProps = {\n /** Ref to the trigger element */\n triggerRef: React.RefObject<HTMLElement | null>;\n /**\n * The position of the popper relative to the trigger that called it.\n * @default top\n */\n placement?: Placement;\n /**\n * Timer to show and hide the popper\n * @default [500, 500]\n */\n timeout?: DefaultProps['timeout'];\n /**\n * Hint content.\n * Better to use here some short text.\n * */\n children: React.ReactNode;\n\n /** Popper visibility value */\n visible?: boolean;\n /** Default popper visibility\n * @default false */\n defaultVisible?: boolean;\n /** Function called when visibility changes */\n onVisibleChange?: (visible: boolean, e?: Event) => boolean | void;\n};\n\ntype DefaultProps = {\n defaultVisible?: boolean;\n timeout: number | [number, number];\n timingFunction: DataType.EasingFunction;\n placement?: Placement;\n};\n\ntype State = {\n innerVisible: boolean | null;\n calculatedPlacement?: Placement;\n};\n\nconst enhances = [\n zIndexStackingEnhance('z-index-tooltip'),\n cssVariableEnhance({\n variable: '--intergalactic-duration-popper',\n fallback: '200',\n map: (v: string) => Number.parseInt(v, 10).toString(),\n prop: 'duration',\n }),\n cssVariableEnhance({\n variable: '--intergalactic-spacing-1x',\n fallback: '4',\n map: (v: string) => Number.parseInt(v, 10).toString(),\n prop: 'offset',\n }),\n cssVariableEnhance({\n variable: '--intergalactic-spacing-1x',\n fallback: '4',\n map: (v: string) => Number.parseInt(v, 10).toString(),\n prop: 'padding',\n }),\n] as const;\n\nfunction propToArray(prop: number | [number, number]): [number, number] {\n return Array.isArray(prop) ? prop : [prop, prop];\n}\n\nconst keyframesMap = new Map<Placement, string>();\n\nclass HintPopperRoot extends Component<SimpleHintPopperProps, typeof enhances, Handlers, DefaultProps, State> {\n public readonly hintRef = React.createRef<HTMLElement>();\n\n static style = Object.assign(keyframes, styles);\n\n private showTimer?: number;\n private hideTimer?: number;\n\n static enhance = enhances;\n\n static defaultProps: DefaultProps = {\n defaultVisible: false,\n timeout: [500, 500],\n timingFunction: 'ease-out',\n placement: 'top',\n };\n\n constructor(props: SimpleHintPopperProps) {\n super(props);\n\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.state = {\n innerVisible: props.visible ?? null,\n calculatedPlacement: props.placement,\n };\n }\n\n uncontrolledProps() {\n return {\n visible: null,\n };\n }\n\n componentDidMount() {\n const { triggerRef, children } = this.asProps;\n const trigger = triggerRef.current;\n\n if (trigger && children) {\n this.subscribe(trigger);\n }\n }\n\n componentWillUnmount() {\n const trigger = this.asProps.triggerRef.current;\n\n if (trigger) {\n this.unsubscribe(trigger);\n }\n }\n\n componentDidUpdate(prevProps: SimpleHintPopperProps) {\n if (prevProps.visible !== this.props.visible) {\n requestAnimationFrame(() => {\n const trigger = this.props.triggerRef.current;\n\n if (this.props.visible && trigger) {\n this.showHint(trigger);\n } else {\n this.hideHint();\n }\n });\n }\n }\n\n private subscribe(trigger: HTMLElement) {\n trigger.addEventListener('focus', this.handleFocus);\n trigger.addEventListener('blur', this.handleBlur);\n trigger.addEventListener('mouseenter', this.handleMouseEnter);\n trigger.addEventListener('mouseleave', this.handleMouseLeave);\n trigger.addEventListener('keydown', this.handleKeyDown);\n\n if (this.asProps.visible) {\n this.showHint(trigger);\n }\n }\n\n private unsubscribe(trigger: HTMLElement) {\n trigger.removeEventListener('focus', this.handleFocus);\n trigger.removeEventListener('blur', this.handleBlur);\n trigger.removeEventListener('mouseenter', this.handleMouseEnter);\n trigger.removeEventListener('mouseleave', this.handleMouseLeave);\n trigger.removeEventListener('keydown', this.handleKeyDown);\n\n this.hideHint();\n }\n\n private showHint(node: HTMLElement, mouseEvent?: MouseEvent): void {\n const { placement, timeout } = this.asProps;\n\n const showTimeout = Array.isArray(timeout) ? timeout[0] : timeout;\n\n if (this.hideTimer) {\n clearTimeout(this.hideTimer);\n }\n\n this.showTimer = window.setTimeout(() => {\n this.handlers.visible(true);\n\n window.setTimeout(() => {\n const popperElement = this.hintRef.current;\n if (popperElement) {\n const middleware = [\n offset(Number(this.asProps.offset)),\n flip(),\n shift({ padding: Number(this.asProps.padding) }),\n ];\n const verticalPlacement = !placement || placement.startsWith('top') || placement.startsWith('bottom');\n if (mouseEvent !== undefined && verticalPlacement) {\n middleware.push(\n Middleware.verticalCursorAnchoring({ x: mouseEvent.clientX }),\n shift({ padding: Number(this.asProps.padding) }),\n );\n }\n\n computePosition(node, popperElement, {\n placement: placement,\n middleware,\n }).then(({ x, y, placement }) => {\n Object.assign(popperElement.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n popperElement.style.visibility = 'visible';\n\n this.setState({ innerVisible: true, calculatedPlacement: placement });\n });\n }\n }, 10);\n }, showTimeout);\n }\n\n private hideHint(): void {\n const { timeout } = this.asProps;\n\n const hideTimeout = Array.isArray(timeout) ? timeout[1] : timeout;\n\n if (this.showTimer) {\n clearTimeout(this.showTimer);\n }\n\n this.setState({ innerVisible: false });\n\n this.hideTimer = window.setTimeout(() => {\n this.hintRef.current?.style.setProperty('visibility', 'hidden');\n this.handlers.visible(false);\n this.setState({ innerVisible: null });\n }, hideTimeout);\n }\n\n private handleFocus(e: FocusEvent): void {\n if (e.target instanceof HTMLElement && this.asProps.triggerRef.current === e.target && lastInteraction.isKeyboard()) {\n this.showHint(e.target);\n }\n }\n\n private handleBlur(e: FocusEvent): void {\n if (e.target instanceof HTMLElement && this.asProps.triggerRef.current === e.target) {\n this.hideHint();\n }\n }\n\n private handleKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Escape' && e.target instanceof HTMLElement && this.asProps.triggerRef.current === e.target && this.state.innerVisible) {\n e.stopPropagation();\n this.hideHint();\n }\n }\n\n private handleMouseEnter(e: MouseEvent): void {\n if (e.target instanceof HTMLElement && this.asProps.triggerRef.current === e.target) {\n this.showHint(e.target, e);\n }\n }\n\n private handleMouseLeave(e: MouseEvent): void {\n if (e.target instanceof HTMLElement && this.asProps.triggerRef.current === e.target) {\n this.hideHint();\n }\n }\n\n private keyframesKey(placement?: Placement) {\n if (!placement) {\n return 'opacity';\n }\n\n if (keyframesMap.has(placement)) {\n return keyframesMap.get(placement)!;\n }\n\n let keyframe: string = 'opacity';\n\n if (placement.startsWith('left')) keyframe = 'scale-left';\n if (placement.startsWith('right')) keyframe = 'scale-right';\n if (placement.startsWith('bottom')) keyframe = 'scale-bottom';\n if (placement.startsWith('top')) keyframe = 'scale-top';\n\n keyframesMap.set(placement, keyframe);\n\n return keyframe;\n }\n\n private setTriggerAriaLabel() {\n const { triggerRef, children } = this.asProps;\n\n requestAnimationFrame(() => {\n const trigger = triggerRef.current;\n\n if (trigger) {\n const textContent = trigger.textContent;\n const ariaLabel = getAccessibleName(trigger);\n\n if (!textContent && !ariaLabel) {\n const label = (typeof children === 'string' || typeof children === 'number')\n ? children.toString()\n : (this.hintRef.current?.textContent ?? '');\n triggerRef.current?.setAttribute('aria-label', label);\n }\n }\n });\n }\n\n render() {\n const SHintPopper = Root;\n const { visible, Children, parentZIndexStacking, styles, timingFunction } = this.asProps;\n const { innerVisible, calculatedPlacement } = this.state;\n\n if (canUseDOM()) {\n this.setTriggerAriaLabel();\n }\n\n if (!visible) {\n return null;\n }\n\n const duration = propToArray(Number(this.asProps.duration));\n\n /* `visible && innerVisible === null` - is a condition to start showing right after hover/focus */\n const showHint = (visible && innerVisible === null) || innerVisible === true;\n\n return sstyled(styles)(\n <Portal>\n <SHintPopper\n render={Box}\n ref={this.hintRef}\n aria-hidden={true}\n role={undefined}\n zIndex={parentZIndexStacking}\n use:visible={showHint}\n durationInitialize={`${duration[0]}ms`}\n durationFinalize={`${duration[1]}ms`}\n timingFunction={timingFunction}\n keyframesInitialize={keyframes[`@${this.keyframesKey(calculatedPlacement)}-in`]}\n keyframesFinalize={keyframes[`@${this.keyframesKey(calculatedPlacement)}-out`]}\n use:data-ui-name='Hint'\n >\n <Children />\n </SHintPopper>\n </Portal>,\n );\n }\n}\n\nexport const Hint = createComponent<'div', SimpleHintPopperProps>(HintPopperRoot);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Hint.js","names":["_core","require","_dom","_canUseDOM","_interopRequireDefault","_getAccessibleName","_useCssVariable","_zIndexStacking","_react","_Middleware","_flexBox","_portal","keyframes","sstyled","insert","styles","enhances","zIndexStackingEnhance","cssVariableEnhance","variable","fallback","map","v","Number","parseInt","toString","prop","propToArray","Array","isArray","keyframesMap","Map","HintPopperRoot","Component","constructor","props","_defineProperty2","default","React","createRef","handleFocus","bind","handleBlur","handleMouseEnter","handleMouseLeave","handleKeyDown","state","innerVisible","calculatedPlacement","placement","uncontrolledProps","visible","componentDidMount","triggerRef","children","asProps","trigger","current","subscribe","componentWillUnmount","unsubscribe","componentDidUpdate","prevProps","requestAnimationFrame","showHint","hideHint","addEventListener","removeEventListener","node","mouseEvent","timeout","showTimeout","hideTimer","clearTimeout","showTimer","window","setTimeout","handlers","popperElement","hintRef","middleware","offset","flip","shift","padding","verticalPlacement","startsWith","undefined","push","Middleware","verticalCursorAnchoring","x","clientX","computePosition","then","y","Object","assign","style","left","top","setState","hideTimeout","e","isCompatibleElement","target","sameAsTrigger","lastInteraction","isKeyboard","key","stopPropagation","HTMLElement","SVGElement","keyframesKey","has","get","keyframe","set","setTriggerAriaLabel","textContent","ariaLabel","getAccessibleName","label","setAttribute","render","_ref","_ref2","SHintPopper","Box","Children","parentZIndexStacking","timingFunction","canUseDOM","duration","createElement","Portal","cn","assignProps","defaultVisible","Hint","exports","createComponent"],"sources":["../../../../src/components/hint/Hint.tsx"],"sourcesContent":["import { computePosition, flip, offset, shift, type Placement } from '@floating-ui/dom';\nimport { createComponent, Root, sstyled, Component, lastInteraction } from '@semcore/core';\nimport canUseDOM from '@semcore/core/lib/utils/canUseDOM';\nimport { getAccessibleName } from '@semcore/core/lib/utils/getAccessibleName';\nimport { cssVariableEnhance } from '@semcore/core/lib/utils/useCssVariable';\nimport { zIndexStackingEnhance } from '@semcore/core/lib/utils/zIndexStacking';\nimport type { DataType } from 'csstype';\nimport React from 'react';\n\nimport { Middleware } from './Middleware';\nimport keyframes from '../animation/style/keyframes.shadow.css';\nimport { Box } from '../flex-box';\nimport { Portal } from '../portal';\nimport styles from './style/hint.shadow.css';\n\ntype Handlers = {\n visible: null;\n};\n\nexport type SimpleHintPopperProps = {\n /** Ref to the trigger element */\n triggerRef: React.RefObject<HTMLElement | null>;\n /**\n * The position of the popper relative to the trigger that called it.\n * @default top\n */\n placement?: Placement;\n /**\n * Timer to show and hide the popper\n * @default [500, 500]\n */\n timeout?: DefaultProps['timeout'];\n /**\n * Hint content.\n * Better to use here some short text.\n * */\n children: React.ReactNode;\n\n /** Popper visibility value */\n visible?: boolean;\n /** Default popper visibility\n * @default false */\n defaultVisible?: boolean;\n /** Function called when visibility changes */\n onVisibleChange?: (visible: boolean, e?: Event) => boolean | void;\n};\n\ntype DefaultProps = {\n defaultVisible?: boolean;\n timeout: number | [number, number];\n timingFunction: DataType.EasingFunction;\n placement?: Placement;\n};\n\ntype State = {\n innerVisible: boolean | null;\n calculatedPlacement?: Placement;\n};\n\nconst enhances = [\n zIndexStackingEnhance('z-index-tooltip'),\n cssVariableEnhance({\n variable: '--intergalactic-duration-popper',\n fallback: '200',\n map: (v: string) => Number.parseInt(v, 10).toString(),\n prop: 'duration',\n }),\n cssVariableEnhance({\n variable: '--intergalactic-spacing-1x',\n fallback: '4',\n map: (v: string) => Number.parseInt(v, 10).toString(),\n prop: 'offset',\n }),\n cssVariableEnhance({\n variable: '--intergalactic-spacing-1x',\n fallback: '4',\n map: (v: string) => Number.parseInt(v, 10).toString(),\n prop: 'padding',\n }),\n] as const;\n\nfunction propToArray(prop: number | [number, number]): [number, number] {\n return Array.isArray(prop) ? prop : [prop, prop];\n}\n\nconst keyframesMap = new Map<Placement, string>();\n\nclass HintPopperRoot extends Component<SimpleHintPopperProps, typeof enhances, Handlers, DefaultProps, State> {\n public readonly hintRef = React.createRef<HTMLElement>();\n\n static style = Object.assign(keyframes, styles);\n\n private showTimer?: number;\n private hideTimer?: number;\n\n static enhance = enhances;\n\n static defaultProps: DefaultProps = {\n defaultVisible: false,\n timeout: [500, 500],\n timingFunction: 'ease-out',\n placement: 'top',\n };\n\n constructor(props: SimpleHintPopperProps) {\n super(props);\n\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.state = {\n innerVisible: null,\n calculatedPlacement: props.placement,\n };\n }\n\n uncontrolledProps() {\n return {\n visible: null,\n };\n }\n\n componentDidMount() {\n const { triggerRef, children } = this.asProps;\n const trigger = triggerRef.current;\n\n if (trigger && children) {\n this.subscribe(trigger);\n }\n }\n\n componentWillUnmount() {\n const trigger = this.asProps.triggerRef.current;\n\n if (trigger) {\n this.unsubscribe(trigger);\n }\n }\n\n componentDidUpdate(prevProps: SimpleHintPopperProps) {\n if (prevProps.visible !== this.props.visible) {\n requestAnimationFrame(() => {\n const trigger = this.props.triggerRef.current;\n\n if (this.props.visible && trigger) {\n this.showHint(trigger);\n } else {\n this.hideHint();\n }\n });\n }\n }\n\n private subscribe(trigger: HTMLElement) {\n trigger.addEventListener('focus', this.handleFocus);\n trigger.addEventListener('blur', this.handleBlur);\n trigger.addEventListener('mouseenter', this.handleMouseEnter);\n trigger.addEventListener('mouseleave', this.handleMouseLeave);\n trigger.addEventListener('keydown', this.handleKeyDown);\n\n if (this.asProps.visible) {\n this.showHint(trigger);\n }\n }\n\n private unsubscribe(trigger: HTMLElement) {\n trigger.removeEventListener('focus', this.handleFocus);\n trigger.removeEventListener('blur', this.handleBlur);\n trigger.removeEventListener('mouseenter', this.handleMouseEnter);\n trigger.removeEventListener('mouseleave', this.handleMouseLeave);\n trigger.removeEventListener('keydown', this.handleKeyDown);\n\n this.hideHint();\n }\n\n private showHint(node: Element, mouseEvent?: MouseEvent): void {\n const { placement, timeout } = this.asProps;\n\n const showTimeout = Array.isArray(timeout) ? timeout[0] : timeout;\n\n if (this.hideTimer) {\n clearTimeout(this.hideTimer);\n }\n\n this.showTimer = window.setTimeout(() => {\n this.handlers.visible(true);\n\n window.setTimeout(() => {\n const popperElement = this.hintRef.current;\n if (popperElement) {\n const middleware = [\n offset(Number(this.asProps.offset)),\n flip(),\n shift({ padding: Number(this.asProps.padding) }),\n ];\n const verticalPlacement = !placement || placement.startsWith('top') || placement.startsWith('bottom');\n if (mouseEvent !== undefined && verticalPlacement) {\n middleware.push(\n Middleware.verticalCursorAnchoring({ x: mouseEvent.clientX }),\n shift({ padding: Number(this.asProps.padding) }),\n );\n }\n\n computePosition(node, popperElement, {\n placement: placement,\n middleware,\n }).then(({ x, y, placement }) => {\n Object.assign(popperElement.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n\n this.setState({ innerVisible: true, calculatedPlacement: placement });\n });\n }\n }, 10);\n }, showTimeout);\n }\n\n private hideHint(): void {\n const { timeout } = this.asProps;\n\n const hideTimeout = Array.isArray(timeout) ? timeout[1] : timeout;\n\n if (this.showTimer) {\n clearTimeout(this.showTimer);\n }\n\n if (this.state.innerVisible) {\n this.setState({ innerVisible: false });\n\n this.hideTimer = window.setTimeout(() => {\n this.handlers.visible(false);\n this.setState({ innerVisible: null });\n }, hideTimeout);\n }\n }\n\n private handleFocus(e: FocusEvent): void {\n if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e) && lastInteraction.isKeyboard()) {\n this.showHint(e.target);\n }\n }\n\n private handleBlur(e: FocusEvent): void {\n if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e)) {\n this.hideHint();\n }\n }\n\n private handleKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Escape' && this.isCompatibleElement(e.target) && this.sameAsTrigger(e) && this.state.innerVisible) {\n e.stopPropagation();\n this.hideHint();\n }\n }\n\n private handleMouseEnter(e: MouseEvent): void {\n if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e)) {\n this.showHint(e.target, e);\n }\n }\n\n private handleMouseLeave(e: MouseEvent): void {\n if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e)) {\n this.hideHint();\n }\n }\n\n private isCompatibleElement(target: unknown): target is HTMLElement | SVGElement {\n return target instanceof HTMLElement || target instanceof SVGElement;\n }\n\n private sameAsTrigger(e: MouseEvent | KeyboardEvent | FocusEvent): boolean {\n return this.asProps.triggerRef.current === e.target;\n }\n\n private keyframesKey(placement?: Placement) {\n if (!placement) {\n return 'opacity';\n }\n\n if (keyframesMap.has(placement)) {\n return keyframesMap.get(placement)!;\n }\n\n let keyframe: string = 'opacity';\n\n if (placement.startsWith('left')) keyframe = 'scale-left';\n if (placement.startsWith('right')) keyframe = 'scale-right';\n if (placement.startsWith('bottom')) keyframe = 'scale-bottom';\n if (placement.startsWith('top')) keyframe = 'scale-top';\n\n keyframesMap.set(placement, keyframe);\n\n return keyframe;\n }\n\n private setTriggerAriaLabel() {\n const { triggerRef, children } = this.asProps;\n\n requestAnimationFrame(() => {\n const trigger = triggerRef.current;\n\n if (trigger) {\n const textContent = trigger.textContent;\n const ariaLabel = getAccessibleName(trigger);\n\n if (!textContent && !ariaLabel) {\n const label = (typeof children === 'string' || typeof children === 'number')\n ? children.toString()\n : (this.hintRef.current?.textContent ?? '');\n triggerRef.current?.setAttribute('aria-label', label);\n }\n }\n });\n }\n\n render() {\n const SHintPopper = Root;\n const { visible, Children, parentZIndexStacking, styles, timingFunction } = this.asProps;\n const { innerVisible, calculatedPlacement } = this.state;\n\n if (canUseDOM()) {\n this.setTriggerAriaLabel();\n }\n\n if (!visible && innerVisible === null) {\n return null;\n }\n\n const duration = propToArray(Number(this.asProps.duration));\n\n /* `visible && innerVisible === null` - is a condition to start showing right after hover/focus */\n const showHint = (visible && innerVisible === null) || innerVisible === true;\n\n return sstyled(styles)(\n <Portal>\n <SHintPopper\n render={Box}\n ref={this.hintRef}\n aria-hidden={true}\n role={undefined}\n zIndex={parentZIndexStacking}\n use:visible={showHint}\n durationInitialize={`${duration[0]}ms`}\n durationFinalize={`${duration[1]}ms`}\n timingFunction={timingFunction}\n keyframesInitialize={innerVisible === true ? keyframes[`@${this.keyframesKey(calculatedPlacement)}-in`] : undefined}\n keyframesFinalize={innerVisible === false ? keyframes[`@${this.keyframesKey(calculatedPlacement)}-out`] : undefined}\n use:data-ui-name='Hint'\n >\n <Children />\n </SHintPopper>\n </Portal>,\n );\n }\n}\n\nexport const Hint = createComponent<'div', SimpleHintPopperProps>(HintPopperRoot);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,10 +11,12 @@ class Middleware {
|
|
|
11
11
|
fn(state) {
|
|
12
12
|
const {
|
|
13
13
|
rects,
|
|
14
|
-
x
|
|
14
|
+
x,
|
|
15
|
+
elements
|
|
15
16
|
} = state;
|
|
17
|
+
const referenceLeft = elements.reference.getBoundingClientRect().left;
|
|
16
18
|
return {
|
|
17
|
-
x: rects.floating.width > rects.reference.width ? x : mouseCursorPosition.x - rects.floating.width / 2
|
|
19
|
+
x: rects.floating.width > rects.reference.width ? x : referenceLeft > rects.reference.x ? mouseCursorPosition.x - referenceLeft + rects.reference.x - rects.floating.width / 2 : mouseCursorPosition.x - rects.floating.width / 2
|
|
18
20
|
};
|
|
19
21
|
}
|
|
20
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Middleware.js","names":["Middleware","verticalCursorAnchoring","mouseCursorPosition","name","fn","state","rects","x","
|
|
1
|
+
{"version":3,"file":"Middleware.js","names":["Middleware","verticalCursorAnchoring","mouseCursorPosition","name","fn","state","rects","x","elements","referenceLeft","reference","getBoundingClientRect","left","floating","width","exports"],"sources":["../../../../src/components/hint/Middleware.ts"],"sourcesContent":["import type { MiddlewareState } from '@floating-ui/dom';\n\ntype MouseEnterCursorPosition = {\n x: number;\n};\n\nexport class Middleware {\n public static verticalCursorAnchoring(mouseCursorPosition: MouseEnterCursorPosition) {\n return {\n name: 'verticalCursorAnchoring',\n fn(state: MiddlewareState) {\n const { rects, x, elements } = state;\n const referenceLeft = elements.reference.getBoundingClientRect().left;\n\n return {\n x: rects.floating.width > rects.reference.width\n ? x\n : referenceLeft > rects.reference.x\n ? mouseCursorPosition.x - referenceLeft + rects.reference.x - rects.floating.width / 2\n : mouseCursorPosition.x - rects.floating.width / 2,\n };\n },\n };\n }\n}\n"],"mappings":";;;;;;AAMO,MAAMA,UAAU,CAAC;EACtB,OAAcC,uBAAuBA,CAACC,mBAA6C,EAAE;IACnF,OAAO;MACLC,IAAI,EAAE,yBAAyB;MAC/BC,EAAEA,CAACC,KAAsB,EAAE;QACzB,MAAM;UAAEC,KAAK;UAAEC,CAAC;UAAEC;QAAS,CAAC,GAAGH,KAAK;QACpC,MAAMI,aAAa,GAAGD,QAAQ,CAACE,SAAS,CAACC,qBAAqB,CAAC,CAAC,CAACC,IAAI;QAErE,OAAO;UACLL,CAAC,EAAED,KAAK,CAACO,QAAQ,CAACC,KAAK,GAAGR,KAAK,CAACI,SAAS,CAACI,KAAK,GAC3CP,CAAC,GACDE,aAAa,GAAGH,KAAK,CAACI,SAAS,CAACH,CAAC,GAC/BL,mBAAmB,CAACK,CAAC,GAAGE,aAAa,GAAGH,KAAK,CAACI,SAAS,CAACH,CAAC,GAAGD,KAAK,CAACO,QAAQ,CAACC,KAAK,GAAG,CAAC,GACpFZ,mBAAmB,CAACK,CAAC,GAAGD,KAAK,CAACO,QAAQ,CAACC,KAAK,GAAG;QACvD,CAAC;MACH;IACF,CAAC;EACH;AACF;AAACC,OAAA,CAAAf,UAAA,GAAAA,UAAA","ignoreList":[]}
|
|
@@ -4,8 +4,9 @@ SHintPopper {
|
|
|
4
4
|
top: 0;
|
|
5
5
|
left: 0;
|
|
6
6
|
max-width: 250px;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
overflow-wrap: break-word;
|
|
8
|
+
opacity: 0;
|
|
9
|
+
pointer-events: none;
|
|
9
10
|
|
|
10
11
|
background: var(--intergalactic-tooltip-invert, #191b23);
|
|
11
12
|
border: 1px solid var(--intergalactic-border-tooltip-invert, #6c6e79);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ellipsis.types.js","names":[],"sources":["../../../../src/components/ellipsis/Ellipsis.types.ts"],"sourcesContent":["type CommonEllipsisSettings = {\n /**\n * Common container element for few ellipsises for improve performance.\n */\n containerElement?: HTMLElement;\n\n /**\n * Function for crop or increase a container width. For example, for tables with accordion\n */\n recalculateContainerWidth?: (width: number) => number;\n\n /**\n * Flag to enable observing changes in cropped texts.\n * @default false\n */\n observeChildrenMutations?: boolean;\n};\n\
|
|
1
|
+
{"version":3,"file":"Ellipsis.types.js","names":[],"sources":["../../../../src/components/ellipsis/Ellipsis.types.ts"],"sourcesContent":["export type CommonEllipsisSettings = {\n /**\n * Common container element for few ellipsises for improve performance.\n */\n containerElement?: HTMLElement;\n\n /**\n * Function for crop or increase a container width. For example, for tables with accordion\n */\n recalculateContainerWidth?: (width: number) => number;\n\n /**\n * Flag to enable observing changes in cropped texts.\n * @default false\n */\n observeChildrenMutations?: boolean;\n};\n\nexport type MiddleCroppedEllipsisSettings = {\n /**\n * Crop position\n * @default end\n */\n cropPosition: 'middle';\n\n maxLine?: never;\n\n /**\n * Count of last symbols which shouldn't be cropped.\n */\n lastRequiredSymbols?: number;\n};\n\nexport type EndCroppedEllipsisSettings = {\n /**\n * Crop position\n * @default end\n */\n cropPosition?: 'end';\n /**\n * Lines count in multiline Ellipsis.\n * Applies only for `cropPosition = 'end'`\n * @default 1\n */\n maxLine?: number;\n\n lastRequiredSymbols?: never;\n};\n\nexport type EllipsisSettings = (EndCroppedEllipsisSettings | MiddleCroppedEllipsisSettings) & CommonEllipsisSettings;\n\nexport type Events = {\n isEllipsized: (isEllipsized: boolean) => void;\n};\n\nexport type TruncateOptions = {\n text?: string;\n containerWidth?: number;\n font?: string;\n direction?: 'start' | 'end';\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -166,14 +166,27 @@ class EllipsisManager {
|
|
|
166
166
|
handleCopy(event) {
|
|
167
167
|
if (event instanceof ClipboardEvent && event.target instanceof HTMLElement && event.target.parentElement instanceof HTMLElement) {
|
|
168
168
|
const selection = window.getSelection();
|
|
169
|
-
|
|
169
|
+
let ellipsis = this.ellipsisEntities.get(event.target);
|
|
170
|
+
if (event.target.getAttribute('aria-hidden') === 'true') {
|
|
171
|
+
ellipsis = this.ellipsisEntities.get(event.target.parentElement);
|
|
172
|
+
}
|
|
170
173
|
if (selection && ellipsis) {
|
|
171
174
|
const ellipsisSpans = ellipsis.element.childNodes;
|
|
172
175
|
const croppedSpan = ellipsisSpans[0];
|
|
176
|
+
const lastSpan = ellipsisSpans[ellipsisSpans.length - 2];
|
|
173
177
|
const fullSpan = ellipsisSpans[ellipsisSpans.length - 1];
|
|
174
|
-
const
|
|
175
|
-
const
|
|
178
|
+
const croppedLength = croppedSpan?.textContent?.length;
|
|
179
|
+
const lastLength = lastSpan?.textContent?.length;
|
|
180
|
+
const anchorInCropped = selection.anchorNode === croppedSpan?.childNodes[0];
|
|
181
|
+
const anchorInLast = selection.anchorNode === lastSpan?.childNodes[0];
|
|
182
|
+
const focusInCropped = selection.focusNode === croppedSpan?.childNodes[0];
|
|
183
|
+
const focusInLast = selection.focusNode === lastSpan?.childNodes[0];
|
|
184
|
+
const anchorOffset = selection.anchorOffset;
|
|
185
|
+
const focusOffset = selection.focusOffset;
|
|
186
|
+
const isCroppedSelected = anchorInCropped && focusOffset === croppedLength || anchorInLast && anchorOffset === lastLength && focusInCropped && focusOffset === 0 || focusInLast && focusOffset === lastLength;
|
|
187
|
+
const isFullSelected = selection.focusNode === fullSpan?.childNodes[0] && focusOffset === fullSpan?.textContent?.length;
|
|
176
188
|
if (fullSpan?.textContent && (!(selection.focusNode instanceof Text) || isCroppedSelected || isFullSelected)) {
|
|
189
|
+
event.preventDefault();
|
|
177
190
|
navigator.clipboard.writeText(fullSpan.textContent);
|
|
178
191
|
}
|
|
179
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EllipsisManager.js","names":["canUseDOM","Queue","isSafari","test","navigator","userAgent","EllipsisManager","constructor","_defineProperty","WeakMap","WeakSet","queue","queueTimeout","undefined","handleResizeObserver","bind","handleMutationObserver","handleIntersectionObserver","handleCopy","ro","ResizeObserver","io","IntersectionObserver","root","scrollMargin","threshold","document","addEventListener","addEllipsis","ellipsis","element","ellipsisEntities","has","set","observe","observeChildrenMutations","mo","MutationObserver","characterData","subtree","characterDataOldValue","childList","ellipsisMutationObservers","containerElement","ellipsisSet","containersMap","get","Set","add","removeEllipsis","delete","handledElements","unobserve","disconnect","size","entries","forEach","entry","target","HTMLElement","firstEllipsis","values","next","value","containersApproximateSizeMap","getTruncateSize","el","cropPosition","setApproximateSize","handleChanges","mutations","length","type","text","Text","mutation","addedNodes","removedNodes","HTMLSpanElement","parent","parentElement","textContent","wholeText","scheduler","schedule","isIntersecting","container","approximateSize","slice","event","ClipboardEvent","selection","window","getSelection","ellipsisSpans","childNodes","croppedSpan","fullSpan","isCroppedSelected","anchorNode","focusOffset","focusNode","isFullSelected","clipboard","writeText","ellipsisManager"],"sources":["../../../../src/components/ellipsis/EllipsisManager.ts"],"sourcesContent":["import canUseDOM from '@semcore/core/lib/utils/canUseDOM';\n\nimport type { Ellipsis } from './Ellipsis';\nimport { Queue } from './Queue';\n\nexport const isSafari = canUseDOM() ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;\n\nclass EllipsisManager {\n private readonly queue: Queue;\n\n private ro: ResizeObserver | undefined;\n private io: IntersectionObserver | undefined;\n\n private readonly containersMap = new WeakMap<HTMLElement, Set<Ellipsis>>();\n private readonly containersApproximateSizeMap = new WeakMap<HTMLElement, [number, number]>();\n\n private handledElements = new WeakSet<HTMLElement>();\n private ellipsisEntities = new WeakMap<HTMLElement, Ellipsis>();\n private ellipsisMutationObservers = new WeakMap<HTMLElement, MutationObserver>();\n\n constructor() {\n this.queue = new Queue(isSafari ? { queueTimeout: 16 } : undefined);\n\n this.handleResizeObserver = this.handleResizeObserver.bind(this);\n this.handleMutationObserver = this.handleMutationObserver.bind(this);\n this.handleIntersectionObserver = this.handleIntersectionObserver.bind(this);\n\n this.handleCopy = this.handleCopy.bind(this);\n\n if (canUseDOM()) {\n this.ro = new ResizeObserver(this.handleResizeObserver);\n this.io = new IntersectionObserver(this.handleIntersectionObserver, {\n root: null,\n // @ts-ignore\n scrollMargin: '500px 500px 500px 500px',\n threshold: 0.1,\n });\n document.addEventListener('copy', this.handleCopy);\n }\n }\n\n public addEllipsis(ellipsis: Ellipsis) {\n const element = ellipsis.element;\n\n if (!this.ellipsisEntities.has(element)) {\n this.ellipsisEntities.set(element, ellipsis);\n\n this.io?.observe(element);\n\n if (ellipsis.observeChildrenMutations && canUseDOM()) {\n const mo = new MutationObserver(this.handleMutationObserver);\n mo.observe(element, {\n characterData: true,\n subtree: true,\n characterDataOldValue: true,\n childList: true,\n });\n\n this.ellipsisMutationObservers.set(element, mo);\n }\n }\n\n if (ellipsis.containerElement !== undefined) {\n const ellipsisSet = this.containersMap.get(ellipsis.containerElement) ?? new Set();\n\n ellipsisSet.add(ellipsis);\n\n this.containersMap.set(ellipsis.containerElement, ellipsisSet);\n }\n }\n\n public removeEllipsis(ellipsis: Ellipsis) {\n const element = ellipsis.element;\n\n if (this.ellipsisEntities.has(element)) {\n this.ellipsisEntities.delete(element);\n this.handledElements.delete(element);\n\n this.io?.unobserve(element);\n this.ro?.unobserve(element);\n this.ellipsisMutationObservers.get(element)?.disconnect();\n this.ellipsisMutationObservers.delete(element);\n }\n\n if (ellipsis.containerElement) {\n const ellipsisSet = this.containersMap.get(ellipsis.containerElement);\n if (ellipsisSet) {\n ellipsisSet.delete(ellipsis);\n\n if (ellipsisSet.size === 0) {\n this.containersMap.delete(ellipsis.containerElement);\n } else {\n this.containersMap.set(ellipsis.containerElement, ellipsisSet);\n }\n }\n }\n }\n\n private handleResizeObserver(entries: ResizeObserverEntry[]) {\n entries.forEach((entry) => {\n const target = entry.target;\n\n if (target instanceof HTMLElement) {\n const ellipsisSet = this.containersMap.get(target);\n if (ellipsisSet !== undefined) {\n const firstEllipsis = ellipsisSet.values().next().value;\n if (firstEllipsis) {\n this.containersApproximateSizeMap.set(target, firstEllipsis.getTruncateSize());\n }\n\n for (const el of ellipsisSet.values()) {\n const ellipsis = this.ellipsisEntities.get(el.element);\n\n if (ellipsis) {\n if (ellipsis.cropPosition === 'middle') {\n this.setApproximateSize(target, ellipsis);\n }\n\n this.queue.add(ellipsis.handleChanges);\n }\n }\n } else {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis) {\n this.queue.add(ellipsis.handleChanges);\n }\n }\n }\n });\n }\n\n private handleMutationObserver(mutations: MutationRecord[]) {\n if (mutations.length === 1) {\n const { type, target } = mutations[0];\n\n let text: Text | undefined;\n\n if (type === 'characterData' && target instanceof Text) {\n text = target;\n } else if (type === 'childList') {\n const mutation = mutations[0];\n const addedNodes = mutation.addedNodes;\n const removedNodes = mutation.removedNodes;\n if (addedNodes.length === 1 && addedNodes[0] instanceof Text && removedNodes.length === 2 && removedNodes[0] instanceof HTMLSpanElement && removedNodes[1] instanceof HTMLSpanElement) {\n text = addedNodes[0];\n }\n }\n\n const parent = text?.parentElement;\n if (text && parent instanceof HTMLElement) {\n const ellipsis = this.ellipsisEntities.get(parent);\n\n if (ellipsis) {\n ellipsis.textContent = text.wholeText;\n ellipsis?.scheduler.schedule(ellipsis?.handleChanges);\n }\n }\n }\n }\n\n private handleIntersectionObserver(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const target = entry.target;\n\n if (target instanceof HTMLElement) {\n if (entry.isIntersecting === true && !this.handledElements.has(target)) {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis?.containerElement !== undefined) {\n this.ro?.observe(ellipsis?.containerElement);\n\n if (ellipsis.cropPosition === 'middle') {\n this.setApproximateSize(target, ellipsis);\n }\n\n this.queue.add(ellipsis.handleChanges);\n } else {\n this.ro?.observe(target);\n }\n\n this.handledElements.add(target);\n } else if (entry.isIntersecting === false && this.handledElements.has(target)) {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis) {\n this.queue.delete(ellipsis.handleChanges);\n }\n\n this.handledElements.delete(target);\n\n this.ro?.unobserve(target);\n this.ellipsisMutationObservers.get(target)?.disconnect();\n }\n }\n });\n }\n\n private setApproximateSize(container: HTMLElement, ellipsis: Ellipsis) {\n const approximateSize = this.containersApproximateSizeMap.get(container);\n\n if (approximateSize && ellipsis.textContent.length > approximateSize[0] + approximateSize[1]) {\n ellipsis.element.textContent = ellipsis?.textContent.slice(0, approximateSize[0]) + '...' + ellipsis?.textContent.slice(-1 * approximateSize[1]);\n }\n }\n\n private handleCopy(event: ClipboardEvent) {\n if (event instanceof ClipboardEvent && event.target instanceof HTMLElement && event.target.parentElement instanceof HTMLElement) {\n const selection = window.getSelection();\n const ellipsis = this.ellipsisEntities.get(event.target.parentElement);\n\n if (selection && ellipsis) {\n const ellipsisSpans = ellipsis.element.childNodes;\n const croppedSpan = ellipsisSpans[0];\n const fullSpan = ellipsisSpans[ellipsisSpans.length - 1];\n\n const isCroppedSelected = (selection.anchorNode === croppedSpan?.childNodes[0] && selection.focusOffset === croppedSpan?.textContent?.length) || (selection.focusNode === croppedSpan?.childNodes[0] && selection.focusOffset === 0);\n const isFullSelected = selection.focusNode === fullSpan?.childNodes[0] && selection.focusOffset === fullSpan?.textContent?.length;\n\n if (fullSpan?.textContent && (!(selection.focusNode instanceof Text) || isCroppedSelected || isFullSelected)) {\n navigator.clipboard.writeText(fullSpan.textContent);\n }\n }\n }\n }\n}\n\nexport const ellipsisManager = new EllipsisManager();\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"EllipsisManager.js","names":["canUseDOM","Queue","isSafari","test","navigator","userAgent","EllipsisManager","constructor","_defineProperty","WeakMap","WeakSet","queue","queueTimeout","undefined","handleResizeObserver","bind","handleMutationObserver","handleIntersectionObserver","handleCopy","ro","ResizeObserver","io","IntersectionObserver","root","scrollMargin","threshold","document","addEventListener","addEllipsis","ellipsis","element","ellipsisEntities","has","set","observe","observeChildrenMutations","mo","MutationObserver","characterData","subtree","characterDataOldValue","childList","ellipsisMutationObservers","containerElement","ellipsisSet","containersMap","get","Set","add","removeEllipsis","delete","handledElements","unobserve","disconnect","size","entries","forEach","entry","target","HTMLElement","firstEllipsis","values","next","value","containersApproximateSizeMap","getTruncateSize","el","cropPosition","setApproximateSize","handleChanges","mutations","length","type","text","Text","mutation","addedNodes","removedNodes","HTMLSpanElement","parent","parentElement","textContent","wholeText","scheduler","schedule","isIntersecting","container","approximateSize","slice","event","ClipboardEvent","selection","window","getSelection","getAttribute","ellipsisSpans","childNodes","croppedSpan","lastSpan","fullSpan","croppedLength","lastLength","anchorInCropped","anchorNode","anchorInLast","focusInCropped","focusNode","focusInLast","anchorOffset","focusOffset","isCroppedSelected","isFullSelected","preventDefault","clipboard","writeText","ellipsisManager"],"sources":["../../../../src/components/ellipsis/EllipsisManager.ts"],"sourcesContent":["import canUseDOM from '@semcore/core/lib/utils/canUseDOM';\n\nimport type { Ellipsis } from './Ellipsis';\nimport { Queue } from './Queue';\n\nexport const isSafari = canUseDOM() ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) : false;\n\nclass EllipsisManager {\n private readonly queue: Queue;\n\n private ro: ResizeObserver | undefined;\n private io: IntersectionObserver | undefined;\n\n private readonly containersMap = new WeakMap<HTMLElement, Set<Ellipsis>>();\n private readonly containersApproximateSizeMap = new WeakMap<HTMLElement, [number, number]>();\n\n private handledElements = new WeakSet<HTMLElement>();\n private ellipsisEntities = new WeakMap<HTMLElement, Ellipsis>();\n private ellipsisMutationObservers = new WeakMap<HTMLElement, MutationObserver>();\n\n constructor() {\n this.queue = new Queue(isSafari ? { queueTimeout: 16 } : undefined);\n\n this.handleResizeObserver = this.handleResizeObserver.bind(this);\n this.handleMutationObserver = this.handleMutationObserver.bind(this);\n this.handleIntersectionObserver = this.handleIntersectionObserver.bind(this);\n\n this.handleCopy = this.handleCopy.bind(this);\n\n if (canUseDOM()) {\n this.ro = new ResizeObserver(this.handleResizeObserver);\n this.io = new IntersectionObserver(this.handleIntersectionObserver, {\n root: null,\n // @ts-ignore\n scrollMargin: '500px 500px 500px 500px',\n threshold: 0.1,\n });\n document.addEventListener('copy', this.handleCopy);\n }\n }\n\n public addEllipsis(ellipsis: Ellipsis) {\n const element = ellipsis.element;\n\n if (!this.ellipsisEntities.has(element)) {\n this.ellipsisEntities.set(element, ellipsis);\n\n this.io?.observe(element);\n\n if (ellipsis.observeChildrenMutations && canUseDOM()) {\n const mo = new MutationObserver(this.handleMutationObserver);\n mo.observe(element, {\n characterData: true,\n subtree: true,\n characterDataOldValue: true,\n childList: true,\n });\n\n this.ellipsisMutationObservers.set(element, mo);\n }\n }\n\n if (ellipsis.containerElement !== undefined) {\n const ellipsisSet = this.containersMap.get(ellipsis.containerElement) ?? new Set();\n\n ellipsisSet.add(ellipsis);\n\n this.containersMap.set(ellipsis.containerElement, ellipsisSet);\n }\n }\n\n public removeEllipsis(ellipsis: Ellipsis) {\n const element = ellipsis.element;\n\n if (this.ellipsisEntities.has(element)) {\n this.ellipsisEntities.delete(element);\n this.handledElements.delete(element);\n\n this.io?.unobserve(element);\n this.ro?.unobserve(element);\n this.ellipsisMutationObservers.get(element)?.disconnect();\n this.ellipsisMutationObservers.delete(element);\n }\n\n if (ellipsis.containerElement) {\n const ellipsisSet = this.containersMap.get(ellipsis.containerElement);\n if (ellipsisSet) {\n ellipsisSet.delete(ellipsis);\n\n if (ellipsisSet.size === 0) {\n this.containersMap.delete(ellipsis.containerElement);\n } else {\n this.containersMap.set(ellipsis.containerElement, ellipsisSet);\n }\n }\n }\n }\n\n private handleResizeObserver(entries: ResizeObserverEntry[]) {\n entries.forEach((entry) => {\n const target = entry.target;\n\n if (target instanceof HTMLElement) {\n const ellipsisSet = this.containersMap.get(target);\n if (ellipsisSet !== undefined) {\n const firstEllipsis = ellipsisSet.values().next().value;\n if (firstEllipsis) {\n this.containersApproximateSizeMap.set(target, firstEllipsis.getTruncateSize());\n }\n\n for (const el of ellipsisSet.values()) {\n const ellipsis = this.ellipsisEntities.get(el.element);\n\n if (ellipsis) {\n if (ellipsis.cropPosition === 'middle') {\n this.setApproximateSize(target, ellipsis);\n }\n\n this.queue.add(ellipsis.handleChanges);\n }\n }\n } else {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis) {\n this.queue.add(ellipsis.handleChanges);\n }\n }\n }\n });\n }\n\n private handleMutationObserver(mutations: MutationRecord[]) {\n if (mutations.length === 1) {\n const { type, target } = mutations[0];\n\n let text: Text | undefined;\n\n if (type === 'characterData' && target instanceof Text) {\n text = target;\n } else if (type === 'childList') {\n const mutation = mutations[0];\n const addedNodes = mutation.addedNodes;\n const removedNodes = mutation.removedNodes;\n if (addedNodes.length === 1 && addedNodes[0] instanceof Text && removedNodes.length === 2 && removedNodes[0] instanceof HTMLSpanElement && removedNodes[1] instanceof HTMLSpanElement) {\n text = addedNodes[0];\n }\n }\n\n const parent = text?.parentElement;\n if (text && parent instanceof HTMLElement) {\n const ellipsis = this.ellipsisEntities.get(parent);\n\n if (ellipsis) {\n ellipsis.textContent = text.wholeText;\n ellipsis?.scheduler.schedule(ellipsis?.handleChanges);\n }\n }\n }\n }\n\n private handleIntersectionObserver(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const target = entry.target;\n\n if (target instanceof HTMLElement) {\n if (entry.isIntersecting === true && !this.handledElements.has(target)) {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis?.containerElement !== undefined) {\n this.ro?.observe(ellipsis?.containerElement);\n\n if (ellipsis.cropPosition === 'middle') {\n this.setApproximateSize(target, ellipsis);\n }\n\n this.queue.add(ellipsis.handleChanges);\n } else {\n this.ro?.observe(target);\n }\n\n this.handledElements.add(target);\n } else if (entry.isIntersecting === false && this.handledElements.has(target)) {\n const ellipsis = this.ellipsisEntities.get(target);\n\n if (ellipsis) {\n this.queue.delete(ellipsis.handleChanges);\n }\n\n this.handledElements.delete(target);\n\n this.ro?.unobserve(target);\n this.ellipsisMutationObservers.get(target)?.disconnect();\n }\n }\n });\n }\n\n private setApproximateSize(container: HTMLElement, ellipsis: Ellipsis) {\n const approximateSize = this.containersApproximateSizeMap.get(container);\n\n if (approximateSize && ellipsis.textContent.length > approximateSize[0] + approximateSize[1]) {\n ellipsis.element.textContent = ellipsis?.textContent.slice(0, approximateSize[0]) + '...' + ellipsis?.textContent.slice(-1 * approximateSize[1]);\n }\n }\n\n private handleCopy(event: ClipboardEvent) {\n if (event instanceof ClipboardEvent && event.target instanceof HTMLElement && event.target.parentElement instanceof HTMLElement) {\n const selection = window.getSelection();\n let ellipsis = this.ellipsisEntities.get(event.target);\n\n if (event.target.getAttribute('aria-hidden') === 'true') {\n ellipsis = this.ellipsisEntities.get(event.target.parentElement);\n }\n\n if (selection && ellipsis) {\n const ellipsisSpans = ellipsis.element.childNodes;\n const croppedSpan = ellipsisSpans[0];\n const lastSpan = ellipsisSpans[ellipsisSpans.length - 2];\n const fullSpan = ellipsisSpans[ellipsisSpans.length - 1];\n\n const croppedLength = croppedSpan?.textContent?.length;\n const lastLength = lastSpan?.textContent?.length;\n\n const anchorInCropped = selection.anchorNode === croppedSpan?.childNodes[0];\n const anchorInLast = selection.anchorNode === lastSpan?.childNodes[0];\n const focusInCropped = selection.focusNode === croppedSpan?.childNodes[0];\n const focusInLast = selection.focusNode === lastSpan?.childNodes[0];\n\n const anchorOffset = selection.anchorOffset;\n const focusOffset = selection.focusOffset;\n\n const isCroppedSelected =\n (anchorInCropped && focusOffset === croppedLength) ||\n (anchorInLast && anchorOffset === lastLength && focusInCropped && focusOffset === 0) ||\n (focusInLast && focusOffset === lastLength);\n\n const isFullSelected = selection.focusNode === fullSpan?.childNodes[0] && focusOffset === fullSpan?.textContent?.length;\n\n if (fullSpan?.textContent && (!(selection.focusNode instanceof Text) || isCroppedSelected || isFullSelected)) {\n event.preventDefault();\n navigator.clipboard.writeText(fullSpan.textContent);\n }\n }\n }\n }\n}\n\nexport const ellipsisManager = new EllipsisManager();\n"],"mappings":"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","ignoreList":[]}
|