@semcore/base-components 17.0.0-prerelease.29 → 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 +38 -28
- 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 +38 -28
- 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 +39 -30
- 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
|
}
|
|
@@ -102,8 +102,12 @@ class HintPopperRoot extends _core.Component {
|
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
104
|
componentDidMount() {
|
|
105
|
-
const
|
|
106
|
-
|
|
105
|
+
const {
|
|
106
|
+
triggerRef,
|
|
107
|
+
children
|
|
108
|
+
} = this.asProps;
|
|
109
|
+
const trigger = triggerRef.current;
|
|
110
|
+
if (trigger && children) {
|
|
107
111
|
this.subscribe(trigger);
|
|
108
112
|
}
|
|
109
113
|
}
|
|
@@ -180,7 +184,6 @@ class HintPopperRoot extends _core.Component {
|
|
|
180
184
|
left: `${x}px`,
|
|
181
185
|
top: `${y}px`
|
|
182
186
|
});
|
|
183
|
-
popperElement.style.visibility = 'visible';
|
|
184
187
|
this.setState({
|
|
185
188
|
innerVisible: true,
|
|
186
189
|
calculatedPlacement: placement
|
|
@@ -198,43 +201,50 @@ class HintPopperRoot extends _core.Component {
|
|
|
198
201
|
if (this.showTimer) {
|
|
199
202
|
clearTimeout(this.showTimer);
|
|
200
203
|
}
|
|
201
|
-
this.
|
|
202
|
-
innerVisible: false
|
|
203
|
-
});
|
|
204
|
-
this.hideTimer = window.setTimeout(() => {
|
|
205
|
-
this.hintRef.current?.style.setProperty('visibility', 'hidden');
|
|
206
|
-
this.handlers.visible(false);
|
|
204
|
+
if (this.state.innerVisible) {
|
|
207
205
|
this.setState({
|
|
208
|
-
innerVisible:
|
|
206
|
+
innerVisible: false
|
|
209
207
|
});
|
|
210
|
-
|
|
208
|
+
this.hideTimer = window.setTimeout(() => {
|
|
209
|
+
this.handlers.visible(false);
|
|
210
|
+
this.setState({
|
|
211
|
+
innerVisible: null
|
|
212
|
+
});
|
|
213
|
+
}, hideTimeout);
|
|
214
|
+
}
|
|
211
215
|
}
|
|
212
216
|
handleFocus(e) {
|
|
213
|
-
if (e.target
|
|
217
|
+
if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e) && _core.lastInteraction.isKeyboard()) {
|
|
214
218
|
this.showHint(e.target);
|
|
215
219
|
}
|
|
216
220
|
}
|
|
217
221
|
handleBlur(e) {
|
|
218
|
-
if (e.target
|
|
222
|
+
if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e)) {
|
|
219
223
|
this.hideHint();
|
|
220
224
|
}
|
|
221
225
|
}
|
|
222
226
|
handleKeyDown(e) {
|
|
223
|
-
if (e.key === 'Escape' && e.target
|
|
227
|
+
if (e.key === 'Escape' && this.isCompatibleElement(e.target) && this.sameAsTrigger(e) && this.state.innerVisible) {
|
|
224
228
|
e.stopPropagation();
|
|
225
229
|
this.hideHint();
|
|
226
230
|
}
|
|
227
231
|
}
|
|
228
232
|
handleMouseEnter(e) {
|
|
229
|
-
if (e.target
|
|
233
|
+
if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e)) {
|
|
230
234
|
this.showHint(e.target, e);
|
|
231
235
|
}
|
|
232
236
|
}
|
|
233
237
|
handleMouseLeave(e) {
|
|
234
|
-
if (e.target
|
|
238
|
+
if (this.isCompatibleElement(e.target) && this.sameAsTrigger(e)) {
|
|
235
239
|
this.hideHint();
|
|
236
240
|
}
|
|
237
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
|
+
}
|
|
238
248
|
keyframesKey(placement) {
|
|
239
249
|
if (!placement) {
|
|
240
250
|
return 'opacity';
|
|
@@ -285,7 +295,7 @@ class HintPopperRoot extends _core.Component {
|
|
|
285
295
|
if ((0, _canUseDOM.default)()) {
|
|
286
296
|
this.setTriggerAriaLabel();
|
|
287
297
|
}
|
|
288
|
-
if (!visible) {
|
|
298
|
+
if (!visible && innerVisible === null) {
|
|
289
299
|
return null;
|
|
290
300
|
}
|
|
291
301
|
const duration = propToArray(Number(this.asProps.duration));
|
|
@@ -302,8 +312,8 @@ class HintPopperRoot extends _core.Component {
|
|
|
302
312
|
"durationInitialize": `${duration[0]}ms`,
|
|
303
313
|
"durationFinalize": `${duration[1]}ms`,
|
|
304
314
|
"timingFunction": timingFunction,
|
|
305
|
-
"keyframesInitialize": keyframes[`@${this.keyframesKey(calculatedPlacement)}-in`],
|
|
306
|
-
"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,
|
|
307
317
|
"use:data-ui-name": 'Hint'
|
|
308
318
|
}, _ref)
|
|
309
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","trigger","asProps","triggerRef","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","children","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 trigger = this.asProps.triggerRef.current;\n\n if (trigger) {\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":[]}
|