@chayns-components/core 5.3.12-alpha.0 → 5.4.5-alpha.0

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 (146) hide show
  1. package/lib/cjs/components/accordion/Accordion.js +1 -1
  2. package/lib/cjs/components/accordion/Accordion.js.map +1 -1
  3. package/lib/cjs/components/accordion/Accordion.styles.js +1 -1
  4. package/lib/cjs/components/accordion/Accordion.styles.js.map +1 -1
  5. package/lib/cjs/components/button/Button.styles.js +1 -8
  6. package/lib/cjs/components/button/Button.styles.js.map +1 -1
  7. package/lib/cjs/components/combobox/ComboBox.js +14 -5
  8. package/lib/cjs/components/combobox/ComboBox.js.map +1 -1
  9. package/lib/cjs/components/context-menu/ContextMenu.js +50 -40
  10. package/lib/cjs/components/context-menu/ContextMenu.js.map +1 -1
  11. package/lib/cjs/components/context-menu/ContextMenu.utils.js +27 -1
  12. package/lib/cjs/components/context-menu/ContextMenu.utils.js.map +1 -1
  13. package/lib/cjs/components/context-menu/context-menu-content/ContextMenuContent.js +3 -8
  14. package/lib/cjs/components/context-menu/context-menu-content/ContextMenuContent.js.map +1 -1
  15. package/lib/cjs/components/file-list/file-item/FileItem.js +29 -27
  16. package/lib/cjs/components/file-list/file-item/FileItem.js.map +1 -1
  17. package/lib/cjs/components/file-list/file-item/FileItem.styles.js +6 -0
  18. package/lib/cjs/components/file-list/file-item/FileItem.styles.js.map +1 -1
  19. package/lib/cjs/components/highlight-slider/HighlightSlider.js +6 -3
  20. package/lib/cjs/components/highlight-slider/HighlightSlider.js.map +1 -1
  21. package/lib/cjs/components/input/Input.js +2 -2
  22. package/lib/cjs/components/input/Input.js.map +1 -1
  23. package/lib/cjs/components/input/Input.styles.js +6 -1
  24. package/lib/cjs/components/input/Input.styles.js.map +1 -1
  25. package/lib/cjs/components/list/List.utils.js +108 -14
  26. package/lib/cjs/components/list/List.utils.js.map +1 -1
  27. package/lib/cjs/components/list/list-item/ListItem.js +27 -25
  28. package/lib/cjs/components/list/list-item/ListItem.js.map +1 -1
  29. package/lib/cjs/components/list/list-item/ListItem.styles.js +3 -5
  30. package/lib/cjs/components/list/list-item/ListItem.styles.js.map +1 -1
  31. package/lib/cjs/components/list/list-item/list-item-head/ListItemHead.js +4 -35
  32. package/lib/cjs/components/list/list-item/list-item-head/ListItemHead.js.map +1 -1
  33. package/lib/cjs/components/list/list-item/list-item-head/list-item-right-element/ListItemRightElement.js +1 -31
  34. package/lib/cjs/components/list/list-item/list-item-head/list-item-right-element/ListItemRightElement.js.map +1 -1
  35. package/lib/cjs/components/list/list-item/list-item-head/list-item-subtitle/ListItemSubtitle.js +1 -29
  36. package/lib/cjs/components/list/list-item/list-item-head/list-item-subtitle/ListItemSubtitle.js.map +1 -1
  37. package/lib/cjs/components/list/list-item/list-item-head/list-item-title/ListItemTitle.js +1 -29
  38. package/lib/cjs/components/list/list-item/list-item-head/list-item-title/ListItemTitle.js.map +1 -1
  39. package/lib/cjs/components/mention-finder/MentionFinder.js +12 -3
  40. package/lib/cjs/components/mention-finder/MentionFinder.js.map +1 -1
  41. package/lib/cjs/components/multi-action-button/MultiActionButton.styles.js +6 -0
  42. package/lib/cjs/components/multi-action-button/MultiActionButton.styles.js.map +1 -1
  43. package/lib/cjs/components/search-box/SearchBox.js +15 -3
  44. package/lib/cjs/components/search-box/SearchBox.js.map +1 -1
  45. package/lib/cjs/components/search-input/SearchInput.js +16 -2
  46. package/lib/cjs/components/search-input/SearchInput.js.map +1 -1
  47. package/lib/cjs/components/search-input/SearchInput.styles.js +1 -0
  48. package/lib/cjs/components/search-input/SearchInput.styles.js.map +1 -1
  49. package/lib/cjs/components/setup-wizard/SetupWizard.js +6 -3
  50. package/lib/cjs/components/setup-wizard/SetupWizard.js.map +1 -1
  51. package/lib/cjs/components/sharing-bar/SharingBar.js +1 -1
  52. package/lib/cjs/components/sharing-bar/SharingBar.js.map +1 -1
  53. package/lib/cjs/components/sharing-bar/SharingBar.styles.js +3 -2
  54. package/lib/cjs/components/sharing-bar/SharingBar.styles.js.map +1 -1
  55. package/lib/cjs/components/skeleton/base-skeleton/BaseSkeleton.styles.js +2 -0
  56. package/lib/cjs/components/skeleton/base-skeleton/BaseSkeleton.styles.js.map +1 -1
  57. package/lib/cjs/components/slider-button/SliderButton.styles.js +1 -5
  58. package/lib/cjs/components/slider-button/SliderButton.styles.js.map +1 -1
  59. package/lib/cjs/components/tag-input/TagInput.js +1 -0
  60. package/lib/cjs/components/tag-input/TagInput.js.map +1 -1
  61. package/lib/cjs/components/tag-input/TagInput.styles.js +0 -2
  62. package/lib/cjs/components/tag-input/TagInput.styles.js.map +1 -1
  63. package/lib/cjs/components/truncation/Truncation.styles.js +0 -1
  64. package/lib/cjs/components/truncation/Truncation.styles.js.map +1 -1
  65. package/lib/cjs/index.js +6 -0
  66. package/lib/cjs/index.js.map +1 -1
  67. package/lib/cjs/utils/keyboardFocusHighlighting.styles.js +2 -3
  68. package/lib/cjs/utils/keyboardFocusHighlighting.styles.js.map +1 -1
  69. package/lib/esm/components/accordion/Accordion.js +1 -1
  70. package/lib/esm/components/accordion/Accordion.js.map +1 -1
  71. package/lib/esm/components/accordion/Accordion.styles.js +1 -1
  72. package/lib/esm/components/accordion/Accordion.styles.js.map +1 -1
  73. package/lib/esm/components/button/Button.styles.js +1 -8
  74. package/lib/esm/components/button/Button.styles.js.map +1 -1
  75. package/lib/esm/components/combobox/ComboBox.js +9 -1
  76. package/lib/esm/components/combobox/ComboBox.js.map +1 -1
  77. package/lib/esm/components/context-menu/ContextMenu.js +48 -39
  78. package/lib/esm/components/context-menu/ContextMenu.js.map +1 -1
  79. package/lib/esm/components/context-menu/ContextMenu.utils.js +24 -0
  80. package/lib/esm/components/context-menu/ContextMenu.utils.js.map +1 -1
  81. package/lib/esm/components/context-menu/context-menu-content/ContextMenuContent.js +3 -8
  82. package/lib/esm/components/context-menu/context-menu-content/ContextMenuContent.js.map +1 -1
  83. package/lib/esm/components/file-list/file-item/FileItem.js +29 -27
  84. package/lib/esm/components/file-list/file-item/FileItem.js.map +1 -1
  85. package/lib/esm/components/file-list/file-item/FileItem.styles.js +7 -1
  86. package/lib/esm/components/file-list/file-item/FileItem.styles.js.map +1 -1
  87. package/lib/esm/components/highlight-slider/HighlightSlider.js +6 -3
  88. package/lib/esm/components/highlight-slider/HighlightSlider.js.map +1 -1
  89. package/lib/esm/components/input/Input.js +2 -2
  90. package/lib/esm/components/input/Input.js.map +1 -1
  91. package/lib/esm/components/input/Input.styles.js +6 -1
  92. package/lib/esm/components/input/Input.styles.js.map +1 -1
  93. package/lib/esm/components/list/List.utils.js +104 -13
  94. package/lib/esm/components/list/List.utils.js.map +1 -1
  95. package/lib/esm/components/list/list-item/ListItem.js +28 -26
  96. package/lib/esm/components/list/list-item/ListItem.js.map +1 -1
  97. package/lib/esm/components/list/list-item/ListItem.styles.js +3 -5
  98. package/lib/esm/components/list/list-item/ListItem.styles.js.map +1 -1
  99. package/lib/esm/components/list/list-item/list-item-head/ListItemHead.js +4 -35
  100. package/lib/esm/components/list/list-item/list-item-head/ListItemHead.js.map +1 -1
  101. package/lib/esm/components/list/list-item/list-item-head/list-item-right-element/ListItemRightElement.js +2 -32
  102. package/lib/esm/components/list/list-item/list-item-head/list-item-right-element/ListItemRightElement.js.map +1 -1
  103. package/lib/esm/components/list/list-item/list-item-head/list-item-subtitle/ListItemSubtitle.js +2 -30
  104. package/lib/esm/components/list/list-item/list-item-head/list-item-subtitle/ListItemSubtitle.js.map +1 -1
  105. package/lib/esm/components/list/list-item/list-item-head/list-item-title/ListItemTitle.js +1 -29
  106. package/lib/esm/components/list/list-item/list-item-head/list-item-title/ListItemTitle.js.map +1 -1
  107. package/lib/esm/components/mention-finder/MentionFinder.js +9 -1
  108. package/lib/esm/components/mention-finder/MentionFinder.js.map +1 -1
  109. package/lib/esm/components/multi-action-button/MultiActionButton.styles.js +6 -0
  110. package/lib/esm/components/multi-action-button/MultiActionButton.styles.js.map +1 -1
  111. package/lib/esm/components/search-box/SearchBox.js +12 -1
  112. package/lib/esm/components/search-box/SearchBox.js.map +1 -1
  113. package/lib/esm/components/search-input/SearchInput.js +15 -2
  114. package/lib/esm/components/search-input/SearchInput.js.map +1 -1
  115. package/lib/esm/components/search-input/SearchInput.styles.js +1 -0
  116. package/lib/esm/components/search-input/SearchInput.styles.js.map +1 -1
  117. package/lib/esm/components/setup-wizard/SetupWizard.js +6 -3
  118. package/lib/esm/components/setup-wizard/SetupWizard.js.map +1 -1
  119. package/lib/esm/components/sharing-bar/SharingBar.js +1 -1
  120. package/lib/esm/components/sharing-bar/SharingBar.js.map +1 -1
  121. package/lib/esm/components/sharing-bar/SharingBar.styles.js +3 -2
  122. package/lib/esm/components/sharing-bar/SharingBar.styles.js.map +1 -1
  123. package/lib/esm/components/skeleton/base-skeleton/BaseSkeleton.styles.js +2 -0
  124. package/lib/esm/components/skeleton/base-skeleton/BaseSkeleton.styles.js.map +1 -1
  125. package/lib/esm/components/slider-button/SliderButton.styles.js +1 -5
  126. package/lib/esm/components/slider-button/SliderButton.styles.js.map +1 -1
  127. package/lib/esm/components/tag-input/TagInput.js +1 -0
  128. package/lib/esm/components/tag-input/TagInput.js.map +1 -1
  129. package/lib/esm/components/tag-input/TagInput.styles.js +0 -2
  130. package/lib/esm/components/tag-input/TagInput.styles.js.map +1 -1
  131. package/lib/esm/components/truncation/Truncation.styles.js +0 -1
  132. package/lib/esm/components/truncation/Truncation.styles.js.map +1 -1
  133. package/lib/esm/index.js +1 -1
  134. package/lib/esm/index.js.map +1 -1
  135. package/lib/esm/utils/keyboardFocusHighlighting.styles.js +2 -3
  136. package/lib/esm/utils/keyboardFocusHighlighting.styles.js.map +1 -1
  137. package/lib/types/components/context-menu/ContextMenu.utils.d.ts +10 -0
  138. package/lib/types/components/context-menu/context-menu-content/ContextMenuContent.d.ts +1 -1
  139. package/lib/types/components/list/List.utils.d.ts +23 -7
  140. package/lib/types/components/list/list-item/ListItem.d.ts +4 -0
  141. package/lib/types/components/list/list-item/list-item-head/ListItemHead.d.ts +0 -1
  142. package/lib/types/components/list/list-item/list-item-head/list-item-right-element/ListItemRightElement.d.ts +0 -1
  143. package/lib/types/components/list/list-item/list-item-head/list-item-subtitle/ListItemSubtitle.d.ts +0 -1
  144. package/lib/types/components/list/list-item/list-item-head/list-item-title/ListItemTitle.d.ts +0 -1
  145. package/lib/types/index.d.ts +1 -1
  146. package/package.json +3 -3
@@ -81,35 +81,14 @@ const ContextMenu = /*#__PURE__*/(0, _react2.forwardRef)(({
81
81
  const handleHide = (0, _react2.useCallback)(() => {
82
82
  setIsContentShown(false);
83
83
  }, []);
84
- (0, _react2.useEffect)(() => {
85
- if (!isContentShown) return () => {};
86
- const handleKey = e => {
87
- if (items.length === 0 || isHovered) return;
88
- if (e.key === 'ArrowDown') {
89
- e.preventDefault();
90
- setFocusedIndex(prev => prev >= items.length - 1 ? 0 : prev + 1);
91
- }
92
- if (e.key === 'ArrowUp') {
93
- e.preventDefault();
94
- setFocusedIndex(prev => prev <= 0 ? items.length - 1 : prev - 1);
95
- }
96
- if (e.key === 'Enter') {
97
- e.preventDefault();
98
- const item = items[focusedIndex];
99
- if (item) {
100
- void item.onClick();
101
- if (shouldCloseOnPopupClick) {
102
- handleHide();
103
- }
104
- }
105
- }
106
- if (e.key === 'Escape') {
107
- handleHide();
108
- }
109
- };
110
- document.addEventListener('keydown', handleKey);
111
- return () => document.removeEventListener('keydown', handleKey);
112
- }, [isContentShown, items, focusedIndex, handleHide, shouldCloseOnPopupClick, isHovered]);
84
+ const handleContainerBlur = (0, _react2.useCallback)(event => {
85
+ var _contextMenuContentRe;
86
+ const nextFocusedElement = event.relatedTarget;
87
+ const currentContainer = event.currentTarget;
88
+ if (!nextFocusedElement || !currentContainer.contains(nextFocusedElement) && !((_contextMenuContentRe = contextMenuContentRef.current) !== null && _contextMenuContentRe !== void 0 && _contextMenuContentRe.contains(nextFocusedElement))) {
89
+ handleHide();
90
+ }
91
+ }, [handleHide]);
113
92
  const handleShow = (0, _react2.useCallback)(async () => {
114
93
  if (isTouch) {
115
94
  const {
@@ -182,8 +161,44 @@ const ContextMenu = /*#__PURE__*/(0, _react2.forwardRef)(({
182
161
  if (shouldDisableClick) {
183
162
  return;
184
163
  }
185
- const isContextMenuShortcut = event.key === 'ContextMenu' || event.key === 'F10' && event.shiftKey;
186
164
  const isActivationKey = event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar';
165
+ if (isContentShown && event.key === 'Escape') {
166
+ event.preventDefault();
167
+ event.stopPropagation();
168
+ handleHide();
169
+ return;
170
+ }
171
+ if (isContentShown && !isHovered && event.key === 'ArrowDown') {
172
+ event.preventDefault();
173
+ event.stopPropagation();
174
+ setFocusedIndex(prev => prev >= items.length - 1 ? 0 : prev + 1);
175
+ return;
176
+ }
177
+ if (isContentShown && !isHovered && event.key === 'ArrowUp') {
178
+ event.preventDefault();
179
+ event.stopPropagation();
180
+ setFocusedIndex(prev => prev <= 0 ? items.length - 1 : prev - 1);
181
+ return;
182
+ }
183
+ if (isContentShown && isActivationKey) {
184
+ if ((0, _ContextMenu3.selectItem)({
185
+ index: (0, _ContextMenu3.getActiveItemIndex)({
186
+ contextMenuContentElement: contextMenuContentRef.current,
187
+ focusedIndex
188
+ }),
189
+ items,
190
+ onClose: handleHide,
191
+ shouldCloseOnPopupClick
192
+ })) {
193
+ event.preventDefault();
194
+ event.stopPropagation();
195
+ }
196
+ return;
197
+ }
198
+ if (event.currentTarget !== event.target) {
199
+ return;
200
+ }
201
+ const isContextMenuShortcut = event.key === 'ContextMenu' || event.key === 'F10' && event.shiftKey;
187
202
  if (isContextMenuShortcut) {
188
203
  event.preventDefault();
189
204
  event.stopPropagation();
@@ -196,7 +211,7 @@ const ContextMenu = /*#__PURE__*/(0, _react2.forwardRef)(({
196
211
  event.stopPropagation();
197
212
  void handleShow();
198
213
  }
199
- }, [handleShow, shouldDisableClick, shouldUseFocusableWrapper]);
214
+ }, [focusedIndex, handleHide, handleShow, isHovered, isContentShown, items, items.length, shouldCloseOnPopupClick, shouldDisableClick, shouldUseFocusableWrapper]);
200
215
  const handleContextMenu = (0, _react2.useCallback)(event => {
201
216
  event.preventDefault();
202
217
  event.stopPropagation();
@@ -254,8 +269,8 @@ const ContextMenu = /*#__PURE__*/(0, _react2.forwardRef)(({
254
269
  }), [handleHide, handleShow]);
255
270
  (0, _react2.useEffect)(() => {
256
271
  const handleDocumentClick = event => {
257
- var _contextMenuContentRe;
258
- if (!shouldCloseOnPopupClick && (_contextMenuContentRe = contextMenuContentRef.current) !== null && _contextMenuContentRe !== void 0 && _contextMenuContentRe.contains(event.target)) {
272
+ var _contextMenuContentRe2;
273
+ if (!shouldCloseOnPopupClick && (_contextMenuContentRe2 = contextMenuContentRef.current) !== null && _contextMenuContentRe2 !== void 0 && _contextMenuContentRe2.contains(event.target)) {
259
274
  return;
260
275
  }
261
276
  handleHide();
@@ -290,13 +305,7 @@ const ContextMenu = /*#__PURE__*/(0, _react2.forwardRef)(({
290
305
  alignment: alignment ?? internalAlignment,
291
306
  ref: contextMenuContentRef,
292
307
  focusedIndex: focusedIndex,
293
- onKeySelect: index => {
294
- const item = items[index];
295
- if (item) {
296
- void item.onClick();
297
- handleHide();
298
- }
299
- },
308
+ onItemFocus: setFocusedIndex,
300
309
  onMouseEnter: () => {
301
310
  setIsHovered(true);
302
311
  setFocusedIndex(-1);
@@ -324,6 +333,7 @@ const ContextMenu = /*#__PURE__*/(0, _react2.forwardRef)(({
324
333
  onContextMenuCapture: handleContextMenu,
325
334
  onContextMenu: handleContextMenu,
326
335
  onKeyDown: handleKeyDown,
336
+ onBlur: handleContainerBlur,
327
337
  ref: contextMenuRef,
328
338
  tabIndex: shouldUseKeyboardFocusableWrapper ? 0 : undefined,
329
339
  role: shouldUseKeyboardFocusableWrapper ? 'button' : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenu.js","names":["_chaynsApi","require","_react","_react2","_interopRequireWildcard","_reactDom","_uuid","_environment","_Icon","_interopRequireDefault","_ContextMenuContent","_ContextMenu","_ContextMenu2","_ContextMenu3","_useKeyboardFocusHighlighting","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ContextMenu","forwardRef","alignment","className","children","createElement","icons","size","container","coordinates","headline","items","onHide","onShow","shouldCloseOnPopupClick","shouldDisableClick","shouldHidePopupArrow","shouldShowHoverEffect","shouldEnableKeyboardHighlighting","shouldUseDefaultTriggerStyles","style","yOffset","zIndex","ref","internalCoordinates","setInternalCoordinates","useState","x","y","internalAlignment","setInternalAlignment","ContextMenuAlignment","TopLeft","newContainer","setNewContainer","focusedIndex","setFocusedIndex","getDefaultFocusedIndex","isContentShown","setIsContentShown","portal","setPortal","isHovered","setIsHovered","shouldUseFocusableWrapper","setShouldUseFocusableWrapper","uuid","useUuid","contextMenuContentRef","useRef","contextMenuRef","shouldSkipNextContextMenuOpenRef","shouldPreventNextNativeContextMenuRef","isTouch","useIsTouch","shouldShowKeyboardHighlighting","useKeyboardFocusHighlighting","shouldShowWrapperKeyboardHighlighting","shouldUseKeyboardFocusableWrapper","useEffect","current","el","element","closest","Element","handleHide","useCallback","handleKey","length","key","preventDefault","prev","item","onClick","document","addEventListener","removeEventListener","handleShow","result","createDialog","type","DialogType","SELECT","buttons","list","map","text","isSelected","index","name","id","icon","isValidElement","undefined","open","_items$result$","height","childrenHeight","left","childrenLeft","top","childrenTop","width","childrenWidth","getBoundingClientRect","zoomX","offsetWidth","zoomY","offsetHeight","scrollLeft","scrollTop","BottomRight","TopRight","BottomLeft","handleClick","event","stopPropagation","handleKeyDown","isContextMenuShortcut","shiftKey","isActivationKey","handleContextMenu","handleGlobalKeyDown","activeElement","HTMLElement","body","documentElement","shouldOpenFromFocusedParent","contains","handleNativeContextMenuCapture","useImperativeHandle","hide","show","handleDocumentClick","_contextMenuContentRe","target","window","createPortal","AnimatePresence","initial","onKeySelect","onMouseEnter","onMouseLeave","focusableChildSelector","hasFocusableChild","Boolean","querySelector","Fragment","StyledContextMenu","$isActive","$shouldAddHoverEffect","$shouldShowWrapperKeyboardHighlighting","$shouldUseDefaultTriggerStyles","onContextMenuCapture","onContextMenu","onKeyDown","tabIndex","role","displayName","_default","exports"],"sources":["../../../../src/components/context-menu/ContextMenu.tsx"],"sourcesContent":["import { createDialog, DialogType } from 'chayns-api';\nimport { AnimatePresence } from 'motion/react';\nimport React, {\n forwardRef,\n isValidElement,\n KeyboardEventHandler,\n MouseEvent,\n MouseEventHandler,\n ReactPortal,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { useUuid } from '../../hooks/uuid';\nimport { useIsTouch } from '../../utils/environment';\nimport Icon from '../icon/Icon';\nimport ContextMenuContent from './context-menu-content/ContextMenuContent';\nimport { StyledContextMenu } from './ContextMenu.styles';\nimport {\n ContextMenuAlignment,\n type ContextMenuCoordinates,\n type ContextMenuProps,\n type ContextMenuRef,\n} from './ContextMenu.types';\nimport { SelectDialogResult } from '../../types/general';\nimport { getDefaultFocusedIndex } from './ContextMenu.utils';\nimport { useKeyboardFocusHighlighting } from '../../hooks/useKeyboardFocusHighlighting';\n\nconst ContextMenu = forwardRef<ContextMenuRef, ContextMenuProps>(\n (\n {\n alignment,\n className,\n children = <Icon icons={['ts-ellipsis_v']} size={18} />,\n container,\n coordinates,\n headline,\n items,\n onHide,\n onShow,\n shouldCloseOnPopupClick = true,\n shouldDisableClick = false,\n shouldHidePopupArrow = false,\n shouldShowHoverEffect = false,\n shouldEnableKeyboardHighlighting,\n shouldUseDefaultTriggerStyles = true,\n style,\n yOffset = 0,\n zIndex = 20,\n },\n ref,\n ) => {\n const [internalCoordinates, setInternalCoordinates] = useState<ContextMenuCoordinates>({\n x: 0,\n y: 0,\n });\n\n const [internalAlignment, setInternalAlignment] = useState<ContextMenuAlignment>(\n ContextMenuAlignment.TopLeft,\n );\n\n const [newContainer, setNewContainer] = useState(container ?? null);\n const [focusedIndex, setFocusedIndex] = useState(getDefaultFocusedIndex(items));\n const [isContentShown, setIsContentShown] = useState(false);\n const [portal, setPortal] = useState<ReactPortal>();\n const [isHovered, setIsHovered] = useState(false);\n const [shouldUseFocusableWrapper, setShouldUseFocusableWrapper] = useState(false);\n\n const uuid = useUuid();\n\n const contextMenuContentRef = useRef<HTMLDivElement>(null);\n const contextMenuRef = useRef<HTMLSpanElement>(null);\n const shouldSkipNextContextMenuOpenRef = useRef(false);\n const shouldPreventNextNativeContextMenuRef = useRef(false);\n\n const isTouch = useIsTouch();\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n shouldEnableKeyboardHighlighting && !shouldDisableClick,\n );\n const shouldShowWrapperKeyboardHighlighting =\n shouldShowKeyboardHighlighting && shouldUseFocusableWrapper;\n const shouldUseKeyboardFocusableWrapper = shouldUseFocusableWrapper && !shouldDisableClick;\n\n useEffect(() => {\n if (isContentShown) {\n setFocusedIndex(getDefaultFocusedIndex(items));\n }\n }, [isContentShown, items]);\n\n useEffect(() => {\n if (contextMenuRef.current && !container) {\n const el = contextMenuRef.current as HTMLElement;\n\n const element = el.closest('.dialog-inner, .page-provider, .tapp, body');\n\n setNewContainer(element);\n }\n }, [container]);\n\n useEffect(() => {\n if (container instanceof Element) {\n setNewContainer(container);\n }\n }, [container]);\n\n const handleHide = useCallback(() => {\n setIsContentShown(false);\n }, []);\n\n useEffect(() => {\n if (!isContentShown) return () => {};\n\n const handleKey = (e: KeyboardEvent) => {\n if (items.length === 0 || isHovered) return;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setFocusedIndex((prev) => (prev >= items.length - 1 ? 0 : prev + 1));\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setFocusedIndex((prev) => (prev <= 0 ? items.length - 1 : prev - 1));\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n const item = items[focusedIndex];\n if (item) {\n void item.onClick();\n\n if (shouldCloseOnPopupClick) {\n handleHide();\n }\n }\n }\n\n if (e.key === 'Escape') {\n handleHide();\n }\n };\n\n document.addEventListener('keydown', handleKey);\n\n return () => document.removeEventListener('keydown', handleKey);\n }, [isContentShown, items, focusedIndex, handleHide, shouldCloseOnPopupClick, isHovered]);\n\n const handleShow = useCallback(async () => {\n if (isTouch) {\n const { result } = (await createDialog({\n type: DialogType.SELECT,\n buttons: [],\n list: items.map(({ icons, text, isSelected }, index) => ({\n name: text,\n id: index,\n isSelected,\n icon: isValidElement(icons)\n ? undefined\n : (icons as string[] | undefined)?.[0],\n })),\n }).open()) as SelectDialogResult;\n\n if (result && typeof result[0] === 'number') {\n void items[result[0]]?.onClick();\n }\n } else if (contextMenuRef.current) {\n if (!newContainer) {\n return;\n }\n\n const {\n height: childrenHeight,\n left: childrenLeft,\n top: childrenTop,\n width: childrenWidth,\n } = contextMenuRef.current.getBoundingClientRect();\n\n const { height, width, top, left } = newContainer.getBoundingClientRect();\n\n const zoomX = width / (newContainer as HTMLElement).offsetWidth;\n const zoomY = height / (newContainer as HTMLElement).offsetHeight;\n\n const x =\n (childrenLeft + childrenWidth / 2 - left) / zoomX + newContainer.scrollLeft;\n const y =\n (childrenTop + childrenHeight / 2 - top) / zoomY +\n newContainer.scrollTop -\n yOffset;\n\n setInternalCoordinates({ x, y });\n\n if (x < width / 2) {\n if (y < height / 2) {\n setInternalAlignment(ContextMenuAlignment.BottomRight);\n } else {\n setInternalAlignment(ContextMenuAlignment.TopRight);\n }\n } else if (y < height / 2) {\n setInternalAlignment(ContextMenuAlignment.BottomLeft);\n } else {\n setInternalAlignment(ContextMenuAlignment.TopLeft);\n }\n\n setIsContentShown(true);\n }\n }, [isTouch, items, newContainer, yOffset]);\n\n const handleClick = useCallback<MouseEventHandler<HTMLSpanElement>>(\n (event) => {\n if (shouldDisableClick) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n void handleShow();\n },\n [handleShow, shouldDisableClick],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLSpanElement>>(\n (event) => {\n if (shouldDisableClick) {\n return;\n }\n\n const isContextMenuShortcut =\n event.key === 'ContextMenu' || (event.key === 'F10' && event.shiftKey);\n const isActivationKey =\n event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar';\n\n if (isContextMenuShortcut) {\n event.preventDefault();\n event.stopPropagation();\n shouldSkipNextContextMenuOpenRef.current = true;\n void handleShow();\n return;\n }\n\n if (shouldUseFocusableWrapper && isActivationKey) {\n event.preventDefault();\n event.stopPropagation();\n void handleShow();\n }\n },\n [handleShow, shouldDisableClick, shouldUseFocusableWrapper],\n );\n\n const handleContextMenu = useCallback(\n (event: MouseEvent<HTMLSpanElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (shouldDisableClick) {\n return;\n }\n\n if (shouldSkipNextContextMenuOpenRef.current) {\n shouldSkipNextContextMenuOpenRef.current = false;\n return;\n }\n\n void handleShow();\n },\n [handleShow, shouldDisableClick],\n );\n\n useEffect(() => {\n const handleGlobalKeyDown = (event: KeyboardEvent) => {\n if (shouldDisableClick || !contextMenuRef.current) {\n return;\n }\n\n const isContextMenuShortcut =\n event.key === 'ContextMenu' || (event.key === 'F10' && event.shiftKey);\n\n if (!isContextMenuShortcut) {\n return;\n }\n\n const { activeElement } = document;\n\n if (\n !(activeElement instanceof HTMLElement) ||\n activeElement === document.body ||\n activeElement === document.documentElement\n ) {\n return;\n }\n\n const shouldOpenFromFocusedParent =\n activeElement.contains(contextMenuRef.current) &&\n !contextMenuRef.current.contains(activeElement);\n\n if (!shouldOpenFromFocusedParent) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n shouldPreventNextNativeContextMenuRef.current = true;\n void handleShow();\n };\n\n const handleNativeContextMenuCapture = (event: Event) => {\n if (!shouldPreventNextNativeContextMenuRef.current) {\n return;\n }\n\n shouldPreventNextNativeContextMenuRef.current = false;\n event.preventDefault();\n event.stopPropagation();\n };\n\n document.addEventListener('keydown', handleGlobalKeyDown, true);\n document.addEventListener('contextmenu', handleNativeContextMenuCapture, true);\n\n return () => {\n document.removeEventListener('keydown', handleGlobalKeyDown, true);\n document.removeEventListener('contextmenu', handleNativeContextMenuCapture, true);\n };\n }, [handleShow, shouldDisableClick]);\n\n useImperativeHandle(\n ref,\n () => ({\n hide: handleHide,\n show: handleShow,\n }),\n [handleHide, handleShow],\n );\n\n useEffect(() => {\n const handleDocumentClick = (event: PointerEvent) => {\n if (\n !shouldCloseOnPopupClick &&\n contextMenuContentRef.current?.contains(event.target as Node)\n ) {\n return;\n }\n\n handleHide();\n };\n\n if (isContentShown) {\n document.addEventListener('click', handleDocumentClick, true);\n window.addEventListener('blur', handleHide);\n\n if (typeof onShow === 'function') {\n onShow();\n }\n } else if (typeof onHide === 'function') {\n onHide();\n }\n\n return () => {\n document.removeEventListener('click', handleDocumentClick, true);\n window.removeEventListener('blur', handleHide);\n };\n }, [handleHide, isContentShown, onHide, onShow, shouldCloseOnPopupClick]);\n\n useEffect(() => {\n if (!newContainer) {\n return;\n }\n\n setPortal(() =>\n createPortal(\n <AnimatePresence initial={false}>\n {isContentShown && (\n <ContextMenuContent\n coordinates={coordinates ?? internalCoordinates}\n items={items}\n zIndex={zIndex}\n headline={headline}\n shouldHidePopupArrow={shouldHidePopupArrow}\n key={`contextMenu_${uuid}`}\n alignment={alignment ?? internalAlignment}\n ref={contextMenuContentRef}\n focusedIndex={focusedIndex}\n onKeySelect={(index) => {\n const item = items[index];\n if (item) {\n void item.onClick();\n handleHide();\n }\n }}\n onMouseEnter={() => {\n setIsHovered(true);\n setFocusedIndex(-1);\n }}\n onMouseLeave={() => {\n setIsHovered(false);\n }}\n />\n )}\n </AnimatePresence>,\n newContainer,\n ),\n );\n }, [\n alignment,\n newContainer,\n coordinates,\n internalAlignment,\n internalCoordinates,\n isContentShown,\n items,\n uuid,\n zIndex,\n shouldHidePopupArrow,\n headline,\n focusedIndex,\n handleHide,\n ]);\n\n useEffect(() => {\n if (!contextMenuRef.current) {\n return;\n }\n\n const focusableChildSelector =\n 'button:not([disabled]), a[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]), [contenteditable=\"true\"]';\n\n const hasFocusableChild = Boolean(\n contextMenuRef.current.querySelector(focusableChildSelector),\n );\n\n setShouldUseFocusableWrapper(!hasFocusableChild);\n }, [children]);\n\n return (\n <>\n <StyledContextMenu\n className={\n className\n ? `beta-chayns-context-menu ${className}`\n : 'beta-chayns-context-menu'\n }\n $isActive={isContentShown && shouldShowHoverEffect}\n $shouldAddHoverEffect={!isTouch && shouldShowHoverEffect}\n $shouldShowWrapperKeyboardHighlighting={shouldShowWrapperKeyboardHighlighting}\n $shouldUseDefaultTriggerStyles={shouldUseDefaultTriggerStyles}\n onClick={handleClick}\n onContextMenuCapture={handleContextMenu}\n onContextMenu={handleContextMenu}\n onKeyDown={handleKeyDown}\n ref={contextMenuRef}\n tabIndex={shouldUseKeyboardFocusableWrapper ? 0 : undefined}\n role={shouldUseKeyboardFocusableWrapper ? 'button' : undefined}\n aria-haspopup={shouldUseKeyboardFocusableWrapper ? 'menu' : undefined}\n aria-expanded={shouldUseKeyboardFocusableWrapper ? isContentShown : undefined}\n style={style}\n >\n {children}\n </StyledContextMenu>\n {portal}\n </>\n );\n },\n);\n\nContextMenu.displayName = 'ContextMenu';\n\nexport default ContextMenu;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ContextMenu.js","names":["_chaynsApi","require","_react","_react2","_interopRequireWildcard","_reactDom","_uuid","_environment","_Icon","_interopRequireDefault","_ContextMenuContent","_ContextMenu","_ContextMenu2","_ContextMenu3","_useKeyboardFocusHighlighting","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ContextMenu","forwardRef","alignment","className","children","createElement","icons","size","container","coordinates","headline","items","onHide","onShow","shouldCloseOnPopupClick","shouldDisableClick","shouldHidePopupArrow","shouldShowHoverEffect","shouldEnableKeyboardHighlighting","shouldUseDefaultTriggerStyles","style","yOffset","zIndex","ref","internalCoordinates","setInternalCoordinates","useState","x","y","internalAlignment","setInternalAlignment","ContextMenuAlignment","TopLeft","newContainer","setNewContainer","focusedIndex","setFocusedIndex","getDefaultFocusedIndex","isContentShown","setIsContentShown","portal","setPortal","isHovered","setIsHovered","shouldUseFocusableWrapper","setShouldUseFocusableWrapper","uuid","useUuid","contextMenuContentRef","useRef","contextMenuRef","shouldSkipNextContextMenuOpenRef","shouldPreventNextNativeContextMenuRef","isTouch","useIsTouch","shouldShowKeyboardHighlighting","useKeyboardFocusHighlighting","shouldShowWrapperKeyboardHighlighting","shouldUseKeyboardFocusableWrapper","useEffect","current","el","element","closest","Element","handleHide","useCallback","handleContainerBlur","event","_contextMenuContentRe","nextFocusedElement","relatedTarget","currentContainer","currentTarget","contains","handleShow","result","createDialog","type","DialogType","SELECT","buttons","list","map","text","isSelected","index","name","id","icon","isValidElement","undefined","open","_items$result$","onClick","height","childrenHeight","left","childrenLeft","top","childrenTop","width","childrenWidth","getBoundingClientRect","zoomX","offsetWidth","zoomY","offsetHeight","scrollLeft","scrollTop","BottomRight","TopRight","BottomLeft","handleClick","preventDefault","stopPropagation","handleKeyDown","isActivationKey","key","prev","length","selectItem","getActiveItemIndex","contextMenuContentElement","onClose","target","isContextMenuShortcut","shiftKey","handleContextMenu","handleGlobalKeyDown","activeElement","document","HTMLElement","body","documentElement","shouldOpenFromFocusedParent","handleNativeContextMenuCapture","addEventListener","removeEventListener","useImperativeHandle","hide","show","handleDocumentClick","_contextMenuContentRe2","window","createPortal","AnimatePresence","initial","onItemFocus","onMouseEnter","onMouseLeave","focusableChildSelector","hasFocusableChild","Boolean","querySelector","Fragment","StyledContextMenu","$isActive","$shouldAddHoverEffect","$shouldShowWrapperKeyboardHighlighting","$shouldUseDefaultTriggerStyles","onContextMenuCapture","onContextMenu","onKeyDown","onBlur","tabIndex","role","displayName","_default","exports"],"sources":["../../../../src/components/context-menu/ContextMenu.tsx"],"sourcesContent":["import { createDialog, DialogType } from 'chayns-api';\nimport { AnimatePresence } from 'motion/react';\nimport React, {\n forwardRef,\n isValidElement,\n KeyboardEventHandler,\n MouseEvent,\n MouseEventHandler,\n ReactPortal,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { useUuid } from '../../hooks/uuid';\nimport { useIsTouch } from '../../utils/environment';\nimport Icon from '../icon/Icon';\nimport ContextMenuContent from './context-menu-content/ContextMenuContent';\nimport { StyledContextMenu } from './ContextMenu.styles';\nimport {\n ContextMenuAlignment,\n type ContextMenuCoordinates,\n type ContextMenuProps,\n type ContextMenuRef,\n} from './ContextMenu.types';\nimport { SelectDialogResult } from '../../types/general';\nimport { getActiveItemIndex, getDefaultFocusedIndex, selectItem } from './ContextMenu.utils';\nimport { useKeyboardFocusHighlighting } from '../../hooks/useKeyboardFocusHighlighting';\n\nconst ContextMenu = forwardRef<ContextMenuRef, ContextMenuProps>(\n (\n {\n alignment,\n className,\n children = <Icon icons={['ts-ellipsis_v']} size={18} />,\n container,\n coordinates,\n headline,\n items,\n onHide,\n onShow,\n shouldCloseOnPopupClick = true,\n shouldDisableClick = false,\n shouldHidePopupArrow = false,\n shouldShowHoverEffect = false,\n shouldEnableKeyboardHighlighting,\n shouldUseDefaultTriggerStyles = true,\n style,\n yOffset = 0,\n zIndex = 20,\n },\n ref,\n ) => {\n const [internalCoordinates, setInternalCoordinates] = useState<ContextMenuCoordinates>({\n x: 0,\n y: 0,\n });\n\n const [internalAlignment, setInternalAlignment] = useState<ContextMenuAlignment>(\n ContextMenuAlignment.TopLeft,\n );\n\n const [newContainer, setNewContainer] = useState(container ?? null);\n const [focusedIndex, setFocusedIndex] = useState(getDefaultFocusedIndex(items));\n const [isContentShown, setIsContentShown] = useState(false);\n const [portal, setPortal] = useState<ReactPortal>();\n const [isHovered, setIsHovered] = useState(false);\n const [shouldUseFocusableWrapper, setShouldUseFocusableWrapper] = useState(false);\n\n const uuid = useUuid();\n\n const contextMenuContentRef = useRef<HTMLDivElement>(null);\n const contextMenuRef = useRef<HTMLSpanElement>(null);\n const shouldSkipNextContextMenuOpenRef = useRef(false);\n const shouldPreventNextNativeContextMenuRef = useRef(false);\n\n const isTouch = useIsTouch();\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(\n shouldEnableKeyboardHighlighting && !shouldDisableClick,\n );\n const shouldShowWrapperKeyboardHighlighting =\n shouldShowKeyboardHighlighting && shouldUseFocusableWrapper;\n const shouldUseKeyboardFocusableWrapper = shouldUseFocusableWrapper && !shouldDisableClick;\n\n useEffect(() => {\n if (isContentShown) {\n setFocusedIndex(getDefaultFocusedIndex(items));\n }\n }, [isContentShown, items]);\n\n useEffect(() => {\n if (contextMenuRef.current && !container) {\n const el = contextMenuRef.current as HTMLElement;\n\n const element = el.closest('.dialog-inner, .page-provider, .tapp, body');\n\n setNewContainer(element);\n }\n }, [container]);\n\n useEffect(() => {\n if (container instanceof Element) {\n setNewContainer(container);\n }\n }, [container]);\n\n const handleHide = useCallback(() => {\n setIsContentShown(false);\n }, []);\n\n const handleContainerBlur = useCallback(\n (event: React.FocusEvent<HTMLSpanElement>) => {\n const nextFocusedElement = event.relatedTarget as Node | null;\n const currentContainer = event.currentTarget as HTMLElement;\n\n if (\n !nextFocusedElement ||\n (!currentContainer.contains(nextFocusedElement) &&\n !contextMenuContentRef.current?.contains(nextFocusedElement))\n ) {\n handleHide();\n }\n },\n [handleHide],\n );\n\n const handleShow = useCallback(async () => {\n if (isTouch) {\n const { result } = (await createDialog({\n type: DialogType.SELECT,\n buttons: [],\n list: items.map(({ icons, text, isSelected }, index) => ({\n name: text,\n id: index,\n isSelected,\n icon: isValidElement(icons)\n ? undefined\n : (icons as string[] | undefined)?.[0],\n })),\n }).open()) as SelectDialogResult;\n\n if (result && typeof result[0] === 'number') {\n void items[result[0]]?.onClick();\n }\n } else if (contextMenuRef.current) {\n if (!newContainer) {\n return;\n }\n\n const {\n height: childrenHeight,\n left: childrenLeft,\n top: childrenTop,\n width: childrenWidth,\n } = contextMenuRef.current.getBoundingClientRect();\n\n const { height, width, top, left } = newContainer.getBoundingClientRect();\n\n const zoomX = width / (newContainer as HTMLElement).offsetWidth;\n const zoomY = height / (newContainer as HTMLElement).offsetHeight;\n\n const x =\n (childrenLeft + childrenWidth / 2 - left) / zoomX + newContainer.scrollLeft;\n const y =\n (childrenTop + childrenHeight / 2 - top) / zoomY +\n newContainer.scrollTop -\n yOffset;\n\n setInternalCoordinates({ x, y });\n\n if (x < width / 2) {\n if (y < height / 2) {\n setInternalAlignment(ContextMenuAlignment.BottomRight);\n } else {\n setInternalAlignment(ContextMenuAlignment.TopRight);\n }\n } else if (y < height / 2) {\n setInternalAlignment(ContextMenuAlignment.BottomLeft);\n } else {\n setInternalAlignment(ContextMenuAlignment.TopLeft);\n }\n\n setIsContentShown(true);\n }\n }, [isTouch, items, newContainer, yOffset]);\n\n const handleClick = useCallback<MouseEventHandler<HTMLSpanElement>>(\n (event) => {\n if (shouldDisableClick) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n void handleShow();\n },\n [handleShow, shouldDisableClick],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLSpanElement>>(\n (event) => {\n if (shouldDisableClick) {\n return;\n }\n\n const isActivationKey =\n event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar';\n\n if (isContentShown && event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n handleHide();\n return;\n }\n\n if (isContentShown && !isHovered && event.key === 'ArrowDown') {\n event.preventDefault();\n event.stopPropagation();\n setFocusedIndex((prev) => (prev >= items.length - 1 ? 0 : prev + 1));\n return;\n }\n\n if (isContentShown && !isHovered && event.key === 'ArrowUp') {\n event.preventDefault();\n event.stopPropagation();\n setFocusedIndex((prev) => (prev <= 0 ? items.length - 1 : prev - 1));\n return;\n }\n\n if (isContentShown && isActivationKey) {\n if (\n selectItem({\n index: getActiveItemIndex({\n contextMenuContentElement: contextMenuContentRef.current,\n focusedIndex,\n }),\n items,\n onClose: handleHide,\n shouldCloseOnPopupClick,\n })\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n return;\n }\n\n if (event.currentTarget !== event.target) {\n return;\n }\n\n const isContextMenuShortcut =\n event.key === 'ContextMenu' || (event.key === 'F10' && event.shiftKey);\n\n if (isContextMenuShortcut) {\n event.preventDefault();\n event.stopPropagation();\n shouldSkipNextContextMenuOpenRef.current = true;\n void handleShow();\n return;\n }\n\n if (shouldUseFocusableWrapper && isActivationKey) {\n event.preventDefault();\n event.stopPropagation();\n void handleShow();\n }\n },\n [\n focusedIndex,\n handleHide,\n handleShow,\n isHovered,\n isContentShown,\n items,\n items.length,\n shouldCloseOnPopupClick,\n shouldDisableClick,\n shouldUseFocusableWrapper,\n ],\n );\n\n const handleContextMenu = useCallback(\n (event: MouseEvent<HTMLSpanElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (shouldDisableClick) {\n return;\n }\n\n if (shouldSkipNextContextMenuOpenRef.current) {\n shouldSkipNextContextMenuOpenRef.current = false;\n return;\n }\n\n void handleShow();\n },\n [handleShow, shouldDisableClick],\n );\n\n useEffect(() => {\n const handleGlobalKeyDown = (event: KeyboardEvent) => {\n if (shouldDisableClick || !contextMenuRef.current) {\n return;\n }\n\n const isContextMenuShortcut =\n event.key === 'ContextMenu' || (event.key === 'F10' && event.shiftKey);\n\n if (!isContextMenuShortcut) {\n return;\n }\n\n const { activeElement } = document;\n\n if (\n !(activeElement instanceof HTMLElement) ||\n activeElement === document.body ||\n activeElement === document.documentElement\n ) {\n return;\n }\n\n const shouldOpenFromFocusedParent =\n activeElement.contains(contextMenuRef.current) &&\n !contextMenuRef.current.contains(activeElement);\n\n if (!shouldOpenFromFocusedParent) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n shouldPreventNextNativeContextMenuRef.current = true;\n void handleShow();\n };\n\n const handleNativeContextMenuCapture = (event: Event) => {\n if (!shouldPreventNextNativeContextMenuRef.current) {\n return;\n }\n\n shouldPreventNextNativeContextMenuRef.current = false;\n event.preventDefault();\n event.stopPropagation();\n };\n\n document.addEventListener('keydown', handleGlobalKeyDown, true);\n document.addEventListener('contextmenu', handleNativeContextMenuCapture, true);\n\n return () => {\n document.removeEventListener('keydown', handleGlobalKeyDown, true);\n document.removeEventListener('contextmenu', handleNativeContextMenuCapture, true);\n };\n }, [handleShow, shouldDisableClick]);\n\n useImperativeHandle(\n ref,\n () => ({\n hide: handleHide,\n show: handleShow,\n }),\n [handleHide, handleShow],\n );\n\n useEffect(() => {\n const handleDocumentClick = (event: PointerEvent) => {\n if (\n !shouldCloseOnPopupClick &&\n contextMenuContentRef.current?.contains(event.target as Node)\n ) {\n return;\n }\n\n handleHide();\n };\n\n if (isContentShown) {\n document.addEventListener('click', handleDocumentClick, true);\n window.addEventListener('blur', handleHide);\n\n if (typeof onShow === 'function') {\n onShow();\n }\n } else if (typeof onHide === 'function') {\n onHide();\n }\n\n return () => {\n document.removeEventListener('click', handleDocumentClick, true);\n window.removeEventListener('blur', handleHide);\n };\n }, [handleHide, isContentShown, onHide, onShow, shouldCloseOnPopupClick]);\n\n useEffect(() => {\n if (!newContainer) {\n return;\n }\n\n setPortal(() =>\n createPortal(\n <AnimatePresence initial={false}>\n {isContentShown && (\n <ContextMenuContent\n coordinates={coordinates ?? internalCoordinates}\n items={items}\n zIndex={zIndex}\n headline={headline}\n shouldHidePopupArrow={shouldHidePopupArrow}\n key={`contextMenu_${uuid}`}\n alignment={alignment ?? internalAlignment}\n ref={contextMenuContentRef}\n focusedIndex={focusedIndex}\n onItemFocus={setFocusedIndex}\n onMouseEnter={() => {\n setIsHovered(true);\n setFocusedIndex(-1);\n }}\n onMouseLeave={() => {\n setIsHovered(false);\n }}\n />\n )}\n </AnimatePresence>,\n newContainer,\n ),\n );\n }, [\n alignment,\n newContainer,\n coordinates,\n internalAlignment,\n internalCoordinates,\n isContentShown,\n items,\n uuid,\n zIndex,\n shouldHidePopupArrow,\n headline,\n focusedIndex,\n handleHide,\n ]);\n\n useEffect(() => {\n if (!contextMenuRef.current) {\n return;\n }\n\n const focusableChildSelector =\n 'button:not([disabled]), a[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]), [contenteditable=\"true\"]';\n\n const hasFocusableChild = Boolean(\n contextMenuRef.current.querySelector(focusableChildSelector),\n );\n\n setShouldUseFocusableWrapper(!hasFocusableChild);\n }, [children]);\n\n return (\n <>\n <StyledContextMenu\n className={\n className\n ? `beta-chayns-context-menu ${className}`\n : 'beta-chayns-context-menu'\n }\n $isActive={isContentShown && shouldShowHoverEffect}\n $shouldAddHoverEffect={!isTouch && shouldShowHoverEffect}\n $shouldShowWrapperKeyboardHighlighting={shouldShowWrapperKeyboardHighlighting}\n $shouldUseDefaultTriggerStyles={shouldUseDefaultTriggerStyles}\n onClick={handleClick}\n onContextMenuCapture={handleContextMenu}\n onContextMenu={handleContextMenu}\n onKeyDown={handleKeyDown}\n onBlur={handleContainerBlur}\n ref={contextMenuRef}\n tabIndex={shouldUseKeyboardFocusableWrapper ? 0 : undefined}\n role={shouldUseKeyboardFocusableWrapper ? 'button' : undefined}\n aria-haspopup={shouldUseKeyboardFocusableWrapper ? 'menu' : undefined}\n aria-expanded={shouldUseKeyboardFocusableWrapper ? isContentShown : undefined}\n style={style}\n >\n {children}\n </StyledContextMenu>\n {portal}\n </>\n );\n },\n);\n\nContextMenu.displayName = 'ContextMenu';\n\nexport default ContextMenu;\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAC,uBAAA,CAAAH,OAAA;AAaA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,KAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,KAAA,GAAAC,sBAAA,CAAAR,OAAA;AACA,IAAAS,mBAAA,GAAAD,sBAAA,CAAAR,OAAA;AACA,IAAAU,YAAA,GAAAV,OAAA;AACA,IAAAW,aAAA,GAAAX,OAAA;AAOA,IAAAY,aAAA,GAAAZ,OAAA;AACA,IAAAa,6BAAA,GAAAb,OAAA;AAAwF,SAAAQ,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAf,uBAAA,YAAAA,CAAAW,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAExF,MAAMgB,WAAW,gBAAG,IAAAC,kBAAU,EAC1B,CACI;EACIC,SAAS;EACTC,SAAS;EACTC,QAAQ,gBAAGnC,OAAA,CAAAc,OAAA,CAAAsB,aAAA,CAAC/B,KAAA,CAAAS,OAAI;IAACuB,KAAK,EAAE,CAAC,eAAe,CAAE;IAACC,IAAI,EAAE;EAAG,CAAE,CAAC;EACvDC,SAAS;EACTC,WAAW;EACXC,QAAQ;EACRC,KAAK;EACLC,MAAM;EACNC,MAAM;EACNC,uBAAuB,GAAG,IAAI;EAC9BC,kBAAkB,GAAG,KAAK;EAC1BC,oBAAoB,GAAG,KAAK;EAC5BC,qBAAqB,GAAG,KAAK;EAC7BC,gCAAgC;EAChCC,6BAA6B,GAAG,IAAI;EACpCC,KAAK;EACLC,OAAO,GAAG,CAAC;EACXC,MAAM,GAAG;AACb,CAAC,EACDC,GAAG,KACF;EACD,MAAM,CAACC,mBAAmB,EAAEC,sBAAsB,CAAC,GAAG,IAAAC,gBAAQ,EAAyB;IACnFC,CAAC,EAAE,CAAC;IACJC,CAAC,EAAE;EACP,CAAC,CAAC;EAEF,MAAM,CAACC,iBAAiB,EAAEC,oBAAoB,CAAC,GAAG,IAAAJ,gBAAQ,EACtDK,kCAAoB,CAACC,OACzB,CAAC;EAED,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAR,gBAAQ,EAAClB,SAAS,IAAI,IAAI,CAAC;EACnE,MAAM,CAAC2B,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAV,gBAAQ,EAAC,IAAAW,oCAAsB,EAAC1B,KAAK,CAAC,CAAC;EAC/E,MAAM,CAAC2B,cAAc,EAAEC,iBAAiB,CAAC,GAAG,IAAAb,gBAAQ,EAAC,KAAK,CAAC;EAC3D,MAAM,CAACc,MAAM,EAAEC,SAAS,CAAC,GAAG,IAAAf,gBAAQ,EAAc,CAAC;EACnD,MAAM,CAACgB,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAjB,gBAAQ,EAAC,KAAK,CAAC;EACjD,MAAM,CAACkB,yBAAyB,EAAEC,4BAA4B,CAAC,GAAG,IAAAnB,gBAAQ,EAAC,KAAK,CAAC;EAEjF,MAAMoB,IAAI,GAAG,IAAAC,aAAO,EAAC,CAAC;EAEtB,MAAMC,qBAAqB,GAAG,IAAAC,cAAM,EAAiB,IAAI,CAAC;EAC1D,MAAMC,cAAc,GAAG,IAAAD,cAAM,EAAkB,IAAI,CAAC;EACpD,MAAME,gCAAgC,GAAG,IAAAF,cAAM,EAAC,KAAK,CAAC;EACtD,MAAMG,qCAAqC,GAAG,IAAAH,cAAM,EAAC,KAAK,CAAC;EAE3D,MAAMI,OAAO,GAAG,IAAAC,uBAAU,EAAC,CAAC;EAC5B,MAAMC,8BAA8B,GAAG,IAAAC,0DAA4B,EAC/DtC,gCAAgC,IAAI,CAACH,kBACzC,CAAC;EACD,MAAM0C,qCAAqC,GACvCF,8BAA8B,IAAIX,yBAAyB;EAC/D,MAAMc,iCAAiC,GAAGd,yBAAyB,IAAI,CAAC7B,kBAAkB;EAE1F,IAAA4C,iBAAS,EAAC,MAAM;IACZ,IAAIrB,cAAc,EAAE;MAChBF,eAAe,CAAC,IAAAC,oCAAsB,EAAC1B,KAAK,CAAC,CAAC;IAClD;EACJ,CAAC,EAAE,CAAC2B,cAAc,EAAE3B,KAAK,CAAC,CAAC;EAE3B,IAAAgD,iBAAS,EAAC,MAAM;IACZ,IAAIT,cAAc,CAACU,OAAO,IAAI,CAACpD,SAAS,EAAE;MACtC,MAAMqD,EAAE,GAAGX,cAAc,CAACU,OAAsB;MAEhD,MAAME,OAAO,GAAGD,EAAE,CAACE,OAAO,CAAC,4CAA4C,CAAC;MAExE7B,eAAe,CAAC4B,OAAO,CAAC;IAC5B;EACJ,CAAC,EAAE,CAACtD,SAAS,CAAC,CAAC;EAEf,IAAAmD,iBAAS,EAAC,MAAM;IACZ,IAAInD,SAAS,YAAYwD,OAAO,EAAE;MAC9B9B,eAAe,CAAC1B,SAAS,CAAC;IAC9B;EACJ,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EAEf,MAAMyD,UAAU,GAAG,IAAAC,mBAAW,EAAC,MAAM;IACjC3B,iBAAiB,CAAC,KAAK,CAAC;EAC5B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM4B,mBAAmB,GAAG,IAAAD,mBAAW,EAClCE,KAAwC,IAAK;IAAA,IAAAC,qBAAA;IAC1C,MAAMC,kBAAkB,GAAGF,KAAK,CAACG,aAA4B;IAC7D,MAAMC,gBAAgB,GAAGJ,KAAK,CAACK,aAA4B;IAE3D,IACI,CAACH,kBAAkB,IAClB,CAACE,gBAAgB,CAACE,QAAQ,CAACJ,kBAAkB,CAAC,IAC3C,GAAAD,qBAAA,GAACrB,qBAAqB,CAACY,OAAO,cAAAS,qBAAA,eAA7BA,qBAAA,CAA+BK,QAAQ,CAACJ,kBAAkB,CAAC,CAAC,EACnE;MACEL,UAAU,CAAC,CAAC;IAChB;EACJ,CAAC,EACD,CAACA,UAAU,CACf,CAAC;EAED,MAAMU,UAAU,GAAG,IAAAT,mBAAW,EAAC,YAAY;IACvC,IAAIb,OAAO,EAAE;MACT,MAAM;QAAEuB;MAAO,CAAC,GAAI,MAAM,IAAAC,uBAAY,EAAC;QACnCC,IAAI,EAAEC,qBAAU,CAACC,MAAM;QACvBC,OAAO,EAAE,EAAE;QACXC,IAAI,EAAEvE,KAAK,CAACwE,GAAG,CAAC,CAAC;UAAE7E,KAAK;UAAE8E,IAAI;UAAEC;QAAW,CAAC,EAAEC,KAAK,MAAM;UACrDC,IAAI,EAAEH,IAAI;UACVI,EAAE,EAAEF,KAAK;UACTD,UAAU;UACVI,IAAI,EAAE,iBAAAC,sBAAc,EAACpF,KAAK,CAAC,GACrBqF,SAAS,GACRrF,KAAK,aAALA,KAAK,uBAALA,KAAK,CAA4B,CAAC;QAC7C,CAAC,CAAC;MACN,CAAC,CAAC,CAACsF,IAAI,CAAC,CAAwB;MAEhC,IAAIhB,MAAM,IAAI,OAAOA,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QAAA,IAAAiB,cAAA;QACzC,OAAAA,cAAA,GAAKlF,KAAK,CAACiE,MAAM,CAAC,CAAC,CAAC,CAAC,cAAAiB,cAAA,uBAAhBA,cAAA,CAAkBC,OAAO,CAAC,CAAC;MACpC;IACJ,CAAC,MAAM,IAAI5C,cAAc,CAACU,OAAO,EAAE;MAC/B,IAAI,CAAC3B,YAAY,EAAE;QACf;MACJ;MAEA,MAAM;QACF8D,MAAM,EAAEC,cAAc;QACtBC,IAAI,EAAEC,YAAY;QAClBC,GAAG,EAAEC,WAAW;QAChBC,KAAK,EAAEC;MACX,CAAC,GAAGpD,cAAc,CAACU,OAAO,CAAC2C,qBAAqB,CAAC,CAAC;MAElD,MAAM;QAAER,MAAM;QAAEM,KAAK;QAAEF,GAAG;QAAEF;MAAK,CAAC,GAAGhE,YAAY,CAACsE,qBAAqB,CAAC,CAAC;MAEzE,MAAMC,KAAK,GAAGH,KAAK,GAAIpE,YAAY,CAAiBwE,WAAW;MAC/D,MAAMC,KAAK,GAAGX,MAAM,GAAI9D,YAAY,CAAiB0E,YAAY;MAEjE,MAAMhF,CAAC,GACH,CAACuE,YAAY,GAAGI,aAAa,GAAG,CAAC,GAAGL,IAAI,IAAIO,KAAK,GAAGvE,YAAY,CAAC2E,UAAU;MAC/E,MAAMhF,CAAC,GACH,CAACwE,WAAW,GAAGJ,cAAc,GAAG,CAAC,GAAGG,GAAG,IAAIO,KAAK,GAChDzE,YAAY,CAAC4E,SAAS,GACtBxF,OAAO;MAEXI,sBAAsB,CAAC;QAAEE,CAAC;QAAEC;MAAE,CAAC,CAAC;MAEhC,IAAID,CAAC,GAAG0E,KAAK,GAAG,CAAC,EAAE;QACf,IAAIzE,CAAC,GAAGmE,MAAM,GAAG,CAAC,EAAE;UAChBjE,oBAAoB,CAACC,kCAAoB,CAAC+E,WAAW,CAAC;QAC1D,CAAC,MAAM;UACHhF,oBAAoB,CAACC,kCAAoB,CAACgF,QAAQ,CAAC;QACvD;MACJ,CAAC,MAAM,IAAInF,CAAC,GAAGmE,MAAM,GAAG,CAAC,EAAE;QACvBjE,oBAAoB,CAACC,kCAAoB,CAACiF,UAAU,CAAC;MACzD,CAAC,MAAM;QACHlF,oBAAoB,CAACC,kCAAoB,CAACC,OAAO,CAAC;MACtD;MAEAO,iBAAiB,CAAC,IAAI,CAAC;IAC3B;EACJ,CAAC,EAAE,CAACc,OAAO,EAAE1C,KAAK,EAAEsB,YAAY,EAAEZ,OAAO,CAAC,CAAC;EAE3C,MAAM4F,WAAW,GAAG,IAAA/C,mBAAW,EAC1BE,KAAK,IAAK;IACP,IAAIrD,kBAAkB,EAAE;MACpB;IACJ;IAEAqD,KAAK,CAAC8C,cAAc,CAAC,CAAC;IACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;IAEvB,KAAKxC,UAAU,CAAC,CAAC;EACrB,CAAC,EACD,CAACA,UAAU,EAAE5D,kBAAkB,CACnC,CAAC;EAED,MAAMqG,aAAa,GAAG,IAAAlD,mBAAW,EAC5BE,KAAK,IAAK;IACP,IAAIrD,kBAAkB,EAAE;MACpB;IACJ;IAEA,MAAMsG,eAAe,GACjBjD,KAAK,CAACkD,GAAG,KAAK,OAAO,IAAIlD,KAAK,CAACkD,GAAG,KAAK,GAAG,IAAIlD,KAAK,CAACkD,GAAG,KAAK,UAAU;IAE1E,IAAIhF,cAAc,IAAI8B,KAAK,CAACkD,GAAG,KAAK,QAAQ,EAAE;MAC1ClD,KAAK,CAAC8C,cAAc,CAAC,CAAC;MACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;MACvBlD,UAAU,CAAC,CAAC;MACZ;IACJ;IAEA,IAAI3B,cAAc,IAAI,CAACI,SAAS,IAAI0B,KAAK,CAACkD,GAAG,KAAK,WAAW,EAAE;MAC3DlD,KAAK,CAAC8C,cAAc,CAAC,CAAC;MACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;MACvB/E,eAAe,CAAEmF,IAAI,IAAMA,IAAI,IAAI5G,KAAK,CAAC6G,MAAM,GAAG,CAAC,GAAG,CAAC,GAAGD,IAAI,GAAG,CAAE,CAAC;MACpE;IACJ;IAEA,IAAIjF,cAAc,IAAI,CAACI,SAAS,IAAI0B,KAAK,CAACkD,GAAG,KAAK,SAAS,EAAE;MACzDlD,KAAK,CAAC8C,cAAc,CAAC,CAAC;MACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;MACvB/E,eAAe,CAAEmF,IAAI,IAAMA,IAAI,IAAI,CAAC,GAAG5G,KAAK,CAAC6G,MAAM,GAAG,CAAC,GAAGD,IAAI,GAAG,CAAE,CAAC;MACpE;IACJ;IAEA,IAAIjF,cAAc,IAAI+E,eAAe,EAAE;MACnC,IACI,IAAAI,wBAAU,EAAC;QACPnC,KAAK,EAAE,IAAAoC,gCAAkB,EAAC;UACtBC,yBAAyB,EAAE3E,qBAAqB,CAACY,OAAO;UACxDzB;QACJ,CAAC,CAAC;QACFxB,KAAK;QACLiH,OAAO,EAAE3D,UAAU;QACnBnD;MACJ,CAAC,CAAC,EACJ;QACEsD,KAAK,CAAC8C,cAAc,CAAC,CAAC;QACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;MAC3B;MAEA;IACJ;IAEA,IAAI/C,KAAK,CAACK,aAAa,KAAKL,KAAK,CAACyD,MAAM,EAAE;MACtC;IACJ;IAEA,MAAMC,qBAAqB,GACvB1D,KAAK,CAACkD,GAAG,KAAK,aAAa,IAAKlD,KAAK,CAACkD,GAAG,KAAK,KAAK,IAAIlD,KAAK,CAAC2D,QAAS;IAE1E,IAAID,qBAAqB,EAAE;MACvB1D,KAAK,CAAC8C,cAAc,CAAC,CAAC;MACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;MACvBhE,gCAAgC,CAACS,OAAO,GAAG,IAAI;MAC/C,KAAKe,UAAU,CAAC,CAAC;MACjB;IACJ;IAEA,IAAI/B,yBAAyB,IAAIyE,eAAe,EAAE;MAC9CjD,KAAK,CAAC8C,cAAc,CAAC,CAAC;MACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;MACvB,KAAKxC,UAAU,CAAC,CAAC;IACrB;EACJ,CAAC,EACD,CACIxC,YAAY,EACZ8B,UAAU,EACVU,UAAU,EACVjC,SAAS,EACTJ,cAAc,EACd3B,KAAK,EACLA,KAAK,CAAC6G,MAAM,EACZ1G,uBAAuB,EACvBC,kBAAkB,EAClB6B,yBAAyB,CAEjC,CAAC;EAED,MAAMoF,iBAAiB,GAAG,IAAA9D,mBAAW,EAChCE,KAAkC,IAAK;IACpCA,KAAK,CAAC8C,cAAc,CAAC,CAAC;IACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;IAEvB,IAAIpG,kBAAkB,EAAE;MACpB;IACJ;IAEA,IAAIoC,gCAAgC,CAACS,OAAO,EAAE;MAC1CT,gCAAgC,CAACS,OAAO,GAAG,KAAK;MAChD;IACJ;IAEA,KAAKe,UAAU,CAAC,CAAC;EACrB,CAAC,EACD,CAACA,UAAU,EAAE5D,kBAAkB,CACnC,CAAC;EAED,IAAA4C,iBAAS,EAAC,MAAM;IACZ,MAAMsE,mBAAmB,GAAI7D,KAAoB,IAAK;MAClD,IAAIrD,kBAAkB,IAAI,CAACmC,cAAc,CAACU,OAAO,EAAE;QAC/C;MACJ;MAEA,MAAMkE,qBAAqB,GACvB1D,KAAK,CAACkD,GAAG,KAAK,aAAa,IAAKlD,KAAK,CAACkD,GAAG,KAAK,KAAK,IAAIlD,KAAK,CAAC2D,QAAS;MAE1E,IAAI,CAACD,qBAAqB,EAAE;QACxB;MACJ;MAEA,MAAM;QAAEI;MAAc,CAAC,GAAGC,QAAQ;MAElC,IACI,EAAED,aAAa,YAAYE,WAAW,CAAC,IACvCF,aAAa,KAAKC,QAAQ,CAACE,IAAI,IAC/BH,aAAa,KAAKC,QAAQ,CAACG,eAAe,EAC5C;QACE;MACJ;MAEA,MAAMC,2BAA2B,GAC7BL,aAAa,CAACxD,QAAQ,CAACxB,cAAc,CAACU,OAAO,CAAC,IAC9C,CAACV,cAAc,CAACU,OAAO,CAACc,QAAQ,CAACwD,aAAa,CAAC;MAEnD,IAAI,CAACK,2BAA2B,EAAE;QAC9B;MACJ;MAEAnE,KAAK,CAAC8C,cAAc,CAAC,CAAC;MACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;MACvB/D,qCAAqC,CAACQ,OAAO,GAAG,IAAI;MACpD,KAAKe,UAAU,CAAC,CAAC;IACrB,CAAC;IAED,MAAM6D,8BAA8B,GAAIpE,KAAY,IAAK;MACrD,IAAI,CAAChB,qCAAqC,CAACQ,OAAO,EAAE;QAChD;MACJ;MAEAR,qCAAqC,CAACQ,OAAO,GAAG,KAAK;MACrDQ,KAAK,CAAC8C,cAAc,CAAC,CAAC;MACtB9C,KAAK,CAAC+C,eAAe,CAAC,CAAC;IAC3B,CAAC;IAEDgB,QAAQ,CAACM,gBAAgB,CAAC,SAAS,EAAER,mBAAmB,EAAE,IAAI,CAAC;IAC/DE,QAAQ,CAACM,gBAAgB,CAAC,aAAa,EAAED,8BAA8B,EAAE,IAAI,CAAC;IAE9E,OAAO,MAAM;MACTL,QAAQ,CAACO,mBAAmB,CAAC,SAAS,EAAET,mBAAmB,EAAE,IAAI,CAAC;MAClEE,QAAQ,CAACO,mBAAmB,CAAC,aAAa,EAAEF,8BAA8B,EAAE,IAAI,CAAC;IACrF,CAAC;EACL,CAAC,EAAE,CAAC7D,UAAU,EAAE5D,kBAAkB,CAAC,CAAC;EAEpC,IAAA4H,2BAAmB,EACfpH,GAAG,EACH,OAAO;IACHqH,IAAI,EAAE3E,UAAU;IAChB4E,IAAI,EAAElE;EACV,CAAC,CAAC,EACF,CAACV,UAAU,EAAEU,UAAU,CAC3B,CAAC;EAED,IAAAhB,iBAAS,EAAC,MAAM;IACZ,MAAMmF,mBAAmB,GAAI1E,KAAmB,IAAK;MAAA,IAAA2E,sBAAA;MACjD,IACI,CAACjI,uBAAuB,KAAAiI,sBAAA,GACxB/F,qBAAqB,CAACY,OAAO,cAAAmF,sBAAA,eAA7BA,sBAAA,CAA+BrE,QAAQ,CAACN,KAAK,CAACyD,MAAc,CAAC,EAC/D;QACE;MACJ;MAEA5D,UAAU,CAAC,CAAC;IAChB,CAAC;IAED,IAAI3B,cAAc,EAAE;MAChB6F,QAAQ,CAACM,gBAAgB,CAAC,OAAO,EAAEK,mBAAmB,EAAE,IAAI,CAAC;MAC7DE,MAAM,CAACP,gBAAgB,CAAC,MAAM,EAAExE,UAAU,CAAC;MAE3C,IAAI,OAAOpD,MAAM,KAAK,UAAU,EAAE;QAC9BA,MAAM,CAAC,CAAC;MACZ;IACJ,CAAC,MAAM,IAAI,OAAOD,MAAM,KAAK,UAAU,EAAE;MACrCA,MAAM,CAAC,CAAC;IACZ;IAEA,OAAO,MAAM;MACTuH,QAAQ,CAACO,mBAAmB,CAAC,OAAO,EAAEI,mBAAmB,EAAE,IAAI,CAAC;MAChEE,MAAM,CAACN,mBAAmB,CAAC,MAAM,EAAEzE,UAAU,CAAC;IAClD,CAAC;EACL,CAAC,EAAE,CAACA,UAAU,EAAE3B,cAAc,EAAE1B,MAAM,EAAEC,MAAM,EAAEC,uBAAuB,CAAC,CAAC;EAEzE,IAAA6C,iBAAS,EAAC,MAAM;IACZ,IAAI,CAAC1B,YAAY,EAAE;MACf;IACJ;IAEAQ,SAAS,CAAC,mBACN,IAAAwG,sBAAY,eACRhL,OAAA,CAAAc,OAAA,CAAAsB,aAAA,CAACrC,MAAA,CAAAkL,eAAe;MAACC,OAAO,EAAE;IAAM,GAC3B7G,cAAc,iBACXrE,OAAA,CAAAc,OAAA,CAAAsB,aAAA,CAAC7B,mBAAA,CAAAO,OAAkB;MACf0B,WAAW,EAAEA,WAAW,IAAIe,mBAAoB;MAChDb,KAAK,EAAEA,KAAM;MACbW,MAAM,EAAEA,MAAO;MACfZ,QAAQ,EAAEA,QAAS;MACnBM,oBAAoB,EAAEA,oBAAqB;MAC3CsG,GAAG,EAAE,eAAexE,IAAI,EAAG;MAC3B5C,SAAS,EAAEA,SAAS,IAAI2B,iBAAkB;MAC1CN,GAAG,EAAEyB,qBAAsB;MAC3Bb,YAAY,EAAEA,YAAa;MAC3BiH,WAAW,EAAEhH,eAAgB;MAC7BiH,YAAY,EAAEA,CAAA,KAAM;QAChB1G,YAAY,CAAC,IAAI,CAAC;QAClBP,eAAe,CAAC,CAAC,CAAC,CAAC;MACvB,CAAE;MACFkH,YAAY,EAAEA,CAAA,KAAM;QAChB3G,YAAY,CAAC,KAAK,CAAC;MACvB;IAAE,CACL,CAEQ,CAAC,EAClBV,YACJ,CACJ,CAAC;EACL,CAAC,EAAE,CACC/B,SAAS,EACT+B,YAAY,EACZxB,WAAW,EACXoB,iBAAiB,EACjBL,mBAAmB,EACnBc,cAAc,EACd3B,KAAK,EACLmC,IAAI,EACJxB,MAAM,EACNN,oBAAoB,EACpBN,QAAQ,EACRyB,YAAY,EACZ8B,UAAU,CACb,CAAC;EAEF,IAAAN,iBAAS,EAAC,MAAM;IACZ,IAAI,CAACT,cAAc,CAACU,OAAO,EAAE;MACzB;IACJ;IAEA,MAAM2F,sBAAsB,GACxB,qKAAqK;IAEzK,MAAMC,iBAAiB,GAAGC,OAAO,CAC7BvG,cAAc,CAACU,OAAO,CAAC8F,aAAa,CAACH,sBAAsB,CAC/D,CAAC;IAED1G,4BAA4B,CAAC,CAAC2G,iBAAiB,CAAC;EACpD,CAAC,EAAE,CAACpJ,QAAQ,CAAC,CAAC;EAEd,oBACInC,OAAA,CAAAc,OAAA,CAAAsB,aAAA,CAAApC,OAAA,CAAAc,OAAA,CAAA4K,QAAA,qBACI1L,OAAA,CAAAc,OAAA,CAAAsB,aAAA,CAAC5B,YAAA,CAAAmL,iBAAiB;IACdzJ,SAAS,EACLA,SAAS,GACH,4BAA4BA,SAAS,EAAE,GACvC,0BACT;IACD0J,SAAS,EAAEvH,cAAc,IAAIrB,qBAAsB;IACnD6I,qBAAqB,EAAE,CAACzG,OAAO,IAAIpC,qBAAsB;IACzD8I,sCAAsC,EAAEtG,qCAAsC;IAC9EuG,8BAA8B,EAAE7I,6BAA8B;IAC9D2E,OAAO,EAAEmB,WAAY;IACrBgD,oBAAoB,EAAEjC,iBAAkB;IACxCkC,aAAa,EAAElC,iBAAkB;IACjCmC,SAAS,EAAE/C,aAAc;IACzBgD,MAAM,EAAEjG,mBAAoB;IAC5B5C,GAAG,EAAE2B,cAAe;IACpBmH,QAAQ,EAAE3G,iCAAiC,GAAG,CAAC,GAAGiC,SAAU;IAC5D2E,IAAI,EAAE5G,iCAAiC,GAAG,QAAQ,GAAGiC,SAAU;IAC/D,iBAAejC,iCAAiC,GAAG,MAAM,GAAGiC,SAAU;IACtE,iBAAejC,iCAAiC,GAAGpB,cAAc,GAAGqD,SAAU;IAC9EvE,KAAK,EAAEA;EAAM,GAEZhB,QACc,CAAC,EACnBoC,MACH,CAAC;AAEX,CACJ,CAAC;AAEDxC,WAAW,CAACuK,WAAW,GAAG,aAAa;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAA1L,OAAA,GAEzBiB,WAAW","ignoreList":[]}
@@ -3,7 +3,33 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getDefaultFocusedIndex = void 0;
6
+ exports.selectItem = exports.getDefaultFocusedIndex = exports.getActiveItemIndex = void 0;
7
7
  const getDefaultFocusedIndex = items => items.findIndex(item => item.isSelected);
8
8
  exports.getDefaultFocusedIndex = getDefaultFocusedIndex;
9
+ const getActiveItemIndex = ({
10
+ contextMenuContentElement,
11
+ focusedIndex
12
+ }) => {
13
+ const activeElement = document.activeElement;
14
+ const activeItemElement = contextMenuContentElement !== null && contextMenuContentElement !== void 0 && contextMenuContentElement.contains(activeElement) ? activeElement === null || activeElement === void 0 ? void 0 : activeElement.closest('[data-index]') : undefined;
15
+ return activeItemElement ? Number(activeItemElement.dataset.index) : focusedIndex;
16
+ };
17
+ exports.getActiveItemIndex = getActiveItemIndex;
18
+ const selectItem = ({
19
+ index,
20
+ items,
21
+ onClose,
22
+ shouldCloseOnPopupClick
23
+ }) => {
24
+ const item = items[index];
25
+ if (!item) {
26
+ return false;
27
+ }
28
+ void item.onClick();
29
+ if (shouldCloseOnPopupClick) {
30
+ onClose();
31
+ }
32
+ return true;
33
+ };
34
+ exports.selectItem = selectItem;
9
35
  //# sourceMappingURL=ContextMenu.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenu.utils.js","names":["getDefaultFocusedIndex","items","findIndex","item","isSelected","exports"],"sources":["../../../../src/components/context-menu/ContextMenu.utils.ts"],"sourcesContent":["import type { ContextMenuItem } from './ContextMenu.types';\n\nexport const getDefaultFocusedIndex = (items: ContextMenuItem[]): number =>\n items.findIndex((item) => item.isSelected);\n"],"mappings":";;;;;;AAEO,MAAMA,sBAAsB,GAAIC,KAAwB,IAC3DA,KAAK,CAACC,SAAS,CAAEC,IAAI,IAAKA,IAAI,CAACC,UAAU,CAAC;AAACC,OAAA,CAAAL,sBAAA,GAAAA,sBAAA","ignoreList":[]}
1
+ {"version":3,"file":"ContextMenu.utils.js","names":["getDefaultFocusedIndex","items","findIndex","item","isSelected","exports","getActiveItemIndex","contextMenuContentElement","focusedIndex","activeElement","document","activeItemElement","contains","closest","undefined","Number","dataset","index","selectItem","onClose","shouldCloseOnPopupClick","onClick"],"sources":["../../../../src/components/context-menu/ContextMenu.utils.ts"],"sourcesContent":["import type { ContextMenuItem } from './ContextMenu.types';\n\nexport const getDefaultFocusedIndex = (items: ContextMenuItem[]): number =>\n items.findIndex((item) => item.isSelected);\n\nexport const getActiveItemIndex = ({\n contextMenuContentElement,\n focusedIndex,\n}: {\n contextMenuContentElement: HTMLDivElement | null;\n focusedIndex: number;\n}) => {\n const activeElement = document.activeElement as HTMLElement | null;\n const activeItemElement = contextMenuContentElement?.contains(activeElement)\n ? activeElement?.closest<HTMLElement>('[data-index]')\n : undefined;\n\n return activeItemElement ? Number(activeItemElement.dataset.index) : focusedIndex;\n};\n\nexport const selectItem = ({\n index,\n items,\n onClose,\n shouldCloseOnPopupClick,\n}: {\n index: number;\n items: ContextMenuItem[];\n onClose: VoidFunction;\n shouldCloseOnPopupClick: boolean;\n}) => {\n const item = items[index];\n\n if (!item) {\n return false;\n }\n\n void item.onClick();\n\n if (shouldCloseOnPopupClick) {\n onClose();\n }\n\n return true;\n};\n"],"mappings":";;;;;;AAEO,MAAMA,sBAAsB,GAAIC,KAAwB,IAC3DA,KAAK,CAACC,SAAS,CAAEC,IAAI,IAAKA,IAAI,CAACC,UAAU,CAAC;AAACC,OAAA,CAAAL,sBAAA,GAAAA,sBAAA;AAExC,MAAMM,kBAAkB,GAAGA,CAAC;EAC/BC,yBAAyB;EACzBC;AAIJ,CAAC,KAAK;EACF,MAAMC,aAAa,GAAGC,QAAQ,CAACD,aAAmC;EAClE,MAAME,iBAAiB,GAAGJ,yBAAyB,aAAzBA,yBAAyB,eAAzBA,yBAAyB,CAAEK,QAAQ,CAACH,aAAa,CAAC,GACtEA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEI,OAAO,CAAc,cAAc,CAAC,GACnDC,SAAS;EAEf,OAAOH,iBAAiB,GAAGI,MAAM,CAACJ,iBAAiB,CAACK,OAAO,CAACC,KAAK,CAAC,GAAGT,YAAY;AACrF,CAAC;AAACH,OAAA,CAAAC,kBAAA,GAAAA,kBAAA;AAEK,MAAMY,UAAU,GAAGA,CAAC;EACvBD,KAAK;EACLhB,KAAK;EACLkB,OAAO;EACPC;AAMJ,CAAC,KAAK;EACF,MAAMjB,IAAI,GAAGF,KAAK,CAACgB,KAAK,CAAC;EAEzB,IAAI,CAACd,IAAI,EAAE;IACP,OAAO,KAAK;EAChB;EAEA,KAAKA,IAAI,CAACkB,OAAO,CAAC,CAAC;EAEnB,IAAID,uBAAuB,EAAE;IACzBD,OAAO,CAAC,CAAC;EACb;EAEA,OAAO,IAAI;AACf,CAAC;AAACd,OAAA,CAAAa,UAAA,GAAAA,UAAA","ignoreList":[]}
@@ -17,7 +17,7 @@ const ContextMenuContent = /*#__PURE__*/_react.default.forwardRef(({
17
17
  zIndex,
18
18
  shouldHidePopupArrow,
19
19
  headline,
20
- onKeySelect,
20
+ onItemFocus,
21
21
  focusedIndex,
22
22
  onMouseEnter,
23
23
  onMouseLeave
@@ -77,14 +77,9 @@ const ContextMenuContent = /*#__PURE__*/_react.default.forwardRef(({
77
77
  tabIndex: 0,
78
78
  $shouldHidePopupArrow: shouldHidePopupArrow,
79
79
  $isFocused: isFocused,
80
- onKeyDown: e => {
81
- if (e.key === 'Enter') {
82
- e.preventDefault();
83
- onKeySelect(index);
84
- }
85
- }
80
+ onFocus: () => onItemFocus(index)
86
81
  }, iconElement, /*#__PURE__*/_react.default.createElement(_ContextMenuContent.StyledContextMenuContentItemText, null, text)), shouldShowSpacer && /*#__PURE__*/_react.default.createElement(_ContextMenuContent.StyledContextMenuContentItemSpacer, null));
87
- }), [items, focusedIndex, shouldHidePopupArrow, onKeySelect]);
82
+ }), [items, focusedIndex, shouldHidePopupArrow, onItemFocus]);
88
83
  return /*#__PURE__*/_react.default.createElement(_ContextMenuContent.StyledMotionContextMenuContent, {
89
84
  animate: {
90
85
  opacity: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenuContent.js","names":["_react","_interopRequireWildcard","require","_Icon","_interopRequireDefault","_ContextMenuContent","_ContextMenu","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ContextMenuContent","React","forwardRef","alignment","coordinates","items","zIndex","shouldHidePopupArrow","headline","onKeySelect","focusedIndex","onMouseEnter","onMouseLeave","ref","isBottomLeftAlignment","ContextMenuAlignment","BottomLeft","isTopLeftAlignment","TopLeft","isTopRightAlignment","TopRight","isTopCenterAlignment","TopCenter","isBottomCenterAlignment","BottomCenter","percentageOffsetX","useMemo","anchorOffsetX","percentageOffsetY","anchorOffsetY","exitAndInitialY","content","map","onClick","key","text","icons","shouldShowSpacer","index","isFocused","iconElement","isValidElement","Array","isArray","length","createElement","StyledContextMenuContentItemIconWrapper","StyledContextMenuContentItem","StyledContextMenuContentItemWrapper","event","preventDefault","stopPropagation","tabIndex","$shouldHidePopupArrow","$isFocused","onKeyDown","StyledContextMenuContentItemText","StyledContextMenuContentItemSpacer","StyledMotionContextMenuContent","animate","opacity","y","exit","initial","$position","$zIndex","style","left","x","top","transition","ease","transformTemplate","StyledContextMenuContentHeadline","displayName","_default","exports"],"sources":["../../../../../src/components/context-menu/context-menu-content/ContextMenuContent.tsx"],"sourcesContent":["import React, { isValidElement, useMemo } from 'react';\nimport Icon from '../../icon/Icon';\nimport {\n StyledContextMenuContentHeadline,\n StyledContextMenuContentItem,\n StyledContextMenuContentItemIconWrapper,\n StyledContextMenuContentItemSpacer,\n StyledContextMenuContentItemText,\n StyledContextMenuContentItemWrapper,\n StyledMotionContextMenuContent,\n} from './ContextMenuContent.styles';\nimport {\n ContextMenuAlignment,\n type ContextMenuCoordinates,\n type ContextMenuItem,\n} from '../ContextMenu.types';\n\ntype ContextMenuContentProps = {\n alignment: ContextMenuAlignment;\n coordinates: ContextMenuCoordinates;\n items: ContextMenuItem[];\n shouldHidePopupArrow: boolean;\n headline?: string;\n zIndex: number;\n focusedIndex: number;\n onKeySelect: (index: number) => void;\n onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;\n onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;\n};\n\nconst ContextMenuContent = React.forwardRef<HTMLDivElement, ContextMenuContentProps>(\n (\n {\n alignment,\n coordinates,\n items,\n zIndex,\n shouldHidePopupArrow,\n headline,\n onKeySelect,\n focusedIndex,\n onMouseEnter,\n onMouseLeave,\n },\n ref,\n ) => {\n const isBottomLeftAlignment = alignment === ContextMenuAlignment.BottomLeft;\n const isTopLeftAlignment = alignment === ContextMenuAlignment.TopLeft;\n const isTopRightAlignment = alignment === ContextMenuAlignment.TopRight;\n const isTopCenterAlignment = alignment === ContextMenuAlignment.TopCenter;\n const isBottomCenterAlignment = alignment === ContextMenuAlignment.BottomCenter;\n\n const percentageOffsetX = useMemo(() => {\n if (isBottomLeftAlignment || isTopLeftAlignment) {\n return -100;\n }\n\n if (isBottomCenterAlignment || isTopCenterAlignment) {\n return -50;\n }\n\n return 0;\n }, [\n isBottomCenterAlignment,\n isBottomLeftAlignment,\n isTopCenterAlignment,\n isTopLeftAlignment,\n ]);\n\n const anchorOffsetX = useMemo(() => {\n if (isBottomLeftAlignment || isTopLeftAlignment) {\n return 15;\n }\n\n if (isBottomCenterAlignment || isTopCenterAlignment) {\n return 0;\n }\n\n return -15;\n }, [\n isBottomCenterAlignment,\n isBottomLeftAlignment,\n isTopCenterAlignment,\n isTopLeftAlignment,\n ]);\n\n const percentageOffsetY =\n isTopRightAlignment || isTopLeftAlignment || isTopCenterAlignment ? -100 : 0;\n\n const anchorOffsetY =\n isTopRightAlignment || isTopLeftAlignment || isTopCenterAlignment ? -21 : 21;\n\n const exitAndInitialY = isTopLeftAlignment || isTopRightAlignment ? -16 : 16;\n\n const content = useMemo(\n () =>\n items.map(({ onClick, key, text, icons, shouldShowSpacer }, index) => {\n const isFocused = index === focusedIndex;\n\n let iconElement = null;\n\n if (isValidElement(icons)) {\n iconElement = icons;\n } else if (Array.isArray(icons) && icons.length > 0) {\n iconElement = (\n <StyledContextMenuContentItemIconWrapper>\n <Icon icons={icons} />\n </StyledContextMenuContentItemIconWrapper>\n );\n }\n\n return (\n <StyledContextMenuContentItem\n key={`context-menu-item-${key}`}\n data-index={index}\n >\n <StyledContextMenuContentItemWrapper\n key={key}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n void onClick(event);\n }}\n tabIndex={0}\n $shouldHidePopupArrow={shouldHidePopupArrow}\n $isFocused={isFocused}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onKeySelect(index);\n }\n }}\n >\n {iconElement}\n <StyledContextMenuContentItemText>\n {text}\n </StyledContextMenuContentItemText>\n </StyledContextMenuContentItemWrapper>\n {shouldShowSpacer && <StyledContextMenuContentItemSpacer />}\n </StyledContextMenuContentItem>\n );\n }),\n [items, focusedIndex, shouldHidePopupArrow, onKeySelect],\n );\n\n return (\n <StyledMotionContextMenuContent\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: exitAndInitialY }}\n initial={{ opacity: 0, y: exitAndInitialY }}\n $position={alignment}\n $shouldHidePopupArrow={shouldHidePopupArrow}\n $zIndex={zIndex}\n ref={ref}\n style={{ left: coordinates.x, top: coordinates.y }}\n transition={{ ease: 'anticipate' }}\n transformTemplate={({ y = '0px' }) => `\n translateX(${percentageOffsetX}%)\n translateY(${percentageOffsetY}%)\n translateX(${anchorOffsetX}px)\n translateY(${anchorOffsetY}px)\n translateY(${y})\n `}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {headline && (\n <StyledContextMenuContentHeadline>{headline}</StyledContextMenuContentHeadline>\n )}\n {content}\n </StyledMotionContextMenuContent>\n );\n },\n);\n\nContextMenuContent.displayName = 'ContextMenuContent';\n\nexport default ContextMenuContent;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AASA,IAAAI,YAAA,GAAAJ,OAAA;AAI8B,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAV,uBAAA,YAAAA,CAAAM,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAe9B,MAAMgB,kBAAkB,gBAAGC,cAAK,CAACC,UAAU,CACvC,CACI;EACIC,SAAS;EACTC,WAAW;EACXC,KAAK;EACLC,MAAM;EACNC,oBAAoB;EACpBC,QAAQ;EACRC,WAAW;EACXC,YAAY;EACZC,YAAY;EACZC;AACJ,CAAC,EACDC,GAAG,KACF;EACD,MAAMC,qBAAqB,GAAGX,SAAS,KAAKY,iCAAoB,CAACC,UAAU;EAC3E,MAAMC,kBAAkB,GAAGd,SAAS,KAAKY,iCAAoB,CAACG,OAAO;EACrE,MAAMC,mBAAmB,GAAGhB,SAAS,KAAKY,iCAAoB,CAACK,QAAQ;EACvE,MAAMC,oBAAoB,GAAGlB,SAAS,KAAKY,iCAAoB,CAACO,SAAS;EACzE,MAAMC,uBAAuB,GAAGpB,SAAS,KAAKY,iCAAoB,CAACS,YAAY;EAE/E,MAAMC,iBAAiB,GAAG,IAAAC,cAAO,EAAC,MAAM;IACpC,IAAIZ,qBAAqB,IAAIG,kBAAkB,EAAE;MAC7C,OAAO,CAAC,GAAG;IACf;IAEA,IAAIM,uBAAuB,IAAIF,oBAAoB,EAAE;MACjD,OAAO,CAAC,EAAE;IACd;IAEA,OAAO,CAAC;EACZ,CAAC,EAAE,CACCE,uBAAuB,EACvBT,qBAAqB,EACrBO,oBAAoB,EACpBJ,kBAAkB,CACrB,CAAC;EAEF,MAAMU,aAAa,GAAG,IAAAD,cAAO,EAAC,MAAM;IAChC,IAAIZ,qBAAqB,IAAIG,kBAAkB,EAAE;MAC7C,OAAO,EAAE;IACb;IAEA,IAAIM,uBAAuB,IAAIF,oBAAoB,EAAE;MACjD,OAAO,CAAC;IACZ;IAEA,OAAO,CAAC,EAAE;EACd,CAAC,EAAE,CACCE,uBAAuB,EACvBT,qBAAqB,EACrBO,oBAAoB,EACpBJ,kBAAkB,CACrB,CAAC;EAEF,MAAMW,iBAAiB,GACnBT,mBAAmB,IAAIF,kBAAkB,IAAII,oBAAoB,GAAG,CAAC,GAAG,GAAG,CAAC;EAEhF,MAAMQ,aAAa,GACfV,mBAAmB,IAAIF,kBAAkB,IAAII,oBAAoB,GAAG,CAAC,EAAE,GAAG,EAAE;EAEhF,MAAMS,eAAe,GAAGb,kBAAkB,IAAIE,mBAAmB,GAAG,CAAC,EAAE,GAAG,EAAE;EAE5E,MAAMY,OAAO,GAAG,IAAAL,cAAO,EACnB,MACIrB,KAAK,CAAC2B,GAAG,CAAC,CAAC;IAAEC,OAAO;IAAEC,GAAG;IAAEC,IAAI;IAAEC,KAAK;IAAEC;EAAiB,CAAC,EAAEC,KAAK,KAAK;IAClE,MAAMC,SAAS,GAAGD,KAAK,KAAK5B,YAAY;IAExC,IAAI8B,WAAW,GAAG,IAAI;IAEtB,iBAAI,IAAAC,qBAAc,EAACL,KAAK,CAAC,EAAE;MACvBI,WAAW,GAAGJ,KAAK;IACvB,CAAC,MAAM,IAAIM,KAAK,CAACC,OAAO,CAACP,KAAK,CAAC,IAAIA,KAAK,CAACQ,MAAM,GAAG,CAAC,EAAE;MACjDJ,WAAW,gBACPlE,MAAA,CAAAS,OAAA,CAAA8D,aAAA,CAAClE,mBAAA,CAAAmE,uCAAuC,qBACpCxE,MAAA,CAAAS,OAAA,CAAA8D,aAAA,CAACpE,KAAA,CAAAM,OAAI;QAACqD,KAAK,EAAEA;MAAM,CAAE,CACgB,CAC5C;IACL;IAEA,oBACI9D,MAAA,CAAAS,OAAA,CAAA8D,aAAA,CAAClE,mBAAA,CAAAoE,4BAA4B;MACzBb,GAAG,EAAE,qBAAqBA,GAAG,EAAG;MAChC,cAAYI;IAAM,gBAElBhE,MAAA,CAAAS,OAAA,CAAA8D,aAAA,CAAClE,mBAAA,CAAAqE,mCAAmC;MAChCd,GAAG,EAAEA,GAAI;MACTD,OAAO,EAAGgB,KAAK,IAAK;QAChBA,KAAK,CAACC,cAAc,CAAC,CAAC;QACtBD,KAAK,CAACE,eAAe,CAAC,CAAC;QACvB,KAAKlB,OAAO,CAACgB,KAAK,CAAC;MACvB,CAAE;MACFG,QAAQ,EAAE,CAAE;MACZC,qBAAqB,EAAE9C,oBAAqB;MAC5C+C,UAAU,EAAEf,SAAU;MACtBgB,SAAS,EAAG1E,CAAC,IAAK;QACd,IAAIA,CAAC,CAACqD,GAAG,KAAK,OAAO,EAAE;UACnBrD,CAAC,CAACqE,cAAc,CAAC,CAAC;UAClBzC,WAAW,CAAC6B,KAAK,CAAC;QACtB;MACJ;IAAE,GAEDE,WAAW,eACZlE,MAAA,CAAAS,OAAA,CAAA8D,aAAA,CAAClE,mBAAA,CAAA6E,gCAAgC,QAC5BrB,IAC6B,CACD,CAAC,EACrCE,gBAAgB,iBAAI/D,MAAA,CAAAS,OAAA,CAAA8D,aAAA,CAAClE,mBAAA,CAAA8E,kCAAkC,MAAE,CAChC,CAAC;EAEvC,CAAC,CAAC,EACN,CAACpD,KAAK,EAAEK,YAAY,EAAEH,oBAAoB,EAAEE,WAAW,CAC3D,CAAC;EAED,oBACInC,MAAA,CAAAS,OAAA,CAAA8D,aAAA,CAAClE,mBAAA,CAAA+E,8BAA8B;IAC3BC,OAAO,EAAE;MAAEC,OAAO,EAAE,CAAC;MAAEC,CAAC,EAAE;IAAE,CAAE;IAC9BC,IAAI,EAAE;MAAEF,OAAO,EAAE,CAAC;MAAEC,CAAC,EAAE/B;IAAgB,CAAE;IACzCiC,OAAO,EAAE;MAAEH,OAAO,EAAE,CAAC;MAAEC,CAAC,EAAE/B;IAAgB,CAAE;IAC5CkC,SAAS,EAAE7D,SAAU;IACrBkD,qBAAqB,EAAE9C,oBAAqB;IAC5C0D,OAAO,EAAE3D,MAAO;IAChBO,GAAG,EAAEA,GAAI;IACTqD,KAAK,EAAE;MAAEC,IAAI,EAAE/D,WAAW,CAACgE,CAAC;MAAEC,GAAG,EAAEjE,WAAW,CAACyD;IAAE,CAAE;IACnDS,UAAU,EAAE;MAAEC,IAAI,EAAE;IAAa,CAAE;IACnCC,iBAAiB,EAAEA,CAAC;MAAEX,CAAC,GAAG;IAAM,CAAC,KAAK;AACtD,iCAAiCpC,iBAAiB;AAClD,iCAAiCG,iBAAiB;AAClD,iCAAiCD,aAAa;AAC9C,iCAAiCE,aAAa;AAC9C,iCAAiCgC,CAAC;AAClC,iBAAkB;IACFlD,YAAY,EAAEA,YAAa;IAC3BC,YAAY,EAAEA;EAAa,GAE1BJ,QAAQ,iBACLlC,MAAA,CAAAS,OAAA,CAAA8D,aAAA,CAAClE,mBAAA,CAAA8F,gCAAgC,QAAEjE,QAA2C,CACjF,EACAuB,OAC2B,CAAC;AAEzC,CACJ,CAAC;AAED/B,kBAAkB,CAAC0E,WAAW,GAAG,oBAAoB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAA7F,OAAA,GAEvCiB,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"ContextMenuContent.js","names":["_react","_interopRequireWildcard","require","_Icon","_interopRequireDefault","_ContextMenuContent","_ContextMenu","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ContextMenuContent","React","forwardRef","alignment","coordinates","items","zIndex","shouldHidePopupArrow","headline","onItemFocus","focusedIndex","onMouseEnter","onMouseLeave","ref","isBottomLeftAlignment","ContextMenuAlignment","BottomLeft","isTopLeftAlignment","TopLeft","isTopRightAlignment","TopRight","isTopCenterAlignment","TopCenter","isBottomCenterAlignment","BottomCenter","percentageOffsetX","useMemo","anchorOffsetX","percentageOffsetY","anchorOffsetY","exitAndInitialY","content","map","onClick","key","text","icons","shouldShowSpacer","index","isFocused","iconElement","isValidElement","Array","isArray","length","createElement","StyledContextMenuContentItemIconWrapper","StyledContextMenuContentItem","StyledContextMenuContentItemWrapper","event","preventDefault","stopPropagation","tabIndex","$shouldHidePopupArrow","$isFocused","onFocus","StyledContextMenuContentItemText","StyledContextMenuContentItemSpacer","StyledMotionContextMenuContent","animate","opacity","y","exit","initial","$position","$zIndex","style","left","x","top","transition","ease","transformTemplate","StyledContextMenuContentHeadline","displayName","_default","exports"],"sources":["../../../../../src/components/context-menu/context-menu-content/ContextMenuContent.tsx"],"sourcesContent":["import React, { isValidElement, useMemo } from 'react';\nimport Icon from '../../icon/Icon';\nimport {\n StyledContextMenuContentHeadline,\n StyledContextMenuContentItem,\n StyledContextMenuContentItemIconWrapper,\n StyledContextMenuContentItemSpacer,\n StyledContextMenuContentItemText,\n StyledContextMenuContentItemWrapper,\n StyledMotionContextMenuContent,\n} from './ContextMenuContent.styles';\nimport {\n ContextMenuAlignment,\n type ContextMenuCoordinates,\n type ContextMenuItem,\n} from '../ContextMenu.types';\n\ntype ContextMenuContentProps = {\n alignment: ContextMenuAlignment;\n coordinates: ContextMenuCoordinates;\n items: ContextMenuItem[];\n shouldHidePopupArrow: boolean;\n headline?: string;\n zIndex: number;\n focusedIndex: number;\n onItemFocus: (index: number) => void;\n onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;\n onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;\n};\n\nconst ContextMenuContent = React.forwardRef<HTMLDivElement, ContextMenuContentProps>(\n (\n {\n alignment,\n coordinates,\n items,\n zIndex,\n shouldHidePopupArrow,\n headline,\n onItemFocus,\n focusedIndex,\n onMouseEnter,\n onMouseLeave,\n },\n ref,\n ) => {\n const isBottomLeftAlignment = alignment === ContextMenuAlignment.BottomLeft;\n const isTopLeftAlignment = alignment === ContextMenuAlignment.TopLeft;\n const isTopRightAlignment = alignment === ContextMenuAlignment.TopRight;\n const isTopCenterAlignment = alignment === ContextMenuAlignment.TopCenter;\n const isBottomCenterAlignment = alignment === ContextMenuAlignment.BottomCenter;\n\n const percentageOffsetX = useMemo(() => {\n if (isBottomLeftAlignment || isTopLeftAlignment) {\n return -100;\n }\n\n if (isBottomCenterAlignment || isTopCenterAlignment) {\n return -50;\n }\n\n return 0;\n }, [\n isBottomCenterAlignment,\n isBottomLeftAlignment,\n isTopCenterAlignment,\n isTopLeftAlignment,\n ]);\n\n const anchorOffsetX = useMemo(() => {\n if (isBottomLeftAlignment || isTopLeftAlignment) {\n return 15;\n }\n\n if (isBottomCenterAlignment || isTopCenterAlignment) {\n return 0;\n }\n\n return -15;\n }, [\n isBottomCenterAlignment,\n isBottomLeftAlignment,\n isTopCenterAlignment,\n isTopLeftAlignment,\n ]);\n\n const percentageOffsetY =\n isTopRightAlignment || isTopLeftAlignment || isTopCenterAlignment ? -100 : 0;\n\n const anchorOffsetY =\n isTopRightAlignment || isTopLeftAlignment || isTopCenterAlignment ? -21 : 21;\n\n const exitAndInitialY = isTopLeftAlignment || isTopRightAlignment ? -16 : 16;\n\n const content = useMemo(\n () =>\n items.map(({ onClick, key, text, icons, shouldShowSpacer }, index) => {\n const isFocused = index === focusedIndex;\n\n let iconElement = null;\n\n if (isValidElement(icons)) {\n iconElement = icons;\n } else if (Array.isArray(icons) && icons.length > 0) {\n iconElement = (\n <StyledContextMenuContentItemIconWrapper>\n <Icon icons={icons} />\n </StyledContextMenuContentItemIconWrapper>\n );\n }\n\n return (\n <StyledContextMenuContentItem\n key={`context-menu-item-${key}`}\n data-index={index}\n >\n <StyledContextMenuContentItemWrapper\n key={key}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n void onClick(event);\n }}\n tabIndex={0}\n $shouldHidePopupArrow={shouldHidePopupArrow}\n $isFocused={isFocused}\n onFocus={() => onItemFocus(index)}\n >\n {iconElement}\n <StyledContextMenuContentItemText>\n {text}\n </StyledContextMenuContentItemText>\n </StyledContextMenuContentItemWrapper>\n {shouldShowSpacer && <StyledContextMenuContentItemSpacer />}\n </StyledContextMenuContentItem>\n );\n }),\n [items, focusedIndex, shouldHidePopupArrow, onItemFocus],\n );\n\n return (\n <StyledMotionContextMenuContent\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: exitAndInitialY }}\n initial={{ opacity: 0, y: exitAndInitialY }}\n $position={alignment}\n $shouldHidePopupArrow={shouldHidePopupArrow}\n $zIndex={zIndex}\n ref={ref}\n style={{ left: coordinates.x, top: coordinates.y }}\n transition={{ ease: 'anticipate' }}\n transformTemplate={({ y = '0px' }) => `\n translateX(${percentageOffsetX}%)\n translateY(${percentageOffsetY}%)\n translateX(${anchorOffsetX}px)\n translateY(${anchorOffsetY}px)\n translateY(${y})\n `}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {headline && (\n <StyledContextMenuContentHeadline>{headline}</StyledContextMenuContentHeadline>\n )}\n {content}\n </StyledMotionContextMenuContent>\n );\n },\n);\n\nContextMenuContent.displayName = 'ContextMenuContent';\n\nexport default ContextMenuContent;\n"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,7 @@ var _ListItem = _interopRequireDefault(require("../../list/list-item/ListItem"))
12
12
  var _FileItem = require("./FileItem.styles");
13
13
  var _textstring = require("@chayns-components/textstring");
14
14
  var _textStrings = _interopRequireDefault(require("../../../constants/textStrings"));
15
+ var _useKeyboardFocusHighlighting = require("../../../hooks/useKeyboardFocusHighlighting");
15
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
17
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
17
18
  const FileItem = ({
@@ -23,8 +24,11 @@ const FileItem = ({
23
24
  source,
24
25
  shouldAllowDownload
25
26
  }) => {
27
+ const canDownload = shouldAllowDownload && !!source;
28
+ const canRemove = typeof onRemove === 'function';
29
+ const shouldShowKeyboardHighlighting = (0, _useKeyboardFocusHighlighting.useKeyboardFocusHighlighting)(canRemove || !!canDownload);
26
30
  const handleRemove = (0, _react.useCallback)(() => {
27
- if (typeof onRemove === 'function') {
31
+ if (canRemove) {
28
32
  onRemove(id);
29
33
  }
30
34
  }, [id, onRemove]);
@@ -35,7 +39,7 @@ const FileItem = ({
35
39
  }
36
40
  }, [handleRemove]);
37
41
  const handleRemoveKeyDown = (0, _react.useCallback)(event => {
38
- if (event.key === 'Enter' || event.key === ' ') {
42
+ if (canRemove && (event.key === 'Enter' || event.key === ' ')) {
39
43
  event.preventDefault();
40
44
  event.stopPropagation();
41
45
  handleRemove();
@@ -87,8 +91,6 @@ const FileItem = ({
87
91
  });
88
92
  }
89
93
  }, [name, source]);
90
- const canDownload = shouldAllowDownload && !!source;
91
- const canRemove = typeof onRemove === 'function';
92
94
  const downloadText = (0, _textstring.useTextstringValue)({
93
95
  textstring: (0, _textstring.ttsToITextString)(_textStrings.default.components.fileItem.download)
94
96
  });
@@ -96,6 +98,7 @@ const FileItem = ({
96
98
  textstring: (0, _textstring.ttsToITextString)(_textStrings.default.components.fileItem.remove)
97
99
  });
98
100
  const rightElement = (0, _react.useMemo)(() => {
101
+ if (!canDownload && !canRemove) return undefined;
99
102
  // Both actions available → show as ContextMenu
100
103
  if (canDownload && canRemove) {
101
104
  const items = [{
@@ -113,35 +116,34 @@ const FileItem = ({
113
116
  items: items
114
117
  });
115
118
  }
116
-
117
- // Only download
118
- if (canDownload) {
119
- return /*#__PURE__*/_react.default.createElement(_FileItem.StyledFileItemIcon, {
120
- onClick: handleDownload
121
- }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
122
- icons: ['fa fa-download']
123
- }));
124
- }
125
-
126
- // Only remove
127
- if (canRemove) {
128
- return /*#__PURE__*/_react.default.createElement(_FileItem.StyledFileItemIcon, {
129
- onClick: () => onRemove(id)
130
- }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
131
- icons: ['ts-wrong']
132
- }));
133
- }
134
- return undefined;
135
- }, [canDownload, canRemove, downloadText, handleDownload, id, onRemove, removeText]);
119
+ const handleClick = () => {
120
+ if (canRemove) {
121
+ onRemove(id);
122
+ return;
123
+ }
124
+ handleDownload();
125
+ };
126
+ const handleKeyDown = canRemove ? handleRemoveKeyDown : undefined;
127
+ const fileIcon = canRemove ? 'ts-wrong' : 'fa fa-download';
128
+ return /*#__PURE__*/_react.default.createElement(_FileItem.StyledFileItemIcon, {
129
+ onClick: handleClick,
130
+ onKeyDown: handleKeyDown,
131
+ role: "button",
132
+ tabIndex: 0
133
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
134
+ icons: [fileIcon]
135
+ }));
136
+ }, [canDownload, canRemove, downloadText, handleDownload, handleRemoveKeyDown, id, onRemove, removeText]);
136
137
  return (0, _react.useMemo)(() => /*#__PURE__*/_react.default.createElement(_FileItem.StyledFileItem, null, /*#__PURE__*/_react.default.createElement(_FileItem.StyledFileItemKeyboardWrapper, {
137
138
  onKeyDown: handleItemKeyDown,
138
- tabIndex: typeof onRemove === 'function' ? 0 : -1
139
+ tabIndex: -1
139
140
  }, /*#__PURE__*/_react.default.createElement(_ListItem.default, {
140
141
  title: name,
141
142
  subtitle: humanFileSize,
142
143
  icons: [icon],
143
- rightElements: rightElement
144
- }))), [handleItemKeyDown, humanFileSize, icon, name, rightElement]);
144
+ rightElements: rightElement,
145
+ shouldEnableKeyboardHighlighting: shouldShowKeyboardHighlighting
146
+ }))), [handleItemKeyDown, humanFileSize, icon, name, rightElement, shouldShowKeyboardHighlighting]);
145
147
  };
146
148
  FileItem.displayName = 'FileList';
147
149
  var _default = exports.default = FileItem;
@@ -1 +1 @@
1
- {"version":3,"file":"FileItem.js","names":["_react","_interopRequireWildcard","require","_file","_Icon","_interopRequireDefault","_ContextMenu","_ListItem","_FileItem","_textstring","_textStrings","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FileItem","mimeType","onRemove","size","name","id","source","shouldAllowDownload","handleRemove","useCallback","handleItemKeyDown","event","key","preventDefault","handleRemoveKeyDown","stopPropagation","humanFileSize","useMemo","getHumanSize","undefined","icon","getIconByMimeType","handleDownload","File","url","URL","createObjectURL","a","document","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","fetch","then","res","ok","Error","blob","catch","rel","target","canDownload","canRemove","downloadText","useTextstringValue","textstring","ttsToITextString","textStrings","components","fileItem","removeText","remove","rightElement","items","icons","onClick","text","StyledFileItemIcon","StyledFileItem","StyledFileItemKeyboardWrapper","onKeyDown","tabIndex","title","subtitle","rightElements","displayName","_default","exports"],"sources":["../../../../../src/components/file-list/file-item/FileItem.tsx"],"sourcesContent":["import React, { FC, KeyboardEventHandler, useCallback, useMemo } from 'react';\nimport { getHumanSize, getIconByMimeType } from '../../../utils/file';\nimport Icon from '../../icon/Icon';\nimport ContextMenu from '../../context-menu/ContextMenu';\nimport type { ContextMenuItem } from '../../context-menu/ContextMenu.types';\nimport ListItem from '../../list/list-item/ListItem';\nimport type { IFileItem } from '../FileList';\nimport {\n StyledFileItem,\n StyledFileItemActions,\n StyledFileItemKeyboardWrapper,\n StyledFileItemRemoveButton,\n StyledFileItemIcon,\n} from './FileItem.styles';\nimport { ttsToITextString, useTextstringValue } from '@chayns-components/textstring';\nimport textStrings from '../../../constants/textStrings';\n\nexport type FileItemProps = IFileItem & {\n onRemove?: (name: string) => void;\n shouldAllowDownload?: boolean;\n};\n\nconst FileItem: FC<FileItemProps> = ({\n mimeType,\n onRemove,\n size,\n name,\n id,\n source,\n shouldAllowDownload,\n}) => {\n const handleRemove = useCallback(() => {\n if (typeof onRemove === 'function') {\n onRemove(id);\n }\n }, [id, onRemove]);\n\n const handleItemKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (event) => {\n if (event.key === 'Delete') {\n event.preventDefault();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const handleRemoveKeyDown = useCallback<KeyboardEventHandler<HTMLSpanElement>>(\n (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const humanFileSize = useMemo(() => {\n if (typeof size === 'number') {\n return getHumanSize(size);\n }\n\n return undefined;\n }, [size]);\n\n const icon = useMemo(() => getIconByMimeType(mimeType), [mimeType]);\n\n const handleDownload = useCallback(() => {\n if (!source) return;\n\n if (source instanceof File) {\n const url = URL.createObjectURL(source);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } else {\n // Try fetching as blob to force download. If CORS blocks it,\n // fall back to opening the URL directly.\n fetch(source)\n .then((res) => {\n if (!res.ok) throw new Error('fetch failed');\n return res.blob();\n })\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n })\n .catch(() => {\n // CORS or network error: fall back to direct link\n const a = document.createElement('a');\n a.href = source;\n a.download = name;\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n });\n }\n }, [name, source]);\n\n const canDownload = shouldAllowDownload && !!source;\n const canRemove = typeof onRemove === 'function';\n\n const downloadText = useTextstringValue({\n textstring: ttsToITextString(textStrings.components.fileItem.download),\n });\n const removeText = useTextstringValue({\n textstring: ttsToITextString(textStrings.components.fileItem.remove),\n });\n\n const rightElement = useMemo(() => {\n // Both actions available → show as ContextMenu\n if (canDownload && canRemove) {\n const items: ContextMenuItem[] = [\n {\n icons: ['fa fa-download'],\n key: 'download',\n onClick: handleDownload,\n text: downloadText,\n },\n {\n icons: ['fa fa-trash'],\n key: 'remove',\n onClick: () => onRemove(id),\n text: removeText,\n },\n ];\n\n return <ContextMenu items={items} />;\n }\n\n // Only download\n if (canDownload) {\n return (\n <StyledFileItemIcon onClick={handleDownload}>\n <Icon icons={['fa fa-download']} />\n </StyledFileItemIcon>\n );\n }\n\n // Only remove\n if (canRemove) {\n return (\n <StyledFileItemIcon onClick={() => onRemove(id)}>\n <Icon icons={['ts-wrong']} />\n </StyledFileItemIcon>\n );\n }\n\n return undefined;\n }, [canDownload, canRemove, downloadText, handleDownload, id, onRemove, removeText]);\n\n return useMemo(\n () => (\n <StyledFileItem>\n <StyledFileItemKeyboardWrapper\n onKeyDown={handleItemKeyDown}\n tabIndex={typeof onRemove === 'function' ? 0 : -1}\n >\n <ListItem\n title={name}\n subtitle={humanFileSize}\n icons={[icon]}\n rightElements={rightElement}\n />\n </StyledFileItemKeyboardWrapper>\n </StyledFileItem>\n ),\n [handleItemKeyDown, humanFileSize, icon, name, rightElement],\n );\n};\n\nFileItem.displayName = 'FileList';\n\nexport default FileItem;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FileItem.js","names":["_react","_interopRequireWildcard","require","_file","_Icon","_interopRequireDefault","_ContextMenu","_ListItem","_FileItem","_textstring","_textStrings","_useKeyboardFocusHighlighting","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FileItem","mimeType","onRemove","size","name","id","source","shouldAllowDownload","canDownload","canRemove","shouldShowKeyboardHighlighting","useKeyboardFocusHighlighting","handleRemove","useCallback","handleItemKeyDown","event","key","preventDefault","handleRemoveKeyDown","stopPropagation","humanFileSize","useMemo","getHumanSize","undefined","icon","getIconByMimeType","handleDownload","File","url","URL","createObjectURL","a","document","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","fetch","then","res","ok","Error","blob","catch","rel","target","downloadText","useTextstringValue","textstring","ttsToITextString","textStrings","components","fileItem","removeText","remove","rightElement","items","icons","onClick","text","handleClick","handleKeyDown","fileIcon","StyledFileItemIcon","onKeyDown","role","tabIndex","StyledFileItem","StyledFileItemKeyboardWrapper","title","subtitle","rightElements","shouldEnableKeyboardHighlighting","displayName","_default","exports"],"sources":["../../../../../src/components/file-list/file-item/FileItem.tsx"],"sourcesContent":["import React, { FC, KeyboardEventHandler, useCallback, useMemo } from 'react';\nimport { getHumanSize, getIconByMimeType } from '../../../utils/file';\nimport Icon from '../../icon/Icon';\nimport ContextMenu from '../../context-menu/ContextMenu';\nimport type { ContextMenuItem } from '../../context-menu/ContextMenu.types';\nimport ListItem from '../../list/list-item/ListItem';\nimport type { IFileItem } from '../FileList';\nimport {\n StyledFileItem,\n StyledFileItemActions,\n StyledFileItemKeyboardWrapper,\n StyledFileItemRemoveButton,\n StyledFileItemIcon,\n} from './FileItem.styles';\nimport { ttsToITextString, useTextstringValue } from '@chayns-components/textstring';\nimport textStrings from '../../../constants/textStrings';\nimport { useKeyboardFocusHighlighting } from '../../../hooks/useKeyboardFocusHighlighting';\n\nexport type FileItemProps = IFileItem & {\n onRemove?: (name: string) => void;\n shouldAllowDownload?: boolean;\n};\n\nconst FileItem: FC<FileItemProps> = ({\n mimeType,\n onRemove,\n size,\n name,\n id,\n source,\n shouldAllowDownload,\n}) => {\n const canDownload = shouldAllowDownload && !!source;\n const canRemove = typeof onRemove === 'function';\n\n const shouldShowKeyboardHighlighting = useKeyboardFocusHighlighting(canRemove || !!canDownload);\n\n const handleRemove = useCallback(() => {\n if (canRemove) {\n onRemove(id);\n }\n }, [id, onRemove]);\n\n const handleItemKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (event) => {\n if (event.key === 'Delete') {\n event.preventDefault();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const handleRemoveKeyDown = useCallback<KeyboardEventHandler<HTMLSpanElement>>(\n (event) => {\n if (canRemove && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n event.stopPropagation();\n handleRemove();\n }\n },\n [handleRemove],\n );\n\n const humanFileSize = useMemo(() => {\n if (typeof size === 'number') {\n return getHumanSize(size);\n }\n\n return undefined;\n }, [size]);\n\n const icon = useMemo(() => getIconByMimeType(mimeType), [mimeType]);\n\n const handleDownload = useCallback(() => {\n if (!source) return;\n\n if (source instanceof File) {\n const url = URL.createObjectURL(source);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } else {\n // Try fetching as blob to force download. If CORS blocks it,\n // fall back to opening the URL directly.\n fetch(source)\n .then((res) => {\n if (!res.ok) throw new Error('fetch failed');\n return res.blob();\n })\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n })\n .catch(() => {\n // CORS or network error: fall back to direct link\n const a = document.createElement('a');\n a.href = source;\n a.download = name;\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n });\n }\n }, [name, source]);\n\n const downloadText = useTextstringValue({\n textstring: ttsToITextString(textStrings.components.fileItem.download),\n });\n const removeText = useTextstringValue({\n textstring: ttsToITextString(textStrings.components.fileItem.remove),\n });\n\n const rightElement = useMemo(() => {\n if (!canDownload && !canRemove) return undefined;\n // Both actions available → show as ContextMenu\n if (canDownload && canRemove) {\n const items: ContextMenuItem[] = [\n {\n icons: ['fa fa-download'],\n key: 'download',\n onClick: handleDownload,\n text: downloadText,\n },\n {\n icons: ['fa fa-trash'],\n key: 'remove',\n onClick: () => onRemove(id),\n text: removeText,\n },\n ];\n\n return <ContextMenu items={items} />;\n }\n\n const handleClick = () => {\n if (canRemove) {\n onRemove(id);\n return;\n }\n\n handleDownload();\n };\n\n const handleKeyDown = canRemove ? handleRemoveKeyDown : undefined;\n\n const fileIcon = canRemove ? 'ts-wrong' : 'fa fa-download';\n\n return (\n <StyledFileItemIcon\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n >\n <Icon icons={[fileIcon]} />\n </StyledFileItemIcon>\n );\n }, [\n canDownload,\n canRemove,\n downloadText,\n handleDownload,\n handleRemoveKeyDown,\n id,\n onRemove,\n removeText,\n ]);\n\n return useMemo(\n () => (\n <StyledFileItem>\n <StyledFileItemKeyboardWrapper onKeyDown={handleItemKeyDown} tabIndex={-1}>\n <ListItem\n title={name}\n subtitle={humanFileSize}\n icons={[icon]}\n rightElements={rightElement}\n shouldEnableKeyboardHighlighting={shouldShowKeyboardHighlighting}\n />\n </StyledFileItemKeyboardWrapper>\n </StyledFileItem>\n ),\n [\n handleItemKeyDown,\n humanFileSize,\n icon,\n name,\n rightElement,\n shouldShowKeyboardHighlighting,\n ],\n );\n};\n\nFileItem.displayName = 'FileList';\n\nexport default FileItem;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,YAAA,GAAAD,sBAAA,CAAAH,OAAA;AAEA,IAAAK,SAAA,GAAAF,sBAAA,CAAAH,OAAA;AAEA,IAAAM,SAAA,GAAAN,OAAA;AAOA,IAAAO,WAAA,GAAAP,OAAA;AACA,IAAAQ,YAAA,GAAAL,sBAAA,CAAAH,OAAA;AACA,IAAAS,6BAAA,GAAAT,OAAA;AAA2F,SAAAG,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAf,uBAAA,YAAAA,CAAAW,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAO3F,MAAMgB,QAA2B,GAAGA,CAAC;EACjCC,QAAQ;EACRC,QAAQ;EACRC,IAAI;EACJC,IAAI;EACJC,EAAE;EACFC,MAAM;EACNC;AACJ,CAAC,KAAK;EACF,MAAMC,WAAW,GAAGD,mBAAmB,IAAI,CAAC,CAACD,MAAM;EACnD,MAAMG,SAAS,GAAG,OAAOP,QAAQ,KAAK,UAAU;EAEhD,MAAMQ,8BAA8B,GAAG,IAAAC,0DAA4B,EAACF,SAAS,IAAI,CAAC,CAACD,WAAW,CAAC;EAE/F,MAAMI,YAAY,GAAG,IAAAC,kBAAW,EAAC,MAAM;IACnC,IAAIJ,SAAS,EAAE;MACXP,QAAQ,CAACG,EAAE,CAAC;IAChB;EACJ,CAAC,EAAE,CAACA,EAAE,EAAEH,QAAQ,CAAC,CAAC;EAElB,MAAMY,iBAAiB,GAAG,IAAAD,kBAAW,EAChCE,KAAK,IAAK;IACP,IAAIA,KAAK,CAACC,GAAG,KAAK,QAAQ,EAAE;MACxBD,KAAK,CAACE,cAAc,CAAC,CAAC;MACtBL,YAAY,CAAC,CAAC;IAClB;EACJ,CAAC,EACD,CAACA,YAAY,CACjB,CAAC;EAED,MAAMM,mBAAmB,GAAG,IAAAL,kBAAW,EAClCE,KAAK,IAAK;IACP,IAAIN,SAAS,KAAKM,KAAK,CAACC,GAAG,KAAK,OAAO,IAAID,KAAK,CAACC,GAAG,KAAK,GAAG,CAAC,EAAE;MAC3DD,KAAK,CAACE,cAAc,CAAC,CAAC;MACtBF,KAAK,CAACI,eAAe,CAAC,CAAC;MACvBP,YAAY,CAAC,CAAC;IAClB;EACJ,CAAC,EACD,CAACA,YAAY,CACjB,CAAC;EAED,MAAMQ,aAAa,GAAG,IAAAC,cAAO,EAAC,MAAM;IAChC,IAAI,OAAOlB,IAAI,KAAK,QAAQ,EAAE;MAC1B,OAAO,IAAAmB,kBAAY,EAACnB,IAAI,CAAC;IAC7B;IAEA,OAAOoB,SAAS;EACpB,CAAC,EAAE,CAACpB,IAAI,CAAC,CAAC;EAEV,MAAMqB,IAAI,GAAG,IAAAH,cAAO,EAAC,MAAM,IAAAI,uBAAiB,EAACxB,QAAQ,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEnE,MAAMyB,cAAc,GAAG,IAAAb,kBAAW,EAAC,MAAM;IACrC,IAAI,CAACP,MAAM,EAAE;IAEb,IAAIA,MAAM,YAAYqB,IAAI,EAAE;MACxB,MAAMC,GAAG,GAAGC,GAAG,CAACC,eAAe,CAACxB,MAAM,CAAC;MACvC,MAAMyB,CAAC,GAAGC,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;MACrCF,CAAC,CAACG,IAAI,GAAGN,GAAG;MACZG,CAAC,CAACI,QAAQ,GAAG/B,IAAI;MACjB4B,QAAQ,CAACI,IAAI,CAACC,WAAW,CAACN,CAAC,CAAC;MAC5BA,CAAC,CAACO,KAAK,CAAC,CAAC;MACTN,QAAQ,CAACI,IAAI,CAACG,WAAW,CAACR,CAAC,CAAC;MAC5BF,GAAG,CAACW,eAAe,CAACZ,GAAG,CAAC;IAC5B,CAAC,MAAM;MACH;MACA;MACAa,KAAK,CAACnC,MAAM,CAAC,CACRoC,IAAI,CAAEC,GAAG,IAAK;QACX,IAAI,CAACA,GAAG,CAACC,EAAE,EAAE,MAAM,IAAIC,KAAK,CAAC,cAAc,CAAC;QAC5C,OAAOF,GAAG,CAACG,IAAI,CAAC,CAAC;MACrB,CAAC,CAAC,CACDJ,IAAI,CAAEI,IAAI,IAAK;QACZ,MAAMlB,GAAG,GAAGC,GAAG,CAACC,eAAe,CAACgB,IAAI,CAAC;QACrC,MAAMf,CAAC,GAAGC,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;QACrCF,CAAC,CAACG,IAAI,GAAGN,GAAG;QACZG,CAAC,CAACI,QAAQ,GAAG/B,IAAI;QACjB4B,QAAQ,CAACI,IAAI,CAACC,WAAW,CAACN,CAAC,CAAC;QAC5BA,CAAC,CAACO,KAAK,CAAC,CAAC;QACTN,QAAQ,CAACI,IAAI,CAACG,WAAW,CAACR,CAAC,CAAC;QAC5BF,GAAG,CAACW,eAAe,CAACZ,GAAG,CAAC;MAC5B,CAAC,CAAC,CACDmB,KAAK,CAAC,MAAM;QACT;QACA,MAAMhB,CAAC,GAAGC,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;QACrCF,CAAC,CAACG,IAAI,GAAG5B,MAAM;QACfyB,CAAC,CAACI,QAAQ,GAAG/B,IAAI;QACjB2B,CAAC,CAACiB,GAAG,GAAG,qBAAqB;QAC7BjB,CAAC,CAACkB,MAAM,GAAG,QAAQ;QACnBjB,QAAQ,CAACI,IAAI,CAACC,WAAW,CAACN,CAAC,CAAC;QAC5BA,CAAC,CAACO,KAAK,CAAC,CAAC;QACTN,QAAQ,CAACI,IAAI,CAACG,WAAW,CAACR,CAAC,CAAC;MAChC,CAAC,CAAC;IACV;EACJ,CAAC,EAAE,CAAC3B,IAAI,EAAEE,MAAM,CAAC,CAAC;EAElB,MAAM4C,YAAY,GAAG,IAAAC,8BAAkB,EAAC;IACpCC,UAAU,EAAE,IAAAC,4BAAgB,EAACC,oBAAW,CAACC,UAAU,CAACC,QAAQ,CAACrB,QAAQ;EACzE,CAAC,CAAC;EACF,MAAMsB,UAAU,GAAG,IAAAN,8BAAkB,EAAC;IAClCC,UAAU,EAAE,IAAAC,4BAAgB,EAACC,oBAAW,CAACC,UAAU,CAACC,QAAQ,CAACE,MAAM;EACvE,CAAC,CAAC;EAEF,MAAMC,YAAY,GAAG,IAAAtC,cAAO,EAAC,MAAM;IAC/B,IAAI,CAACb,WAAW,IAAI,CAACC,SAAS,EAAE,OAAOc,SAAS;IAChD;IACA,IAAIf,WAAW,IAAIC,SAAS,EAAE;MAC1B,MAAMmD,KAAwB,GAAG,CAC7B;QACIC,KAAK,EAAE,CAAC,gBAAgB,CAAC;QACzB7C,GAAG,EAAE,UAAU;QACf8C,OAAO,EAAEpC,cAAc;QACvBqC,IAAI,EAAEb;MACV,CAAC,EACD;QACIW,KAAK,EAAE,CAAC,aAAa,CAAC;QACtB7C,GAAG,EAAE,QAAQ;QACb8C,OAAO,EAAEA,CAAA,KAAM5D,QAAQ,CAACG,EAAE,CAAC;QAC3B0D,IAAI,EAAEN;MACV,CAAC,CACJ;MAED,oBAAOxF,MAAA,CAAAc,OAAA,CAAAkD,aAAA,CAAC1D,YAAA,CAAAQ,OAAW;QAAC6E,KAAK,EAAEA;MAAM,CAAE,CAAC;IACxC;IAEA,MAAMI,WAAW,GAAGA,CAAA,KAAM;MACtB,IAAIvD,SAAS,EAAE;QACXP,QAAQ,CAACG,EAAE,CAAC;QACZ;MACJ;MAEAqB,cAAc,CAAC,CAAC;IACpB,CAAC;IAED,MAAMuC,aAAa,GAAGxD,SAAS,GAAGS,mBAAmB,GAAGK,SAAS;IAEjE,MAAM2C,QAAQ,GAAGzD,SAAS,GAAG,UAAU,GAAG,gBAAgB;IAE1D,oBACIxC,MAAA,CAAAc,OAAA,CAAAkD,aAAA,CAACxD,SAAA,CAAA0F,kBAAkB;MACfL,OAAO,EAAEE,WAAY;MACrBI,SAAS,EAAEH,aAAc;MACzBI,IAAI,EAAC,QAAQ;MACbC,QAAQ,EAAE;IAAE,gBAEZrG,MAAA,CAAAc,OAAA,CAAAkD,aAAA,CAAC5D,KAAA,CAAAU,OAAI;MAAC8E,KAAK,EAAE,CAACK,QAAQ;IAAE,CAAE,CACV,CAAC;EAE7B,CAAC,EAAE,CACC1D,WAAW,EACXC,SAAS,EACTyC,YAAY,EACZxB,cAAc,EACdR,mBAAmB,EACnBb,EAAE,EACFH,QAAQ,EACRuD,UAAU,CACb,CAAC;EAEF,OAAO,IAAApC,cAAO,EACV,mBACIpD,MAAA,CAAAc,OAAA,CAAAkD,aAAA,CAACxD,SAAA,CAAA8F,cAAc,qBACXtG,MAAA,CAAAc,OAAA,CAAAkD,aAAA,CAACxD,SAAA,CAAA+F,6BAA6B;IAACJ,SAAS,EAAEtD,iBAAkB;IAACwD,QAAQ,EAAE,CAAC;EAAE,gBACtErG,MAAA,CAAAc,OAAA,CAAAkD,aAAA,CAACzD,SAAA,CAAAO,OAAQ;IACL0F,KAAK,EAAErE,IAAK;IACZsE,QAAQ,EAAEtD,aAAc;IACxByC,KAAK,EAAE,CAACrC,IAAI,CAAE;IACdmD,aAAa,EAAEhB,YAAa;IAC5BiB,gCAAgC,EAAElE;EAA+B,CACpE,CAC0B,CACnB,CACnB,EACD,CACII,iBAAiB,EACjBM,aAAa,EACbI,IAAI,EACJpB,IAAI,EACJuD,YAAY,EACZjD,8BAA8B,CAEtC,CAAC;AACL,CAAC;AAEDV,QAAQ,CAAC6E,WAAW,GAAG,UAAU;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAhG,OAAA,GAEnBiB,QAAQ","ignoreList":[]}