@xh/hoist 79.0.0-SNAPSHOT.1767040663589 → 79.0.0-SNAPSHOT.1767046009354

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 (54) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/admin/App.scss +1 -1
  3. package/appcontainer/ThemeModel.ts +1 -1
  4. package/build/types/desktop/cmp/input/DateInput.d.ts +1 -1
  5. package/build/types/desktop/hooks/UseContextMenu.d.ts +1 -1
  6. package/build/types/kit/blueprint/Wrappers.d.ts +2 -2
  7. package/build/types/kit/blueprint/index.d.ts +0 -1
  8. package/cmp/ag-grid/AgGrid.scss +1 -1
  9. package/cmp/chart/Chart.scss +1 -1
  10. package/desktop/appcontainer/ExceptionDialog.scss +1 -1
  11. package/desktop/appcontainer/LoginPanel.scss +1 -1
  12. package/desktop/appcontainer/Message.scss +1 -1
  13. package/desktop/appcontainer/Toast.scss +3 -3
  14. package/desktop/appcontainer/ToastSource.ts +2 -45
  15. package/desktop/cmp/appbar/AppBar.scss +10 -10
  16. package/desktop/cmp/button/Button.scss +11 -11
  17. package/desktop/cmp/dash/canvas/DashCanvas.scss +1 -1
  18. package/desktop/cmp/dash/canvas/DashCanvas.ts +1 -2
  19. package/desktop/cmp/dash/container/DashContainer.scss +1 -1
  20. package/desktop/cmp/dash/container/DashContainerModel.ts +1 -1
  21. package/desktop/cmp/dock/impl/Dock.scss +1 -1
  22. package/desktop/cmp/filter/FilterChooser.scss +1 -1
  23. package/desktop/cmp/filter/PopoverFilterChooser.scss +3 -3
  24. package/desktop/cmp/form/FormField.scss +4 -4
  25. package/desktop/cmp/grid/columns/Actions.ts +1 -1
  26. package/desktop/cmp/grid/editors/Editors.scss +4 -4
  27. package/desktop/cmp/grid/find/GridFindField.scss +1 -1
  28. package/desktop/cmp/grid/impl/filter/headerfilter/custom/CustomTab.scss +2 -2
  29. package/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.scss +2 -2
  30. package/desktop/cmp/grouping/GroupingChooser.scss +3 -3
  31. package/desktop/cmp/input/Checkbox.scss +1 -1
  32. package/desktop/cmp/input/DateInput.scss +3 -3
  33. package/desktop/cmp/input/DateInput.ts +1 -1
  34. package/desktop/cmp/input/RadioInput.scss +2 -2
  35. package/desktop/cmp/input/Select.ts +1 -1
  36. package/desktop/cmp/input/Slider.scss +1 -1
  37. package/desktop/cmp/input/Slider.ts +1 -1
  38. package/desktop/cmp/input/SwitchInput.scss +1 -1
  39. package/desktop/cmp/mask/impl/Mask.scss +1 -1
  40. package/desktop/cmp/panel/impl/PanelHeader.scss +1 -1
  41. package/desktop/cmp/tab/TabSwitcher.ts +1 -1
  42. package/desktop/cmp/tab/Tabs.scss +7 -7
  43. package/desktop/cmp/tab/dynamic/DynamicTabSwitcher.scss +1 -1
  44. package/desktop/cmp/tab/dynamic/DynamicTabSwitcher.ts +4 -4
  45. package/desktop/cmp/toolbar/Toolbar.scss +16 -16
  46. package/desktop/hooks/UseContextMenu.ts +1 -1
  47. package/kit/blueprint/ContextMenu.ts +1 -12
  48. package/kit/blueprint/Dialog.ts +3 -3
  49. package/kit/blueprint/Wrappers.ts +1 -1
  50. package/kit/blueprint/index.ts +2 -5
  51. package/kit/blueprint/styles.scss +79 -75
  52. package/package.json +3 -4
  53. package/styles/XH.scss +2 -2
  54. package/tsconfig.tsbuildinfo +1 -1
@@ -6,11 +6,11 @@
6
6
  */
7
7
 
8
8
  .xh-radio-input {
9
- .xh-radio-input-option.bp5-control.bp5-inline {
9
+ .xh-radio-input-option.bp6-control.bp6-inline {
10
10
  margin-right: var(--xh-pad-double-px);
11
11
  }
12
12
 
13
- &.xh-input-invalid .xh-radio-input-option .bp5-control-indicator {
13
+ &.xh-input-invalid .xh-radio-input-option .bp6-control-indicator {
14
14
  border: var(--xh-form-field-invalid-border);
15
15
 
16
16
  &::before {
@@ -794,7 +794,7 @@ const cmp = hoistCmp.factory<SelectInputModel>(({model, className, ...props}, re
794
794
  // fire 'mousedown' events. These can bubble and inadvertently close Popovers that
795
795
  // contain Selects.
796
796
  const target = e?.target as HTMLElement;
797
- if (target && elemWithin(target, 'bp5-popover')) {
797
+ if (target && elemWithin(target, 'bp6-popover')) {
798
798
  e.stopPropagation();
799
799
  }
800
800
  },
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  .xh-slider {
9
- .bp5-slider-label {
9
+ .bp6-slider-label {
10
10
  white-space: nowrap;
11
11
  }
12
12
  }
@@ -70,7 +70,7 @@ class SliderInputModel extends HoistInputModel {
70
70
  override xhImpl = true;
71
71
 
72
72
  get sliderHandle(): HTMLElement {
73
- return this.domEl?.querySelector('.bp5-slider-handle');
73
+ return this.domEl?.querySelector('.bp6-slider-handle');
74
74
  }
75
75
 
76
76
  override blur() {
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  .xh-switch-input.xh-input-invalid {
9
- .bp5-control-indicator {
9
+ .bp6-control-indicator {
10
10
  border: var(--xh-form-field-invalid-border);
11
11
 
12
12
  &::before {
@@ -4,7 +4,7 @@
4
4
  flex-direction: column;
5
5
  justify-content: center;
6
6
 
7
- .bp5-overlay-backdrop {
7
+ .bp6-overlay-backdrop {
8
8
  background-color: var(--xh-mask-bg);
9
9
  }
10
10
 
@@ -39,7 +39,7 @@
39
39
  }
40
40
 
41
41
  // Ensure text color correct for Blueprint controls, e.g. a switch in headerItems
42
- .bp5-control {
42
+ .bp6-control {
43
43
  color: var(--xh-panel-title-text-color);
44
44
  }
45
45
 
@@ -312,7 +312,7 @@ class TabSwitcherLocalModel extends HoistModel {
312
312
 
313
313
  get tabEls() {
314
314
  if (!this.el) return [];
315
- return Array.from(this.el.querySelectorAll('.bp5-tab'));
315
+ return Array.from(this.el.querySelectorAll('.bp6-tab'));
316
316
  }
317
317
 
318
318
  getTabDimensions(tab) {
@@ -43,7 +43,7 @@
43
43
  max-width: 100%;
44
44
 
45
45
  // Flip the indicator to be on top of the tab label
46
- .bp5-tab[aria-selected='true'] {
46
+ .bp6-tab[aria-selected='true'] {
47
47
  box-shadow: inset 0 3px 0 currentColor;
48
48
  }
49
49
  }
@@ -54,7 +54,7 @@
54
54
  max-height: 100%;
55
55
 
56
56
  // Make overflow button full width
57
- .bp5-popover-target {
57
+ .bp6-popover-target {
58
58
  display: block;
59
59
 
60
60
  .xh-button {
@@ -101,7 +101,7 @@
101
101
  }
102
102
  }
103
103
 
104
- .bp5-tab {
104
+ .bp6-tab {
105
105
  color: var(--xh-tab-text-color);
106
106
 
107
107
  &[aria-disabled='true'] {
@@ -109,20 +109,20 @@
109
109
  }
110
110
 
111
111
  // Tooltip
112
- .bp5-popover-target {
112
+ .bp6-popover-target {
113
113
  width: 100%;
114
114
  }
115
115
  }
116
116
 
117
117
  // Active/hover color override
118
- .bp5-tab[aria-selected='true'],
119
- .bp5-tab:not([aria-disabled='true']):hover {
118
+ .bp6-tab[aria-selected='true'],
119
+ .bp6-tab:not([aria-disabled='true']):hover {
120
120
  .xh-tab-switcher__tab {
121
121
  color: var(--xh-tab-active-text-color);
122
122
  }
123
123
  }
124
124
 
125
- .bp5-tab[aria-selected='true'] {
125
+ .bp6-tab[aria-selected='true'] {
126
126
  box-shadow: inset 0 -3px 0 var(--xh-tab-active-text-color);
127
127
  }
128
128
  }
@@ -2,7 +2,7 @@
2
2
  &:not(&--vertical) &__tabs {
3
3
  overflow-x: auto;
4
4
 
5
- .bp5-tab-list {
5
+ .bp6-tab-list {
6
6
  column-gap: var(--xh-pad-double-px);
7
7
  }
8
8
  }
@@ -16,7 +16,7 @@ import {contextMenu} from '@xh/hoist/desktop/cmp/contextmenu';
16
16
  import {scroller} from '@xh/hoist/desktop/cmp/tab/dynamic/scroller/Scroller';
17
17
  import {ScrollerModel} from '@xh/hoist/desktop/cmp/tab/dynamic/scroller/ScrollerModel';
18
18
  import {Icon} from '@xh/hoist/icon';
19
- import {showContextMenu, tooltip as bpTooltip} from '@xh/hoist/kit/blueprint';
19
+ import {tooltip as bpTooltip, showContextMenu} from '@xh/hoist/kit/blueprint';
20
20
  import {dragDropContext, draggable, droppable} from '@xh/hoist/kit/react-beautiful-dnd';
21
21
  import {wait} from '@xh/hoist/promise';
22
22
  import {consumeEvent} from '@xh/hoist/utils/js';
@@ -88,9 +88,9 @@ const tabs = hoistCmp.factory<TabsProps>({
88
88
  className: `xh-dynamic-tab-switcher__tabs xh-tab-switcher xh-tab-switcher--${props.orientation}`,
89
89
  ref: composeRefs(provided.innerRef, ref),
90
90
  item: div({
91
- className: classNames('bp5-tabs', isVertical && 'bp5-vertical'),
91
+ className: classNames('bp6-tabs', isVertical && 'bp6-vertical'),
92
92
  item: div({
93
- className: 'bp5-tab-list',
93
+ className: 'bp6-tab-list',
94
94
  items: [
95
95
  visibleTabs.map((tab, index) =>
96
96
  tabCmp({key: tab.id, localModel, tab, index})
@@ -172,7 +172,7 @@ const tabCmp = hoistCmp.factory<TabProps>(({tab, index, localModel, model}) => {
172
172
  div({
173
173
  'aria-selected': isActive,
174
174
  'aria-disabled': disabled,
175
- className: 'bp5-tab',
175
+ className: 'bp6-tab',
176
176
  item: bpTooltip({
177
177
  content: tooltip as ReactElement,
178
178
  disabled: !tooltip,
@@ -9,7 +9,7 @@
9
9
  flex-wrap: nowrap;
10
10
 
11
11
  // Overflow box
12
- .bp5-overflow-list {
12
+ .bp6-overflow-list {
13
13
  flex: 1;
14
14
  align-items: center;
15
15
 
@@ -17,7 +17,7 @@
17
17
  white-space: nowrap;
18
18
 
19
19
  // The overflow space needs to be able to shrink - BP checks this to determine overflow
20
- &:not(.bp5-overflow-list-spacer) {
20
+ &:not(.bp6-overflow-list-spacer) {
21
21
  flex-shrink: 0;
22
22
  }
23
23
 
@@ -108,11 +108,11 @@
108
108
  }
109
109
 
110
110
  // Compact toolbar buttons
111
- .xh-app.xh-dark.bp5-dark &,
111
+ .xh-app.xh-dark.bp6-dark &,
112
112
  .xh-app & {
113
- button.xh-button.bp5-button.xh-button--minimal,
114
- button.xh-button.bp5-button.xh-button--standard,
115
- button.xh-button.bp5-button.xh-button--outlined {
113
+ button.xh-button.bp6-button.xh-button--minimal,
114
+ button.xh-button.bp6-button.xh-button--standard,
115
+ button.xh-button.bp6-button.xh-button--outlined {
116
116
  padding: 3px var(--xh-pad-half-px);
117
117
  min-height: var(--xh-tbar-compact-item-height-px);
118
118
  max-height: var(--xh-tbar-compact-item-height-px);
@@ -129,9 +129,9 @@
129
129
  max-height: var(--xh-tbar-compact-item-height-px);
130
130
  min-height: var(--xh-tbar-compact-item-height-px);
131
131
 
132
- .bp5-input-group {
132
+ .bp6-input-group {
133
133
  // This padding reserves space for a left-icon - default 30px overly wide in compact mode.
134
- .bp5-input:not(:first-child) {
134
+ .bp6-input:not(:first-child) {
135
135
  padding-left: 20px;
136
136
  }
137
137
 
@@ -148,7 +148,7 @@
148
148
  }
149
149
 
150
150
  // Inline input icons made smaller, lighter, and alignment tweaked.
151
- svg:not(.bp5-icon) {
151
+ svg:not(.bp6-icon) {
152
152
  font-size: var(--xh-tbar-compact-font-size-px);
153
153
  margin: 5px 2px 5px 4px;
154
154
  opacity: 0.6;
@@ -159,13 +159,13 @@
159
159
  display: flex;
160
160
  align-items: center;
161
161
 
162
- .bp5-control-indicator {
162
+ .bp6-control-indicator {
163
163
  margin-top: 1px;
164
164
  margin-right: var(--xh-pad-half-px);
165
165
  }
166
166
  }
167
167
 
168
- &.xh-switch-input.bp5-align-right {
168
+ &.xh-switch-input.bp6-align-right {
169
169
  flex-direction: row-reverse;
170
170
  padding-right: 0;
171
171
  }
@@ -212,10 +212,10 @@
212
212
  }
213
213
 
214
214
  // Form field margins (if set) are not desired within Toolbars.
215
- .bp5-control {
215
+ .bp6-control {
216
216
  margin-bottom: 0;
217
217
 
218
- &.bp5-inline {
218
+ &.bp6-inline {
219
219
  margin-right: 0;
220
220
  }
221
221
  }
@@ -224,12 +224,12 @@
224
224
  .xh-toolbar-overflow-popover {
225
225
  border: 1px solid var(--xh-tbar-border-color);
226
226
 
227
- .bp5-popover-arrow-border,
228
- .bp5-popover-arrow-fill {
227
+ .bp6-popover-arrow-border,
228
+ .bp6-popover-arrow-fill {
229
229
  fill: var(--xh-tbar-border-color) !important;
230
230
  }
231
231
 
232
- .bp5-popover-content {
232
+ .bp6-popover-content {
233
233
  color: var(--xh-tbar-text-color);
234
234
  background-color: var(--xh-tbar-bg);
235
235
 
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import type {ContextMenuSpec} from '@xh/hoist/core';
7
+ import {ContextMenuSpec} from '@xh/hoist/core';
8
8
  import {contextMenu} from '@xh/hoist/desktop/cmp/contextmenu/ContextMenu';
9
9
  import {showContextMenu} from '@xh/hoist/kit/blueprint';
10
10
  import {logError} from '@xh/hoist/utils/js';
@@ -8,22 +8,11 @@ import {Offset} from '@blueprintjs/core/lib/esnext/components/context-menu/conte
8
8
  import {XH} from '@xh/hoist/core';
9
9
  import {showContextMenu as bpShowContextMenu} from '@blueprintjs/core';
10
10
  import {ReactElement} from 'react';
11
- import {createRoot} from 'react-dom/client';
12
11
 
13
12
  /**
14
13
  * Wraps Blueprint's showContextMenu function to ensure that the context menu is rendered
15
14
  * with createRoot, which is necessary for proper rendering in a React 18 environment.
16
15
  */
17
16
  export function showContextMenu(menu: ReactElement, offset?: Offset) {
18
- const rootKey: string = 'xhContextMenuRoot';
19
- bpShowContextMenu(
20
- {content: menu, targetOffset: offset, isDarkTheme: XH.darkTheme},
21
- {
22
- domRenderer: (element, container) => {
23
- container[rootKey] = createRoot(container);
24
- container[rootKey].render(element);
25
- },
26
- domUnmounter: container => container[rootKey].unmount()
27
- }
28
- );
17
+ bpShowContextMenu({content: menu, targetOffset: offset, isDarkTheme: XH.darkTheme});
29
18
  }
@@ -12,7 +12,7 @@ import {hoistCmp} from '@xh/hoist/core';
12
12
  */
13
13
  export const [DialogBody, dialogBody] = hoistCmp.withFactory({
14
14
  displayName: 'DialogBody',
15
- className: 'bp5-dialog-body',
15
+ className: 'bp6-dialog-body',
16
16
  observer: false,
17
17
  model: false,
18
18
  memo: false,
@@ -27,7 +27,7 @@ export const [DialogBody, dialogBody] = hoistCmp.withFactory({
27
27
  */
28
28
  export const [DialogFooter, dialogFooter] = hoistCmp.withFactory({
29
29
  displayName: 'DialogFooter',
30
- className: 'bp5-dialog-footer',
30
+ className: 'bp6-dialog-footer',
31
31
  observer: false,
32
32
  model: false,
33
33
  memo: false,
@@ -42,7 +42,7 @@ export const [DialogFooter, dialogFooter] = hoistCmp.withFactory({
42
42
  */
43
43
  export const [DialogFooterActions, dialogFooterActions] = hoistCmp.withFactory({
44
44
  displayName: 'DialogFooterActions',
45
- className: 'bp5-dialog-footer-actions',
45
+ className: 'bp6-dialog-footer-actions',
46
46
  observer: false,
47
47
  model: false,
48
48
  memo: false,
@@ -49,7 +49,7 @@ import {
49
49
  Tooltip,
50
50
  Tree
51
51
  } from '@blueprintjs/core';
52
- import {DatePicker3 as DatePicker} from '@blueprintjs/datetime2';
52
+ import {DatePicker} from '@blueprintjs/datetime';
53
53
  import {elementFactory} from '@xh/hoist/core';
54
54
 
55
55
  //---------------------
@@ -10,7 +10,6 @@ import {
10
10
  Dialog,
11
11
  FocusStyleManager,
12
12
  type HotkeyConfig,
13
- Overlay2 as Overlay,
14
13
  OverlayToaster,
15
14
  Popover,
16
15
  PopoverInteractionKind,
@@ -20,7 +19,6 @@ import {
20
19
  } from '@blueprintjs/core';
21
20
  import '@blueprintjs/core/lib/css/blueprint.css';
22
21
  import '@blueprintjs/datetime/lib/css/blueprint-datetime.css';
23
- import '@blueprintjs/datetime2/lib/css/blueprint-datetime2.css';
24
22
  import {elementFactory} from '@xh/hoist/core';
25
23
  import './styles.scss';
26
24
 
@@ -29,11 +27,9 @@ import './styles.scss';
29
27
  FocusStyleManager.onlyShowFocusOnTabs();
30
28
 
31
29
  // Disable fade/scale-in transitions.
32
- // See also popover-related override in ./styles.scss.
30
+ // See also popover & overlay related overrides in ./styles.scss.
33
31
  Dialog.defaultProps.transitionDuration = 0;
34
32
  Dialog.defaultProps.transitionName = 'none';
35
- Overlay.defaultProps.transitionDuration = 0;
36
- Overlay.defaultProps.transitionName = 'none';
37
33
  Popover.defaultProps.transitionDuration = 0;
38
34
 
39
35
  //---------------------
@@ -51,4 +47,5 @@ export {
51
47
  export * from './Wrappers';
52
48
  export * from './Dialog';
53
49
  export * from './ContextMenu';
50
+
54
51
  export const blueprintProvider = elementFactory(BlueprintProvider);