@itwin/core-react 5.15.2 → 5.16.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 (51) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/lib/core-react/base/DivWithOutsideClick.d.ts +1 -6
  3. package/lib/core-react/base/DivWithOutsideClick.d.ts.map +1 -1
  4. package/lib/core-react/contextmenu/ContextMenu.d.ts.map +1 -1
  5. package/lib/core-react/contextmenu/ContextMenu.js +3 -1
  6. package/lib/core-react/contextmenu/ContextMenu.js.map +1 -1
  7. package/lib/core-react/contextmenu/TildeFinder.js +1 -1
  8. package/lib/core-react/contextmenu/TildeFinder.js.map +1 -1
  9. package/lib/core-react/focustrap/FocusTrap.d.ts +2 -2
  10. package/lib/core-react/focustrap/FocusTrap.d.ts.map +1 -1
  11. package/lib/core-react/focustrap/FocusTrap.js +1 -1
  12. package/lib/core-react/focustrap/FocusTrap.js.map +1 -1
  13. package/lib/core-react/hocs/withIsPressed.d.ts +1 -6
  14. package/lib/core-react/hocs/withIsPressed.d.ts.map +1 -1
  15. package/lib/core-react/hocs/withOnOutsideClick.d.ts +1 -6
  16. package/lib/core-react/hocs/withOnOutsideClick.d.ts.map +1 -1
  17. package/lib/core-react/hocs/withTimeout.d.ts +1 -6
  18. package/lib/core-react/hocs/withTimeout.d.ts.map +1 -1
  19. package/lib/core-react/listbox/Listbox.d.ts +1 -1
  20. package/lib/core-react/listbox/Listbox.d.ts.map +1 -1
  21. package/lib/core-react/listbox/Listbox.js +1 -1
  22. package/lib/core-react/listbox/Listbox.js.map +1 -1
  23. package/lib/core-react/popup/Popup.d.ts +1 -1
  24. package/lib/core-react/popup/Popup.d.ts.map +1 -1
  25. package/lib/core-react/popup/Popup.js.map +1 -1
  26. package/lib/core-react/radialmenu/RadialMenu.d.ts.map +1 -1
  27. package/lib/core-react/radialmenu/RadialMenu.js.map +1 -1
  28. package/lib/core-react/tabs/Tabs.d.ts.map +1 -1
  29. package/lib/core-react/tabs/Tabs.js.map +1 -1
  30. package/lib/core-react/tree/Tree.d.ts.map +1 -1
  31. package/lib/core-react/tree/Tree.js.map +1 -1
  32. package/lib/core-react/utils/flattenChildren.js.map +1 -1
  33. package/lib/core-react/utils/hooks/useCrossOriginPopup.js +1 -1
  34. package/lib/core-react/utils/hooks/useCrossOriginPopup.js.map +1 -1
  35. package/lib/core-react/utils/hooks/useOnOutsideClick.d.ts +1 -1
  36. package/lib/core-react/utils/hooks/useOnOutsideClick.d.ts.map +1 -1
  37. package/lib/core-react/utils/hooks/useProximityToMouse.d.ts +1 -1
  38. package/lib/core-react/utils/hooks/useProximityToMouse.d.ts.map +1 -1
  39. package/lib/core-react/utils/hooks/useProximityToMouse.js.map +1 -1
  40. package/lib/core-react/utils/hooks/useRefs.js.map +1 -1
  41. package/lib/core-react/utils/hooks/useResizeObserver.d.ts +1 -1
  42. package/lib/core-react/utils/hooks/useResizeObserver.d.ts.map +1 -1
  43. package/lib/core-react/utils/hooks/useResizeObserver.js +2 -2
  44. package/lib/core-react/utils/hooks/useResizeObserver.js.map +1 -1
  45. package/lib/core-react/utils/hooks/useTargeted.d.ts +1 -1
  46. package/lib/core-react/utils/hooks/useTargeted.d.ts.map +1 -1
  47. package/lib/core-react/utils/hooks/useTargeted.js.map +1 -1
  48. package/lib/core-react/utils/hooks/useWidgetOpacityContext.d.ts +3 -3
  49. package/lib/core-react/utils/hooks/useWidgetOpacityContext.d.ts.map +1 -1
  50. package/lib/core-react/utils/hooks/useWidgetOpacityContext.js.map +1 -1
  51. package/package.json +10 -10
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log - @itwin/core-react
2
2
 
3
+ ## 5.16.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 51fb78f: Added support for [React v19](https://react.dev/blog/2024/12/05/react-19).
8
+
3
9
  ## 5.15.2
4
10
 
5
11
  ## 5.15.1
@@ -26,9 +26,6 @@ export declare const DivWithOutsideClick: {
26
26
  forceUpdate(callback?: (() => void) | undefined): void;
27
27
  readonly props: Readonly<CommonDivProps & import("../hocs/withOnOutsideClick.js").WithOnOutsideClickProps>;
28
28
  state: Readonly<{}>;
29
- refs: {
30
- [key: string]: React.ReactInstance;
31
- };
32
29
  shouldComponentUpdate?(nextProps: Readonly<CommonDivProps & import("../hocs/withOnOutsideClick.js").WithOnOutsideClickProps>, nextState: Readonly<{}>, nextContext: any): boolean;
33
30
  componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
34
31
  getSnapshotBeforeUpdate?(prevProps: Readonly<CommonDivProps & import("../hocs/withOnOutsideClick.js").WithOnOutsideClickProps>, prevState: Readonly<{}>): any;
@@ -58,9 +55,6 @@ export declare const DivWithOutsideClick: {
58
55
  forceUpdate(callback?: (() => void) | undefined): void;
59
56
  readonly props: Readonly<CommonDivProps & import("../hocs/withOnOutsideClick.js").WithOnOutsideClickProps>;
60
57
  state: Readonly<{}>;
61
- refs: {
62
- [key: string]: React.ReactInstance;
63
- };
64
58
  shouldComponentUpdate?(nextProps: Readonly<CommonDivProps & import("../hocs/withOnOutsideClick.js").WithOnOutsideClickProps>, nextState: Readonly<{}>, nextContext: any): boolean;
65
59
  componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
66
60
  getSnapshotBeforeUpdate?(prevProps: Readonly<CommonDivProps & import("../hocs/withOnOutsideClick.js").WithOnOutsideClickProps>, prevState: Readonly<{}>): any;
@@ -73,5 +67,6 @@ export declare const DivWithOutsideClick: {
73
67
  UNSAFE_componentWillUpdate?(nextProps: Readonly<CommonDivProps & import("../hocs/withOnOutsideClick.js").WithOnOutsideClickProps>, nextState: Readonly<{}>, nextContext: any): void;
74
68
  };
75
69
  contextType?: React.Context<any> | undefined;
70
+ propTypes?: any;
76
71
  };
77
72
  //# sourceMappingURL=DivWithOutsideClick.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DivWithOutsideClick.d.ts","sourceRoot":"","sources":["../../../src/core-react/base/DivWithOutsideClick.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;GAGG;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAE/B,CAAC"}
1
+ {"version":3,"file":"DivWithOutsideClick.d.ts","sourceRoot":"","sources":["../../../src/core-react/base/DivWithOutsideClick.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;GAGG;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAE/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/core-react/contextmenu/ContextMenu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/core-react/contextmenu/ContextMenu.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,oBAAoB,CAAC;AAE5B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,uDAAuD;IACvD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC;IAC5C,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;IAC/B,oCAAoC;IACpC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0IAA0I;IAC1I,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB;IAChB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,gBAAgB;IAChB,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,gBAAgB;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,UAAU,gBAAgB;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,oBAAoB,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,KAAK,CAAC,aAAa,CAClD,gBAAgB,EAChB,gBAAgB,CACjB;IACC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,gBAAgB,CAAiD;IACzE,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,UAAU,CAAkC;IAEpD,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,cAAc,CACa;IACnC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,kBAAkB,CAAa;IAEvC,OAAc,YAAY,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAOnD;IAEF,SAAyB,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBAC/C,KAAK,EAAE,gBAAgB;IASnC,gBAAgB;IAChB,OAAc,QAAQ,QACf,oBAAoB,QACnB,eAAe,eACR,MAAM,gBACL,MAAM,KACnB,oBAAoB,CAsDrB;IAEF,OAAO,CAAC,mBAAmB,CAEzB;IAEF,OAAO,CAAC,qBAAqB,CAG3B;IAEc,MAAM,IAAI,KAAK,CAAC,YAAY;IAmE5C,gBAAgB;IAChB,OAAc,4BAA4B,eAC5B,oBAAoB,KAC/B,MAAM,CAsCP;IAEF,OAAO,CAAC,oBAAoB,CA2D1B;IAEF,OAAO,CAAC,QAAQ,CAEd;IAEF,OAAO,CAAC,QAAQ,CAEd;IAEF,OAAO,CAAC,SAAS;IAMD,iBAAiB;IAUjB,oBAAoB;IAMpC,OAAO,CAAC,oBAAoB;IA6BrB,KAAK,aAEV;IAEK,IAAI,aAET;IAEK,OAAO,QAAO,OAAO,CAO1B;IAEF,OAAO,CAAC,kBAAkB,CASxB;IAEF,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,YAAY,CA6ElB;IAEF,gBAAgB;IACA,kBAAkB,CAAC,SAAS,EAAE,gBAAgB;CAa/D"}
@@ -47,6 +47,7 @@ export class ContextMenu extends React.PureComponent {
47
47
  typeof child === "object" &&
48
48
  "props" in child &&
49
49
  (child.type === ContextSubMenu || child.type === ContextMenuItem) &&
50
+ React.isValidElement(child) &&
50
51
  !ConditionalBooleanValue.getValue(child.props.disabled) &&
51
52
  !ConditionalBooleanValue.getValue(child.props.hidden)) {
52
53
  const id = index; // get separate id variable so value stays the same when onHover is called later.
@@ -67,7 +68,8 @@ export class ContextMenu extends React.PureComponent {
67
68
  isSelected: selectedIndex === id,
68
69
  onHotKeyParsed: boundHandleHotKeyParse,
69
70
  };
70
- if (child.type === ContextSubMenu) {
71
+ if (child.type === ContextSubMenu &&
72
+ React.isValidElement(child)) {
71
73
  // add direction only to sub-menus
72
74
  childProps.direction = child.props.direction || direction;
73
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenu.js","sourceRoot":"","sources":["../../../src/core-react/contextmenu/ContextMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ContextMenu\n */\n\nimport \"./ContextMenu.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Key } from \"ts-key-enum\";\nimport { ConditionalBooleanValue } from \"@itwin/appui-abstract\";\nimport type { CommonProps } from \"../utils/Props.js\";\nimport { DivWithOutsideClick } from \"../base/DivWithOutsideClick.js\";\nimport { ContextMenuDirection } from \"./ContextMenuDirection.js\";\nimport type { ContextMenuItemProps } from \"./ContextMenuItem.js\";\nimport { ContextMenuItem } from \"./ContextMenuItem.js\";\nimport type { ContextSubMenuProps } from \"./ContextSubMenu.js\";\nimport { ContextSubMenu } from \"./ContextSubMenu.js\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\n/** Properties for the [[ContextMenu]] component\n * @public\n * @deprecated in 4.16.0. Props of deprecated {@link ContextMenu} component.\n */\nexport interface ContextMenuProps extends CommonProps {\n /** Whether ContextMenu is currently opened. */\n opened: boolean;\n /** Which direction the menu opens. Default: ContextMenuDirection.BottomRight */\n direction?: ContextMenuDirection;\n /** When click is registered outside of ContextMenu. */\n onOutsideClick?: (event: MouseEvent) => any;\n /** When list item or submenu is selected */\n onSelect?: (event: any) => any;\n /** when Escape button is pressed */\n onEsc?: (data: any) => any;\n /** Whether menu flips directions based on screen edge. Default: true */\n autoflip?: boolean;\n /** Whether menu hugs screen edge when autoflip is off. Default: true */\n edgeLimit?: boolean;\n /** Whether Hotkey press selects item, or just highlights item. Default: true */\n hotkeySelect?: boolean;\n /** starting menu item selected index Default: -1 */\n selectedIndex?: number;\n /** whether menu floats on the viewport, or the page. When false, container elements can clip menu with overflow: hidden; Default: true */\n floating?: boolean;\n /** @internal */\n parentMenu?: ContextMenu;\n /** @internal */\n parentSubmenu?: ContextSubMenu;\n /** @internal */\n ignoreNextKeyUp?: boolean;\n /** Content */\n children?: React.ReactNode;\n}\n\ninterface ContextMenuState {\n selectedIndex: number;\n direction: ContextMenuDirection;\n ignoreNextKeyUp: boolean;\n}\n\n/** A context menu populated with [[ContextMenuItem]] components.\n * Can be nested using [[ContextSubMenu]] component.\n * @public\n * @deprecated in 4.16.0. Use {@link https://itwinui.bentley.com/docs/dropdownmenu iTwinUI DropdownMenu} component instead.\n */\nexport class ContextMenu extends React.PureComponent<\n ContextMenuProps,\n ContextMenuState\n> {\n private _rootElement: HTMLElement | null = null;\n private _menuElement: HTMLElement | null = null;\n private _selectedElement: ContextMenuItem | ContextSubMenu | null = null;\n private _length: number = 0;\n private _hotKeyMap: Map<number, string> = new Map();\n\n private _lastChildren: React.ReactNode;\n private _lastDirection: ContextMenuDirection | undefined =\n ContextMenuDirection.BottomRight;\n private _lastSelectedIndex: number = 0;\n private _injectedChildren: React.ReactNode;\n private _parentWindowHeight: number = 0;\n private _parentWindowWidth: number = 0;\n\n public static defaultProps: Partial<ContextMenuProps> = {\n direction: ContextMenuDirection.BottomRight,\n autoflip: true,\n edgeLimit: true,\n hotkeySelect: true,\n selectedIndex: -1,\n floating: true,\n };\n\n public override readonly state: Readonly<ContextMenuState>;\n constructor(props: ContextMenuProps) {\n super(props);\n this.state = {\n selectedIndex: this.props.selectedIndex!,\n direction: props.direction!,\n ignoreNextKeyUp: props.ignoreNextKeyUp!,\n };\n }\n\n /** @internal */\n public static autoFlip = (\n dir: ContextMenuDirection,\n rect: DOMRectReadOnly,\n windowWidth: number,\n windowHeight: number\n ): ContextMenuDirection => {\n if (rect.right > windowWidth) {\n switch (dir) {\n case ContextMenuDirection.TopRight:\n dir = ContextMenuDirection.TopLeft;\n break;\n case ContextMenuDirection.Right:\n dir = ContextMenuDirection.Left;\n break;\n case ContextMenuDirection.BottomRight:\n dir = ContextMenuDirection.BottomLeft;\n break;\n }\n }\n if (rect.left < 0) {\n switch (dir) {\n case ContextMenuDirection.TopLeft:\n dir = ContextMenuDirection.TopRight;\n break;\n case ContextMenuDirection.Left:\n dir = ContextMenuDirection.Right;\n break;\n case ContextMenuDirection.BottomLeft:\n dir = ContextMenuDirection.BottomRight;\n break;\n }\n }\n if (rect.bottom > windowHeight) {\n switch (dir) {\n case ContextMenuDirection.BottomLeft:\n dir = ContextMenuDirection.TopLeft;\n break;\n case ContextMenuDirection.Bottom:\n dir = ContextMenuDirection.Top;\n break;\n case ContextMenuDirection.BottomRight:\n dir = ContextMenuDirection.TopRight;\n break;\n }\n }\n if (rect.top < 0) {\n switch (dir) {\n case ContextMenuDirection.TopLeft:\n dir = ContextMenuDirection.BottomLeft;\n break;\n case ContextMenuDirection.Top:\n dir = ContextMenuDirection.Bottom;\n break;\n case ContextMenuDirection.TopRight:\n dir = ContextMenuDirection.BottomRight;\n break;\n }\n }\n return dir;\n };\n\n private _handleHotKeyParsed = (index: number, hotKey: string) => {\n this._hotKeyMap.set(index, hotKey);\n };\n\n private _handleOnOutsideClick = (event: MouseEvent): void => {\n if (this.props.opened && this.props.onOutsideClick)\n this.props.onOutsideClick(event);\n };\n\n public override render(): React.ReactElement {\n const {\n opened,\n direction,\n onOutsideClick,\n onSelect,\n onEsc,\n autoflip,\n edgeLimit,\n hotkeySelect,\n selectedIndex,\n floating,\n parentMenu,\n parentSubmenu,\n children,\n className,\n ignoreNextKeyUp,\n ...props\n } = this.props;\n const renderDirection =\n parentMenu === undefined ? this.state.direction : direction;\n\n if (\n this._lastChildren !== children ||\n this._lastDirection !== renderDirection ||\n this._lastSelectedIndex !== this.state.selectedIndex\n ) {\n this._injectedChildren = this._injectMenuItemProps(\n children,\n renderDirection,\n this.state.selectedIndex\n );\n this._lastChildren = children;\n this._lastDirection = renderDirection;\n this._lastSelectedIndex = this.state.selectedIndex;\n }\n\n return (\n <div\n role=\"presentation\"\n className={classnames(\"core-context-menu\", className)}\n onKeyUp={this._handleKeyUp}\n onClick={this._handleClick}\n data-testid=\"core-context-menu-root\"\n {...props}\n ref={this._rootRef}\n >\n <DivWithOutsideClick onOutsideClick={this._handleOnOutsideClick}>\n <div\n ref={this._menuRef}\n role=\"menu\"\n tabIndex={0}\n data-testid=\"core-context-menu-container\"\n className={classnames(\n \"core-context-menu-container\",\n opened && \"core-context-menu-opened\",\n floating && \"core-context-menu-floating\",\n ContextMenu.getCSSClassNameFromDirection(renderDirection)\n )}\n >\n {this._injectedChildren}\n </div>\n </DivWithOutsideClick>\n </div>\n );\n }\n\n /** @internal */\n public static getCSSClassNameFromDirection = (\n direction?: ContextMenuDirection\n ): string => {\n let className = \"\";\n\n if (direction === undefined) direction = ContextMenuDirection.BottomRight;\n\n if (direction === ContextMenuDirection.None) return \"\";\n\n switch (direction) {\n case ContextMenuDirection.TopLeft:\n className = \"core-context-menu-top core-context-menu-left\";\n break;\n case ContextMenuDirection.Top:\n className = \"core-context-menu-top\";\n break;\n case ContextMenuDirection.TopRight:\n className = \"core-context-menu-top core-context-menu-right\";\n break;\n case ContextMenuDirection.Left:\n className = \"core-context-menu-left\";\n break;\n case ContextMenuDirection.Center:\n className = \"core-context-menu-center\";\n break;\n case ContextMenuDirection.Right:\n className = \"core-context-menu-right\";\n break;\n case ContextMenuDirection.BottomLeft:\n className = \"core-context-menu-bottom core-context-menu-left\";\n break;\n case ContextMenuDirection.Bottom:\n className = \"core-context-menu-bottom\";\n break;\n case ContextMenuDirection.BottomRight:\n className = \"core-context-menu-bottom core-context-menu-right\";\n break;\n }\n\n return className;\n };\n\n private _injectMenuItemProps = (\n children: React.ReactNode,\n direction: ContextMenuDirection | undefined,\n selectedIndex: number\n ) => {\n let index = 0;\n // add inheritance data to submenu children\n const ch = React.Children.map(children, (child: React.ReactNode) => {\n // Capture only ContextSubMenus and ContextMenuItems.\n if (\n child &&\n typeof child === \"object\" &&\n \"props\" in child &&\n (child.type === ContextSubMenu || child.type === ContextMenuItem) &&\n !ConditionalBooleanValue.getValue(child.props.disabled) &&\n !ConditionalBooleanValue.getValue(child.props.hidden)\n ) {\n const id = index; // get separate id variable so value stays the same when onHover is called later.\n const onHover = () => {\n this.setState({ selectedIndex: id });\n this.focus();\n };\n const ref = (el: ContextSubMenu | ContextMenuItem | null) => {\n if (selectedIndex === id)\n // only save to this._selectedElement if previously captured bool is true\n this._selectedElement = el;\n };\n const boundHandleHotKeyParse = this._handleHotKeyParsed.bind(this, id); // bind local callback for specific index\n const childProps: Partial<\n ContextSubMenuProps & ContextMenuItemProps & { ref: typeof ref }\n > = {\n parentMenu: this,\n ref,\n onHover,\n isSelected: selectedIndex === id,\n onHotKeyParsed: boundHandleHotKeyParse,\n };\n if (child.type === ContextSubMenu) {\n // add direction only to sub-menus\n childProps.direction = child.props.direction || direction;\n }\n index++;\n return React.cloneElement(child, childProps);\n } else return child; // Else, pass through unmodified\n });\n this._length = index;\n return ch;\n };\n\n private _rootRef = (el: HTMLDivElement | null) => {\n this._rootElement = el;\n };\n\n private _menuRef = (el: HTMLDivElement | null) => {\n this._menuElement = el;\n };\n\n private getWindow() {\n const el = this._rootElement ? this._rootElement : this._menuElement;\n const parentDocument = el!.ownerDocument;\n return parentDocument.defaultView ?? window;\n }\n\n public override componentDidMount() {\n const parentWindow = this.getWindow();\n parentWindow.addEventListener(\"focus\", this._handleFocusChange);\n parentWindow.addEventListener(\"mouseup\", this._handleFocusChange);\n\n this.checkRenderDirection();\n\n if (this.props.opened) this.focus();\n }\n\n public override componentWillUnmount() {\n const parentWindow = this.getWindow();\n parentWindow.removeEventListener(\"focus\", this._handleFocusChange);\n parentWindow.removeEventListener(\"mouseup\", this._handleFocusChange);\n }\n\n private checkRenderDirection() {\n const { direction, autoflip, parentMenu } = this.props;\n const parentWindow = this.getWindow();\n\n let renderDirection =\n parentMenu === undefined ? this.state.direction : direction;\n\n if (\n parentWindow.innerHeight === this._parentWindowHeight &&\n parentWindow.innerWidth === this._parentWindowWidth\n )\n return;\n this._parentWindowHeight = parentWindow.innerHeight;\n this._parentWindowWidth = parentWindow.innerWidth;\n\n // check if menu should flip\n if (parentWindow && autoflip && parentMenu === undefined) {\n const menuRect = this.getRect();\n renderDirection = ContextMenu.autoFlip(\n renderDirection!,\n menuRect,\n parentWindow.innerWidth,\n parentWindow.innerHeight\n );\n if (renderDirection !== this.state.direction)\n this.setState({ direction: renderDirection });\n }\n }\n\n public focus = () => {\n if (this._menuElement) this._menuElement.focus();\n };\n\n public blur = () => {\n if (this._menuElement) this._menuElement.blur();\n };\n\n public getRect = (): DOMRect => {\n let clientRect = DOMRect.fromRect({ x: 0, y: 0, width: 0, height: 0 });\n\n if (this._menuElement) {\n clientRect = this._menuElement.getBoundingClientRect();\n }\n return clientRect;\n };\n\n private _handleFocusChange = (event: any): void => {\n if (\n this._rootElement &&\n this.props.opened &&\n event.target instanceof Node &&\n this.props.onOutsideClick &&\n !this._rootElement.contains(event.target)\n )\n this.props.onOutsideClick(event);\n };\n\n private _handleClick = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (this.props.onSelect) this.props.onSelect(event);\n };\n\n private _handleKeyUp = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n if (this.state.ignoreNextKeyUp) {\n this.setState({ ignoreNextKeyUp: false });\n return;\n }\n\n if (event.key) {\n for (const [key, value] of this._hotKeyMap) {\n if (!this.props.hotkeySelect! && key > this.state.selectedIndex) {\n // Start search at current index.\n if (event.key.toUpperCase() === value) {\n this.setState({ selectedIndex: key });\n return;\n }\n }\n }\n for (const [key, value] of this._hotKeyMap) {\n if (event.key.toUpperCase() === value) {\n this.setState({ selectedIndex: key }, () => {\n if (this.props.hotkeySelect && this._selectedElement) {\n this._selectedElement.select();\n }\n });\n event.stopPropagation();\n return;\n }\n }\n }\n\n if (event.key === Key.ArrowLeft.valueOf()) {\n event.stopPropagation();\n if (this.props.parentMenu && this.props.parentSubmenu) {\n this.props.parentSubmenu.close();\n this.props.parentMenu.focus();\n }\n if (this.props.onEsc) this.props.onEsc(event);\n }\n\n if (event.key === Key.Escape.valueOf()) {\n if (this.props.onEsc) this.props.onEsc(event);\n }\n\n if (\n (event.key === Key.Enter.valueOf() ||\n event.key === Key.ArrowRight.valueOf()) &&\n this._selectedElement\n ) {\n event.stopPropagation();\n\n if (\n event.key === Key.Enter.valueOf() ||\n this._selectedElement instanceof ContextSubMenu\n ) {\n if (this._selectedElement.select) this._selectedElement.select();\n }\n }\n\n let { selectedIndex } = this.state;\n if (\n event.key === Key.ArrowUp.valueOf() ||\n event.key === Key.ArrowDown.valueOf()\n ) {\n event.stopPropagation();\n if (selectedIndex === -1) {\n selectedIndex = 0;\n } else {\n if (event.key === Key.ArrowUp.valueOf()) {\n if (this.state.selectedIndex === 0) selectedIndex = this._length - 1;\n else selectedIndex--;\n }\n if (event.key === Key.ArrowDown.valueOf()) {\n if (this.state.selectedIndex === this._length - 1) selectedIndex = 0;\n else selectedIndex++;\n }\n }\n }\n this.setState({ selectedIndex });\n };\n\n /** @internal */\n public override componentDidUpdate(prevProps: ContextMenuProps) {\n if (prevProps.selectedIndex !== this.props.selectedIndex) {\n this.setState((_, props) => ({ selectedIndex: props.selectedIndex! }));\n }\n if (!prevProps.opened && this.props.opened) {\n this.setState((_, props) => ({ selectedIndex: props.selectedIndex! }));\n }\n if (!this.props.parentMenu) {\n // const direction = this.props.direction!;\n // if ((!this.props.opened && prevProps.opened && direction !== this.state.direction) || prevProps.direction !== direction)\n this.checkRenderDirection();\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ContextMenu.js","sourceRoot":"","sources":["../../../src/core-react/contextmenu/ContextMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ContextMenu\n */\n\nimport \"./ContextMenu.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Key } from \"ts-key-enum\";\nimport { ConditionalBooleanValue } from \"@itwin/appui-abstract\";\nimport type { CommonProps } from \"../utils/Props.js\";\nimport { DivWithOutsideClick } from \"../base/DivWithOutsideClick.js\";\nimport { ContextMenuDirection } from \"./ContextMenuDirection.js\";\nimport type { ContextMenuItemProps } from \"./ContextMenuItem.js\";\nimport { ContextMenuItem } from \"./ContextMenuItem.js\";\nimport type { ContextSubMenuProps } from \"./ContextSubMenu.js\";\nimport { ContextSubMenu } from \"./ContextSubMenu.js\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\n/** Properties for the [[ContextMenu]] component\n * @public\n * @deprecated in 4.16.0. Props of deprecated {@link ContextMenu} component.\n */\nexport interface ContextMenuProps extends CommonProps {\n /** Whether ContextMenu is currently opened. */\n opened: boolean;\n /** Which direction the menu opens. Default: ContextMenuDirection.BottomRight */\n direction?: ContextMenuDirection;\n /** When click is registered outside of ContextMenu. */\n onOutsideClick?: (event: MouseEvent) => any;\n /** When list item or submenu is selected */\n onSelect?: (event: any) => any;\n /** when Escape button is pressed */\n onEsc?: (data: any) => any;\n /** Whether menu flips directions based on screen edge. Default: true */\n autoflip?: boolean;\n /** Whether menu hugs screen edge when autoflip is off. Default: true */\n edgeLimit?: boolean;\n /** Whether Hotkey press selects item, or just highlights item. Default: true */\n hotkeySelect?: boolean;\n /** starting menu item selected index Default: -1 */\n selectedIndex?: number;\n /** whether menu floats on the viewport, or the page. When false, container elements can clip menu with overflow: hidden; Default: true */\n floating?: boolean;\n /** @internal */\n parentMenu?: ContextMenu;\n /** @internal */\n parentSubmenu?: ContextSubMenu;\n /** @internal */\n ignoreNextKeyUp?: boolean;\n /** Content */\n children?: React.ReactNode;\n}\n\ninterface ContextMenuState {\n selectedIndex: number;\n direction: ContextMenuDirection;\n ignoreNextKeyUp: boolean;\n}\n\n/** A context menu populated with [[ContextMenuItem]] components.\n * Can be nested using [[ContextSubMenu]] component.\n * @public\n * @deprecated in 4.16.0. Use {@link https://itwinui.bentley.com/docs/dropdownmenu iTwinUI DropdownMenu} component instead.\n */\nexport class ContextMenu extends React.PureComponent<\n ContextMenuProps,\n ContextMenuState\n> {\n private _rootElement: HTMLElement | null = null;\n private _menuElement: HTMLElement | null = null;\n private _selectedElement: ContextMenuItem | ContextSubMenu | null = null;\n private _length: number = 0;\n private _hotKeyMap: Map<number, string> = new Map();\n\n private _lastChildren: React.ReactNode;\n private _lastDirection: ContextMenuDirection | undefined =\n ContextMenuDirection.BottomRight;\n private _lastSelectedIndex: number = 0;\n private _injectedChildren: React.ReactNode;\n private _parentWindowHeight: number = 0;\n private _parentWindowWidth: number = 0;\n\n public static defaultProps: Partial<ContextMenuProps> = {\n direction: ContextMenuDirection.BottomRight,\n autoflip: true,\n edgeLimit: true,\n hotkeySelect: true,\n selectedIndex: -1,\n floating: true,\n };\n\n public override readonly state: Readonly<ContextMenuState>;\n constructor(props: ContextMenuProps) {\n super(props);\n this.state = {\n selectedIndex: this.props.selectedIndex!,\n direction: props.direction!,\n ignoreNextKeyUp: props.ignoreNextKeyUp!,\n };\n }\n\n /** @internal */\n public static autoFlip = (\n dir: ContextMenuDirection,\n rect: DOMRectReadOnly,\n windowWidth: number,\n windowHeight: number\n ): ContextMenuDirection => {\n if (rect.right > windowWidth) {\n switch (dir) {\n case ContextMenuDirection.TopRight:\n dir = ContextMenuDirection.TopLeft;\n break;\n case ContextMenuDirection.Right:\n dir = ContextMenuDirection.Left;\n break;\n case ContextMenuDirection.BottomRight:\n dir = ContextMenuDirection.BottomLeft;\n break;\n }\n }\n if (rect.left < 0) {\n switch (dir) {\n case ContextMenuDirection.TopLeft:\n dir = ContextMenuDirection.TopRight;\n break;\n case ContextMenuDirection.Left:\n dir = ContextMenuDirection.Right;\n break;\n case ContextMenuDirection.BottomLeft:\n dir = ContextMenuDirection.BottomRight;\n break;\n }\n }\n if (rect.bottom > windowHeight) {\n switch (dir) {\n case ContextMenuDirection.BottomLeft:\n dir = ContextMenuDirection.TopLeft;\n break;\n case ContextMenuDirection.Bottom:\n dir = ContextMenuDirection.Top;\n break;\n case ContextMenuDirection.BottomRight:\n dir = ContextMenuDirection.TopRight;\n break;\n }\n }\n if (rect.top < 0) {\n switch (dir) {\n case ContextMenuDirection.TopLeft:\n dir = ContextMenuDirection.BottomLeft;\n break;\n case ContextMenuDirection.Top:\n dir = ContextMenuDirection.Bottom;\n break;\n case ContextMenuDirection.TopRight:\n dir = ContextMenuDirection.BottomRight;\n break;\n }\n }\n return dir;\n };\n\n private _handleHotKeyParsed = (index: number, hotKey: string) => {\n this._hotKeyMap.set(index, hotKey);\n };\n\n private _handleOnOutsideClick = (event: MouseEvent): void => {\n if (this.props.opened && this.props.onOutsideClick)\n this.props.onOutsideClick(event);\n };\n\n public override render(): React.ReactElement {\n const {\n opened,\n direction,\n onOutsideClick,\n onSelect,\n onEsc,\n autoflip,\n edgeLimit,\n hotkeySelect,\n selectedIndex,\n floating,\n parentMenu,\n parentSubmenu,\n children,\n className,\n ignoreNextKeyUp,\n ...props\n } = this.props;\n const renderDirection =\n parentMenu === undefined ? this.state.direction : direction;\n\n if (\n this._lastChildren !== children ||\n this._lastDirection !== renderDirection ||\n this._lastSelectedIndex !== this.state.selectedIndex\n ) {\n this._injectedChildren = this._injectMenuItemProps(\n children,\n renderDirection,\n this.state.selectedIndex\n );\n this._lastChildren = children;\n this._lastDirection = renderDirection;\n this._lastSelectedIndex = this.state.selectedIndex;\n }\n\n return (\n <div\n role=\"presentation\"\n className={classnames(\"core-context-menu\", className)}\n onKeyUp={this._handleKeyUp}\n onClick={this._handleClick}\n data-testid=\"core-context-menu-root\"\n {...props}\n ref={this._rootRef}\n >\n <DivWithOutsideClick onOutsideClick={this._handleOnOutsideClick}>\n <div\n ref={this._menuRef}\n role=\"menu\"\n tabIndex={0}\n data-testid=\"core-context-menu-container\"\n className={classnames(\n \"core-context-menu-container\",\n opened && \"core-context-menu-opened\",\n floating && \"core-context-menu-floating\",\n ContextMenu.getCSSClassNameFromDirection(renderDirection)\n )}\n >\n {this._injectedChildren}\n </div>\n </DivWithOutsideClick>\n </div>\n );\n }\n\n /** @internal */\n public static getCSSClassNameFromDirection = (\n direction?: ContextMenuDirection\n ): string => {\n let className = \"\";\n\n if (direction === undefined) direction = ContextMenuDirection.BottomRight;\n\n if (direction === ContextMenuDirection.None) return \"\";\n\n switch (direction) {\n case ContextMenuDirection.TopLeft:\n className = \"core-context-menu-top core-context-menu-left\";\n break;\n case ContextMenuDirection.Top:\n className = \"core-context-menu-top\";\n break;\n case ContextMenuDirection.TopRight:\n className = \"core-context-menu-top core-context-menu-right\";\n break;\n case ContextMenuDirection.Left:\n className = \"core-context-menu-left\";\n break;\n case ContextMenuDirection.Center:\n className = \"core-context-menu-center\";\n break;\n case ContextMenuDirection.Right:\n className = \"core-context-menu-right\";\n break;\n case ContextMenuDirection.BottomLeft:\n className = \"core-context-menu-bottom core-context-menu-left\";\n break;\n case ContextMenuDirection.Bottom:\n className = \"core-context-menu-bottom\";\n break;\n case ContextMenuDirection.BottomRight:\n className = \"core-context-menu-bottom core-context-menu-right\";\n break;\n }\n\n return className;\n };\n\n private _injectMenuItemProps = (\n children: React.ReactNode,\n direction: ContextMenuDirection | undefined,\n selectedIndex: number\n ) => {\n let index = 0;\n // add inheritance data to submenu children\n const ch = React.Children.map(\n children,\n (child: React.ReactNode): React.ReactNode => {\n // Capture only ContextSubMenus and ContextMenuItems.\n if (\n child &&\n typeof child === \"object\" &&\n \"props\" in child &&\n (child.type === ContextSubMenu || child.type === ContextMenuItem) &&\n React.isValidElement<ContextSubMenuProps | ContextMenuItemProps>(\n child\n ) &&\n !ConditionalBooleanValue.getValue(child.props.disabled) &&\n !ConditionalBooleanValue.getValue(child.props.hidden)\n ) {\n const id = index; // get separate id variable so value stays the same when onHover is called later.\n const onHover = () => {\n this.setState({ selectedIndex: id });\n this.focus();\n };\n const ref = (el: ContextSubMenu | ContextMenuItem | null) => {\n if (selectedIndex === id)\n // only save to this._selectedElement if previously captured bool is true\n this._selectedElement = el;\n };\n const boundHandleHotKeyParse = this._handleHotKeyParsed.bind(\n this,\n id\n ); // bind local callback for specific index\n const childProps: Partial<\n ContextSubMenuProps & ContextMenuItemProps & { ref: typeof ref }\n > = {\n parentMenu: this,\n ref,\n onHover,\n isSelected: selectedIndex === id,\n onHotKeyParsed: boundHandleHotKeyParse,\n };\n if (\n child.type === ContextSubMenu &&\n React.isValidElement<ContextSubMenuProps>(child)\n ) {\n // add direction only to sub-menus\n childProps.direction = child.props.direction || direction;\n }\n index++;\n return React.cloneElement(child, childProps);\n } else return child; // Else, pass through unmodified\n }\n );\n this._length = index;\n return ch;\n };\n\n private _rootRef = (el: HTMLDivElement | null) => {\n this._rootElement = el;\n };\n\n private _menuRef = (el: HTMLDivElement | null) => {\n this._menuElement = el;\n };\n\n private getWindow() {\n const el = this._rootElement ? this._rootElement : this._menuElement;\n const parentDocument = el!.ownerDocument;\n return parentDocument.defaultView ?? window;\n }\n\n public override componentDidMount() {\n const parentWindow = this.getWindow();\n parentWindow.addEventListener(\"focus\", this._handleFocusChange);\n parentWindow.addEventListener(\"mouseup\", this._handleFocusChange);\n\n this.checkRenderDirection();\n\n if (this.props.opened) this.focus();\n }\n\n public override componentWillUnmount() {\n const parentWindow = this.getWindow();\n parentWindow.removeEventListener(\"focus\", this._handleFocusChange);\n parentWindow.removeEventListener(\"mouseup\", this._handleFocusChange);\n }\n\n private checkRenderDirection() {\n const { direction, autoflip, parentMenu } = this.props;\n const parentWindow = this.getWindow();\n\n let renderDirection =\n parentMenu === undefined ? this.state.direction : direction;\n\n if (\n parentWindow.innerHeight === this._parentWindowHeight &&\n parentWindow.innerWidth === this._parentWindowWidth\n )\n return;\n this._parentWindowHeight = parentWindow.innerHeight;\n this._parentWindowWidth = parentWindow.innerWidth;\n\n // check if menu should flip\n if (parentWindow && autoflip && parentMenu === undefined) {\n const menuRect = this.getRect();\n renderDirection = ContextMenu.autoFlip(\n renderDirection!,\n menuRect,\n parentWindow.innerWidth,\n parentWindow.innerHeight\n );\n if (renderDirection !== this.state.direction)\n this.setState({ direction: renderDirection });\n }\n }\n\n public focus = () => {\n if (this._menuElement) this._menuElement.focus();\n };\n\n public blur = () => {\n if (this._menuElement) this._menuElement.blur();\n };\n\n public getRect = (): DOMRect => {\n let clientRect = DOMRect.fromRect({ x: 0, y: 0, width: 0, height: 0 });\n\n if (this._menuElement) {\n clientRect = this._menuElement.getBoundingClientRect();\n }\n return clientRect;\n };\n\n private _handleFocusChange = (event: any): void => {\n if (\n this._rootElement &&\n this.props.opened &&\n event.target instanceof Node &&\n this.props.onOutsideClick &&\n !this._rootElement.contains(event.target)\n )\n this.props.onOutsideClick(event);\n };\n\n private _handleClick = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (this.props.onSelect) this.props.onSelect(event);\n };\n\n private _handleKeyUp = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n if (this.state.ignoreNextKeyUp) {\n this.setState({ ignoreNextKeyUp: false });\n return;\n }\n\n if (event.key) {\n for (const [key, value] of this._hotKeyMap) {\n if (!this.props.hotkeySelect! && key > this.state.selectedIndex) {\n // Start search at current index.\n if (event.key.toUpperCase() === value) {\n this.setState({ selectedIndex: key });\n return;\n }\n }\n }\n for (const [key, value] of this._hotKeyMap) {\n if (event.key.toUpperCase() === value) {\n this.setState({ selectedIndex: key }, () => {\n if (this.props.hotkeySelect && this._selectedElement) {\n this._selectedElement.select();\n }\n });\n event.stopPropagation();\n return;\n }\n }\n }\n\n if (event.key === Key.ArrowLeft.valueOf()) {\n event.stopPropagation();\n if (this.props.parentMenu && this.props.parentSubmenu) {\n this.props.parentSubmenu.close();\n this.props.parentMenu.focus();\n }\n if (this.props.onEsc) this.props.onEsc(event);\n }\n\n if (event.key === Key.Escape.valueOf()) {\n if (this.props.onEsc) this.props.onEsc(event);\n }\n\n if (\n (event.key === Key.Enter.valueOf() ||\n event.key === Key.ArrowRight.valueOf()) &&\n this._selectedElement\n ) {\n event.stopPropagation();\n\n if (\n event.key === Key.Enter.valueOf() ||\n this._selectedElement instanceof ContextSubMenu\n ) {\n if (this._selectedElement.select) this._selectedElement.select();\n }\n }\n\n let { selectedIndex } = this.state;\n if (\n event.key === Key.ArrowUp.valueOf() ||\n event.key === Key.ArrowDown.valueOf()\n ) {\n event.stopPropagation();\n if (selectedIndex === -1) {\n selectedIndex = 0;\n } else {\n if (event.key === Key.ArrowUp.valueOf()) {\n if (this.state.selectedIndex === 0) selectedIndex = this._length - 1;\n else selectedIndex--;\n }\n if (event.key === Key.ArrowDown.valueOf()) {\n if (this.state.selectedIndex === this._length - 1) selectedIndex = 0;\n else selectedIndex++;\n }\n }\n }\n this.setState({ selectedIndex });\n };\n\n /** @internal */\n public override componentDidUpdate(prevProps: ContextMenuProps) {\n if (prevProps.selectedIndex !== this.props.selectedIndex) {\n this.setState((_, props) => ({ selectedIndex: props.selectedIndex! }));\n }\n if (!prevProps.opened && this.props.opened) {\n this.setState((_, props) => ({ selectedIndex: props.selectedIndex! }));\n }\n if (!this.props.parentMenu) {\n // const direction = this.props.direction!;\n // if ((!this.props.opened && prevProps.opened && direction !== this.state.direction) || prevProps.direction !== direction)\n this.checkRenderDirection();\n }\n }\n}\n"]}
@@ -48,7 +48,7 @@ TildeFinder.findAfterTilde = (node) => {
48
48
  return { character: ret.character, node };
49
49
  }
50
50
  }
51
- else if ("props" in node) {
51
+ else if (React.isValidElement(node)) {
52
52
  // React Node
53
53
  const ret = {
54
54
  character: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"TildeFinder.js","sourceRoot":"","sources":["../../../src/core-react/contextmenu/TildeFinder.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;GAEG;AACH,MAAM,OAAO,WAAW;;AACtB;;;;GAIG;AACW,0BAAc,GAAG,CAC7B,IAAqB,EACqC,EAAE;IAC5D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,SAAS;QACT,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,2BAAG,GAAG,EAAC,QAAQ,IAAE,EAAE,CAAK,CAAC;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YAC1C,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,QAAQ;YACR,IAAI,GAAG,GAA6D;gBAClE,SAAS,EAAE,SAAS;gBACpB,IAAI;aACL,CAAC;YACF,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxB,MAAM,CAAC,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;oBAChB,4EAA4E;oBAC5E,GAAG,GAAG,CAAC,CAAC;oBACR,OAAO,CAAC,CAAC,IAAI,CAAC;gBAChB,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,aAAa;YACb,MAAM,GAAG,GAA6D;gBACpE,SAAS,EAAE,SAAS;gBACpB,IAAI;aACL,CAAC;YACF,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE;gBAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAC1B,IAAI,CAAC,KAAK,CAAC,QAA2B,EACtC,CAAC,KAAsB,EAAE,EAAE;oBACzB,MAAM,CAAC,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC5C,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;wBAChB,4EAA4E;wBAC5E,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;wBAC5B,OAAO,CAAC,CAAC,IAAI,CAAC;oBAChB,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CACF;aACF,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ContextMenu\n */\n\nimport * as React from \"react\";\n\n/** Finds a tilde character in ContextMenu item label for hot key support\n * @internal\n */\nexport class TildeFinder {\n /**\n * Find character following a tilde character within a React.ReactNode.\n * @param node react node to search within for a tilde.\n * @returns character that was found, and the same node with tilde removed, and following character with an underline.\n */\n public static findAfterTilde = (\n node: React.ReactNode\n ): { character: string | undefined; node: React.ReactNode } => {\n if (typeof node === \"string\") {\n // String\n const tildeIndex = node.indexOf(\"~\");\n if (tildeIndex !== -1 && tildeIndex <= node.length - 2) {\n const ch = node.charAt(tildeIndex + 1);\n const s1 = node.substring(0, tildeIndex);\n const n = <u key=\"hotkey\">{ch}</u>;\n const s2 = node.substring(tildeIndex + 2);\n return { character: ch.toUpperCase(), node: [s1, n, s2] };\n }\n } else if (node && typeof node === \"object\") {\n if (Array.isArray(node)) {\n // Array\n let ret: { character: string | undefined; node: React.ReactNode } = {\n character: undefined,\n node,\n };\n node = node.map((child) => {\n const r = TildeFinder.findAfterTilde(child);\n if (r.character) {\n // if character is found, modify node instead of returning unmodified child.\n ret = r;\n return r.node;\n }\n return child;\n });\n if (ret.character) {\n return { character: ret.character, node };\n }\n } else if (\"props\" in node) {\n // React Node\n const ret: { character: string | undefined; node: React.ReactNode } = {\n character: undefined,\n node,\n };\n ret.node = React.cloneElement(node, {\n children: React.Children.map(\n node.props.children as React.ReactNode,\n (child: React.ReactNode) => {\n const r = TildeFinder.findAfterTilde(child);\n if (r.character) {\n // if character is found, modify node instead of returning unmodified child.\n ret.character = r.character;\n return r.node;\n }\n return child;\n }\n ),\n });\n if (ret.character) {\n return ret;\n }\n }\n }\n return { character: undefined, node };\n };\n}\n"]}
1
+ {"version":3,"file":"TildeFinder.js","sourceRoot":"","sources":["../../../src/core-react/contextmenu/TildeFinder.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;GAEG;AACH,MAAM,OAAO,WAAW;;AACtB;;;;GAIG;AACW,0BAAc,GAAG,CAC7B,IAAqB,EACqC,EAAE;IAC5D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,SAAS;QACT,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,2BAAG,GAAG,EAAC,QAAQ,IAAE,EAAE,CAAK,CAAC;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YAC1C,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,QAAQ;YACR,IAAI,GAAG,GAA6D;gBAClE,SAAS,EAAE,SAAS;gBACpB,IAAI;aACL,CAAC;YACF,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxB,MAAM,CAAC,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;oBAChB,4EAA4E;oBAC5E,GAAG,GAAG,CAAC,CAAC;oBACR,OAAO,CAAC,CAAC,IAAI,CAAC;gBAChB,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,cAAc,CAA0B,IAAI,CAAC,EAAE,CAAC;YAC/D,aAAa;YACb,MAAM,GAAG,GAA6D;gBACpE,SAAS,EAAE,SAAS;gBACpB,IAAI;aACL,CAAC;YACF,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE;gBAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,EACnB,CAAC,KAAsB,EAAmB,EAAE;oBAC1C,MAAM,CAAC,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC5C,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;wBAChB,4EAA4E;wBAC5E,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;wBAC5B,OAAO,CAAC,CAAC,IAAI,CAAC;oBAChB,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CACF;aACF,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ContextMenu\n */\n\nimport * as React from \"react\";\n\n/** Finds a tilde character in ContextMenu item label for hot key support\n * @internal\n */\nexport class TildeFinder {\n /**\n * Find character following a tilde character within a React.ReactNode.\n * @param node react node to search within for a tilde.\n * @returns character that was found, and the same node with tilde removed, and following character with an underline.\n */\n public static findAfterTilde = (\n node: React.ReactNode\n ): { character: string | undefined; node: React.ReactNode } => {\n if (typeof node === \"string\") {\n // String\n const tildeIndex = node.indexOf(\"~\");\n if (tildeIndex !== -1 && tildeIndex <= node.length - 2) {\n const ch = node.charAt(tildeIndex + 1);\n const s1 = node.substring(0, tildeIndex);\n const n = <u key=\"hotkey\">{ch}</u>;\n const s2 = node.substring(tildeIndex + 2);\n return { character: ch.toUpperCase(), node: [s1, n, s2] };\n }\n } else if (node && typeof node === \"object\") {\n if (Array.isArray(node)) {\n // Array\n let ret: { character: string | undefined; node: React.ReactNode } = {\n character: undefined,\n node,\n };\n node = node.map((child) => {\n const r = TildeFinder.findAfterTilde(child);\n if (r.character) {\n // if character is found, modify node instead of returning unmodified child.\n ret = r;\n return r.node;\n }\n return child;\n });\n if (ret.character) {\n return { character: ret.character, node };\n }\n } else if (React.isValidElement<React.PropsWithChildren>(node)) {\n // React Node\n const ret: { character: string | undefined; node: React.ReactNode } = {\n character: undefined,\n node,\n };\n ret.node = React.cloneElement(node, {\n children: React.Children.map(\n node.props.children,\n (child: React.ReactNode): React.ReactNode => {\n const r = TildeFinder.findAfterTilde(child);\n if (r.character) {\n // if character is found, modify node instead of returning unmodified child.\n ret.character = r.character;\n return r.node;\n }\n return child;\n }\n ),\n });\n if (ret.character) {\n return ret;\n }\n }\n }\n return { character: undefined, node };\n };\n}\n"]}
@@ -5,7 +5,7 @@ import * as React from "react";
5
5
  /** Focus into first focusable element of a container.
6
6
  * @internal
7
7
  */
8
- export declare function focusIntoContainer(focusContainer: HTMLDivElement, initialFocusElement?: React.RefObject<HTMLElement> | string): boolean;
8
+ export declare function focusIntoContainer(focusContainer: HTMLDivElement, initialFocusElement?: React.RefObject<HTMLElement | null> | string): boolean;
9
9
  /** Properties supported by [[FocusTrap]] component.
10
10
  * @internal
11
11
  */
@@ -20,7 +20,7 @@ export interface FocusTrapProps extends React.AllHTMLAttributes<any> {
20
20
  * string can be supplied to locate an element in the FocusTrap container. If no specification is defined
21
21
  * the first focusable element is used.
22
22
  */
23
- initialFocusElement?: React.RefObject<HTMLElement> | string;
23
+ initialFocusElement?: React.RefObject<HTMLElement | null> | string;
24
24
  }
25
25
  /** Trap Focus in container while trap is active.
26
26
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"FocusTrap.d.ts","sourceRoot":"","sources":["../../../src/core-react/focustrap/FocusTrap.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA0H/B;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,cAAc,EAC9B,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,GAC1D,OAAO,CAcT;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC;IAClE,uBAAuB;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,uBAAuB,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;CAC7D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,4BA0G9C"}
1
+ {"version":3,"file":"FocusTrap.d.ts","sourceRoot":"","sources":["../../../src/core-react/focustrap/FocusTrap.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA0H/B;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,cAAc,EAC9B,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,MAAM,GACjE,OAAO,CAcT;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC;IAClE,uBAAuB;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,uBAAuB,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;CACpE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,4BA0G9C"}
@@ -122,7 +122,7 @@ export function FocusTrap(props) {
122
122
  const initialFocusElement = React.useRef(null);
123
123
  const focusContainer = React.useRef(null);
124
124
  const isInitialMount = React.useRef(true);
125
- const timeoutRef = React.useRef();
125
+ const timeoutRef = React.useRef(undefined);
126
126
  // Run on initial mount and when dependencies change. which could happen often.
127
127
  React.useEffect(() => {
128
128
  if (isInitialMount.current) {
@@ -1 +1 @@
1
- {"version":3,"file":"FocusTrap.js","sourceRoot":"","sources":["../../../src/core-react/focustrap/FocusTrap.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Popup\n */\n\nimport * as React from \"react\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport { UiCore } from \"../UiCore.js\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\nfunction isFocusable(element: HTMLElement): boolean {\n if (!element || element.tabIndex < 0) return false;\n\n if (\n element.classList &&\n element.classList.contains(\"core-focus-trap-ignore-initial\")\n )\n return false;\n\n if (\n element.getAttribute &&\n typeof element.getAttribute === \"function\" &&\n element.getAttribute(\"disabled\") !== null\n )\n return false;\n\n if (\n element.tabIndex > 0 ||\n (element.tabIndex === 0 && element.getAttribute(\"tabIndex\") !== null)\n )\n return true;\n\n switch (element.nodeName) {\n case \"A\":\n const anchorElement = element as HTMLAnchorElement;\n return !!anchorElement.href && anchorElement.rel !== \"ignore\";\n case \"INPUT\":\n const inputElement = element as HTMLInputElement;\n return inputElement.type !== \"hidden\" && inputElement.type !== \"file\";\n case \"BUTTON\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true;\n default:\n return false;\n }\n}\n\nfunction processFindFocusableDescendant(\n element: HTMLElement | null\n): HTMLElement | null {\n if (!element) return null;\n\n for (const child of element.childNodes) {\n if (isFocusable(child as HTMLElement)) return child as HTMLElement;\n\n const focusable = processFindFocusableDescendant(child as HTMLElement);\n if (focusable) return focusable;\n }\n return null;\n}\n\nfunction findFirstFocusableDescendant(\n focusContainer: HTMLDivElement | null\n): HTMLElement | null {\n return processFindFocusableDescendant(focusContainer);\n}\n\nfunction processFindLastFocusableDescendant(\n element: HTMLElement\n): HTMLElement | null {\n for (let i = element.childNodes.length - 1; i >= 0; i--) {\n const child = element.childNodes[i] as HTMLElement;\n\n const focusable = processFindLastFocusableDescendant(child);\n if (focusable) return focusable;\n\n if (isFocusable(child)) return child;\n }\n return null;\n}\n\nfunction findLastFocusableDescendant(\n focusContainer: HTMLDivElement\n): HTMLElement | null {\n return processFindLastFocusableDescendant(focusContainer);\n}\n\nfunction getInitialFocusElement(\n focusContainer: HTMLDivElement | null,\n initialFocusSpec: React.RefObject<HTMLElement> | string | undefined\n): HTMLElement | null {\n if (!focusContainer) return null;\n\n if (initialFocusSpec) {\n if (typeof initialFocusSpec === \"string\") {\n const node = focusContainer.querySelector(initialFocusSpec);\n if (node) {\n return node as HTMLElement;\n } else {\n Logger.logError(\n `${UiCore.packageName}.FocusTrap`,\n `Unable to locate element via selector ${initialFocusSpec}`\n );\n }\n } else {\n return initialFocusSpec.current;\n }\n }\n return findFirstFocusableDescendant(focusContainer);\n}\n\nfunction attemptFocus(element: HTMLElement, preventScroll: boolean): boolean {\n if (!isFocusable(element)) return false;\n\n try {\n if (document.activeElement !== element)\n element.focus({\n preventScroll: preventScroll ? true : false,\n });\n } catch {\n return false;\n }\n return document.activeElement === element;\n} // end attemptFocus\n\n/** Focus into first focusable element of a container.\n * @internal\n */\nexport function focusIntoContainer(\n focusContainer: HTMLDivElement,\n initialFocusElement?: React.RefObject<HTMLElement> | string\n): boolean {\n let result = false;\n const focusElement = getInitialFocusElement(\n focusContainer,\n initialFocusElement\n );\n if (focusElement) {\n // delay setting focus immediately because in some browsers other focus events happen when popup is initially opened.\n setTimeout(() => {\n attemptFocus(focusElement, true);\n }, 60);\n result = true;\n }\n return result;\n}\n\n/** Properties supported by [[FocusTrap]] component.\n * @internal\n */\nexport interface FocusTrapProps extends React.AllHTMLAttributes<any> {\n /** child components */\n children: React.ReactNode;\n /** if active is not true then no trapping of focus is attempted. */\n active?: boolean;\n /** restore focus to element that had focus before trap was activated */\n returnFocusOnDeactivate: boolean;\n /** Optional reference to element to receive focus when trap is activated. Optionally a CSS Selector\n * string can be supplied to locate an element in the FocusTrap container. If no specification is defined\n * the first focusable element is used.\n */\n initialFocusElement?: React.RefObject<HTMLElement> | string;\n}\n\n/** Trap Focus in container while trap is active.\n * @internal\n */\nexport function FocusTrap(props: FocusTrapProps) {\n const restoreFocusElement = React.useRef<Element | null>(null);\n const initialFocusElement = React.useRef<Element | null>(null);\n const focusContainer = React.useRef<HTMLDivElement | null>(null);\n const isInitialMount = React.useRef(true);\n const timeoutRef = React.useRef<number | undefined>();\n\n // Run on initial mount and when dependencies change. which could happen often.\n React.useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n if (props.active) {\n if (props.returnFocusOnDeactivate) {\n restoreFocusElement.current = document.activeElement;\n }\n\n initialFocusElement.current = getInitialFocusElement(\n focusContainer.current,\n props.initialFocusElement\n );\n if (initialFocusElement.current) {\n // delay setting focus immediately because in some browsers other focus events happen when popup is initially opened.\n timeoutRef.current = window.setTimeout(() => {\n attemptFocus(initialFocusElement.current as HTMLElement, true);\n }, 60);\n }\n }\n }\n }, [\n props.children,\n props.initialFocusElement,\n props.active,\n props.returnFocusOnDeactivate,\n ]);\n\n // Return function to run only when FocusTrap is unmounted to restore focus\n React.useEffect(() => {\n return () => {\n window.clearTimeout(timeoutRef.current);\n if (restoreFocusElement.current)\n (restoreFocusElement.current as HTMLElement).focus({\n preventScroll: true,\n });\n };\n }, []);\n\n // this is hit if Shift tab is used.\n const cycleFocusToEnd = React.useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (!props.active) return;\n\n if (focusContainer.current && event.target === focusContainer.current) {\n event.stopPropagation();\n event.preventDefault();\n const focusable = findLastFocusableDescendant(focusContainer.current);\n\n if (focusable) {\n focusable.focus();\n } else {\n if (\n initialFocusElement.current &&\n initialFocusElement.current !== document.activeElement\n )\n attemptFocus(initialFocusElement.current as HTMLElement, true);\n }\n }\n },\n [props.active]\n );\n\n // this is hit if tab is used on last focusable item in child container.\n const cycleFocusToStart = React.useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (!props.active) return;\n\n event.stopPropagation();\n if (\n initialFocusElement.current &&\n initialFocusElement.current !== document.activeElement\n )\n (initialFocusElement.current as HTMLElement).focus();\n },\n [props.active]\n );\n\n if (!props.children) return null;\n return (\n <>\n <div\n data-testid=\"focus-trap-div\"\n onFocus={cycleFocusToEnd}\n ref={focusContainer}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={0}\n style={{ outline: \"none\", WebkitTapHighlightColor: \"rgba(0,0,0,0)\" }}\n >\n {props.children}\n </div>\n <div\n data-testid=\"focus-trap-limit-div\"\n onFocus={cycleFocusToStart}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={0}\n />\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"FocusTrap.js","sourceRoot":"","sources":["../../../src/core-react/focustrap/FocusTrap.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Popup\n */\n\nimport * as React from \"react\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport { UiCore } from \"../UiCore.js\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\nfunction isFocusable(element: HTMLElement): boolean {\n if (!element || element.tabIndex < 0) return false;\n\n if (\n element.classList &&\n element.classList.contains(\"core-focus-trap-ignore-initial\")\n )\n return false;\n\n if (\n element.getAttribute &&\n typeof element.getAttribute === \"function\" &&\n element.getAttribute(\"disabled\") !== null\n )\n return false;\n\n if (\n element.tabIndex > 0 ||\n (element.tabIndex === 0 && element.getAttribute(\"tabIndex\") !== null)\n )\n return true;\n\n switch (element.nodeName) {\n case \"A\":\n const anchorElement = element as HTMLAnchorElement;\n return !!anchorElement.href && anchorElement.rel !== \"ignore\";\n case \"INPUT\":\n const inputElement = element as HTMLInputElement;\n return inputElement.type !== \"hidden\" && inputElement.type !== \"file\";\n case \"BUTTON\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true;\n default:\n return false;\n }\n}\n\nfunction processFindFocusableDescendant(\n element: HTMLElement | null\n): HTMLElement | null {\n if (!element) return null;\n\n for (const child of element.childNodes) {\n if (isFocusable(child as HTMLElement)) return child as HTMLElement;\n\n const focusable = processFindFocusableDescendant(child as HTMLElement);\n if (focusable) return focusable;\n }\n return null;\n}\n\nfunction findFirstFocusableDescendant(\n focusContainer: HTMLDivElement | null\n): HTMLElement | null {\n return processFindFocusableDescendant(focusContainer);\n}\n\nfunction processFindLastFocusableDescendant(\n element: HTMLElement\n): HTMLElement | null {\n for (let i = element.childNodes.length - 1; i >= 0; i--) {\n const child = element.childNodes[i] as HTMLElement;\n\n const focusable = processFindLastFocusableDescendant(child);\n if (focusable) return focusable;\n\n if (isFocusable(child)) return child;\n }\n return null;\n}\n\nfunction findLastFocusableDescendant(\n focusContainer: HTMLDivElement\n): HTMLElement | null {\n return processFindLastFocusableDescendant(focusContainer);\n}\n\nfunction getInitialFocusElement(\n focusContainer: HTMLDivElement | null,\n initialFocusSpec: React.RefObject<HTMLElement | null> | string | undefined\n): HTMLElement | null {\n if (!focusContainer) return null;\n\n if (initialFocusSpec) {\n if (typeof initialFocusSpec === \"string\") {\n const node = focusContainer.querySelector(initialFocusSpec);\n if (node) {\n return node as HTMLElement;\n } else {\n Logger.logError(\n `${UiCore.packageName}.FocusTrap`,\n `Unable to locate element via selector ${initialFocusSpec}`\n );\n }\n } else {\n return initialFocusSpec.current;\n }\n }\n return findFirstFocusableDescendant(focusContainer);\n}\n\nfunction attemptFocus(element: HTMLElement, preventScroll: boolean): boolean {\n if (!isFocusable(element)) return false;\n\n try {\n if (document.activeElement !== element)\n element.focus({\n preventScroll: preventScroll ? true : false,\n });\n } catch {\n return false;\n }\n return document.activeElement === element;\n} // end attemptFocus\n\n/** Focus into first focusable element of a container.\n * @internal\n */\nexport function focusIntoContainer(\n focusContainer: HTMLDivElement,\n initialFocusElement?: React.RefObject<HTMLElement | null> | string\n): boolean {\n let result = false;\n const focusElement = getInitialFocusElement(\n focusContainer,\n initialFocusElement\n );\n if (focusElement) {\n // delay setting focus immediately because in some browsers other focus events happen when popup is initially opened.\n setTimeout(() => {\n attemptFocus(focusElement, true);\n }, 60);\n result = true;\n }\n return result;\n}\n\n/** Properties supported by [[FocusTrap]] component.\n * @internal\n */\nexport interface FocusTrapProps extends React.AllHTMLAttributes<any> {\n /** child components */\n children: React.ReactNode;\n /** if active is not true then no trapping of focus is attempted. */\n active?: boolean;\n /** restore focus to element that had focus before trap was activated */\n returnFocusOnDeactivate: boolean;\n /** Optional reference to element to receive focus when trap is activated. Optionally a CSS Selector\n * string can be supplied to locate an element in the FocusTrap container. If no specification is defined\n * the first focusable element is used.\n */\n initialFocusElement?: React.RefObject<HTMLElement | null> | string;\n}\n\n/** Trap Focus in container while trap is active.\n * @internal\n */\nexport function FocusTrap(props: FocusTrapProps) {\n const restoreFocusElement = React.useRef<Element | null>(null);\n const initialFocusElement = React.useRef<Element | null>(null);\n const focusContainer = React.useRef<HTMLDivElement | null>(null);\n const isInitialMount = React.useRef(true);\n const timeoutRef = React.useRef<number | undefined>(undefined);\n\n // Run on initial mount and when dependencies change. which could happen often.\n React.useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n if (props.active) {\n if (props.returnFocusOnDeactivate) {\n restoreFocusElement.current = document.activeElement;\n }\n\n initialFocusElement.current = getInitialFocusElement(\n focusContainer.current,\n props.initialFocusElement\n );\n if (initialFocusElement.current) {\n // delay setting focus immediately because in some browsers other focus events happen when popup is initially opened.\n timeoutRef.current = window.setTimeout(() => {\n attemptFocus(initialFocusElement.current as HTMLElement, true);\n }, 60);\n }\n }\n }\n }, [\n props.children,\n props.initialFocusElement,\n props.active,\n props.returnFocusOnDeactivate,\n ]);\n\n // Return function to run only when FocusTrap is unmounted to restore focus\n React.useEffect(() => {\n return () => {\n window.clearTimeout(timeoutRef.current);\n if (restoreFocusElement.current)\n (restoreFocusElement.current as HTMLElement).focus({\n preventScroll: true,\n });\n };\n }, []);\n\n // this is hit if Shift tab is used.\n const cycleFocusToEnd = React.useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (!props.active) return;\n\n if (focusContainer.current && event.target === focusContainer.current) {\n event.stopPropagation();\n event.preventDefault();\n const focusable = findLastFocusableDescendant(focusContainer.current);\n\n if (focusable) {\n focusable.focus();\n } else {\n if (\n initialFocusElement.current &&\n initialFocusElement.current !== document.activeElement\n )\n attemptFocus(initialFocusElement.current as HTMLElement, true);\n }\n }\n },\n [props.active]\n );\n\n // this is hit if tab is used on last focusable item in child container.\n const cycleFocusToStart = React.useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (!props.active) return;\n\n event.stopPropagation();\n if (\n initialFocusElement.current &&\n initialFocusElement.current !== document.activeElement\n )\n (initialFocusElement.current as HTMLElement).focus();\n },\n [props.active]\n );\n\n if (!props.children) return null;\n return (\n <>\n <div\n data-testid=\"focus-trap-div\"\n onFocus={cycleFocusToEnd}\n ref={focusContainer}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={0}\n style={{ outline: \"none\", WebkitTapHighlightColor: \"rgba(0,0,0,0)\" }}\n >\n {props.children}\n </div>\n <div\n data-testid=\"focus-trap-limit-div\"\n onFocus={cycleFocusToStart}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={0}\n />\n </>\n );\n}\n"]}
@@ -28,9 +28,6 @@ export declare const withIsPressed: <ComponentProps extends object>(Component: R
28
28
  forceUpdate(callback?: (() => void) | undefined): void;
29
29
  readonly props: Readonly<ComponentProps & WithIsPressedProps>;
30
30
  state: Readonly<{}>;
31
- refs: {
32
- [key: string]: React.ReactInstance;
33
- };
34
31
  componentDidMount?(): void;
35
32
  shouldComponentUpdate?(nextProps: Readonly<ComponentProps & WithIsPressedProps>, nextState: Readonly<{}>, nextContext: any): boolean;
36
33
  componentWillUnmount?(): void;
@@ -55,9 +52,6 @@ export declare const withIsPressed: <ComponentProps extends object>(Component: R
55
52
  forceUpdate(callback?: (() => void) | undefined): void;
56
53
  readonly props: Readonly<ComponentProps & WithIsPressedProps>;
57
54
  state: Readonly<{}>;
58
- refs: {
59
- [key: string]: React.ReactInstance;
60
- };
61
55
  componentDidMount?(): void;
62
56
  shouldComponentUpdate?(nextProps: Readonly<ComponentProps & WithIsPressedProps>, nextState: Readonly<{}>, nextContext: any): boolean;
63
57
  componentWillUnmount?(): void;
@@ -72,5 +66,6 @@ export declare const withIsPressed: <ComponentProps extends object>(Component: R
72
66
  UNSAFE_componentWillUpdate?(nextProps: Readonly<ComponentProps & WithIsPressedProps>, nextState: Readonly<{}>, nextContext: any): void;
73
67
  };
74
68
  contextType?: React.Context<any> | undefined;
69
+ propTypes?: any;
75
70
  };
76
71
  //# sourceMappingURL=withIsPressed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"withIsPressed.d.ts","sourceRoot":"","sources":["../../../src/core-react/hocs/withIsPressed.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAClD;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,cAAc,SAAS,MAAM,aAC9C,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;;;;;qCAiBP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAAP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;CAuB/C,CAAC"}
1
+ {"version":3,"file":"withIsPressed.d.ts","sourceRoot":"","sources":["../../../src/core-react/hocs/withIsPressed.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAClD;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,cAAc,SAAS,MAAM,aAC9C,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;;;;;qCAiBP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;qCAAP,OAAO;;;;;;;;;;;;;;;;;;;;;;CAuB/C,CAAC"}
@@ -42,9 +42,6 @@ export declare const withOnOutsideClick: <ComponentProps extends object>(Compone
42
42
  forceUpdate(callback?: (() => void) | undefined): void;
43
43
  readonly props: Readonly<ComponentProps & WithOnOutsideClickProps>;
44
44
  state: Readonly<{}>;
45
- refs: {
46
- [key: string]: React.ReactInstance;
47
- };
48
45
  shouldComponentUpdate?(nextProps: Readonly<ComponentProps & WithOnOutsideClickProps>, nextState: Readonly<{}>, nextContext: any): boolean;
49
46
  componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
50
47
  getSnapshotBeforeUpdate?(prevProps: Readonly<ComponentProps & WithOnOutsideClickProps>, prevState: Readonly<{}>): any;
@@ -81,9 +78,6 @@ export declare const withOnOutsideClick: <ComponentProps extends object>(Compone
81
78
  forceUpdate(callback?: (() => void) | undefined): void;
82
79
  readonly props: Readonly<ComponentProps & WithOnOutsideClickProps>;
83
80
  state: Readonly<{}>;
84
- refs: {
85
- [key: string]: React.ReactInstance;
86
- };
87
81
  shouldComponentUpdate?(nextProps: Readonly<ComponentProps & WithOnOutsideClickProps>, nextState: Readonly<{}>, nextContext: any): boolean;
88
82
  componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
89
83
  getSnapshotBeforeUpdate?(prevProps: Readonly<ComponentProps & WithOnOutsideClickProps>, prevState: Readonly<{}>): any;
@@ -96,5 +90,6 @@ export declare const withOnOutsideClick: <ComponentProps extends object>(Compone
96
90
  UNSAFE_componentWillUpdate?(nextProps: Readonly<ComponentProps & WithOnOutsideClickProps>, nextState: Readonly<{}>, nextContext: any): void;
97
91
  };
98
92
  contextType?: React.Context<any> | undefined;
93
+ propTypes?: any;
99
94
  };
100
95
  //# sourceMappingURL=withOnOutsideClick.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"withOnOutsideClick.d.ts","sourceRoot":"","sources":["../../../src/core-react/hocs/withOnOutsideClick.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,sCAAsC;IACtC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC;IAC5C,8HAA8H;IAC9H,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,cAAc,SAAS,MAAM,aACnD,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,0BACtB,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,eACtC,OAAO,qBACD,OAAO;;QAKvB,gBAAgB;mCACkB,cAAc,GAAG,IAAI;QACvD,gBAAgB;;QAGhB,gBAAgB;+BACc,WAAW,GAAG,OAAO;QAanD,gBAAgB;0BACS,UAAU;QAanC,gBAAgB;iCACiB,UAAU;QAW3C,gBAAgB;uCACuB,YAAY;QAUnD,gBAAgB;qCACqB,YAAY;sEAerB,cAAc,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;QAxEjD,gBAAgB;mCACkB,cAAc,GAAG,IAAI;QACvD,gBAAgB;;QAGhB,gBAAgB;+BACc,WAAW,GAAG,OAAO;QAanD,gBAAgB;0BACS,UAAU;QAanC,gBAAgB;iCACiB,UAAU;QAW3C,gBAAgB;uCACuB,YAAY;QAUnD,gBAAgB;qCACqB,YAAY;sEAerB,cAAc,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;CA6DpD,CAAC"}
1
+ {"version":3,"file":"withOnOutsideClick.d.ts","sourceRoot":"","sources":["../../../src/core-react/hocs/withOnOutsideClick.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,sCAAsC;IACtC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC;IAC5C,8HAA8H;IAC9H,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,cAAc,SAAS,MAAM,aACnD,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,0BACtB,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,eACtC,OAAO,qBACD,OAAO;;QAKvB,gBAAgB;mCACkB,cAAc,GAAG,IAAI;QACvD,gBAAgB;;QAGhB,gBAAgB;+BACc,WAAW,GAAG,OAAO;QAanD,gBAAgB;0BACS,UAAU;QAanC,gBAAgB;iCACiB,UAAU;QAW3C,gBAAgB;uCACuB,YAAY;QAUnD,gBAAgB;qCACqB,YAAY;sEAerB,cAAc,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;QAxEjD,gBAAgB;mCACkB,cAAc,GAAG,IAAI;QACvD,gBAAgB;;QAGhB,gBAAgB;+BACc,WAAW,GAAG,OAAO;QAanD,gBAAgB;0BACS,UAAU;QAanC,gBAAgB;iCACiB,UAAU;QAW3C,gBAAgB;uCACuB,YAAY;QAUnD,gBAAgB;qCACqB,YAAY;sEAerB,cAAc,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;CA6DpD,CAAC"}
@@ -31,9 +31,6 @@ export declare const withTimeout: <ComponentProps extends object>(Component: Rea
31
31
  forceUpdate(callback?: (() => void) | undefined): void;
32
32
  readonly props: Readonly<ComponentProps & WithTimeoutProps>;
33
33
  state: Readonly<{}>;
34
- refs: {
35
- [key: string]: React.ReactInstance;
36
- };
37
34
  shouldComponentUpdate?(nextProps: Readonly<ComponentProps & WithTimeoutProps>, nextState: Readonly<{}>, nextContext: any): boolean;
38
35
  componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
39
36
  getSnapshotBeforeUpdate?(prevProps: Readonly<ComponentProps & WithTimeoutProps>, prevState: Readonly<{}>): any;
@@ -57,9 +54,6 @@ export declare const withTimeout: <ComponentProps extends object>(Component: Rea
57
54
  forceUpdate(callback?: (() => void) | undefined): void;
58
55
  readonly props: Readonly<ComponentProps & WithTimeoutProps>;
59
56
  state: Readonly<{}>;
60
- refs: {
61
- [key: string]: React.ReactInstance;
62
- };
63
57
  shouldComponentUpdate?(nextProps: Readonly<ComponentProps & WithTimeoutProps>, nextState: Readonly<{}>, nextContext: any): boolean;
64
58
  componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
65
59
  getSnapshotBeforeUpdate?(prevProps: Readonly<ComponentProps & WithTimeoutProps>, prevState: Readonly<{}>): any;
@@ -71,5 +65,6 @@ export declare const withTimeout: <ComponentProps extends object>(Component: Rea
71
65
  UNSAFE_componentWillUpdate?(nextProps: Readonly<ComponentProps & WithTimeoutProps>, nextState: Readonly<{}>, nextContext: any): void;
72
66
  };
73
67
  contextType?: React.Context<any> | undefined;
68
+ propTypes?: any;
74
69
  };
75
70
  //# sourceMappingURL=withTimeout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"withTimeout.d.ts","sourceRoot":"","sources":["../../../src/core-react/hocs/withTimeout.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,cAAc,SAAS,MAAM,aAC5C,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;;eAM9B,KAAK;6BAEkB,IAAI;QAOzC,gBAAgB;uCAEF,QAAQ,CAAC,cAAc,GAAG,gBAAgB,CAAC,GACtD,IAAI;gCAIiC,IAAI;;4BASjB,MAAM;;;;;;;;;;;;;;;;;;;;eAzBnB,KAAK;6BAEkB,IAAI;QAOzC,gBAAgB;uCAEF,QAAQ,CAAC,cAAc,GAAG,gBAAgB,CAAC,GACtD,IAAI;gCAIiC,IAAI;;4BASjB,MAAM;;;;;;;;;;;;;;;;;;;;CAOpC,CAAC"}
1
+ {"version":3,"file":"withTimeout.d.ts","sourceRoot":"","sources":["../../../src/core-react/hocs/withTimeout.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,cAAc,SAAS,MAAM,aAC5C,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;;eAM9B,KAAK;6BAEkB,IAAI;QAOzC,gBAAgB;uCAEF,QAAQ,CAAC,cAAc,GAAG,gBAAgB,CAAC,GACtD,IAAI;gCAIiC,IAAI;;4BASjB,MAAM;;;;;;;;;;;;;;;;;eAzBnB,KAAK;6BAEkB,IAAI;QAOzC,gBAAgB;uCAEF,QAAQ,CAAC,cAAc,GAAG,gBAAgB,CAAC,GACtD,IAAI;gCAIiC,IAAI;;4BASjB,MAAM;;;;;;;;;;;;;;;;;;CAOpC,CAAC"}
@@ -39,7 +39,7 @@ export interface ListboxContextProps {
39
39
  listboxValue?: ListboxValue;
40
40
  focusValue?: ListboxValue;
41
41
  onListboxValueChange: (newValue: ListboxValue, isControlOrCommandPressed?: boolean) => void;
42
- listboxRef?: React.RefObject<HTMLUListElement>;
42
+ listboxRef?: React.RefObject<HTMLUListElement | null>;
43
43
  }
44
44
  /** Context set up by listbox for use by `ListboxItems` .
45
45
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"Listbox.d.ts","sourceRoot":"","sources":["../../../src/core-react/listbox/Listbox.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,gBAAgB,CAAC;AAGxB,sEAAsE;AAItE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;GAGG;AACH,MAAM,WAAW,YACf,SAAQ,KAAK,CAAC,iBAAiB,CAC7B,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,EACtC,gBAAgB,CACjB;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,oBAAoB,CAAC,EAAE,CACrB,QAAQ,EAAE,YAAY,EACtB,yBAAyB,CAAC,EAAE,OAAO,KAChC,IAAI,CAAC;CACX;AAED;;;GAGG;AACH,MAAM,WAAW,gBACf,SAAQ,KAAK,CAAC,iBAAiB,CAC7B,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,EACrC,aAAa,CACd;IACD,+BAA+B;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,oBAAoB,EAAE,CACpB,QAAQ,EAAE,YAAY,EACtB,yBAAyB,CAAC,EAAE,OAAO,KAChC,IAAI,CAAC;IACV,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,oCAEzB,CAAC;AA4DH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,qBAoM1C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,qBAwDlD"}
1
+ {"version":3,"file":"Listbox.d.ts","sourceRoot":"","sources":["../../../src/core-react/listbox/Listbox.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,gBAAgB,CAAC;AAGxB,sEAAsE;AAItE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;GAGG;AACH,MAAM,WAAW,YACf,SAAQ,KAAK,CAAC,iBAAiB,CAC7B,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,EACtC,gBAAgB,CACjB;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,oBAAoB,CAAC,EAAE,CACrB,QAAQ,EAAE,YAAY,EACtB,yBAAyB,CAAC,EAAE,OAAO,KAChC,IAAI,CAAC;CACX;AAED;;;GAGG;AACH,MAAM,WAAW,gBACf,SAAQ,KAAK,CAAC,iBAAiB,CAC7B,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,EACrC,aAAa,CACd;IACD,+BAA+B;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,oBAAoB,EAAE,CACpB,QAAQ,EAAE,YAAY,EACtB,yBAAyB,CAAC,EAAE,OAAO,KAChC,IAAI,CAAC;IACV,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;CACvD;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,oCAEzB,CAAC;AA4DH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,qBAoM1C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,qBAwDlD"}
@@ -22,7 +22,7 @@ function makeId(...args) {
22
22
  }
23
23
  function getOptionValueArray(childNodes) {
24
24
  return React.Children.toArray(childNodes)
25
- .filter((node) => React.isValidElement(node) && node.props.value)
25
+ .filter((node) => React.isValidElement(node) && !!node.props.value)
26
26
  .map((optionNode) => optionNode.props);
27
27
  }
28
28
  function processKeyboardNavigation(optionValues, itemIndex, key) {