@itwin/tree-widget-react 0.6.2 → 0.7.1

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 (118) hide show
  1. package/lib/cjs/TreeWidget.js +1 -1
  2. package/lib/cjs/TreeWidget.js.map +1 -1
  3. package/lib/cjs/components/IconButton.js +3 -3
  4. package/lib/cjs/components/IconButton.js.map +1 -1
  5. package/lib/cjs/components/TreeFilteringState.js +4 -4
  6. package/lib/cjs/components/TreeFilteringState.js.map +1 -1
  7. package/lib/cjs/components/TreeWidgetComponent.d.ts +1 -1
  8. package/lib/cjs/components/TreeWidgetComponent.js +5 -5
  9. package/lib/cjs/components/TreeWidgetComponent.js.map +1 -1
  10. package/lib/cjs/components/TreeWidgetComponent.scss +1 -1
  11. package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +4 -5
  12. package/lib/cjs/components/TreeWidgetUiItemsProvider.js +19 -14
  13. package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
  14. package/lib/cjs/components/search-bar/SearchBar.d.ts +0 -3
  15. package/lib/cjs/components/search-bar/SearchBar.js +17 -28
  16. package/lib/cjs/components/search-bar/SearchBar.js.map +1 -1
  17. package/lib/cjs/components/search-bar/SearchBar.scss +18 -34
  18. package/lib/cjs/components/search-bar/SearchBox.js +1 -1
  19. package/lib/cjs/components/search-bar/SearchBox.js.map +1 -1
  20. package/lib/cjs/components/trees/CategoriesVisibilityUtils.d.ts +4 -5
  21. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js +6 -9
  22. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  23. package/lib/cjs/components/trees/IModelContentTree.js +4 -4
  24. package/lib/cjs/components/trees/IModelContentTree.js.map +1 -1
  25. package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +4 -5
  26. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +17 -9
  27. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  28. package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +4 -4
  29. package/lib/cjs/components/trees/VisibilityTreeRenderer.js +2 -2
  30. package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +1 -1
  31. package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +9 -5
  32. package/lib/cjs/components/trees/category-tree/CategoriesTree.js +7 -8
  33. package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +1 -1
  34. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.d.ts +7 -2
  35. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +64 -31
  36. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  37. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.d.ts +9 -9
  38. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +8 -8
  39. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  40. package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +5 -7
  41. package/lib/cjs/components/trees/models-tree/ModelsTree.js +7 -7
  42. package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
  43. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.d.ts +19 -2
  44. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +108 -74
  45. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  46. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.d.ts +6 -8
  47. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  48. package/lib/cjs/components/trees/spatial-tree/SpatialTreeComponent.js +9 -7
  49. package/lib/cjs/components/trees/spatial-tree/SpatialTreeComponent.js.map +1 -1
  50. package/lib/cjs/components/utils/AutoSizer.js +4 -4
  51. package/lib/cjs/components/utils/AutoSizer.js.map +1 -1
  52. package/lib/cjs/tree-widget-react.d.ts +0 -1
  53. package/lib/cjs/tree-widget-react.js +0 -1
  54. package/lib/cjs/tree-widget-react.js.map +1 -1
  55. package/lib/cjs/types.d.ts +19 -5
  56. package/lib/cjs/types.js +4 -0
  57. package/lib/cjs/types.js.map +1 -1
  58. package/lib/esm/components/TreeWidgetComponent.d.ts +1 -1
  59. package/lib/esm/components/TreeWidgetComponent.js +1 -1
  60. package/lib/esm/components/TreeWidgetComponent.js.map +1 -1
  61. package/lib/esm/components/TreeWidgetComponent.scss +1 -1
  62. package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +4 -5
  63. package/lib/esm/components/TreeWidgetUiItemsProvider.js +13 -8
  64. package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
  65. package/lib/esm/components/search-bar/SearchBar.d.ts +0 -3
  66. package/lib/esm/components/search-bar/SearchBar.js +14 -25
  67. package/lib/esm/components/search-bar/SearchBar.js.map +1 -1
  68. package/lib/esm/components/search-bar/SearchBar.scss +18 -34
  69. package/lib/esm/components/trees/CategoriesVisibilityUtils.d.ts +4 -5
  70. package/lib/esm/components/trees/CategoriesVisibilityUtils.js +4 -7
  71. package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  72. package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +4 -5
  73. package/lib/esm/components/trees/VisibilityTreeEventHandler.js +13 -5
  74. package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  75. package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +4 -4
  76. package/lib/esm/components/trees/VisibilityTreeRenderer.js +1 -1
  77. package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +1 -1
  78. package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +9 -5
  79. package/lib/esm/components/trees/category-tree/CategoriesTree.js +2 -3
  80. package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +1 -1
  81. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.d.ts +7 -2
  82. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +63 -30
  83. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  84. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.d.ts +9 -9
  85. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +4 -4
  86. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  87. package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +5 -7
  88. package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
  89. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.d.ts +19 -2
  90. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +103 -69
  91. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  92. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.d.ts +6 -8
  93. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  94. package/lib/esm/components/trees/spatial-tree/SpatialTreeComponent.js +4 -2
  95. package/lib/esm/components/trees/spatial-tree/SpatialTreeComponent.js.map +1 -1
  96. package/lib/esm/tree-widget-react.d.ts +0 -1
  97. package/lib/esm/tree-widget-react.js +0 -1
  98. package/lib/esm/tree-widget-react.js.map +1 -1
  99. package/lib/esm/types.d.ts +19 -5
  100. package/lib/esm/types.js +4 -0
  101. package/lib/esm/types.js.map +1 -1
  102. package/package.json +32 -40
  103. package/lib/cjs/components/header/TreeHeader.d.ts +0 -15
  104. package/lib/cjs/components/header/TreeHeader.js +0 -43
  105. package/lib/cjs/components/header/TreeHeader.js.map +0 -1
  106. package/lib/cjs/components/header/TreeHeader.scss +0 -20
  107. package/lib/cjs/components/search-bar/Popup.d.ts +0 -50
  108. package/lib/cjs/components/search-bar/Popup.js +0 -246
  109. package/lib/cjs/components/search-bar/Popup.js.map +0 -1
  110. package/lib/cjs/components/search-bar/Popup.scss +0 -316
  111. package/lib/esm/components/header/TreeHeader.d.ts +0 -15
  112. package/lib/esm/components/header/TreeHeader.js +0 -20
  113. package/lib/esm/components/header/TreeHeader.js.map +0 -1
  114. package/lib/esm/components/header/TreeHeader.scss +0 -20
  115. package/lib/esm/components/search-bar/Popup.d.ts +0 -50
  116. package/lib/esm/components/search-bar/Popup.js +0 -220
  117. package/lib/esm/components/search-bar/Popup.js.map +0 -1
  118. package/lib/esm/components/search-bar/Popup.scss +0 -316
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeHeader.js","sourceRoot":"","sources":["../../../../src/components/header/TreeHeader.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,mBAAmB,CAAC;AAa3B,MAAM,UAAU,mBAAmB,CAAC,EAClC,aAAa,EACb,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,YAAY,GACa;;IACzB,OAAO,CACL,oBAAC,SAAS,IACR,KAAK,EAAC,EAAE,EACR,SAAS,EAAC,oCAAoC,EAC9C,iBAAiB,EAAE,GAAG,EACtB,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC3C,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,oBAAoB,CAAC,EACjD,mBAAmB,EAAE,aAAa,CAAC,WAAW,EAC9C,cAAc,EAAE,aAAa,CAAC,cAAc,EAC5C,aAAa,EAAE,aAAa,CAAC,cAAc,EAC3C,aAAa,EAAE,aAAa,CAAC,aAAa,EAC1C,iBAAiB,EAAE,aAAa,CAAC,uBAAuB,EACxD,WAAW,EAAE,MAAA,aAAa,CAAC,kBAAkB,mCAAI,CAAC;QAElD,6BAAK,SAAS,EAAC,yCAAyC;YACrD,OAAO,IAAI,CACV,oBAAC,UAAU,IACT,SAAS,EAAE,sCAAsC,EACjD,GAAG,EAAC,cAAc,EAClB,IAAI,EAAC,iBAAiB,EACtB,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EACtC,OAAO,EAAE,OAAO,GAChB,CACH;YACA,OAAO,IAAI,CACV,oBAAC,UAAU,IACT,SAAS,EAAE,sCAAsC,EACjD,GAAG,EAAC,cAAc,EAClB,IAAI,EAAC,wBAAwB,EAC7B,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EACtC,OAAO,EAAE,OAAO,GAChB,CACH;YACA,MAAM,IAAI,CACT,oBAAC,UAAU,IACT,GAAG,EAAC,gBAAgB,EACpB,SAAS,EAAE,sCAAsC,EACjD,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,EACrC,IAAI,EAAC,wBAAwB,EAC7B,OAAO,EAAE,MAAM,GACf,CACH;YACA,QAAQ,IAAI,YAAY,IAAI,CAC3B,oBAAC,UAAU,IACT,SAAS,EAAE,sCAAsC,EACjD,GAAG,EAAC,aAAa,EACjB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,EAC5C,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,GACtC,CACH;YACA,QAAQ,IAAI,YAAY,IAAI,CAC3B,oBAAC,UAAU,IACT,SAAS,EAAE,sCAAsC,EACjD,GAAG,EAAC,aAAa,EACjB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,EAC5C,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,GACtC,CACH,CACG,CACI,CACb,CAAC;AACJ,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*--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nimport { IconButton } from \"../IconButton\";\nimport { SearchBar } from \"../search-bar/SearchBar\";\nimport type { SearchOptions } from \"../TreeFilteringState\";\nimport { TreeWidget } from \"../../TreeWidget\";\nimport \"./TreeHeader.scss\";\n\nexport interface TreeHeaderComponentProps {\n showAll?: () => void;\n hideAll?: () => void;\n invert?: () => void;\n toggle2D?: () => void;\n toggle2DIcon?: string;\n toggle3D?: () => void;\n toggle3DIcon?: string;\n searchOptions: SearchOptions;\n}\n\nexport function TreeHeaderComponent({\n searchOptions,\n showAll,\n hideAll,\n invert,\n toggle2D,\n toggle2DIcon,\n toggle3D,\n toggle3DIcon,\n}: TreeHeaderComponentProps) {\n return (\n <SearchBar\n value=\"\"\n className=\"tree-widget-header-tree-search-bar\"\n valueChangedDelay={500}\n placeholder={TreeWidget.translate(\"search\")}\n title={TreeWidget.translate(\"searchForSomething\")}\n filteringInProgress={searchOptions.isFiltering}\n onFilterCancel={searchOptions.onFilterCancel}\n onFilterClear={searchOptions.onFilterCancel}\n onFilterStart={searchOptions.onFilterStart}\n onSelectedChanged={searchOptions.onResultSelectedChanged}\n resultCount={searchOptions.matchedResultCount ?? 0}\n >\n <div className=\"tree-widget-search-bar-button-container\">\n {showAll && (\n <IconButton\n className={\"tree-widget-header-tree-toolbar-icon\"}\n key=\"show-all-btn\"\n icon=\"icon-visibility\"\n title={TreeWidget.translate(\"showAll\")}\n onClick={showAll}\n />\n )}\n {hideAll && (\n <IconButton\n className={\"tree-widget-header-tree-toolbar-icon\"}\n key=\"hide-all-btn\"\n icon=\"icon-visibility-hide-2\"\n title={TreeWidget.translate(\"hideAll\")}\n onClick={hideAll}\n />\n )}\n {invert && (\n <IconButton\n key=\"invert-all-btn\"\n className={\"tree-widget-header-tree-toolbar-icon\"}\n title={TreeWidget.translate(\"invert\")}\n icon=\"icon-visibility-invert\"\n onClick={invert}\n />\n )}\n {toggle2D && toggle2DIcon && (\n <IconButton\n className={\"tree-widget-header-tree-toolbar-icon\"}\n key=\"view-2d-btn\"\n icon={toggle2DIcon}\n title={TreeWidget.translate(\"toggle2DViews\")}\n onClick={toggle2D}\n label={TreeWidget.translate(\"label2D\")}\n />\n )}\n {toggle3D && toggle3DIcon && (\n <IconButton\n className={\"tree-widget-header-tree-toolbar-icon\"}\n key=\"view-3d-btn\"\n icon={toggle3DIcon}\n title={TreeWidget.translate(\"toggle3DViews\")}\n onClick={toggle3D}\n label={TreeWidget.translate(\"label3D\")}\n />\n )}\n </div>\n </SearchBar>\n );\n}\n"]}
@@ -1,20 +0,0 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- @import "~@itwin/core-react/lib/cjs/core-react/index";
6
-
7
- .tree-widget-header-tree-search-bar {
8
- margin-bottom: $uicore-s;
9
- }
10
-
11
- .tree-widget-header-tree-toolbar-icon {
12
- color: $buic-icon-color;
13
- }
14
-
15
- .tree-widget-search-bar-button-container {
16
- display: flex;
17
- align-items: center;
18
- width: 100%;
19
- z-index: 1;
20
- }
@@ -1,50 +0,0 @@
1
- import * as React from "react";
2
- import type { CommonProps } from "@itwin/core-react";
3
- import { RelativePosition } from "@itwin/appui-abstract";
4
- import "./Popup.scss";
5
- /** Properties for the [[Popup]] component */
6
- export interface PopupProps extends CommonProps {
7
- /** show or hide the box shadow */
8
- showShadow: boolean;
9
- /** show or hide the arrow */
10
- showArrow: boolean;
11
- /** indicate if the popup is shown or not */
12
- isShown: boolean;
13
- /** Direction (relative to the target) to which the popup is expanded */
14
- position: RelativePosition;
15
- /** Fixed position in the viewport */
16
- fixedPosition?: {
17
- top: number;
18
- left: number;
19
- };
20
- /** target element */
21
- context: HTMLElement | null;
22
- /** Function called when the popup is opened */
23
- onOpen?: () => void;
24
- /** Function called when the popup is closed */
25
- onClose?: () => void;
26
- }
27
- interface PopupState {
28
- isShown: boolean;
29
- position: RelativePosition;
30
- }
31
- /** Popup React component */
32
- export declare class Popup extends React.Component<PopupProps, PopupState> {
33
- private _popupRef;
34
- private _targetElement?;
35
- constructor(props: PopupProps, context?: any);
36
- static defaultProps: Partial<PopupProps>;
37
- componentDidMount(): void;
38
- componentDidUpdate(previousProps: PopupProps): void;
39
- componentWillUnmount(): void;
40
- private _onBodyClick;
41
- private _onEsc;
42
- private _onShow;
43
- private _onClose;
44
- private _getContext;
45
- private getPositionClassName;
46
- private getPositionWithinViewport;
47
- render(): JSX.Element;
48
- }
49
- export {};
50
- //# sourceMappingURL=Popup.d.ts.map
@@ -1,220 +0,0 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- import * as React from "react";
6
- import classnames from "classnames";
7
- import { RelativePosition } from "@itwin/appui-abstract";
8
- import "./Popup.scss";
9
- /** Popup React component */
10
- export class Popup extends React.Component {
11
- constructor(props, context) {
12
- super(props, context);
13
- this._popupRef = React.createRef();
14
- this._onBodyClick = (event) => {
15
- const context = this._getContext();
16
- // Ignore clicks on the popover or button
17
- if (context === event.target) {
18
- return;
19
- }
20
- if (context && context.contains(event.target)) {
21
- return;
22
- }
23
- if (this._popupRef.current &&
24
- (this._popupRef.current === event.target ||
25
- this._popupRef.current.contains(event.target))) {
26
- return;
27
- }
28
- this._onClose();
29
- };
30
- this._onEsc = (event) => {
31
- // Esc key
32
- if (event.key === "Escape") {
33
- this._onClose();
34
- }
35
- };
36
- this._getContext = () => this.props.context || this._targetElement;
37
- this.state = { isShown: this.props.isShown, position: this.props.position };
38
- }
39
- componentDidMount() {
40
- const popupElement = this._popupRef.current;
41
- if (popupElement && popupElement.parentElement) {
42
- this._targetElement = popupElement.parentElement;
43
- }
44
- }
45
- componentDidUpdate(previousProps) {
46
- if (this.props.isShown === previousProps.isShown)
47
- return;
48
- if (this.props.isShown) {
49
- this._onShow();
50
- }
51
- else {
52
- this._onClose();
53
- }
54
- }
55
- componentWillUnmount() {
56
- document.body.removeEventListener("click", this._onBodyClick, false);
57
- document.body.removeEventListener("keydown", this._onEsc, false);
58
- }
59
- _onShow() {
60
- if (this.state.isShown) {
61
- return;
62
- }
63
- document.addEventListener("click", this._onBodyClick, true);
64
- document.addEventListener("keydown", this._onEsc, true);
65
- const newPosition = this.getPositionWithinViewport();
66
- this.setState({ position: newPosition, isShown: true }, () => {
67
- if (this.props.onOpen)
68
- this.props.onOpen();
69
- });
70
- }
71
- _onClose() {
72
- if (!this.state.isShown) {
73
- return;
74
- }
75
- document.removeEventListener("click", this._onBodyClick, true);
76
- document.removeEventListener("keydown", this._onEsc, true);
77
- // eslint-disable-next-line @itwin/react-set-state-usage
78
- this.setState({ isShown: false, position: this.props.position }, () => {
79
- if (this.props.onClose)
80
- this.props.onClose();
81
- });
82
- }
83
- getPositionClassName(position) {
84
- switch (position) {
85
- case RelativePosition.TopLeft:
86
- return classnames("tree-widget-search-popup-top-left");
87
- case RelativePosition.TopRight:
88
- return classnames("tree-widget-search-popup-top-right");
89
- case RelativePosition.BottomLeft:
90
- return classnames("tree-widget-search-popup-bottom-left");
91
- case RelativePosition.BottomRight:
92
- return classnames("tree-widget-search-popup-bottom-right");
93
- case RelativePosition.Top:
94
- return classnames("tree-widget-search-popup-top");
95
- case RelativePosition.Left:
96
- return classnames("tree-widget-search-popup-left");
97
- case RelativePosition.Right:
98
- return classnames("tree-widget-search-popup-right");
99
- default:
100
- return classnames("tree-widget-search-popup-bottom");
101
- }
102
- }
103
- getPositionWithinViewport() {
104
- const popupElement = this._popupRef.current;
105
- if (!popupElement || !this._targetElement)
106
- return this.props.position;
107
- // Note: Cannot use DOMRect yet since it's experimental and not available in all browsers (Nov. 2018)
108
- const viewportRect = {
109
- left: window.scrollX,
110
- top: window.scrollY,
111
- right: window.scrollX + window.innerWidth,
112
- bottom: window.scrollY + window.innerHeight,
113
- };
114
- const targetRect = this._targetElement.getBoundingClientRect();
115
- const popupRect = popupElement.getBoundingClientRect();
116
- const containerStyle = window.getComputedStyle(this._targetElement);
117
- const offset = this.props.showArrow ? 12 : 4;
118
- switch (this.props.position) {
119
- case RelativePosition.BottomRight: {
120
- const bottomMargin = containerStyle.marginBottom
121
- ? parseFloat(containerStyle.marginBottom)
122
- : 0;
123
- if (targetRect.bottom + popupRect.height + bottomMargin + offset >
124
- viewportRect.bottom) {
125
- return RelativePosition.TopRight;
126
- }
127
- break;
128
- }
129
- case RelativePosition.TopRight: {
130
- const topMargin = containerStyle.marginTop
131
- ? parseFloat(containerStyle.marginTop)
132
- : 0;
133
- if (targetRect.top - popupRect.height - topMargin - offset <
134
- viewportRect.top) {
135
- return RelativePosition.BottomRight;
136
- }
137
- break;
138
- }
139
- case RelativePosition.TopLeft: {
140
- const topMargin = containerStyle.marginTop
141
- ? parseFloat(containerStyle.marginTop)
142
- : 0;
143
- if (targetRect.top - popupRect.height - topMargin - offset <
144
- viewportRect.top) {
145
- return RelativePosition.BottomLeft;
146
- }
147
- break;
148
- }
149
- case RelativePosition.BottomLeft: {
150
- const bottomMargin = containerStyle.marginBottom
151
- ? parseFloat(containerStyle.marginBottom)
152
- : 0;
153
- if (targetRect.bottom + popupRect.height + bottomMargin + offset >
154
- viewportRect.bottom) {
155
- return RelativePosition.TopLeft;
156
- }
157
- break;
158
- }
159
- case RelativePosition.Bottom: {
160
- const bottomMargin = containerStyle.marginBottom
161
- ? parseFloat(containerStyle.marginBottom)
162
- : 0;
163
- if (targetRect.bottom + popupRect.height + bottomMargin + offset >
164
- viewportRect.bottom) {
165
- return RelativePosition.Top;
166
- }
167
- break;
168
- }
169
- case RelativePosition.Top: {
170
- const topMargin = containerStyle.marginTop
171
- ? parseFloat(containerStyle.marginTop)
172
- : 0;
173
- if (targetRect.top - popupRect.height - topMargin - offset <
174
- viewportRect.top) {
175
- return RelativePosition.Bottom;
176
- }
177
- break;
178
- }
179
- case RelativePosition.Left: {
180
- const leftMargin = containerStyle.marginLeft
181
- ? parseFloat(containerStyle.marginLeft)
182
- : 0;
183
- if (targetRect.left - popupRect.width - leftMargin - offset <
184
- viewportRect.left) {
185
- return RelativePosition.Right;
186
- }
187
- break;
188
- }
189
- case RelativePosition.Right: {
190
- const rightMargin = containerStyle.marginRight
191
- ? parseFloat(containerStyle.marginRight)
192
- : 0;
193
- if (targetRect.right + popupRect.width + rightMargin + offset >
194
- viewportRect.right) {
195
- return RelativePosition.Left;
196
- }
197
- break;
198
- }
199
- }
200
- return this.props.position;
201
- }
202
- render() {
203
- const className = classnames("tree-widget-search-popup", this.getPositionClassName(this.state.position), this.props.showShadow && "tree-widget-search-popup-shadow", this.state.isShown && "visible", this.props.showArrow && "arrow", this.props.className);
204
- let style;
205
- if (this.props.fixedPosition) {
206
- style = {
207
- top: this.props.fixedPosition.top,
208
- left: this.props.fixedPosition.left,
209
- position: "fixed",
210
- };
211
- }
212
- return (React.createElement("div", { style: style, className: className, ref: this._popupRef }, this.props.children));
213
- }
214
- }
215
- Popup.defaultProps = {
216
- position: RelativePosition.Bottom,
217
- showShadow: true,
218
- showArrow: false,
219
- };
220
- //# sourceMappingURL=Popup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Popup.js","sourceRoot":"","sources":["../../../../src/components/search-bar/Popup.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\nimport * as React from \"react\";\nimport classnames from \"classnames\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { RelativePosition } from \"@itwin/appui-abstract\";\nimport \"./Popup.scss\";\n\n/** Properties for the [[Popup]] component */\nexport interface PopupProps extends CommonProps {\n /** show or hide the box shadow */\n showShadow: boolean;\n /** show or hide the arrow */\n showArrow: boolean;\n /** indicate if the popup is shown or not */\n isShown: boolean;\n /** Direction (relative to the target) to which the popup is expanded */\n position: RelativePosition;\n /** Fixed position in the viewport */\n fixedPosition?: { top: number, left: number };\n /** target element */\n context: HTMLElement | null;\n /** Function called when the popup is opened */\n onOpen?: () => void;\n /** Function called when the popup is closed */\n onClose?: () => void;\n}\n\ninterface PopupState {\n isShown: boolean;\n position: RelativePosition;\n}\n\ninterface Rect {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\n/** Popup React component */\nexport class Popup extends React.Component<PopupProps, PopupState> {\n private _popupRef = React.createRef<HTMLDivElement>();\n private _targetElement?: HTMLElement; // target element owning the popup\n\n constructor(props: PopupProps, context?: any) {\n super(props, context);\n\n this.state = { isShown: this.props.isShown, position: this.props.position };\n }\n\n public static defaultProps: Partial<PopupProps> = {\n position: RelativePosition.Bottom,\n showShadow: true,\n showArrow: false,\n };\n\n public componentDidMount() {\n const popupElement = this._popupRef.current;\n if (popupElement && popupElement.parentElement) {\n this._targetElement = popupElement.parentElement;\n }\n }\n\n public componentDidUpdate(previousProps: PopupProps) {\n if (this.props.isShown === previousProps.isShown) return;\n\n if (this.props.isShown) {\n this._onShow();\n } else {\n this._onClose();\n }\n }\n\n public componentWillUnmount() {\n document.body.removeEventListener(\"click\", this._onBodyClick, false);\n document.body.removeEventListener(\"keydown\", this._onEsc, false);\n }\n\n private _onBodyClick = (event: MouseEvent): void => {\n const context = this._getContext();\n\n // Ignore clicks on the popover or button\n if (context === event.target) {\n return;\n }\n\n if (context && context.contains(event.target as Node)) {\n return;\n }\n\n if (\n this._popupRef.current &&\n (this._popupRef.current === event.target ||\n this._popupRef.current.contains(event.target as Node))\n ) {\n return;\n }\n\n this._onClose();\n };\n\n private _onEsc = (event: KeyboardEvent): void => {\n // Esc key\n if (event.key === \"Escape\") {\n this._onClose();\n }\n };\n\n private _onShow() {\n if (this.state.isShown) {\n return;\n }\n\n document.addEventListener(\"click\", this._onBodyClick, true);\n document.addEventListener(\"keydown\", this._onEsc, true);\n\n const newPosition = this.getPositionWithinViewport();\n this.setState({ position: newPosition, isShown: true }, () => {\n if (this.props.onOpen) this.props.onOpen();\n });\n }\n\n private _onClose() {\n if (!this.state.isShown) {\n return;\n }\n\n document.removeEventListener(\"click\", this._onBodyClick, true);\n document.removeEventListener(\"keydown\", this._onEsc, true);\n\n // eslint-disable-next-line @itwin/react-set-state-usage\n this.setState({ isShown: false, position: this.props.position }, () => {\n if (this.props.onClose) this.props.onClose();\n });\n }\n\n private _getContext = () => this.props.context || this._targetElement;\n\n private getPositionClassName(position: RelativePosition): string {\n switch (position) {\n case RelativePosition.TopLeft:\n return classnames(\"tree-widget-search-popup-top-left\");\n case RelativePosition.TopRight:\n return classnames(\"tree-widget-search-popup-top-right\");\n case RelativePosition.BottomLeft:\n return classnames(\"tree-widget-search-popup-bottom-left\");\n case RelativePosition.BottomRight:\n return classnames(\"tree-widget-search-popup-bottom-right\");\n case RelativePosition.Top:\n return classnames(\"tree-widget-search-popup-top\");\n case RelativePosition.Left:\n return classnames(\"tree-widget-search-popup-left\");\n case RelativePosition.Right:\n return classnames(\"tree-widget-search-popup-right\");\n default:\n return classnames(\"tree-widget-search-popup-bottom\");\n }\n }\n\n private getPositionWithinViewport(): RelativePosition {\n const popupElement = this._popupRef.current;\n\n if (!popupElement || !this._targetElement) return this.props.position;\n // Note: Cannot use DOMRect yet since it's experimental and not available in all browsers (Nov. 2018)\n const viewportRect: Rect = {\n left: window.scrollX,\n top: window.scrollY,\n right: window.scrollX + window.innerWidth,\n bottom: window.scrollY + window.innerHeight,\n };\n const targetRect = this._targetElement.getBoundingClientRect();\n const popupRect = popupElement.getBoundingClientRect();\n const containerStyle = window.getComputedStyle(this._targetElement);\n const offset = this.props.showArrow ? 12 : 4;\n\n switch (this.props.position) {\n case RelativePosition.BottomRight: {\n const bottomMargin = containerStyle.marginBottom\n ? parseFloat(containerStyle.marginBottom)\n : 0;\n if (\n targetRect.bottom + popupRect.height + bottomMargin + offset >\n viewportRect.bottom\n ) {\n return RelativePosition.TopRight;\n }\n break;\n }\n\n case RelativePosition.TopRight: {\n const topMargin = containerStyle.marginTop\n ? parseFloat(containerStyle.marginTop)\n : 0;\n if (\n targetRect.top - popupRect.height - topMargin - offset <\n viewportRect.top\n ) {\n return RelativePosition.BottomRight;\n }\n break;\n }\n\n case RelativePosition.TopLeft: {\n const topMargin = containerStyle.marginTop\n ? parseFloat(containerStyle.marginTop)\n : 0;\n if (\n targetRect.top - popupRect.height - topMargin - offset <\n viewportRect.top\n ) {\n return RelativePosition.BottomLeft;\n }\n break;\n }\n\n case RelativePosition.BottomLeft: {\n const bottomMargin = containerStyle.marginBottom\n ? parseFloat(containerStyle.marginBottom)\n : 0;\n if (\n targetRect.bottom + popupRect.height + bottomMargin + offset >\n viewportRect.bottom\n ) {\n return RelativePosition.TopLeft;\n }\n break;\n }\n\n case RelativePosition.Bottom: {\n const bottomMargin = containerStyle.marginBottom\n ? parseFloat(containerStyle.marginBottom)\n : 0;\n if (\n targetRect.bottom + popupRect.height + bottomMargin + offset >\n viewportRect.bottom\n ) {\n return RelativePosition.Top;\n }\n break;\n }\n\n case RelativePosition.Top: {\n const topMargin = containerStyle.marginTop\n ? parseFloat(containerStyle.marginTop)\n : 0;\n if (\n targetRect.top - popupRect.height - topMargin - offset <\n viewportRect.top\n ) {\n return RelativePosition.Bottom;\n }\n break;\n }\n\n case RelativePosition.Left: {\n const leftMargin = containerStyle.marginLeft\n ? parseFloat(containerStyle.marginLeft)\n : 0;\n if (\n targetRect.left - popupRect.width - leftMargin - offset <\n viewportRect.left\n ) {\n return RelativePosition.Right;\n }\n break;\n }\n\n case RelativePosition.Right: {\n const rightMargin = containerStyle.marginRight\n ? parseFloat(containerStyle.marginRight)\n : 0;\n if (\n targetRect.right + popupRect.width + rightMargin + offset >\n viewportRect.right\n ) {\n return RelativePosition.Left;\n }\n break;\n }\n }\n\n return this.props.position;\n }\n\n public render(): JSX.Element {\n const className = classnames(\n \"tree-widget-search-popup\",\n this.getPositionClassName(this.state.position),\n this.props.showShadow && \"tree-widget-search-popup-shadow\",\n this.state.isShown && \"visible\",\n this.props.showArrow && \"arrow\",\n this.props.className\n );\n\n let style: React.CSSProperties | undefined;\n if (this.props.fixedPosition) {\n style = {\n top: this.props.fixedPosition.top,\n left: this.props.fixedPosition.left,\n position: \"fixed\",\n };\n }\n\n return (\n <div style={style} className={className} ref={this._popupRef}>\n {this.props.children}\n </div>\n );\n }\n}\n"]}
@@ -1,316 +0,0 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- @import "~@itwin/core-react/lib/cjs/core-react/index";
6
-
7
- .tree-widget-search-popup {
8
- display: block;
9
- box-sizing: border-box;
10
- position: absolute;
11
- // border-radius: 4px;
12
- background: $buic-background-1;
13
- border: 1px solid $buic-background-panel-stroke;
14
- visibility: hidden;
15
- z-index: 100;
16
- animation-duration: 250ms;
17
- animation-timing-function: ease;
18
- animation-fill-mode: forwards;
19
- }
20
-
21
- .tree-widget-search-popup.arrow::after,
22
- .tree-widget-search-popup.arrow::before {
23
- border: solid transparent;
24
- content: " ";
25
- height: 0;
26
- width: 0;
27
- position: absolute;
28
- pointer-events: none;
29
- }
30
-
31
- .tree-widget-search-popup.tree-widget-search-popup-bottom-left.arrow::after,
32
- .tree-widget-search-popup.tree-widget-search-popup-bottom-left.arrow::before {
33
- bottom: 100%;
34
- left: 25%;
35
- }
36
-
37
- .tree-widget-search-popup.tree-widget-search-popup-bottom-right.arrow::after,
38
- .tree-widget-search-popup.tree-widget-search-popup-bottom-right.arrow::before {
39
- bottom: 100%;
40
- left: 75%;
41
- }
42
-
43
- .tree-widget-search-popup.tree-widget-search-popup-bottom.arrow::after,
44
- .tree-widget-search-popup.tree-widget-search-popup-bottom.arrow::before {
45
- bottom: 100%;
46
- left: 50%;
47
- }
48
-
49
- .tree-widget-search-popup.tree-widget-search-popup-top.arrow::after,
50
- .tree-widget-search-popup.tree-widget-search-popup-top.arrow::before {
51
- top: 100%;
52
- left: 50%;
53
- }
54
-
55
- .tree-widget-search-popup.tree-widget-search-popup-top-left.arrow::after,
56
- .tree-widget-search-popup.tree-widget-search-popup-top-left.arrow::before {
57
- top: 100%;
58
- left: 25%;
59
- }
60
-
61
- .tree-widget-search-popup.tree-widget-search-popup-top-right.arrow::after,
62
- .tree-widget-search-popup.tree-widget-search-popup-top-right.arrow::before {
63
- top: 100%;
64
- left: 75%;
65
- }
66
-
67
- .tree-widget-search-popup.tree-widget-search-popup-left.arrow::after,
68
- .tree-widget-search-popup.tree-widget-search-popup-left.arrow::before {
69
- top: 50%;
70
- left: 100%;
71
- }
72
-
73
- .tree-widget-search-popup.tree-widget-search-popup-right.arrow::after,
74
- .tree-widget-search-popup.tree-widget-search-popup-right.arrow::before {
75
- top: 50%;
76
- right: 100%;
77
- }
78
-
79
- .tree-widget-search-popup.tree-widget-search-popup-bottom.arrow::before,
80
- .tree-widget-search-popup.tree-widget-search-popup-bottom-left.arrow::before,
81
- .tree-widget-search-popup.tree-widget-search-popup-bottom-right.arrow::before {
82
- border-bottom-color: inherit;
83
- border-width: 9px;
84
- margin-left: -9px;
85
- }
86
-
87
- .tree-widget-search-popup.tree-widget-search-popup-top.arrow::before,
88
- .tree-widget-search-popup.tree-widget-search-popup-top-left.arrow::before,
89
- .tree-widget-search-popup.tree-widget-search-popup-top-right.arrow::before {
90
- border-top-color: inherit;
91
- border-width: 9px;
92
- margin-left: -9px;
93
- }
94
-
95
- .tree-widget-search-popup.tree-widget-search-popup-left.arrow::before {
96
- border-left-color: inherit;
97
- border-width: 9px;
98
- margin-top: -9px;
99
- }
100
-
101
- .tree-widget-search-popup.tree-widget-search-popup-right.arrow::before {
102
- border-right-color: inherit;
103
- border-width: 9px;
104
- margin-top: -9px;
105
- }
106
-
107
- .tree-widget-search-popup.tree-widget-search-popup-bottom.arrow::after,
108
- .tree-widget-search-popup.tree-widget-search-popup-bottom-left.arrow::after,
109
- .tree-widget-search-popup.tree-widget-search-popup-bottom-right.arrow::after {
110
- border-bottom-color: currentColor;
111
- border-width: 8px;
112
- margin-left: -8px;
113
- }
114
-
115
- .tree-widget-search-popup.tree-widget-search-popup-top.arrow::after,
116
- .tree-widget-search-popup.tree-widget-search-popup-top-left.arrow::after,
117
- .tree-widget-search-popup.tree-widget-search-popup-top-right.arrow::after {
118
- border-top-color: currentColor;
119
- border-width: 8px;
120
- margin-left: -8px;
121
- }
122
-
123
- .tree-widget-search-popup.tree-widget-search-popup-left.arrow::after {
124
- border-left-color: currentColor;
125
- border-width: 8px;
126
- margin-top: -8px;
127
- }
128
-
129
- .tree-widget-search-popup.tree-widget-search-popup-right.arrow::after {
130
- border-right-color: currentColor;
131
- border-width: 8px;
132
- margin-top: -8px;
133
- }
134
-
135
- .tree-widget-search-popup-top-left {
136
- top: -4px;
137
- left: 0;
138
- transform: translateY(-100%);
139
- transform-origin: left bottom 0;
140
- }
141
-
142
- .tree-widget-search-popup.tree-widget-search-popup-top-left.visible {
143
- animation-name: dr-animate-top-corner;
144
- }
145
-
146
- .tree-widget-search-popup-top {
147
- top: -4px;
148
- left: 50%;
149
- transform: translate(-50%, -100%);
150
- transform-origin: bottom;
151
- }
152
-
153
- .tree-widget-search-popup.tree-widget-search-popup-top.visible {
154
- animation-name: dr-animate-top;
155
- }
156
-
157
- .tree-widget-search-popup-top-right {
158
- top: -4px;
159
- right: 0;
160
- transform: translateY(-100%);
161
- transform-origin: right bottom 0;
162
- }
163
-
164
- .tree-widget-search-popup.tree-widget-search-popup-top-right.visible {
165
- animation-name: dr-animate-top-corner;
166
- }
167
-
168
- .tree-widget-search-popup-bottom-left {
169
- top: calc(100% + 0px);
170
- left: 0;
171
- transform-origin: left top 0;
172
- }
173
-
174
- .tree-widget-search-popup.tree-widget-search-popup-bottom-left.visible {
175
- animation-name: dr-animate-bottom-corner;
176
- }
177
-
178
- .tree-widget-search-popup-bottom {
179
- top: calc(100% + 4px);
180
- left: 50%;
181
- transform: translateX(-50%);
182
- transform-origin: top;
183
- }
184
-
185
- .tree-widget-search-popup.tree-widget-search-popup-bottom.visible {
186
- animation-name: dr-animate-bottom;
187
- }
188
-
189
- .tree-widget-search-popup-bottom-right {
190
- top: calc(100% + 4px);
191
- right: 0;
192
- transform-origin: right top 0;
193
- }
194
-
195
- .tree-widget-search-popup.tree-widget-search-popup-bottom-right.visible {
196
- animation-name: dr-animate-bottom-corner;
197
- }
198
-
199
- .tree-widget-search-popup-left {
200
- left: -4px;
201
- top: 50%;
202
- transform: translate(-100%, -50%);
203
- transform-origin: right;
204
- }
205
-
206
- .tree-widget-search-popup.popup-left.visible {
207
- animation-name: dr-animate-left;
208
- }
209
-
210
- .tree-widget-search-popup-right {
211
- right: -4px;
212
- top: 50%;
213
- transform: translate(100%, -50%);
214
- transform-origin: left;
215
- }
216
-
217
- .tree-widget-search-popup.popup-right.visible {
218
- animation-name: dr-animate-right;
219
- }
220
-
221
- .tree-widget-search-popup.popup-bottom-left.arrow,
222
- .tree-widget-search-popup.popup-bottom.arrow,
223
- .tree-widget-search-popup.popup-bottom-right.arrow {
224
- top: calc(100% + 12px);
225
- }
226
-
227
- .tree-widget-search-popup.popup-top.arrow,
228
- .tree-widget-search-popup.popup-top-left.arrow,
229
- .tree-widget-search-popup.popup-top-right.arrow {
230
- top: -12px;
231
- }
232
-
233
- .tree-widget-search-popup.popup-left.arrow {
234
- left: -12px;
235
- }
236
-
237
- .tree-widget-search-popup.popup-right.arrow {
238
- right: -12px;
239
- }
240
-
241
- .tree-widget-search-popup-shadow {
242
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.25);
243
- background-clip: padding-box;
244
- }
245
-
246
- @keyframes dr-animate-bottom {
247
- from {
248
- visibility: hidden;
249
- transform: translateX(-50%) scale(1, 0);
250
- }
251
-
252
- to {
253
- visibility: visible;
254
- transform: translateX(-50%) scale(1);
255
- }
256
- }
257
-
258
- @keyframes dr-animate-top {
259
- from {
260
- visibility: hidden;
261
- transform: translate(-50%, -100%) scale(1, 0);
262
- }
263
-
264
- to {
265
- visibility: visible;
266
- transform: translate(-50%, -100%) scale(1);
267
- }
268
- }
269
-
270
- @keyframes dr-animate-top-corner {
271
- from {
272
- visibility: hidden;
273
- transform: translateY(-100%) scale(0);
274
- }
275
-
276
- to {
277
- visibility: visible;
278
- transform: translateY(-100%) scale(1);
279
- }
280
- }
281
-
282
- @keyframes dr-animate-bottom-corner {
283
- from {
284
- visibility: hidden;
285
- transform: scale(0);
286
- }
287
-
288
- to {
289
- visibility: visible;
290
- transform: scale(1);
291
- }
292
- }
293
-
294
- @keyframes dr-animate-left {
295
- from {
296
- visibility: hidden;
297
- transform: translate(-100%, -50%) scale(0, 1);
298
- }
299
-
300
- to {
301
- visibility: visible;
302
- transform: translate(-100%, -50%) scale(1);
303
- }
304
- }
305
-
306
- @keyframes dr-animate-right {
307
- from {
308
- visibility: hidden;
309
- transform: translate(100%, -50%) scale(0, 1);
310
- }
311
-
312
- to {
313
- visibility: visible;
314
- transform: translate(100%, -50%) scale(1);
315
- }
316
- }