@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.
Files changed (27) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/lib/cjs/components/ellipsis/Ellipsis.types.js.map +1 -1
  3. package/lib/cjs/components/ellipsis/EllipsisManager.js +16 -3
  4. package/lib/cjs/components/ellipsis/EllipsisManager.js.map +1 -1
  5. package/lib/cjs/components/hint/Hint.js +38 -28
  6. package/lib/cjs/components/hint/Hint.js.map +1 -1
  7. package/lib/cjs/components/hint/Middleware.js +4 -2
  8. package/lib/cjs/components/hint/Middleware.js.map +1 -1
  9. package/lib/cjs/components/hint/style/hint.shadow.css +3 -2
  10. package/lib/es6/components/ellipsis/Ellipsis.types.js.map +1 -1
  11. package/lib/es6/components/ellipsis/EllipsisManager.js +16 -3
  12. package/lib/es6/components/ellipsis/EllipsisManager.js.map +1 -1
  13. package/lib/es6/components/hint/Hint.js +38 -28
  14. package/lib/es6/components/hint/Hint.js.map +1 -1
  15. package/lib/es6/components/hint/Middleware.js +4 -2
  16. package/lib/es6/components/hint/Middleware.js.map +1 -1
  17. package/lib/es6/components/hint/style/hint.shadow.css +3 -2
  18. package/lib/esm/components/ellipsis/EllipsisManager.mjs +17 -4
  19. package/lib/esm/components/flex-box/invalid-state-box/InvalidStateBox.mjs +1 -2
  20. package/lib/esm/components/flex-box/screen-reader-only-box/ScreenReaderOnlyBox.mjs +1 -2
  21. package/lib/esm/components/hint/Hint.mjs +39 -30
  22. package/lib/esm/components/hint/Middleware.mjs +4 -2
  23. package/lib/esm/components/hint/style/hint.shadow.css +3 -2
  24. package/lib/esm/components/neighbor-location/NeighborLocation.mjs +1 -1
  25. package/lib/esm/index.mjs +24 -24
  26. package/lib/types/components/ellipsis/Ellipsis.types.d.ts +5 -5
  27. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
- ## [17.0.0] - 2026-02-27
5
+ ## [17.0.0] - 2026-03-27
6
6
 
7
7
  ### BREAK
8
8
 
@@ -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\ntype 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\ntype 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\nexport type EllipsisSettings = Readonly<(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":[]}
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
- const ellipsis = this.ellipsisEntities.get(event.target.parentElement);
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 isCroppedSelected = selection.anchorNode === croppedSpan?.childNodes[0] && selection.focusOffset === croppedSpan?.textContent?.length || selection.focusNode === croppedSpan?.childNodes[0] && selection.focusOffset === 0;
182
- const isFullSelected = selection.focusNode === fullSpan?.childNodes[0] && selection.focusOffset === fullSpan?.textContent?.length;
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__*/".___SHintPopper_1em1a_gg_{width:-moz-max-content;width:max-content;position:absolute;top:0;left:0;max-width:250px;word-break:break-all;visibility:hidden;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_1em1a);animation-duration:var(--durationFinalize_1em1a);animation-name:var(--keyframesFinalize_1em1a)}.___SHintPopper_1em1a_gg_.__visible_1em1a_gg_{animation-duration:var(--durationInitialize_1em1a);animation-name:var(--keyframesInitialize_1em1a)}@media (prefers-reduced-motion){.___SHintPopper_1em1a_gg_,.___SHintPopper_1em1a_gg_.__visible_1em1a_gg_{animation-timing-function:step-end;animation-iteration-count:1}}", /*__inner_css_end__*/"1em1a_gg_"),
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": "___SHintPopper_1em1a_gg_",
56
- "_visible": "__visible_1em1a_gg_",
57
- "--timingFunction": "--timingFunction_1em1a",
58
- "--durationFinalize": "--durationFinalize_1em1a",
59
- "--keyframesFinalize": "--keyframesFinalize_1em1a",
60
- "--durationInitialize": "--durationInitialize_1em1a",
61
- "--keyframesInitialize": "--keyframesInitialize_1em1a"
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: props.visible ?? null,
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 trigger = this.asProps.triggerRef.current;
106
- if (trigger) {
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.setState({
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: null
206
+ innerVisible: false
209
207
  });
210
- }, hideTimeout);
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 instanceof HTMLElement && this.asProps.triggerRef.current === e.target && _core.lastInteraction.isKeyboard()) {
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 instanceof HTMLElement && this.asProps.triggerRef.current === 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 instanceof HTMLElement && this.asProps.triggerRef.current === e.target && this.state.innerVisible) {
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 instanceof HTMLElement && this.asProps.triggerRef.current === 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 instanceof HTMLElement && this.asProps.triggerRef.current === 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","floating","width","reference","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 } = state;\n return {\n x: rects.floating.width > rects.reference.width ? x : 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;QAAE,CAAC,GAAGF,KAAK;QAC1B,OAAO;UACLE,CAAC,EAAED,KAAK,CAACE,QAAQ,CAACC,KAAK,GAAGH,KAAK,CAACI,SAAS,CAACD,KAAK,GAAGF,CAAC,GAAGL,mBAAmB,CAACK,CAAC,GAAGD,KAAK,CAACE,QAAQ,CAACC,KAAK,GAAG;QACvG,CAAC;MACH;IACF,CAAC;EACH;AACF;AAACE,OAAA,CAAAX,UAAA,GAAAA,UAAA","ignoreList":[]}
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
- word-break: break-all;
8
- visibility: hidden;
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\ntype 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\ntype 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\nexport type EllipsisSettings = Readonly<(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":[]}
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
- const ellipsis = this.ellipsisEntities.get(event.target.parentElement);
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 isCroppedSelected = selection.anchorNode === croppedSpan?.childNodes[0] && selection.focusOffset === croppedSpan?.textContent?.length || selection.focusNode === croppedSpan?.childNodes[0] && selection.focusOffset === 0;
175
- const isFullSelected = selection.focusNode === fullSpan?.childNodes[0] && selection.focusOffset === fullSpan?.textContent?.length;
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":";AAAA,OAAOA,SAAS,MAAM,mCAAmC;AAGzD,SAASC,KAAK,QAAQ,SAAS;AAE/B,OAAO,MAAMC,QAAQ,GAAGF,SAAS,CAAC,CAAC,GAAG,gCAAgC,CAACG,IAAI,CAACC,SAAS,CAACC,SAAS,CAAC,GAAG,KAAK;AAExG,MAAMC,eAAe,CAAC;EAapBC,WAAWA,CAAA,EAAG;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,wBAPmB,IAAIC,OAAO,CAA6B,CAAC;IAAAD,eAAA,uCAC1B,IAAIC,OAAO,CAAgC,CAAC;IAAAD,eAAA,0BAElE,IAAIE,OAAO,CAAc,CAAC;IAAAF,eAAA,2BACzB,IAAIC,OAAO,CAAwB,CAAC;IAAAD,eAAA,oCAC3B,IAAIC,OAAO,CAAgC,CAAC;IAG9E,IAAI,CAACE,KAAK,GAAG,IAAIV,KAAK,CAACC,QAAQ,GAAG;MAAEU,YAAY,EAAE;IAAG,CAAC,GAAGC,SAAS,CAAC;IAEnE,IAAI,CAACC,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACC,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACC,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACD,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACE,0BAA0B,GAAG,IAAI,CAACA,0BAA0B,CAACF,IAAI,CAAC,IAAI,CAAC;IAE5E,IAAI,CAACG,UAAU,GAAG,IAAI,CAACA,UAAU,CAACH,IAAI,CAAC,IAAI,CAAC;IAE5C,IAAIf,SAAS,CAAC,CAAC,EAAE;MACf,IAAI,CAACmB,EAAE,GAAG,IAAIC,cAAc,CAAC,IAAI,CAACN,oBAAoB,CAAC;MACvD,IAAI,CAACO,EAAE,GAAG,IAAIC,oBAAoB,CAAC,IAAI,CAACL,0BAA0B,EAAE;QAClEM,IAAI,EAAE,IAAI;QACV;QACAC,YAAY,EAAE,yBAAyB;QACvCC,SAAS,EAAE;MACb,CAAC,CAAC;MACFC,QAAQ,CAACC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAACT,UAAU,CAAC;IACpD;EACF;EAEOU,WAAWA,CAACC,QAAkB,EAAE;IACrC,MAAMC,OAAO,GAAGD,QAAQ,CAACC,OAAO;IAEhC,IAAI,CAAC,IAAI,CAACC,gBAAgB,CAACC,GAAG,CAACF,OAAO,CAAC,EAAE;MACvC,IAAI,CAACC,gBAAgB,CAACE,GAAG,CAACH,OAAO,EAAED,QAAQ,CAAC;MAE5C,IAAI,CAACR,EAAE,EAAEa,OAAO,CAACJ,OAAO,CAAC;MAEzB,IAAID,QAAQ,CAACM,wBAAwB,IAAInC,SAAS,CAAC,CAAC,EAAE;QACpD,MAAMoC,EAAE,GAAG,IAAIC,gBAAgB,CAAC,IAAI,CAACrB,sBAAsB,CAAC;QAC5DoB,EAAE,CAACF,OAAO,CAACJ,OAAO,EAAE;UAClBQ,aAAa,EAAE,IAAI;UACnBC,OAAO,EAAE,IAAI;UACbC,qBAAqB,EAAE,IAAI;UAC3BC,SAAS,EAAE;QACb,CAAC,CAAC;QAEF,IAAI,CAACC,yBAAyB,CAACT,GAAG,CAACH,OAAO,EAAEM,EAAE,CAAC;MACjD;IACF;IAEA,IAAIP,QAAQ,CAACc,gBAAgB,KAAK9B,SAAS,EAAE;MAC3C,MAAM+B,WAAW,GAAG,IAAI,CAACC,aAAa,CAACC,GAAG,CAACjB,QAAQ,CAACc,gBAAgB,CAAC,IAAI,IAAII,GAAG,CAAC,CAAC;MAElFH,WAAW,CAACI,GAAG,CAACnB,QAAQ,CAAC;MAEzB,IAAI,CAACgB,aAAa,CAACZ,GAAG,CAACJ,QAAQ,CAACc,gBAAgB,EAAEC,WAAW,CAAC;IAChE;EACF;EAEOK,cAAcA,CAACpB,QAAkB,EAAE;IACxC,MAAMC,OAAO,GAAGD,QAAQ,CAACC,OAAO;IAEhC,IAAI,IAAI,CAACC,gBAAgB,CAACC,GAAG,CAACF,OAAO,CAAC,EAAE;MACtC,IAAI,CAACC,gBAAgB,CAACmB,MAAM,CAACpB,OAAO,CAAC;MACrC,IAAI,CAACqB,eAAe,CAACD,MAAM,CAACpB,OAAO,CAAC;MAEpC,IAAI,CAACT,EAAE,EAAE+B,SAAS,CAACtB,OAAO,CAAC;MAC3B,IAAI,CAACX,EAAE,EAAEiC,SAAS,CAACtB,OAAO,CAAC;MAC3B,IAAI,CAACY,yBAAyB,CAACI,GAAG,CAAChB,OAAO,CAAC,EAAEuB,UAAU,CAAC,CAAC;MACzD,IAAI,CAACX,yBAAyB,CAACQ,MAAM,CAACpB,OAAO,CAAC;IAChD;IAEA,IAAID,QAAQ,CAACc,gBAAgB,EAAE;MAC7B,MAAMC,WAAW,GAAG,IAAI,CAACC,aAAa,CAACC,GAAG,CAACjB,QAAQ,CAACc,gBAAgB,CAAC;MACrE,IAAIC,WAAW,EAAE;QACfA,WAAW,CAACM,MAAM,CAACrB,QAAQ,CAAC;QAE5B,IAAIe,WAAW,CAACU,IAAI,KAAK,CAAC,EAAE;UAC1B,IAAI,CAACT,aAAa,CAACK,MAAM,CAACrB,QAAQ,CAACc,gBAAgB,CAAC;QACtD,CAAC,MAAM;UACL,IAAI,CAACE,aAAa,CAACZ,GAAG,CAACJ,QAAQ,CAACc,gBAAgB,EAAEC,WAAW,CAAC;QAChE;MACF;IACF;EACF;EAEQ9B,oBAAoBA,CAACyC,OAA8B,EAAE;IAC3DA,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;MACzB,MAAMC,MAAM,GAAGD,KAAK,CAACC,MAAM;MAE3B,IAAIA,MAAM,YAAYC,WAAW,EAAE;QACjC,MAAMf,WAAW,GAAG,IAAI,CAACC,aAAa,CAACC,GAAG,CAACY,MAAM,CAAC;QAClD,IAAId,WAAW,KAAK/B,SAAS,EAAE;UAC7B,MAAM+C,aAAa,GAAGhB,WAAW,CAACiB,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,KAAK;UACvD,IAAIH,aAAa,EAAE;YACjB,IAAI,CAACI,4BAA4B,CAAC/B,GAAG,CAACyB,MAAM,EAAEE,aAAa,CAACK,eAAe,CAAC,CAAC,CAAC;UAChF;UAEA,KAAK,MAAMC,EAAE,IAAItB,WAAW,CAACiB,MAAM,CAAC,CAAC,EAAE;YACrC,MAAMhC,QAAQ,GAAG,IAAI,CAACE,gBAAgB,CAACe,GAAG,CAACoB,EAAE,CAACpC,OAAO,CAAC;YAEtD,IAAID,QAAQ,EAAE;cACZ,IAAIA,QAAQ,CAACsC,YAAY,KAAK,QAAQ,EAAE;gBACtC,IAAI,CAACC,kBAAkB,CAACV,MAAM,EAAE7B,QAAQ,CAAC;cAC3C;cAEA,IAAI,CAAClB,KAAK,CAACqC,GAAG,CAACnB,QAAQ,CAACwC,aAAa,CAAC;YACxC;UACF;QACF,CAAC,MAAM;UACL,MAAMxC,QAAQ,GAAG,IAAI,CAACE,gBAAgB,CAACe,GAAG,CAACY,MAAM,CAAC;UAElD,IAAI7B,QAAQ,EAAE;YACZ,IAAI,CAAClB,KAAK,CAACqC,GAAG,CAACnB,QAAQ,CAACwC,aAAa,CAAC;UACxC;QACF;MACF;IACF,CAAC,CAAC;EACJ;EAEQrD,sBAAsBA,CAACsD,SAA2B,EAAE;IAC1D,IAAIA,SAAS,CAACC,MAAM,KAAK,CAAC,EAAE;MAC1B,MAAM;QAAEC,IAAI;QAAEd;MAAO,CAAC,GAAGY,SAAS,CAAC,CAAC,CAAC;MAErC,IAAIG,IAAsB;MAE1B,IAAID,IAAI,KAAK,eAAe,IAAId,MAAM,YAAYgB,IAAI,EAAE;QACtDD,IAAI,GAAGf,MAAM;MACf,CAAC,MAAM,IAAIc,IAAI,KAAK,WAAW,EAAE;QAC/B,MAAMG,QAAQ,GAAGL,SAAS,CAAC,CAAC,CAAC;QAC7B,MAAMM,UAAU,GAAGD,QAAQ,CAACC,UAAU;QACtC,MAAMC,YAAY,GAAGF,QAAQ,CAACE,YAAY;QAC1C,IAAID,UAAU,CAACL,MAAM,KAAK,CAAC,IAAIK,UAAU,CAAC,CAAC,CAAC,YAAYF,IAAI,IAAIG,YAAY,CAACN,MAAM,KAAK,CAAC,IAAIM,YAAY,CAAC,CAAC,CAAC,YAAYC,eAAe,IAAID,YAAY,CAAC,CAAC,CAAC,YAAYC,eAAe,EAAE;UACrLL,IAAI,GAAGG,UAAU,CAAC,CAAC,CAAC;QACtB;MACF;MAEA,MAAMG,MAAM,GAAGN,IAAI,EAAEO,aAAa;MAClC,IAAIP,IAAI,IAAIM,MAAM,YAAYpB,WAAW,EAAE;QACzC,MAAM9B,QAAQ,GAAG,IAAI,CAACE,gBAAgB,CAACe,GAAG,CAACiC,MAAM,CAAC;QAElD,IAAIlD,QAAQ,EAAE;UACZA,QAAQ,CAACoD,WAAW,GAAGR,IAAI,CAACS,SAAS;UACrCrD,QAAQ,EAAEsD,SAAS,CAACC,QAAQ,CAACvD,QAAQ,EAAEwC,aAAa,CAAC;QACvD;MACF;IACF;EACF;EAEQpD,0BAA0BA,CAACsC,OAAoC,EAAE;IACvEA,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;MACzB,MAAMC,MAAM,GAAGD,KAAK,CAACC,MAAM;MAE3B,IAAIA,MAAM,YAAYC,WAAW,EAAE;QACjC,IAAIF,KAAK,CAAC4B,cAAc,KAAK,IAAI,IAAI,CAAC,IAAI,CAAClC,eAAe,CAACnB,GAAG,CAAC0B,MAAM,CAAC,EAAE;UACtE,MAAM7B,QAAQ,GAAG,IAAI,CAACE,gBAAgB,CAACe,GAAG,CAACY,MAAM,CAAC;UAElD,IAAI7B,QAAQ,EAAEc,gBAAgB,KAAK9B,SAAS,EAAE;YAC5C,IAAI,CAACM,EAAE,EAAEe,OAAO,CAACL,QAAQ,EAAEc,gBAAgB,CAAC;YAE5C,IAAId,QAAQ,CAACsC,YAAY,KAAK,QAAQ,EAAE;cACtC,IAAI,CAACC,kBAAkB,CAACV,MAAM,EAAE7B,QAAQ,CAAC;YAC3C;YAEA,IAAI,CAAClB,KAAK,CAACqC,GAAG,CAACnB,QAAQ,CAACwC,aAAa,CAAC;UACxC,CAAC,MAAM;YACL,IAAI,CAAClD,EAAE,EAAEe,OAAO,CAACwB,MAAM,CAAC;UAC1B;UAEA,IAAI,CAACP,eAAe,CAACH,GAAG,CAACU,MAAM,CAAC;QAClC,CAAC,MAAM,IAAID,KAAK,CAAC4B,cAAc,KAAK,KAAK,IAAI,IAAI,CAAClC,eAAe,CAACnB,GAAG,CAAC0B,MAAM,CAAC,EAAE;UAC7E,MAAM7B,QAAQ,GAAG,IAAI,CAACE,gBAAgB,CAACe,GAAG,CAACY,MAAM,CAAC;UAElD,IAAI7B,QAAQ,EAAE;YACZ,IAAI,CAAClB,KAAK,CAACuC,MAAM,CAACrB,QAAQ,CAACwC,aAAa,CAAC;UAC3C;UAEA,IAAI,CAAClB,eAAe,CAACD,MAAM,CAACQ,MAAM,CAAC;UAEnC,IAAI,CAACvC,EAAE,EAAEiC,SAAS,CAACM,MAAM,CAAC;UAC1B,IAAI,CAAChB,yBAAyB,CAACI,GAAG,CAACY,MAAM,CAAC,EAAEL,UAAU,CAAC,CAAC;QAC1D;MACF;IACF,CAAC,CAAC;EACJ;EAEQe,kBAAkBA,CAACkB,SAAsB,EAAEzD,QAAkB,EAAE;IACrE,MAAM0D,eAAe,GAAG,IAAI,CAACvB,4BAA4B,CAAClB,GAAG,CAACwC,SAAS,CAAC;IAExE,IAAIC,eAAe,IAAI1D,QAAQ,CAACoD,WAAW,CAACV,MAAM,GAAGgB,eAAe,CAAC,CAAC,CAAC,GAAGA,eAAe,CAAC,CAAC,CAAC,EAAE;MAC5F1D,QAAQ,CAACC,OAAO,CAACmD,WAAW,GAAGpD,QAAQ,EAAEoD,WAAW,CAACO,KAAK,CAAC,CAAC,EAAED,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG1D,QAAQ,EAAEoD,WAAW,CAACO,KAAK,CAAC,CAAC,CAAC,GAAGD,eAAe,CAAC,CAAC,CAAC,CAAC;IAClJ;EACF;EAEQrE,UAAUA,CAACuE,KAAqB,EAAE;IACxC,IAAIA,KAAK,YAAYC,cAAc,IAAID,KAAK,CAAC/B,MAAM,YAAYC,WAAW,IAAI8B,KAAK,CAAC/B,MAAM,CAACsB,aAAa,YAAYrB,WAAW,EAAE;MAC/H,MAAMgC,SAAS,GAAGC,MAAM,CAACC,YAAY,CAAC,CAAC;MACvC,MAAMhE,QAAQ,GAAG,IAAI,CAACE,gBAAgB,CAACe,GAAG,CAAC2C,KAAK,CAAC/B,MAAM,CAACsB,aAAa,CAAC;MAEtE,IAAIW,SAAS,IAAI9D,QAAQ,EAAE;QACzB,MAAMiE,aAAa,GAAGjE,QAAQ,CAACC,OAAO,CAACiE,UAAU;QACjD,MAAMC,WAAW,GAAGF,aAAa,CAAC,CAAC,CAAC;QACpC,MAAMG,QAAQ,GAAGH,aAAa,CAACA,aAAa,CAACvB,MAAM,GAAG,CAAC,CAAC;QAExD,MAAM2B,iBAAiB,GAAIP,SAAS,CAACQ,UAAU,KAAKH,WAAW,EAAED,UAAU,CAAC,CAAC,CAAC,IAAIJ,SAAS,CAACS,WAAW,KAAKJ,WAAW,EAAEf,WAAW,EAAEV,MAAM,IAAMoB,SAAS,CAACU,SAAS,KAAKL,WAAW,EAAED,UAAU,CAAC,CAAC,CAAC,IAAIJ,SAAS,CAACS,WAAW,KAAK,CAAE;QACpO,MAAME,cAAc,GAAGX,SAAS,CAACU,SAAS,KAAKJ,QAAQ,EAAEF,UAAU,CAAC,CAAC,CAAC,IAAIJ,SAAS,CAACS,WAAW,KAAKH,QAAQ,EAAEhB,WAAW,EAAEV,MAAM;QAEjI,IAAI0B,QAAQ,EAAEhB,WAAW,KAAK,EAAEU,SAAS,CAACU,SAAS,YAAY3B,IAAI,CAAC,IAAIwB,iBAAiB,IAAII,cAAc,CAAC,EAAE;UAC5GlG,SAAS,CAACmG,SAAS,CAACC,SAAS,CAACP,QAAQ,CAAChB,WAAW,CAAC;QACrD;MACF;IACF;EACF;AACF;AAEA,OAAO,MAAMwB,eAAe,GAAG,IAAInG,eAAe,CAAC,CAAC","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":[]}