@itwin/appui-react 5.25.0 → 5.27.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 +36 -0
  2. package/lib/appui-react/layout/target/TitleBarTarget.d.ts +1 -1
  3. package/lib/appui-react/layout/target/TitleBarTarget.d.ts.map +1 -1
  4. package/lib/appui-react/layout/target/TitleBarTarget.js +3 -3
  5. package/lib/appui-react/layout/target/TitleBarTarget.js.map +1 -1
  6. package/lib/appui-react/layout/target/TitleBarTarget.scss +9 -7
  7. package/lib/appui-react/layout/widget/ContentContainer.d.ts +2 -0
  8. package/lib/appui-react/layout/widget/ContentContainer.d.ts.map +1 -1
  9. package/lib/appui-react/layout/widget/ContentContainer.js +16 -16
  10. package/lib/appui-react/layout/widget/ContentContainer.js.map +1 -1
  11. package/lib/appui-react/layout/widget/FloatingWidget.d.ts +56 -4
  12. package/lib/appui-react/layout/widget/FloatingWidget.d.ts.map +1 -1
  13. package/lib/appui-react/layout/widget/FloatingWidget.js +97 -51
  14. package/lib/appui-react/layout/widget/FloatingWidget.js.map +1 -1
  15. package/lib/appui-react/layout/widget/PanelWidget.d.ts +2 -2
  16. package/lib/appui-react/layout/widget/PanelWidget.d.ts.map +1 -1
  17. package/lib/appui-react/layout/widget/PanelWidget.js +6 -4
  18. package/lib/appui-react/layout/widget/PanelWidget.js.map +1 -1
  19. package/lib/appui-react/layout/widget/TabBar.d.ts +2 -0
  20. package/lib/appui-react/layout/widget/TabBar.d.ts.map +1 -1
  21. package/lib/appui-react/layout/widget/TabBar.js +13 -12
  22. package/lib/appui-react/layout/widget/TabBar.js.map +1 -1
  23. package/lib/appui-react/layout/widget/Widget.d.ts +6 -3
  24. package/lib/appui-react/layout/widget/Widget.d.ts.map +1 -1
  25. package/lib/appui-react/layout/widget/Widget.js +29 -31
  26. package/lib/appui-react/layout/widget/Widget.js.map +1 -1
  27. package/lib/appui-react/preview/PreviewFeatures.d.ts +11 -3
  28. package/lib/appui-react/preview/PreviewFeatures.d.ts.map +1 -1
  29. package/lib/appui-react/preview/PreviewFeatures.js +4 -2
  30. package/lib/appui-react/preview/PreviewFeatures.js.map +1 -1
  31. package/lib/appui-react/preview/control-widget-visibility/CloseWidgetButton.d.ts +3 -0
  32. package/lib/appui-react/preview/control-widget-visibility/CloseWidgetButton.d.ts.map +1 -1
  33. package/lib/appui-react/preview/control-widget-visibility/CloseWidgetButton.js +11 -2
  34. package/lib/appui-react/preview/control-widget-visibility/CloseWidgetButton.js.map +1 -1
  35. package/lib/appui-react/preview/widget-tab-actions/Widget.d.ts +10 -0
  36. package/lib/appui-react/preview/widget-tab-actions/Widget.d.ts.map +1 -0
  37. package/lib/appui-react/preview/widget-tab-actions/Widget.js +242 -0
  38. package/lib/appui-react/preview/widget-tab-actions/Widget.js.map +1 -0
  39. package/lib/appui-react/preview/widget-tab-actions/Widget.scss +198 -0
  40. package/lib/appui-react/preview/widget-tab-actions/useWidgetTabActions.d.ts +6 -0
  41. package/lib/appui-react/preview/widget-tab-actions/useWidgetTabActions.d.ts.map +1 -0
  42. package/lib/appui-react/preview/widget-tab-actions/useWidgetTabActions.js +18 -0
  43. package/lib/appui-react/preview/widget-tab-actions/useWidgetTabActions.js.map +1 -0
  44. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +1 -1
  45. package/lib/cjs/appui-react/layout/target/TitleBarTarget.scss +9 -7
  46. package/lib/cjs/appui-react/preview/widget-tab-actions/Widget.scss +198 -0
  47. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +1 -1
  48. package/lib/esm/appui-react/layout/target/TitleBarTarget.scss +9 -7
  49. package/lib/esm/appui-react/preview/widget-tab-actions/Widget.scss +198 -0
  50. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +1 -1
  51. package/package.json +8 -8
@@ -0,0 +1,198 @@
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
+ @use "~@itwin/core-react/lib/core-react/z-index" as *;
6
+ @use "../../layout/widgetopacity" as *;
7
+ @use "../../layout/widget/variables" as *;
8
+
9
+ $border-width: 1px;
10
+
11
+ @layer appui.preview {
12
+ .uifw-preview-widgetTabActions-widget_wrapper {
13
+ flex: 1;
14
+ grid-template-rows: min-content 1fr;
15
+ grid-template-columns: auto 1fr;
16
+ isolation: isolate;
17
+ }
18
+
19
+ .uifw-preview-widgetTabActions-widget_panelWidget {
20
+ border: 0px solid var(--iui-color-border);
21
+
22
+ &:where(.nz-border-top) {
23
+ border-block-start-width: $border-width;
24
+ }
25
+
26
+ &:where(.nz-border-bottom) {
27
+ border-block-end-width: $border-width;
28
+ }
29
+
30
+ &:where(.nz-border-left) {
31
+ border-inline-start-width: $border-width;
32
+ }
33
+
34
+ &:where(.nz-border-right) {
35
+ border-inline-end-width: $border-width;
36
+ }
37
+ }
38
+
39
+ .uifw-preview-widgetTabActions-widget_floating {
40
+ position: absolute;
41
+ min-inline-size: 200px;
42
+ min-block-size: 120px;
43
+ inline-size: auto;
44
+ transition: opacity var(--iui-duration-2) ease;
45
+ border: $border-width solid var(--iui-color-border);
46
+ contain: none;
47
+
48
+ @include uicore-z-index(dragged-widget);
49
+ @include nz-widget-opacity;
50
+
51
+ &:where([data-_appui-dragged="true"]) {
52
+ pointer-events: none;
53
+ opacity: $nz-dragged-widget-opacity;
54
+
55
+ @include uicore-z-index(drag-preview);
56
+ }
57
+
58
+ &:where([data-_appui-hidden="true"]) {
59
+ opacity: 0;
60
+ pointer-events: none;
61
+ }
62
+
63
+ &:where([data-_appui-minimized="true"]) {
64
+ .uifw-preview-widgetTabActions-widget_panel {
65
+ block-size: 0;
66
+ border: 0;
67
+ overflow: hidden;
68
+ }
69
+ }
70
+
71
+ &:where([data-_appui-tool-settings="true"]) {
72
+ min-block-size: 60px;
73
+ }
74
+ }
75
+
76
+ .uifw-preview-widgetTabActions-widget_handle {
77
+ grid-column: tabs / tabs-actions;
78
+ grid-row: tabs;
79
+ position: relative;
80
+ cursor: grab;
81
+ user-select: none;
82
+ -webkit-user-select: none;
83
+ background-color: var(--iui-color-background-hover);
84
+ }
85
+
86
+ .uifw-preview-widgetTabActions-widget_tabList {
87
+ grid-area: tabs;
88
+ z-index: 1;
89
+ overscroll-behavior-x: none;
90
+ margin-inline: -1px; // Don't use $border-width as this is accounting for iTwinUI's tab border
91
+ margin-block-start: -1px; // Don't use $border-width as this is accounting for iTwinUI's tab border
92
+ container-type: normal;
93
+ }
94
+
95
+ .uifw-preview-widgetTabActions-widget_tab {
96
+ grid-template-areas:
97
+ "icon label decoration"
98
+ "icon description decoration";
99
+ grid-template-rows: auto minmax(0, auto);
100
+ grid-template-columns: auto minmax(min-content, 1fr) auto;
101
+
102
+ min-inline-size: min-content;
103
+
104
+ @media (any-hover: hover) {
105
+ &:where(:not(:hover, :focus-visible)) {
106
+ --_appui-decoration-opacity: 0;
107
+ }
108
+ }
109
+
110
+ &:where([data-_appui-decoration]) {
111
+ &:where(:hover, :focus-visible, [data-_appui-mask="true"])
112
+ .uifw-preview-widgetTabActions-widget_label {
113
+ mask-image: linear-gradient(
114
+ 270deg,
115
+ transparent 0%,
116
+ transparent 24px,
117
+ #000 32px,
118
+ #000 100%
119
+ );
120
+ }
121
+ }
122
+ }
123
+
124
+ .uifw-preview-widgetTabActions-widget_panel {
125
+ padding: 0;
126
+ position: relative;
127
+ display: flex;
128
+ border-block-end: 0;
129
+ border-inline: 0;
130
+ min-block-size: 0;
131
+ }
132
+
133
+ .uifw-preview-widgetTabActions-widget_content {
134
+ min-inline-size: 0;
135
+ display: flex;
136
+ inline-size: 100%;
137
+ }
138
+
139
+ .uifw-preview-widgetTabActions-widget_label {
140
+ grid-area: label / decoration;
141
+ -webkit-line-clamp: 1;
142
+ user-select: none;
143
+ }
144
+
145
+ .uifw-preview-widgetTabActions-widget_decoration {
146
+ grid-area: decoration;
147
+ justify-self: end;
148
+ opacity: var(--_appui-decoration-opacity);
149
+ block-size: var(--_iui-field-height);
150
+
151
+ &:where([data-_appui-action="true"]) {
152
+ anchor-name: --_appui-tab-action;
153
+ }
154
+ }
155
+
156
+ .uifw-preview-widgetTabActions-widget_actionsWrapper {
157
+ margin-inline-start: 0;
158
+ padding-inline-start: var(--iui-size-s);
159
+
160
+ &::before,
161
+ &::after {
162
+ display: none;
163
+ }
164
+
165
+ &:has(
166
+ .uifw-preview-widgetTabActions-widget_titleBarTarget:not(.nz-hidden)
167
+ ) {
168
+ position: relative;
169
+ }
170
+ }
171
+
172
+ .uifw-preview-widgetTabActions-widget_titleBarTarget {
173
+ position: absolute;
174
+ height: 100%;
175
+ width: 100%;
176
+ }
177
+
178
+ .uifw-preview-widgetTabActions-widget_actions {
179
+ flex: 1;
180
+ justify-content: flex-end;
181
+ }
182
+
183
+ .uifw-preview-widgetTabActions-widget_resizeHandle {
184
+ z-index: 1;
185
+ }
186
+
187
+ @supports (anchor-name: --_appui-tab-action) {
188
+ .uifw-preview-widgetTabActions-widget_action {
189
+ &:where([data-_appui-anchor="true"]) {
190
+ position: absolute;
191
+ position-anchor: --_appui-tab-action;
192
+ right: anchor(right);
193
+ align-self: anchor-center;
194
+ z-index: 1;
195
+ }
196
+ }
197
+ }
198
+ }
@@ -14,7 +14,7 @@ $key-size-large: 36px;
14
14
  $key-size-modifier: 24px;
15
15
 
16
16
  .uifw-statusFields-toolAssistance-toolAssistanceField {
17
- max-width: 30ch;
17
+ width: 30ch;
18
18
  justify-content: flex-start;
19
19
 
20
20
  .prompt {
@@ -4,14 +4,16 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  @use "~@itwin/core-react/lib/core-react/z-index" as *;
6
6
 
7
- .nz-target-titleBarTarget {
8
- flex: 1 1 0;
9
- position: relative;
10
- overflow: hidden;
7
+ @layer appui.component {
8
+ .nz-target-titleBarTarget {
9
+ flex: 1 1 0;
10
+ position: relative;
11
+ overflow: hidden;
11
12
 
12
- @include uicore-z-index(drop-target);
13
+ @include uicore-z-index(drop-target);
13
14
 
14
- &.nz-hidden {
15
- display: none;
15
+ &.nz-hidden {
16
+ display: none;
17
+ }
16
18
  }
17
19
  }
@@ -0,0 +1,198 @@
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
+ @use "~@itwin/core-react/lib/core-react/z-index" as *;
6
+ @use "../../layout/widgetopacity" as *;
7
+ @use "../../layout/widget/variables" as *;
8
+
9
+ $border-width: 1px;
10
+
11
+ @layer appui.preview {
12
+ .uifw-preview-widgetTabActions-widget_wrapper {
13
+ flex: 1;
14
+ grid-template-rows: min-content 1fr;
15
+ grid-template-columns: auto 1fr;
16
+ isolation: isolate;
17
+ }
18
+
19
+ .uifw-preview-widgetTabActions-widget_panelWidget {
20
+ border: 0px solid var(--iui-color-border);
21
+
22
+ &:where(.nz-border-top) {
23
+ border-block-start-width: $border-width;
24
+ }
25
+
26
+ &:where(.nz-border-bottom) {
27
+ border-block-end-width: $border-width;
28
+ }
29
+
30
+ &:where(.nz-border-left) {
31
+ border-inline-start-width: $border-width;
32
+ }
33
+
34
+ &:where(.nz-border-right) {
35
+ border-inline-end-width: $border-width;
36
+ }
37
+ }
38
+
39
+ .uifw-preview-widgetTabActions-widget_floating {
40
+ position: absolute;
41
+ min-inline-size: 200px;
42
+ min-block-size: 120px;
43
+ inline-size: auto;
44
+ transition: opacity var(--iui-duration-2) ease;
45
+ border: $border-width solid var(--iui-color-border);
46
+ contain: none;
47
+
48
+ @include uicore-z-index(dragged-widget);
49
+ @include nz-widget-opacity;
50
+
51
+ &:where([data-_appui-dragged="true"]) {
52
+ pointer-events: none;
53
+ opacity: $nz-dragged-widget-opacity;
54
+
55
+ @include uicore-z-index(drag-preview);
56
+ }
57
+
58
+ &:where([data-_appui-hidden="true"]) {
59
+ opacity: 0;
60
+ pointer-events: none;
61
+ }
62
+
63
+ &:where([data-_appui-minimized="true"]) {
64
+ .uifw-preview-widgetTabActions-widget_panel {
65
+ block-size: 0;
66
+ border: 0;
67
+ overflow: hidden;
68
+ }
69
+ }
70
+
71
+ &:where([data-_appui-tool-settings="true"]) {
72
+ min-block-size: 60px;
73
+ }
74
+ }
75
+
76
+ .uifw-preview-widgetTabActions-widget_handle {
77
+ grid-column: tabs / tabs-actions;
78
+ grid-row: tabs;
79
+ position: relative;
80
+ cursor: grab;
81
+ user-select: none;
82
+ -webkit-user-select: none;
83
+ background-color: var(--iui-color-background-hover);
84
+ }
85
+
86
+ .uifw-preview-widgetTabActions-widget_tabList {
87
+ grid-area: tabs;
88
+ z-index: 1;
89
+ overscroll-behavior-x: none;
90
+ margin-inline: -1px; // Don't use $border-width as this is accounting for iTwinUI's tab border
91
+ margin-block-start: -1px; // Don't use $border-width as this is accounting for iTwinUI's tab border
92
+ container-type: normal;
93
+ }
94
+
95
+ .uifw-preview-widgetTabActions-widget_tab {
96
+ grid-template-areas:
97
+ "icon label decoration"
98
+ "icon description decoration";
99
+ grid-template-rows: auto minmax(0, auto);
100
+ grid-template-columns: auto minmax(min-content, 1fr) auto;
101
+
102
+ min-inline-size: min-content;
103
+
104
+ @media (any-hover: hover) {
105
+ &:where(:not(:hover, :focus-visible)) {
106
+ --_appui-decoration-opacity: 0;
107
+ }
108
+ }
109
+
110
+ &:where([data-_appui-decoration]) {
111
+ &:where(:hover, :focus-visible, [data-_appui-mask="true"])
112
+ .uifw-preview-widgetTabActions-widget_label {
113
+ mask-image: linear-gradient(
114
+ 270deg,
115
+ transparent 0%,
116
+ transparent 24px,
117
+ #000 32px,
118
+ #000 100%
119
+ );
120
+ }
121
+ }
122
+ }
123
+
124
+ .uifw-preview-widgetTabActions-widget_panel {
125
+ padding: 0;
126
+ position: relative;
127
+ display: flex;
128
+ border-block-end: 0;
129
+ border-inline: 0;
130
+ min-block-size: 0;
131
+ }
132
+
133
+ .uifw-preview-widgetTabActions-widget_content {
134
+ min-inline-size: 0;
135
+ display: flex;
136
+ inline-size: 100%;
137
+ }
138
+
139
+ .uifw-preview-widgetTabActions-widget_label {
140
+ grid-area: label / decoration;
141
+ -webkit-line-clamp: 1;
142
+ user-select: none;
143
+ }
144
+
145
+ .uifw-preview-widgetTabActions-widget_decoration {
146
+ grid-area: decoration;
147
+ justify-self: end;
148
+ opacity: var(--_appui-decoration-opacity);
149
+ block-size: var(--_iui-field-height);
150
+
151
+ &:where([data-_appui-action="true"]) {
152
+ anchor-name: --_appui-tab-action;
153
+ }
154
+ }
155
+
156
+ .uifw-preview-widgetTabActions-widget_actionsWrapper {
157
+ margin-inline-start: 0;
158
+ padding-inline-start: var(--iui-size-s);
159
+
160
+ &::before,
161
+ &::after {
162
+ display: none;
163
+ }
164
+
165
+ &:has(
166
+ .uifw-preview-widgetTabActions-widget_titleBarTarget:not(.nz-hidden)
167
+ ) {
168
+ position: relative;
169
+ }
170
+ }
171
+
172
+ .uifw-preview-widgetTabActions-widget_titleBarTarget {
173
+ position: absolute;
174
+ height: 100%;
175
+ width: 100%;
176
+ }
177
+
178
+ .uifw-preview-widgetTabActions-widget_actions {
179
+ flex: 1;
180
+ justify-content: flex-end;
181
+ }
182
+
183
+ .uifw-preview-widgetTabActions-widget_resizeHandle {
184
+ z-index: 1;
185
+ }
186
+
187
+ @supports (anchor-name: --_appui-tab-action) {
188
+ .uifw-preview-widgetTabActions-widget_action {
189
+ &:where([data-_appui-anchor="true"]) {
190
+ position: absolute;
191
+ position-anchor: --_appui-tab-action;
192
+ right: anchor(right);
193
+ align-self: anchor-center;
194
+ z-index: 1;
195
+ }
196
+ }
197
+ }
198
+ }
@@ -14,7 +14,7 @@ $key-size-large: 36px;
14
14
  $key-size-modifier: 24px;
15
15
 
16
16
  .uifw-statusFields-toolAssistance-toolAssistanceField {
17
- max-width: 30ch;
17
+ width: 30ch;
18
18
  justify-content: flex-start;
19
19
 
20
20
  .prompt {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/appui-react",
3
- "version": "5.25.0",
3
+ "version": "5.27.0",
4
4
  "description": "A react component library for AppUI framework",
5
5
  "type": "module",
6
6
  "types": "./lib/appui-react.d.ts",
@@ -45,13 +45,13 @@
45
45
  "react-dom": "^18.0.0 || ^19.0.0",
46
46
  "react-redux": "^7.2.2 || ^8.0.0 || ^9.0.0",
47
47
  "redux": "^4.1.0 || ^5.0.0",
48
- "@itwin/components-react": "5.25.0",
49
- "@itwin/core-react": "5.25.0",
50
- "@itwin/imodel-components-react": "5.25.0"
48
+ "@itwin/components-react": "5.27.0",
49
+ "@itwin/core-react": "5.27.0",
50
+ "@itwin/imodel-components-react": "5.27.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@itwin/appui-abstract": "^5.1.0",
54
- "@itwin/build-tools": "^5.5.2",
54
+ "@itwin/build-tools": "^5.7.0",
55
55
  "@itwin/core-bentley": "^5.1.0",
56
56
  "@itwin/core-common": "^5.1.0",
57
57
  "@itwin/core-frontend": "^5.1.0",
@@ -89,9 +89,9 @@
89
89
  "typescript": "~5.6.2",
90
90
  "upath": "^2.0.1",
91
91
  "vitest": "^3.2.4",
92
- "@itwin/components-react": "5.25.0",
93
- "@itwin/imodel-components-react": "5.25.0",
94
- "@itwin/core-react": "5.25.0"
92
+ "@itwin/imodel-components-react": "5.27.0",
93
+ "@itwin/components-react": "5.27.0",
94
+ "@itwin/core-react": "5.27.0"
95
95
  },
96
96
  "dependencies": {
97
97
  "@itwin/itwinui-icons-react": "^2.8.0",